use Orchestrate class in lab pipeline
Previous pipeline temporarily copied to heavey-lab-pipeline.groovy and
will be delete in future.
Change-Id: I5c825e2cc6e67bea829ba5d2e2df7a971da4b0d7
diff --git a/lab-pipeline.groovy b/lab-pipeline.groovy
index 23d3443..73ef34e 100644
--- a/lab-pipeline.groovy
+++ b/lab-pipeline.groovy
@@ -104,13 +104,7 @@
saltMasterHost = openstack.getHeatStackOutputParam(openstackCloud, HEAT_STACK_NAME, 'salt_master_ip', openstackEnv)
currentBuild.description = "${HEAT_STACK_NAME}: ${saltMasterHost}"
- if (common.checkContains('INSTALL', 'kvm')) {
- saltPort = 6969
- } else {
- saltPort = 6969
- }
-
- SALT_MASTER_URL = "http://${saltMasterHost}:${saltPort}"
+ SALT_MASTER_URL = "http://${saltMasterHost}:6969"
}
}
@@ -129,106 +123,32 @@
if (common.checkContains('INSTALL', 'core')) {
stage('Install core infrastructure') {
- // salt.master, reclass
- // refresh_pillar
- // sync_all
- // linux,openssh,salt.minion.ntp
-
- //orchestrate.installFoundationInfra(saltMaster)
- salt.enforceState(saltMaster, 'I@salt:master', ['salt.master', 'reclass'], true)
- salt.enforceState(saltMaster, '*', ['linux.system'], true)
- salt.enforceState(saltMaster, '*', ['salt.minion'], true)
- salt.runSaltProcessStep(saltMaster, 'I@linux:system', 'saltutil.refresh_pillar', [], null, true)
- salt.runSaltProcessStep(saltMaster, 'I@linux:system', 'saltutil.sync_all', [], null, true)
- salt.enforceState(saltMaster, 'I@linux:system', ['linux', 'openssh', 'salt.minion', 'ntp'], true)
-
+ orchestrate.installFoundationInfra(saltMaster)
if (common.checkContains('INSTALL', 'kvm')) {
- //orchestrate.installInfraKvm(saltMaster)
- //salt.runSaltProcessStep(saltMaster, 'I@linux:system', 'saltutil.refresh_pillar', [], null, true)
- //salt.runSaltProcessStep(saltMaster, 'I@linux:system', 'saltutil.sync_all', [], null, true)
-
- //salt.enforceState(saltMaster, 'I@salt:control', ['salt.minion', 'linux.system', 'linux.network', 'ntp'], true)
- salt.enforceState(saltMaster, 'I@salt:control', 'libvirt', true)
- salt.enforceState(saltMaster, 'I@salt:control', 'salt.control', true)
-
- sleep(600)
-
- salt.runSaltProcessStep(saltMaster, '* and not kvm*', 'saltutil.refresh_pillar', [], null, true)
- salt.runSaltProcessStep(saltMaster, '* and not kvm*', 'saltutil.sync_all', [], null, true)
-
- // workaround - install apt-transport-https
- //salt.runSaltProcessStep(saltMaster, '* and not kvm*', 'cmd.run', ['apt-get update -y && apt-get install -y apt-transport-https'], null, true)
- //salt.runSaltProcessStep(saltMaster, '* and not kvm*', 'pkg.install', ['apt-transport-https', 'refresh=True'], null, true)
- salt.enforceState(saltMaster, 'I@linux:system', ['linux', 'salt.minion'], true, false)
- salt.enforceState(saltMaster, 'I@linux:system', ['openssh', 'salt.minion', 'ntp'], true, false)
+ orchestrate.installInfraKvm(saltMaster)
+ orchestrate.installFoundationInfra(saltMaster)
}
- //orchestrate.validateFoundationInfra(saltMaster)
- salt.runSaltProcessStep(saltMaster, 'I@salt:master', 'cmd.run', ['salt-key'], null, true)
- salt.runSaltProcessStep(saltMaster, 'I@salt:minion', 'test.version', [], null, true)
- salt.runSaltProcessStep(saltMaster, 'I@salt:master', 'cmd.run', ['reclass-salt --top'], null, true)
- salt.runSaltProcessStep(saltMaster, 'I@reclass:storage', 'reclass.inventory', [], null, true)
- salt.runSaltProcessStep(saltMaster, 'I@salt:minion', 'state.show_top', [], null, true)
+ orchestrate.validateFoundationInfra(saltMaster)
}
}
// install k8s
if (common.checkContains('INSTALL', 'k8s')) {
stage('Install Kubernetes infra') {
- //orchestrate.installOpenstackMcpInfra(saltMaster)
-
- // Overwrite Kubernetes vars if specified
- if (env.getEnvironment().containsKey("KUBERNETES_HYPERKUBE_IMAGE")) {
- salt.runSaltProcessStep(master, 'I@salt:master', 'file.append', overwriteFile, " kubernetes_hyperkube_image: ${KUBERNETES_HYPERKUBE_IMAGE}")
- }
-
- // Install glusterfs
- salt.runSaltProcessStep(saltMaster, 'I@glusterfs:server', 'state.sls', ['glusterfs.server.service'])
-
- // Install keepalived
- salt.runSaltProcessStep(saltMaster, 'I@keepalived:cluster and *01*', 'state.sls', ['keepalived'])
- salt.runSaltProcessStep(saltMaster, 'I@keepalived:cluster', 'state.sls', ['keepalived'])
-
- // Setup glusterfs
- salt.runSaltProcessStep(saltMaster, 'I@glusterfs:server and *01*', 'state.sls', ['glusterfs.server.setup'])
- salt.runSaltProcessStep(saltMaster, 'I@glusterfs:server', 'cmd.run', ['gluster peer status'])
- salt.runSaltProcessStep(saltMaster, 'I@glusterfs:server', 'cmd.run', ['gluster volume status'])
-
- // Install haproxy
- salt.runSaltProcessStep(saltMaster, 'I@haproxy:proxy', 'state.sls', ['haproxy'])
- salt.runSaltProcessStep(saltMaster, 'I@haproxy:proxy', 'service.status', ['haproxy'])
-
- // Install docker
- salt.runSaltProcessStep(saltMaster, 'I@docker:host', 'state.sls', ['docker.host'])
- salt.runSaltProcessStep(saltMaster, 'I@docker:host', 'cmd.run', ['docker ps'])
-
- // Install etcd
- salt.runSaltProcessStep(saltMaster, 'I@etcd:server', 'state.sls', ['etcd.server.service'])
- salt.runSaltProcessStep(saltMaster, 'I@etcd:server', 'cmd.run', ['./var/lib/etcd/configenv && etcdctl cluster-health'])
-
+ orchestrate.installKubernetesInfra(saltMaster)
}
stage('Install Kubernetes control') {
- //orchestrate.installOpenstackMcpControl(saltMaster)
- // Install Kubernetes pool and Calico
- salt.runSaltProcessStep(saltMaster, 'I@kubernetes:master', 'state.sls', ['kubernetes.master.kube-addons'])
- salt.runSaltProcessStep(saltMaster, 'I@kubernetes:pool', 'state.sls', ['kubernetes.pool'])
+ // Overwrite Kubernetes vars if specified
+ if (env.getEnvironment().containsKey("KUBERNETES_HYPERKUBE_IMAGE")) {
+ salt.runSaltProcessStep(master, 'I@salt:master', 'file.append', overwriteFile, " kubernetes_hyperkube_image: ${KUBERNETES_HYPERKUBE_IMAGE}")
+ }
- // Setup etcd server
- salt.runSaltProcessStep(saltMaster, 'I@kubernetes:master and *01*', 'state.sls', ['etcd.server.setup'])
-
- // Run k8s without master.setup
- salt.runSaltProcessStep(saltMaster, 'I@kubernetes:master', 'state.sls', ['kubernetes', 'exclude=kubernetes.master.setup'])
-
- // Run k8s master setup
- salt.runSaltProcessStep(saltMaster, 'I@kubernetes:master and *01*', 'state.sls', ['kubernetes.master.setup'])
-
- // Restart kubelet
- salt.runSaltProcessStep(saltMaster, 'I@kubernetes:pool', 'service.restart', ['kubelet'])
+ orchestrate.installKubernetesControl(saltMaster)
}
-
}
// install openstack
@@ -236,172 +156,30 @@
// install Infra and control, tests, ...
stage('Install OpenStack infra') {
- //orchestrate.installOpenstackMkInfra(saltMaster, physical)
-
- // Install glusterfs
- salt.enforceState(saltMaster, 'I@glusterfs:server', 'glusterfs.server.service', true)
-
- // Install keepaliveds
- //runSaltProcessStep(master, 'I@keepalived:cluster', 'state.sls', ['keepalived'], 1)
- salt.enforceState(saltMaster, 'I@keepalived:cluster and *01*', 'keepalived', true)
- salt.enforceState(saltMaster, 'I@keepalived:cluster', 'keepalived', true)
-
- // Check the keepalived VIPs
- salt.runSaltProcessStep(saltMaster, 'I@keepalived:cluster', 'cmd.run', ['ip a | grep 172.16.10.2'])
-
- salt.enforceState(saltMaster, 'I@glusterfs:server and *01*', 'glusterfs.server.setup', true)
-
- salt.runSaltProcessStep(saltMaster, 'I@glusterfs:server', 'cmd.run', ['gluster peer status'], null, true)
- salt.runSaltProcessStep(saltMaster, 'I@glusterfs:server', 'cmd.run', ['gluster volume status'], null, true)
-
- // Install rabbitmq
- withEnv(['ASK_ON_ERROR=false']){
- retry(2) {
- salt.enforceState(saltMaster, 'I@rabbitmq:server', 'rabbitmq', true)
- }
- }
- // Check the rabbitmq status
- salt.runSaltProcessStep(saltMaster, 'I@rabbitmq:server', 'cmd.run', ['rabbitmqctl cluster_status'])
-
- // Install galera
- withEnv(['ASK_ON_ERROR=false']){
- retry(2) {
- salt.enforceState(saltMaster, 'I@galera:master', 'galera', true)
- }
- }
- salt.enforceState(saltMaster, 'I@galera:slave', 'galera', true)
-
- // Check galera status
- salt.runSaltProcessStep(saltMaster, 'I@galera:master', 'mysql.status')
- salt.runSaltProcessStep(saltMaster, 'I@galera:slave', 'mysql.status')
-
- // // Setup mysql client
- // salt.enforceState(saltMaster, 'I@mysql:client', 'mysql.client', true)
-
- // Install haproxy
- salt.enforceState(saltMaster, 'I@haproxy:proxy', 'haproxy', true)
- salt.runSaltProcessStep(saltMaster, 'I@haproxy:proxy', 'service.status', ['haproxy'])
- salt.runSaltProcessStep(saltMaster, 'I@haproxy:proxy', 'service.restart', ['rsyslog'])
-
- // Install memcached
- salt.enforceState(saltMaster, 'I@memcached:server', 'memcached', true)
-
+ orchestrate.installOpenstackInfra(saltMaster)
}
stage('Install OpenStack control') {
- //orchestrate.installOpenstackMkControl(saltMaster)
-
- // Install horizon dashboard
- salt.enforceState(saltMaster, 'I@horizon:server', 'horizon', true)
- salt.enforceState(saltMaster, 'I@nginx:server', 'nginx', true)
-
- // setup keystone service
- //runSaltProcessStep(saltMaster, 'I@keystone:server', 'state.sls', ['keystone.server'], 1)
- salt.enforceState(saltMaster, 'I@keystone:server and *01*', 'keystone.server', true)
- salt.enforceState(saltMaster, 'I@keystone:server', 'keystone.server', true)
- // populate keystone services/tenants/roles/users
-
- // keystone:client must be called locally
- //salt.runSaltProcessStep(saltMaster, 'I@keystone:client', 'cmd.run', ['salt-call state.sls keystone.client'], null, true)
- salt.runSaltProcessStep(saltMaster, 'I@keystone:server', 'service.restart', ['apache2'])
- sleep(30)
- salt.enforceState(saltMaster, 'I@keystone:client', 'keystone.client', true)
- salt.enforceState(saltMaster, 'I@keystone:client', 'keystone.client', true)
- salt.runSaltProcessStep(saltMaster, 'I@keystone:server', 'cmd.run', ['. /root/keystonercv3; openstack service list'], null, true)
-
- // Install glance and ensure glusterfs clusters
- //runSaltProcessStep(saltMaster, 'I@glance:server', 'state.sls', ['glance.server'], 1)
- salt.enforceState(saltMaster, 'I@glance:server and *01*', 'glance.server', true)
- salt.enforceState(saltMaster, 'I@glance:server', 'glance.server', true)
- salt.enforceState(saltMaster, 'I@glance:server', 'glusterfs.client', true)
-
- // Update fernet tokens before doing request on keystone server
- salt.enforceState(saltMaster, 'I@keystone:server', 'keystone.server', true)
-
- // Check glance service
- salt.runSaltProcessStep(saltMaster, 'I@keystone:server', 'cmd.run', ['. /root/keystonerc; glance image-list'], null, true)
-
- // Install and check nova service
- //runSaltProcessStep(saltMaster, 'I@nova:controller', 'state.sls', ['nova'], 1)
- salt.enforceState(saltMaster, 'I@nova:controller and *01*', 'nova.controller', true)
- salt.enforceState(saltMaster, 'I@nova:controller', 'nova.controller', true)
- salt.runSaltProcessStep(saltMaster, 'I@keystone:server', 'cmd.run', ['. /root/keystonerc; nova service-list'], null, true)
-
- // Install and check cinder service
- //runSaltProcessStep(saltMaster, 'I@cinder:controller', 'state.sls', ['cinder'], 1)
- salt.enforceState(saltMaster, 'I@cinder:controller and *01*', 'cinder', true)
- salt.enforceState(saltMaster, 'I@cinder:controller', 'cinder', true)
- salt.runSaltProcessStep(saltMaster, 'I@keystone:server', 'cmd.run', ['. /root/keystonerc; cinder list'], null, true)
-
- // Install neutron service
- //runSaltProcessStep(saltMaster, 'I@neutron:server', 'state.sls', ['neutron'], 1)
-
- salt.enforceState(saltMaster, 'I@neutron:server and *01*', 'neutron.server', true)
- salt.enforceState(saltMaster, 'I@neutron:server', 'neutron.server', true)
- salt.runSaltProcessStep(saltMaster, 'I@keystone:server', 'cmd.run', ['. /root/keystonerc; neutron agent-list'], null, true)
-
- // Install heat service
- //runSaltProcessStep(saltMaster, 'I@heat:server', 'state.sls', ['heat'], 1)
- salt.enforceState(saltMaster, 'I@heat:server and *01*', 'heat', true)
- salt.enforceState(saltMaster, 'I@heat:server', 'heat', true)
- salt.runSaltProcessStep(saltMaster, 'I@keystone:server', 'cmd.run', ['. /root/keystonerc; heat resource-type-list'], null, true)
-
- // Restart nova api
- salt.runSaltProcessStep(saltMaster, 'I@nova:controller', 'service.restart', ['nova-api'])
-
+ orchestrate.installOpenstackControl(saltMaster)
}
stage('Install OpenStack network') {
- //orchestrate.installOpenstackMkNetwork(saltMaster, physical)
if (common.checkContains('INSTALL', 'contrail')) {
- // Install opencontrail database services
- //runSaltProcessStep(saltMaster, 'I@opencontrail:database', 'state.sls', ['opencontrail.database'], 1)
- try {
- salt.enforceState(saltMaster, 'I@opencontrail:database and *01*', 'opencontrail.database', true)
- } catch (Exception e) {
- common.warningMsg('Exception in state opencontrail.database on I@opencontrail:database and *01*')
- }
-
- try {
- salt.enforceState(saltMaster, 'I@opencontrail:database', 'opencontrail.database', true)
- } catch (Exception e) {
- common.warningMsg('Exception in state opencontrail.database on I@opencontrail:database')
- }
-
- // Install opencontrail control services
- //runSaltProcessStep(saltMaster, 'I@opencontrail:control', 'state.sls', ['opencontrail'], 1)
- salt.runSaltProcessStep(saltMaster, 'I@opencontrail:control and *01*', 'state.sls', ['opencontrail', 'exclude=opencontrail.client'])
- salt.runSaltProcessStep(saltMaster, 'I@opencontrail:control', 'state.sls', ['opencontrail', 'exclude=opencontrail.client'])
- salt.runSaltProcessStep(saltMaster, 'I@opencontrail:collector', 'state.sls', ['opencontrail', 'exclude=opencontrail.client'])
-
- // Test opencontrail
- salt.runSaltProcessStep(saltMaster, 'I@opencontrail:control', 'cmd.run', ['contrail-status'], null, true)
+ orchestrate.installContrailNetwork(saltMaster)
} else if (common.checkContains('INSTALL', 'ovs')) {
- // Apply gateway
- salt.runSaltProcessStep(saltMaster, 'I@neutron:gateway', 'state.apply', [], null, true)
+ orchestrate.installOpenstackNetwork(saltMaster)
}
- // Pring information
- salt.runSaltProcessStep(saltMaster, 'I@keystone:server', 'cmd.run', ['. /root/keystonerc; neutron net-list'], null, true)
- salt.runSaltProcessStep(saltMaster, 'I@keystone:server', 'cmd.run', ['. /root/keystonerc; nova net-list'], null, true)
+ salt.runSaltProcessStep(master, 'I@keystone:server', 'cmd.run', ['. /root/keystonerc; neutron net-list'])
+ salt.runSaltProcessStep(master, 'I@keystone:server', 'cmd.run', ['. /root/keystonerc; nova net-list'])
}
stage('Install OpenStack compute') {
- //orchestrate.installOpenstackMkCompute(saltMaster, physical)
- // Configure compute nodes
- retry(2) {
- salt.runSaltProcessStep(saltMaster, 'I@nova:compute', 'state.apply', [], null, true)
- }
+ orchestrate.installOpenstackCompute(saltMaster)
if (common.checkContains('INSTALL', 'contrail')) {
- // Provision opencontrail control services
- salt.enforceState(saltMaster, 'I@opencontrail:database:id:1', 'opencontrail.client', true)
- // Provision opencontrail virtual routers
- salt.enforceState(saltMaster, 'I@opencontrail:compute', 'opencontrail.client', true)
-
- salt.runSaltProcessStep(saltMaster, 'I@nova:compute', 'cmd.run', ['exec 0>&-; exec 1>&-; exec 2>&-; nohup bash -c "ip link | grep vhost && echo no_reboot || sleep 5 && reboot & "'], null, true)
- sleep(300)
+ orchestrate.installContrailCompute(saltMaster)
}
}
@@ -410,101 +188,8 @@
if (common.checkContains('INSTALL', 'stacklight')) {
stage('Install StackLight') {
- // infra install
- // Install the StackLight backends
- salt.enforceState(saltMaster, '*01* and I@elasticsearch:server', 'elasticsearch.server', true)
- salt.enforceState(saltMaster, 'I@elasticsearch:server', 'elasticsearch.server', true)
-
- salt.enforceState(saltMaster, '*01* and I@influxdb:server', 'influxdb', true)
- salt.enforceState(saltMaster, 'I@influxdb:server', 'influxdb', true)
-
- salt.enforceState(saltMaster, '*01* and I@kibana:server', 'kibana.server', true)
- salt.enforceState(saltMaster, 'I@kibana:server', 'kibana.server', true)
-
- salt.enforceState(saltMaster, '*01* and I@grafana:server','grafana.server', true)
- salt.enforceState(saltMaster, 'I@grafana:server','grafana.server', true)
-
- salt.enforceState(saltMaster, 'I@nagios:server', 'nagios.server', true)
- salt.enforceState(saltMaster, 'I@elasticsearch:client', 'elasticsearch.client.service', true)
- salt.enforceState(saltMaster, 'I@kibana:client', 'kibana.client.service', true)
- // nw salt.enforceState('I@kibana:client or I@elasticsearch:client' --async service.restart salt-minion
-
- sleep(10)
-
- salt.runSaltProcessStep(saltMaster, 'I@elasticsearch.client', 'cmd.run', ['salt-call state.sls elasticsearch.client'], null, true)
- // salt.enforceState(saltMaster, 'I@elasticsearch:client', 'elasticsearch.client', true)
- salt.runSaltProcessStep(saltMaster, 'I@kibana.client', 'cmd.run', ['salt-call state.sls kibana.client'], null, true)
- // salt.enforceState(saltMaster, 'I@kibana:client', 'kibana.client', true)
-
- // install monitor
- // Restart salt-minion to make sure that it uses the latest Jinja library
- // no way: salt '*' --async service.restart salt-minion; sleep 15
-
- // Start by flusing Salt Mine to make sure it is clean
- // Also clean-up the grains files to make sure that we start from a clean state
- // nw salt "*" mine.flush
- // nw salt "*" file.remove /etc/salt/grains.d/collectd
- // nw salt "*" file.remove /etc/salt/grains.d/grafana
- // nw salt "*" file.remove /etc/salt/grains.d/heka
- // nw salt "*" file.remove /etc/salt/grains.d/sensu
- // nw salt "*" file.remove /etc/salt/grains
-
- // Install collectd, heka and sensu services on the nodes, this will also
- // generate the metadata that goes into the grains and eventually into Salt Mine
- salt.enforceState(saltMaster, '*', 'collectd', true)
- salt.enforceState(saltMaster, '*', 'salt.minion', true)
- salt.enforceState(saltMaster, '*', 'heka', true)
-
- // Gather the Grafana metadata as grains
- salt.enforceState(saltMaster, 'I@grafana:collector', 'grafana.collector', true)
-
- // Update Salt Mine
- salt.enforceState(saltMaster, '*', 'salt.minion.grains', true)
- salt.runSaltProcessStep(saltMaster, '*', 'saltutil.refresh_modules', [], null, true)
- salt.runSaltProcessStep(saltMaster, '*', 'mine.update', [], null, true)
-
- sleep(5)
-
- // Update Heka
- salt.enforceState(saltMaster, 'I@heka:aggregator:enabled:True or I@heka:remote_collector:enabled:True', 'heka', true)
-
- // Update collectd
- salt.enforceState(saltMaster, 'I@collectd:remote_client:enabled:True', 'collectd', true)
-
- // Update Nagios
- salt.enforceState(saltMaster, 'I@nagios:server', 'nagios', true)
- // Stop the Nagios service because the package starts it by default and it will
- // started later only on the node holding the VIP address
- salt.runSaltProcessStep(saltMaster, 'I@nagios:server', 'service.stop', ['nagios3'], null, true)
-
- // Update Sensu
- // TODO for stacklight team, should be fixed in model
- //salt.enforceState(saltMaster, 'I@sensu:server', 'sensu', true)
-
- // Finalize the configuration of Grafana (add the dashboards...)
- salt.enforceState(saltMaster, 'I@grafana:client', 'grafana.client.service', true)
- // nw salt -C 'I@grafana:client' --async service.restart salt-minion; sleep 10
-
- salt.runSaltProcessStep(saltMaster, 'I@grafana.client and *01*', 'cmd.run', ['salt-call state.sls grafana.client'], null, true)
- // salt.enforceState(saltMaster, 'I@grafana:client and *01*', 'grafana.client', true)
-
- // Get the StackLight monitoring VIP addres
- //vip=$(salt-call pillar.data _param:stacklight_monitor_address --out key|grep _param: |awk '{print $2}')
- //vip=${vip:=172.16.10.253}
- def pillar = salt.getPillar(saltMaster, 'ctl01*', '_param:stacklight_monitor_address')
- print(common.prettyPrint(pillar))
- def stacklight_vip = pillar['return'][0].values()[0]
-
- if (stacklight_vip) {
- // (re)Start manually the services that are bound to the monitoring VIP
- common.infoMsg("restart services on node with IP: ${stacklight_vip}")
- salt.runSaltProcessStep(saltMaster, "G@ipv4:${stacklight_vip}", 'service.restart', ['remote_collectd'], null, true)
- salt.runSaltProcessStep(saltMaster, "G@ipv4:${stacklight_vip}", 'service.restart', ['remote_collector'], null, true)
- salt.runSaltProcessStep(saltMaster, "G@ipv4:${stacklight_vip}", 'service.restart', ['aggregator'], null, true)
- salt.runSaltProcessStep(saltMaster, "G@ipv4:${stacklight_vip}", 'service.restart', ['nagios3'], null, true)
- } else {
- throw new Exception("Missing stacklight_vip")
- }
+ orchestrate.installStacklightControl(saltMaster)
+ orchestrate.installStacklightClient(saltMaster)
}
}