Merge "Fixed gating job for work with salt-formulas tests"
diff --git a/cicd-lab-pipeline.groovy b/cicd-lab-pipeline.groovy
index c935af7..df4b477 100644
--- a/cicd-lab-pipeline.groovy
+++ b/cicd-lab-pipeline.groovy
@@ -223,7 +223,7 @@
//
def adminUser
def authorizedKeysFile
- def adminUserCmdOut = salt.cmdRun(saltMaster, 'I@salt:master', "[ -d /home/ubuntu ] && echo 'ubuntu user exists'")
+ def adminUserCmdOut = salt.cmdRun(saltMaster, 'I@salt:master', "[ ! -d /home/ubuntu ] || echo 'ubuntu user exists'")
if (adminUserCmdOut =~ /ubuntu user exists/) {
adminUser = "ubuntu"
authorizedKeysFile = "/home/ubuntu/.ssh/authorized_keys"
@@ -264,7 +264,7 @@
}
salt.enforceState(saltMaster, 'I@nginx:server', 'nginx')
- def failedSvc = salt.cmdRun(saltMaster, '*', """systemctl --failed | grep -E 'loaded[ \t]+failed' && echo 'Command execution failed'""")
+ def failedSvc = salt.cmdRun(saltMaster, '*', """systemctl --failed | grep -E 'loaded[ \t]+failed' && echo 'Command execution failed' || true""")
print common.prettyPrint(failedSvc)
if (failedSvc =~ /Command execution failed/) {
common.errorMsg("Some services are not running. Environment may not be fully functional!")
diff --git a/openstack-control-upgrade.groovy b/openstack-control-upgrade.groovy
index ed366b8..4defcd5 100644
--- a/openstack-control-upgrade.groovy
+++ b/openstack-control-upgrade.groovy
@@ -23,28 +23,54 @@
state('Prepare upgrade') {
// #ignorovat no response a chyby - nene, chyby opravíme
- // read domain variable
- def _pillar = salt.getPillar(master, 'ctl01*', '_param:cluster_domain')
+
+ salt.enforceState(master, 'I@salt:master', 'reclass')
+
+ salt.runSaltProcessStep(master, '*', 'saltutil.refresh_pillar', [], null, true)
+ // salt '*' saltutil.sync_all
+ salt.runSaltProcessStep(master, '*', 'saltutil.sync_all', [], null, true)
+
+
+ def _pillar = salt.getPillar(master, 'I@salt:master', 'grains.item domain')
def domain = _pillar['return'][0].values()[0]
+ println _pillar
+ println domain
- // # test sync db
- // salt 'kvm02*' cmd.run 'virsh destroy upg01.${domain}'
- salt.runSaltProcessStep(saltMaster, 'kvm02*', 'cmd.run', "virsh destroy upg01.${domain}", [], null, true)
+ // read backupninja variable
+ _pillar = salt.getPillar(master, 'I@backupninja:server', '_param:single_address')
+ def backupninja_backup_host = _pillar['return'][0].values()[0]
+ println _pillar
+ println backupninja_backup_host
- // salt 'kvm02*' cmd.run 'virsh undefine upg01.${domain}'
- salt.runSaltProcessStep(saltMaster, 'kvm02*', 'cmd.run', "virsh undefine upg01.${domain}", [], null, true)
+ _pillar = salt.getPillar(master, 'I@salt:control', 'grains.item id')
+ def kvm01 = _pillar['return'][0].values()[0]
+ def kvm02 = _pillar['return'][0].values()[1]
+ def kvm03 = _pillar['return'][0].values()[2]
+ println _pillar
+ println kvm01
+ println kvm02
+ println kvm03
+
+ _pillar = salt.getPillar(master, '${kvm01}', 'salt:control:cluster:internal:node:upg01:provider')
+ def upgNodeProvider = _pillar['return'][0].values()[0]
+ println _pillar
+ println upgNodeProvider
+
+
+ salt.runSaltProcessStep(master, '${upgNodeProvider}', 'virt.destroy upg01.${domain}', [], null, true)
+ salt.runSaltProcessStep(master, '${upgNodeProvider}', 'virt.undefine upg01.${domain}', [], null, true)
// salt-key -d upg01.${domain} -y
salt.runSaltProcessStep(saltMaster, 'I@salt:master', 'cmd.run', "salt-key -d upg01.${domain} -y", [], null, true)
// salt 'kvm02*' state.sls salt.control
- salt.enforceState(saltMaster, 'kvm02*', 'salt.control')
+ salt.enforceState(saltMaster, '${upgNodeProvider}', 'salt.control')
sleep(60)
// salt '*' saltutil.refresh_pillar
- salt.runSaltProcessStep(master, '*', 'saltutil.refresh_pillar', [], null, true)
+ salt.runSaltProcessStep(master, 'upg*', 'saltutil.refresh_pillar', [], null, true)
// salt '*' saltutil.sync_all
- salt.runSaltProcessStep(master, '*', 'saltutil.sync_all', [], null, true)
+ salt.runSaltProcessStep(master, 'upg*', 'saltutil.sync_all', [], null, true)
// salt "upg*" state.sls linux,openssh,salt.minion,ntp,rsyslog
salt.enforceState(master, 'upg*', ['linux', 'openssh', 'salt.minion', 'ntp', 'rsyslog'])
@@ -53,98 +79,93 @@
// salt "upg*" state.sls linux,openssh,salt.minion,ntp,rsyslog
salt.enforceState(master, 'upg*', ['linux', 'openssh', 'salt.minion', 'ntp', 'rsyslog'])
- // read backupninja variable
- def _pillar = salt.getPillar(master, 'I@backupninja:server', '_param:single_address')
- def backupninja_backup_host = _pillar['return'][0].values()[0]
-
// salt "upg*" state.sls rabbitmq
salt.enforceState(master, 'upg*', 'rabbitmq')
// salt "upg*" state.sls memcached
salt.enforceState(master, 'upg*', 'memcached')
+ salt.enforceState(master, 'I@backupninja:client', 'openssh.client')
// salt -C 'I@backupninja:server' state.sls backupninja
salt.enforceState(master, 'I@backupninja:server', 'backupninja')
// salt -C 'I@backupninja:client' state.sls backupninja
salt.enforceState(master, 'I@backupninja:client', 'backupninja')
- // salt -C 'I@backupninja:client' cmd.run 'ssh-keygen -f "/root/.ssh/known_hosts" -R ${backupninja_backup_host}'
- salt.runSaltProcessStep(master, 'I@backupninja:client', 'cmd.run', "ssh-keygen -f /root/.ssh/known_hosts -R ${backupninja_backup_host}", [], null, true)
- // salt -C 'I@backupninja:client' cmd.run 'ssh-keyscan -H ${backupninja_backup_host} >> /root/.ssh/known_hosts'
- salt.runSaltProcessStep(master, 'I@backupninja:client', 'cmd.run', "ssh-keyscan -H ${backupninja_backup_host} >> /root/.ssh/known_hosts", [], null, true)
- // salt -C 'I@backupninja:client' cmd.run 'backupninja -n --run /etc/backup.d/101.mysql'
+ salt.runSaltProcessStep(master, 'I@backupninja:client', 'ssh.rm_known_host root ${backupninja_backup_host}', [], null, true)
+ salt.runSaltProcessStep(master, 'I@backupninja:client', 'cmd.run', "arp -d ${backupninja_backup_host}", [], null, true)
+ salt.runSaltProcessStep(master, 'I@backupninja:client', 'ssh.set_known_host root ${backupninja_backup_host}', [], null, true)
salt.runSaltProcessStep(master, 'I@backupninja:client', 'cmd.run', "backupninja -n --run /etc/backup.d/101.mysql", [], null, true)
- // salt -C 'I@backupninja:client' cmd.run 'backupninja -n --run /etc/backup.d/200.backup.rsync'
salt.runSaltProcessStep(master, 'I@backupninja:client', 'cmd.run', "backupninja -n --run /etc/backup.d/200.backup.rsync", [], null, true)
- // salt -C 'I@mysql:client' state.sls mysql.client
+
+
+ def databases = salt.runSaltProcessStep(master, 'I@mysql:client', 'mysql.db_list | grep upgrade | awk "/-/ {print $2}"', [], null, true)
+ for (String database : databases) { System.out.println(database) }
+ for (String database : databases) { salt.runSaltProcessStep(master, 'I@mysql:client', 'mysql.db_remove ${database}', [], null, true) }
+ for (String database : databases) { salt.runSaltProcessStep(master, 'I@mysql:client', 'file.remove /root/mysql/flags/${database}-installed', [], null, true) }
+
+
salt.enforceState(master, 'I@mysql:client', 'mysql.client')
- // salt "upg*" state.sls keystone.server
- // salt "upg*" state.sls keystone.client.service
- salt.enforceState(master, 'upg*', ['keystone.server', 'keystone.client.service'])
- // salt 'upg*' state.sls glance
- // salt "upg*" state.sls keystone.server
- // salt 'upg*' state.sls nova
- // salt 'upg*' state.sls cinder
- // salt 'upg*' state.sls neutron
- // salt 'upg*' state.sls heat
+ salt.enforceState(master, 'upg*', ['keystone.server', 'keystone.client'])
+
salt.enforceState(master, 'upg*', ['glance', 'keystone.server', 'nova', 'cinder', 'neutron', 'heat'])
- // salt 'upg01*' cmd.run ". /root/keystonercv3; openstack service list"
- // salt 'upg01*' cmd.run ". /root/keystonercv3; openstack image list"
- // salt 'upg01*' cmd.run ". /root/keystonercv3; openstack flavor list"
- // salt 'upg01*' cmd.run ". /root/keystonercv3; openstack compute service list"
- // salt 'upg01*' cmd.run ". /root/keystonercv3; openstack server list"
- // salt 'upg01*' cmd.run ". /root/keystonercv3; openstack network list"
- // salt 'upg01*' cmd.run ". /root/keystonercv3; openstack orchestration service list"
- salt.runSaltProcessStep(master, 'upg01*', 'cmd.run', '. /root/keystonercv3; openstack service list; openstack image list; openstack flavor list; openstack compute service list; openstack server list; openstack network list; openstack orchestration service list', null, true)
+ salt.runSaltProcessStep(master, 'upg01*', 'cmd.run', '. /root/keystonercv3; openstack service list; openstack image list; openstack flavor list; openstack compute service list; openstack server list; openstack network list; openstack volume list; openstack orchestration service list', null, true)
}
stage('Ask for manual confirmation') {
- input message: "Do you want to continue with update?"
+ input message: "Do you want to continue with upgrade?"
}
-
state('Start upgrade') {
// # actual upgrade
- // salt 'kvm01*' cmd.run 'virsh destroy prx01.${domain}'
- salt.runSaltProcessStep(master, 'kvm01*', 'cmd.run', "virsh destroy prx01.${domain}", null, true)
- // salt 'kvm03*' cmd.run 'virsh destroy prx02.${domain}'
- salt.runSaltProcessStep(master, 'kvm03*', 'cmd.run', "virsh destroy prx02.${domain}", null, true)
- // salt 'kvm01*' cmd.run 'virsh destroy ctl01.${domain}'
- salt.runSaltProcessStep(master, 'kvm01*', 'cmd.run', "virsh destroy ctl01.${domain}", null, true)
- // salt 'kvm02*' cmd.run 'virsh destroy ctl02.${domain}'
- salt.runSaltProcessStep(master, 'kvm02*', 'cmd.run', "virsh destroy ctl02.${domain}", null, true)
- // salt 'kvm03*' cmd.run 'virsh destroy ctl03.${domain}'
- salt.runSaltProcessStep(master, 'kvm03*', 'cmd.run', "virsh destroy ctl03.${domain}", null, true)
+
+ _pillar = salt.getPillar(master, '${kvm01}', 'salt:control:cluster:internal:node:ctl01:provider')
+ def ctl01NodeProvider = _pillar['return'][0].values()[0]
+
+ _pillar = salt.getPillar(master, '${kvm01}', 'salt:control:cluster:internal:node:ctl02:provider')
+ def ctl02NodeProvider = _pillar['return'][0].values()[0]
+
+ _pillar = salt.getPillar(master, '${kvm01}', 'salt:control:cluster:internal:node:ctl03:provider')
+ def ctl03NodeProvider = _pillar['return'][0].values()[0]
+
+ _pillar = salt.getPillar(master, '${kvm01}', 'salt:control:cluster:internal:node:prx01:provider')
+ def prx01NodeProvider = _pillar['return'][0].values()[0]
+
+ _pillar = salt.getPillar(master, '${kvm01}', 'salt:control:cluster:internal:node:prx02:provider')
+ def prx02NodeProvider = _pillar['return'][0].values()[0]
+
+
+ salt.runSaltProcessStep(master, '${prx01NodeProvider}', 'virt.destroy prx01.${domain}', [], null, true)
+ salt.runSaltProcessStep(master, '${prx02NodeProvider}', 'virt.destroy prx01.${domain}', [], null, true)
+ salt.runSaltProcessStep(master, '${ctl01NodeProvider}', 'virt.destroy ctl01.${domain}', [], null, true)
+ salt.runSaltProcessStep(master, '${ctl02NodeProvider}', 'virt.destroy ctl02.${domain}', [], null, true)
+ salt.runSaltProcessStep(master, '${ctl03NodeProvider}', 'virt.destroy ctl03.${domain}', [], null, true)
+
// salt 'kvm01*' cmd.run '[ ! -f ./prx01.${domain}.qcow2.bak ] && cp /var/lib/libvirt/images/prx01.${domain}/system.qcow2 ./prx01.${domain}.qcow2.bak'
- salt.runSaltProcessStep(master, 'kvm01*', 'cmd.run', "[ ! -f ./prx01.${domain}.qcow2.bak ] && cp /var/lib/libvirt/images/prx01.${domain}/system.qcow2 ./prx01.${domain}.qcow2.bak", null, true)
+ salt.runSaltProcessStep(master, '${prx01NodeProvider}', 'cmd.run', "[ ! -f ./prx01.${domain}.qcow2.bak ] && cp /var/lib/libvirt/images/prx01.${domain}/system.qcow2 ./prx01.${domain}.qcow2.bak", null, true)
// salt 'kvm03*' cmd.run '[ ! -f ./prx02.${domain}.qcow2.bak ] && cp /var/lib/libvirt/images/prx02.${domain}/system.qcow2 ./prx02.${domain}.qcow2.bak'
- salt.runSaltProcessStep(master, 'kvm03*', 'cmd.run', "[ ! -f ./prx02.${domain}.qcow2.bak ] && cp /var/lib/libvirt/images/prx02.${domain}/system.qcow2 ./prx02.${domain}.qcow2.bak", null, true)
+ salt.runSaltProcessStep(master, '${prx02NodeProvider}', 'cmd.run', "[ ! -f ./prx02.${domain}.qcow2.bak ] && cp /var/lib/libvirt/images/prx02.${domain}/system.qcow2 ./prx02.${domain}.qcow2.bak", null, true)
// salt 'kvm01*' cmd.run '[ ! -f ./ctl01.${domain}.qcow2.bak ] && cp /var/lib/libvirt/images/ctl01.${domain}/system.qcow2 ./ctl01.${domain}.qcow2.bak'
- salt.runSaltProcessStep(master, 'kvm01*', 'cmd.run', "[ ! -f ./ctl01.${domain}.qcow2.bak ] && cp /var/lib/libvirt/images/ctl01.${domain}/system.qcow2 ./ctl01.${domain}.qcow2.bak", null, true)
+ salt.runSaltProcessStep(master, '${ctl01NodeProvider}', 'cmd.run', "[ ! -f ./ctl01.${domain}.qcow2.bak ] && cp /var/lib/libvirt/images/ctl01.${domain}/system.qcow2 ./ctl01.${domain}.qcow2.bak", null, true)
// salt 'kvm02*' cmd.run '[ ! -f ./ctl02.${domain}.qcow2.bak ] && cp /var/lib/libvirt/images/ctl02.${domain}/system.qcow2 ./ctl02.${domain}.qcow2.bak'
- salt.runSaltProcessStep(master, 'kvm02*', 'cmd.run', "[ ! -f ./ctl02.${domain}.qcow2.bak ] && cp /var/lib/libvirt/images/ctl02.${domain}/system.qcow2 ./ctl02.${domain}.qcow2.bak", null, true)
+ salt.runSaltProcessStep(master, '${ctl02NodeProvider}', 'cmd.run', "[ ! -f ./ctl02.${domain}.qcow2.bak ] && cp /var/lib/libvirt/images/ctl02.${domain}/system.qcow2 ./ctl02.${domain}.qcow2.bak", null, true)
// salt 'kvm03*' cmd.run '[ ! -f ./ctl03.${domain}.qcow2.bak ] && cp /var/lib/libvirt/images/ctl03.${domain}/system.qcow2 ./ctl03.${domain}.qcow2.bak'
- salt.runSaltProcessStep(master, 'kvm03*', 'cmd.run', "[ ! -f ./ctl03.${domain}.qcow2.bak ] && cp /var/lib/libvirt/images/ctl03.${domain}/system.qcow2 ./ctl03.${domain}.qcow2.bak", null, true)
+ salt.runSaltProcessStep(master, '${ctl03NodeProvider}', 'cmd.run', "[ ! -f ./ctl03.${domain}.qcow2.bak ] && cp /var/lib/libvirt/images/ctl03.${domain}/system.qcow2 ./ctl03.${domain}.qcow2.bak", null, true)
- // salt 'kvm01*' cmd.run 'virsh undefine prx01.${domain}'
- salt.runSaltProcessStep(master, 'kvm01*', 'cmd.run', "virsh undefine prx01.${domain}", null, true)
- // salt 'kvm03*' cmd.run 'virsh undefine prx02.${domain}'
- salt.runSaltProcessStep(master, 'kvm03*', 'cmd.run', "virsh undefine prx02.${domain}", null, true)
- // salt 'kvm01*' cmd.run 'virsh undefine ctl01.${domain}'
- salt.runSaltProcessStep(master, 'kvm01*', 'cmd.run', "virsh undefine ctl01.${domain}", null, true)
- // salt 'kvm02*' cmd.run 'virsh undefine ctl02.${domain}'
- salt.runSaltProcessStep(master, 'kvm02*', 'cmd.run', "virsh undefine ctl02.${domain}", null, true)
- // salt 'kvm03*' cmd.run 'virsh undefine ctl03.${domain}'
- salt.runSaltProcessStep(master, 'kvm03*', 'cmd.run', "virsh undefine ctl03.${domain}", null, true)
- // salt-key -d ctl01.${domain} -y
- // salt-key -d ctl02.${domain} -y
- // salt-key -d ctl03.${domain} -y
- // salt-key -d prx01.${domain} -y
- // salt-key -d prx02.${domain} -y
+ salt.runSaltProcessStep(master, '${prx01NodeProvider}', 'virt.undefine prx01.${domain}', [], null, true)
+ salt.runSaltProcessStep(master, '${prx02NodeProvider}', 'virt.undefine prx02.${domain}', [], null, true)
+ salt.runSaltProcessStep(master, '${ctl01NodeProvider}', 'virt.undefine ctl01.${domain}', [], null, true)
+ salt.runSaltProcessStep(master, '${ctl02NodeProvider}', 'virt.undefine ctl02.${domain}', [], null, true)
+ salt.runSaltProcessStep(master, '${ctl03NodeProvider}', 'virt.undefine ctl03.${domain}', [], null, true)
+
+
+ salt.runSaltProcessStep(master, 'I@backupninja:client', 'cmd.run', "backupninja -n --run /etc/backup.d/101.mysql", [], null, true)
+ salt.runSaltProcessStep(master, 'I@backupninja:client', 'cmd.run', "backupninja -n --run /etc/backup.d/200.backup.rsync", [], null, true)
+
+
salt.runSaltProcessStep(master, 'I@salt', 'cmd.run', "salt-key -d ctl01.${domain},ctl01.${domain},ctl03.${domain},prx01.${domain},prx02.${domain}", null, true)
// salt 'kvm*' state.sls salt.control
- salt.enforceState(master, 'kvm*', 'salt.control')
+ salt.enforceState(master, 'I@salt:control', 'salt.control')
sleep(60)
@@ -166,7 +187,7 @@
// salt "ctl*" state.sls keystone.server
salt.enforceState(master, 'ctl*', ['memcached', 'keystone.server'])
// salt 'ctl01*' state.sls keystone.client
- salt.enforceState(master, 'ctl01*', ['keystone.client'])
+ salt.enforceState(master, 'I@keystone:client and ctl*', 'keystone.client')
// salt 'ctl*' state.sls glance
salt.enforceState(master, 'ctl*', 'glance')
// salt 'ctl*' state.sls glusterfs.client
@@ -194,15 +215,11 @@
// salt 'prx*' state.sls nginx
salt.enforceState(master, 'prx*', 'nginx')
- // salt 'ctl01*' cmd.run ". /root/keystonercv3; openstack service list"
- // salt 'ctl01*' cmd.run ". /root/keystonercv3; openstack image list"
- // salt 'ctl01*' cmd.run ". /root/keystonercv3; openstack flavor list"
- // salt 'ctl01*' cmd.run ". /root/keystonercv3; openstack compute service list"
- // salt 'ctl01*' cmd.run ". /root/keystonercv3; openstack server list"
- // salt 'ctl01*' cmd.run ". /root/keystonercv3; openstack network list"
- // salt 'ctl01*' cmd.run ". /root/keystonercv3; openstack orchestration service list"
- salt.runSaltProcessStep(master, 'upg01*', 'cmd.run', '. /root/keystonercv3; openstack service list; openstack image list; openstack flavor list; openstack compute service list; openstack server list; openstack network list; openstack orchestration service list', null, true)
+ salt.runSaltProcessStep(master, 'ctl01*', 'cmd.run', '. /root/keystonercv3; openstack service list; openstack image list; openstack flavor list; openstack compute service list; openstack server list; openstack network list; openstack volume list; openstack orchestration service list', null, true)
}
+ stage('Verification') {
+ input message: "Please verify the control upgrade and if was not successful, in the worst scenario, you can use the openstack-control-upgrade-rollover pipeline"
+ }
}
}
diff --git a/test-salt-models-pipeline.groovy b/test-salt-models-pipeline.groovy
index fed6ed5..622b86a 100644
--- a/test-salt-models-pipeline.groovy
+++ b/test-salt-models-pipeline.groovy
@@ -28,7 +28,6 @@
}
def checkouted = false
def merged = false
-
node("python&&docker") {
try{
stage("checkout") {
@@ -62,20 +61,18 @@
}
stage("test-nodes") {
- dir ('nodes') {
- def nodes = sh script: "find ./ -type f -name 'cfg*.yml'", returnStdout: true
- def buildSteps = [:]
- def partitions = common.partitionList(nodes.tokenize(), 3)
- for (int i=0; i< partitions.size();i++) {
- def partition = partitions[i]
- buildSteps.put("partition-${i}", new HashMap<String,org.jenkinsci.plugins.workflow.cps.CpsClosure2>())
- for(int k=0; k < partition.size;k++){
- def basename = sh(script: "basename ${partition[k]} .yml", returnStdout: true).trim()
- buildSteps.get("partition-${i}").put(basename, { setupAndTestNode(basename) })
- }
+ def nodes = sh script: "find ./nodes -type f -name 'cfg*.yml'", returnStdout: true
+ def buildSteps = [:]
+ def partitions = common.partitionList(nodes.tokenize(), 3)
+ for (int i=0; i< partitions.size();i++) {
+ def partition = partitions[i]
+ buildSteps.put("partition-${i}", new HashMap<String,org.jenkinsci.plugins.workflow.cps.CpsClosure2>())
+ for(int k=0; k < partition.size;k++){
+ def basename = sh(script: "basename ${partition[k]} .yml", returnStdout: true).trim()
+ buildSteps.get("partition-${i}").put(basename, { setupAndTestNode(basename) })
}
- common.serial(buildSteps)
}
+ common.serial(buildSteps)
}
} catch (Throwable e) {