import scancodes
+# CONST
+UPDATE_HELPER="update_helper.sh"
+
cfg = dict()
is_new = False
is_new = any(v in cfg["ISO_URL"] for v in new_versions)
cfg["PREPARE_CLUSTER"] = os.getenv("PREPARE_CLUSTER")
+cfg["UPDATE_FUEL"] = os.getenv("UPDATE_FUEL")
cfg["RELEASE"] = os.getenv("RELEASE")
cfg["HA"] = os.getenv("HA")
cfg["NETWORK_TYPE"] = os.getenv("NETWORK_TYPE")
except:
dnl = None
-
def pprint_dict(subj):
if not isinstance(subj, dict):
return False
print("{0}...".format(retries), end='')
time.sleep(60)
+def sshpass_admin_node(psw,ssh_cmd):
+ cmd = [
+ "sshpass",
+ "-p",
+ psw,
+ ] + ssh_cmd
+
+ print (cmd)
+
+ proc = subprocess.Popen(
+ cmd,
+ stdin=dnl,
+ )
+
+ proc.wait()
+
+ if proc.returncode == 0:
+ return True
+ else:
+ return False
+
+def admin_ssh_conn_line(usr,subnet):
+ admip = str(subnet.ip + 2)
+ return "{usr}@{admip}".format(usr=usr, admip=admip)
+
+def copy_update_helper(conn_line,psw):
+ return sshpass_admin_node (psw,ssh_cmd=[
+ "scp",
+ "-o",
+ "UserKnownHostsFile=/dev/null",
+ "-o",
+ "StrictHostKeyChecking=no",
+ "./"+UPDATE_HELPER,
+ conn_line+":/tmp/",])
+
+def do_update(conn_line,psw):
+ if copy_update_helper(conn_line,psw):
+ return sshpass_admin_node(
+ psw=psw,
+ ssh_cmd=["ssh",conn_line,"/tmp/"+UPDATE_HELPER,],)
+ else:
+ print ("ERROR: Unable to copy update script to admin node")
+ return False
def start_slaves():
for num in range(cfg["NODES_COUNT"]):
print ("Starting: {0}".format(name))
start_node(name)
-
def wait_for_api_is_ready():
cmd = ["sshpass", "-p", cfg["FUEL_SSH_PASSWORD"], "ssh", "-o"
"UserKnownHostsFile=/dev/null", "-o", "StrictHostKeyChecking=no",
inject_ifconfig_ssh()
+ if cfg["UPDATE_FUEL"]=="true":
+ if do_update(
+ admin_ssh_conn_line(usr = cfg["FUEL_SSH_USERNAME"],subnet=cfg["ADMIN_SUBNET"]),
+ psw = cfg["FUEL_SSH_PASSWORD"],):
+ print("fuel update complete")
+ else:
+ print("ERROR: unable to update fuel")
+
start_slaves()
wait_for_api_is_ready()
--- /dev/null
+#!/usr/bin/env python
+
+import build_cluster
+
+
+CONNECT_LINE = "root@621_admin"
+PSWD= "r00tme"
+
+def test_bool(name,func):
+ if func:
+ print "\033[32mOK\033[00m - "+name
+ else:
+ print "\033[31mOK\033[00m - "+name
+
+def main():
+
+ test_bool("sshpass_admin_node",
+ build_cluster.sshpass_admin_node (
+ psw=PSWD,
+ ssh_cmd=["ssh", CONNECT_LINE , "hostname"]
+ )
+ )
+
+ test_bool("sshpass_admin_node fail exit code",
+ not build_cluster.sshpass_admin_node (
+ psw=PSWD,
+ ssh_cmd=["ssh", CONNECT_LINE , "exit 1"]
+ )
+ )
+
+ test_bool("copy_update_helper",
+ build_cluster.copy_update_helper (CONNECT_LINE, PSWD)
+ )
+
+# NOTE: can take to many time...
+# test_bool("do update",
+# build_cluster.do_update (CONNECT_LINE, PSWD)
+# )
+
+if __name__ == "__main__":
+ main()
<description>Check it to predefine cluster config</description>
<defaultValue>true</defaultValue>
</hudson.model.BooleanParameterDefinition>
+ <hudson.model.BooleanParameterDefinition>
+ <name>UPDATE_FUEL</name>
+ <description>Update fuel version to latest MU (7.0 and 8.0 only)</description>
+ <defaultValue>false</defaultValue>
+ </hudson.model.BooleanParameterDefinition>
<hudson.model.ChoiceParameterDefinition>
<name>NETWORK_TYPE</name>
<description>Choose a network type or leave it empty</description>
export ENV_NAME=${BUILD_USER_ID}-${BUILD_NUMBER}
export PYTHONUNBUFFERED=1
curl -o ./build_cluster.py "https://raw.githubusercontent.com/Mirantis/tools-sustaining/master/jenkins/build_cluster/build_cluster.py"
+curl -o ./update_helper.sh "https://raw.githubusercontent.com/Mirantis/tools-sustaining/master/jenkins/build_cluster/update_helper.sh"
curl -o ./scancodes.py "https://raw.githubusercontent.com/Mirantis/tools-sustaining/master/jenkins/build_cluster/scancodes.py"
python build_cluster.py
</org.jenkinsci.plugins.buildnamesetter.BuildNameSetter>
<org.jenkinsci.plugins.builduser.BuildUser plugin="build-user-vars-plugin@1.4"/>
</buildWrappers>
-</project>
\ No newline at end of file
+</project>
--- /dev/null
+#!/bin/bash
+
+upgrade_log="/tmp/upgrade.log"
+
+RUN_WITH_LOGGER () {
+ echo '##################################################'>> $upgrade_log 2>&1
+ echo $* >> $upgrade_log 2>&1
+ echo '##################################################'>> $upgrade_log 2>&1
+ $* >> $upgrade_log 2>&1
+ return $?
+}
+
+get_fuel_version () {
+ # Note we are not using fuel --fuel-version here because it requere
+ # api up and running
+ if [[ -f /etc/fuel_release ]]; then
+ # That file exist in version >= 8.0
+ cat /etc/fuel_release
+ return 0
+ else
+ echo "notice: /etc/fuel_release not found we are low than MOS8" >&2
+
+ # tring to gues from rpm
+ if rpm -qa | awk -F '-' ' BEGIN {ok=0}
+ /^fuel-[0-9]/ {print $2; ok=1; exit 0;}
+ END {exit ok?0:1;}';
+ then
+ return 0
+ else
+ echo "unknown"
+ return 1
+ fi
+ fi
+}
+
+upgrade_with_docker () {
+ RUN_WITH_LOGGER "yum update -y" || return 1
+ RUN_WITH_LOGGER "docker load -i /var/www/nailgun/docker/images/fuel-images.tar" || return 1
+ RUN_WITH_LOGGER "dockerctl destroy all" || return 1
+ RUN_WITH_LOGGER "dockerctl start all" || return 1
+}
+
+crap () {
+ echo $1 >&2
+ exit ${2:-1}
+}
+
+
+version=$(get_fuel_version) || crap "error: can't get fuel version"
+
+case $version in
+ 7.0.0|8.0)
+ upgrade_with_docker || crap "error: upgrade failed for version $version. See log $upgrade_log on master node."
+ ;;
+ *)
+ crap "error: upgrade procedure for version $version not implemented"
+ ;;
+esac