Make one joined graph from 3 separate stages

Previously this 3 stages was disjoined and connected programatically
during traversal in nailgun. Such approach imposes some dificulties
during traversal and filtering and not really extandable (add new stages).

Introduced change allows us to simplify traversal logic, and therefore
improve UX for tasks developer

Also in such approach it is quite easy to introduce new stages, like
something that should be executed after cluster is completed, for example,
stage end_notification that should fire some messages when we can guarantee
that cluster is completed.
Or add stage provision to the same graph.

related to blueprint granular-deployment-based-on-tasks
Depends on nailgun: Ida5880525f9c3428ad8bb590f7ef78a0b20b1049

Change-Id: Ie332d0c1745a48c5ae96c4c80d94922c321d5f7a
This commit is contained in:
Dmitry Shulyak 2015-02-13 16:21:05 +02:00
parent 8384b8ca4d
commit 4451a173fa
10 changed files with 133 additions and 99 deletions

View File

@ -1,91 +1,108 @@
#STAGES #STAGES
- id: deploy
- id: pre_deployment_start
type: stage type: stage
- id: pre_deployment
- id: pre_deployment_end
type: stage type: stage
- id: post_deployment requires: [pre_deployment_start]
- id: deploy_start
type: stage type: stage
requires: [pre_deployment_end]
- id: deploy_end
type: stage
requires: [deploy_start]
- id: post_deployment_start
type: stage
requires: [deploy_end]
- id: post_deployment_end
type: stage
requires: [post_deployment_start]
#GROUPS #GROUPS
- id: primary-controller - id: primary-controller
type: group type: group
role: [primary-controller] role: [primary-controller]
required_for: [deploy] requires: [deploy_start]
required_for: [deploy_end]
parameters: parameters:
strategy: strategy:
type: one_by_one type: one_by_one
- id: controller - id: controller
type: group type: group
role: [controller] role: [controller]
requires: [primary-controller] requires: [primary-controller]
required_for: [deploy] required_for: [deploy_end]
parameters: parameters:
strategy: strategy:
type: parallel type: parallel
amount: 6 amount: 6
- id: cinder - id: cinder
type: group type: group
role: [cinder] role: [cinder]
requires: [controller] requires: [controller]
required_for: [deploy] required_for: [deploy_end]
parameters:
strategy:
type: parallel
- id: compute
type: group
role: [compute]
requires: [controller]
required_for: [deploy]
parameters:
strategy:
type: parallel
- id: zabbix-server
type: group
role: [zabbix-server]
required_for: [deploy]
parameters:
strategy:
type: one_by_one
- id: mongo
type: group
role: [mongo]
requires: [zabbix-server]
required_for: [deploy, primary-controller, controller]
parameters:
strategy:
type: parallel
- id: primary-mongo
type: group
role: [primary-mongo]
requires: [mongo]
required_for: [deploy, primary-controller, controller]
parameters:
strategy:
type: one_by_one
- id: ceph-osd
type: group
role: [ceph-osd]
requires: [controller]
required_for: [deploy]
parameters:
strategy:
type: parallel
- id: base-os
type: group
role: [base-os]
tasks: [hiera, globals]
required_for: [deploy]
parameters: parameters:
strategy: strategy:
type: parallel type: parallel
#PRE DEPLOYMENT - id: compute
- id: sync_time type: group
type: shell role: [compute]
role: '*' requires: [controller]
stage: pre_deployment required_for: [deploy_end]
parameters: parameters:
cmd: ntpdate -u $(egrep '^server' /etc/ntp.conf | egrep -v '127\.127\.[0-9]+\.[0-9]+' | sed '/^#/d' | awk '{print $2}') strategy:
retries: 10 type: parallel
interval: 1
timeout: 180 - id: zabbix-server
type: group
role: [zabbix-server]
required_for: [deploy_end]
requires: [deploy_start]
parameters:
strategy:
type: one_by_one
- id: mongo
type: group
role: [mongo]
requires: [zabbix-server]
required_for: [deploy_end, primary-controller, controller]
parameters:
strategy:
type: parallel
- id: primary-mongo
type: group
role: [primary-mongo]
requires: [mongo]
required_for: [deploy_end, primary-controller, controller]
parameters:
strategy:
type: one_by_one
- id: ceph-osd
type: group
role: [ceph-osd]
requires: [controller]
required_for: [deploy_end]
parameters:
strategy:
type: parallel
- id: base-os
type: group
role: [base-os]
tasks: [hiera, globals]
required_for: [deploy_end]
requires: [deploy_start]
parameters:
strategy:
type: parallel

View File

@ -1,7 +1,9 @@
# POST_DEPLOYMENT TASKS
- id: enable_quorum - id: enable_quorum
type: shell type: shell
role: [primary-controller] role: [primary-controller]
stage: post_deployment requires: [post_deployment_start]
required_for: [post_deployment_end]
parameters: parameters:
cmd: ruby /etc/puppet/modules/osnailyfacter/modular/astute/enable_quorum.rb cmd: ruby /etc/puppet/modules/osnailyfacter/modular/astute/enable_quorum.rb
timeout: 180 timeout: 180
@ -9,9 +11,9 @@
- id: restart_rados - id: restart_rados
type: shell type: shell
role: [primary-controller, controller] role: [primary-controller, controller]
stage: post_deployment
condition: "settings:storage.objects_ceph.value == true" condition: "settings:storage.objects_ceph.value == true"
required_for: [upload_cirros] requires: [post_deployment_start]
required_for: [upload_cirros, post_deployment_end]
parameters: parameters:
cmd: sh /etc/puppet/modules/osnailyfacter/modular/astute/restart_rados.sh cmd: sh /etc/puppet/modules/osnailyfacter/modular/astute/restart_rados.sh
timeout: 180 timeout: 180
@ -20,7 +22,7 @@
type: shell type: shell
role: [primary-controller] role: [primary-controller]
requires: [enable_quorum] requires: [enable_quorum]
stage: post_deployment required_for: [post_deployment_end]
parameters: parameters:
cmd: ruby /etc/puppet/modules/osnailyfacter/modular/astute/upload_cirros.rb cmd: ruby /etc/puppet/modules/osnailyfacter/modular/astute/upload_cirros.rb
timeout: 180 timeout: 180
@ -28,14 +30,14 @@
- id: upload_nodes_info - id: upload_nodes_info
type: upload_file type: upload_file
role: '*' role: '*'
stage: post_deployment requires: [post_deployment_start]
parameters: parameters:
path: /etc/hiera/nodes.yaml path: /etc/hiera/nodes.yaml
- id: update_hosts - id: update_hosts
type: puppet type: puppet
role: '*' role: '*'
stage: post_deployment required_for: [post_deployment_end]
requires: [upload_nodes_info] requires: [upload_nodes_info]
parameters: parameters:
puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/hosts.pp puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/hosts.pp
@ -47,41 +49,45 @@
- id: vcenter_compute_zones_create - id: vcenter_compute_zones_create
type: shell type: shell
role: [primary-controller] role: [primary-controller]
stage: post_deployment requires: [post_deployment_start]
required_for: [post_deployment_end]
condition: "settings:common.use_vcenter.value == true" condition: "settings:common.use_vcenter.value == true"
parameters: parameters:
cmd: /usr/bin/python /etc/puppet/modules/osnailyfacter/modular/astute/vcenter_compute_zones.py cmd: /usr/bin/python /etc/puppet/modules/osnailyfacter/modular/astute/vcenter_compute_zones.py
timeout: 180 timeout: 180
#PRE DEPLOYMENT
- id: upload_core_repos - id: upload_core_repos
type: upload_file type: upload_file
role: '*' role: '*'
stage: pre_deployment requires: [pre_deployment_start]
- id: rsync_core_puppet - id: rsync_core_puppet
type: sync type: sync
role: '*' role: '*'
stage: pre_deployment required_for: [pre_deployment_end]
requires: [upload_core_repos] requires: [upload_core_repos]
parameters: parameters:
src: rsync://{MASTER_IP}:/puppet/{OPENSTACK_VERSION}/ src: rsync://{MASTER_IP}:/puppet/{OPENSTACK_VERSION}/
dst: /etc/puppet dst: /etc/puppet
timeout: timeout: 180
- id: clear_nodes_info - id: clear_nodes_info
type: shell type: shell
role: '*' role: '*'
stage: pre_deployment requires: [pre_deployment_start]
required_for: [pre_deployment_end]
parameters: parameters:
cmd: rm -f /etc/hiera/nodes.yaml cmd: rm -f /etc/hiera/nodes.yaml
retries: 1 retries: 1
#PREDEPLOYMENT HOOKS
- id: copy_keys - id: copy_keys
type: copy_files type: copy_files
role: '*' role: '*'
stage: pre_deployment required_for: [pre_deployment_end]
requires: [generate_keys] requires: [generate_keys]
parameters: parameters:
files: files:
@ -109,8 +115,20 @@
- id: generate_keys - id: generate_keys
type: shell type: shell
role: master role: master
stage: pre_deployment requires: [pre_deployment_start]
required_for: [copy_keys] required_for: [copy_keys]
parameters: parameters:
cmd: sh /etc/puppet/modules/osnailyfacter/modular/astute/generate_keys.sh -i {CLUSTER_ID} -o 'mongodb' -s 'neutron nova ceph mysql' -p /var/lib/fuel/keys/ cmd: sh /etc/puppet/modules/osnailyfacter/modular/astute/generate_keys.sh -i {CLUSTER_ID} -o 'mongodb' -s 'neutron nova ceph mysql' -p /var/lib/fuel/keys/
timeout: 180 timeout: 180
- id: sync_time
type: shell
role: '*'
requires: [pre_deployment_start]
required_for: [pre_deployment_end]
parameters:
cmd: ntpdate -u $(egrep '^server' /etc/ntp.conf | egrep -v '127\.127\.[0-9]+\.[0-9]+' | sed '/^#/d' | awk '{print $2}')
retries: 10
interval: 1
timeout: 180

View File

@ -1,7 +1,7 @@
- id: cluster-haproxy - id: cluster-haproxy
type: puppet type: puppet
groups: [primary-controller, controller] groups: [primary-controller, controller]
required_for: [top-role-controller, deploy] required_for: [top-role-controller, deploy_end]
requires: [virtual_ips] requires: [virtual_ips]
parameters: parameters:
puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/cluster-haproxy/cluster-haproxy.pp puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/cluster-haproxy/cluster-haproxy.pp

View File

@ -1,7 +1,7 @@
- id: cluster - id: cluster
type: puppet type: puppet
groups: [primary-controller, controller] groups: [primary-controller, controller]
required_for: [top-role-controller, deploy] required_for: [top-role-controller, deploy_end]
requires: [hosts, firewall] requires: [hosts, firewall]
parameters: parameters:
puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/cluster/cluster.pp puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/cluster/cluster.pp

View File

@ -1,7 +1,7 @@
- id: openstack-controller - id: openstack-controller
type: puppet type: puppet
groups: [primary-controller, controller] groups: [primary-controller, controller]
required_for: [top-role-controller, deploy] required_for: [top-role-controller, deploy_end]
requires: [openstack-haproxy] requires: [openstack-haproxy]
parameters: parameters:
puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/openstack-controller/openstack-controller.pp puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/openstack-controller/openstack-controller.pp

View File

@ -1,7 +1,7 @@
- id: openstack-haproxy - id: openstack-haproxy
type: puppet type: puppet
groups: [primary-controller, controller] groups: [primary-controller, controller]
required_for: [top-role-controller, deploy] required_for: [top-role-controller, deploy_end]
requires: [cluster-haproxy] requires: [cluster-haproxy]
parameters: parameters:
puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/openstack-haproxy/openstack-haproxy.pp puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/openstack-haproxy/openstack-haproxy.pp

View File

@ -1,7 +1,7 @@
- id: netconfig - id: netconfig
type: puppet type: puppet
groups: [primary-controller, controller, cinder, compute, ceph-osd, zabbix-server, primary-mongo, mongo] groups: [primary-controller, controller, cinder, compute, ceph-osd, zabbix-server, primary-mongo, mongo]
required_for: [deploy] required_for: [deploy_end]
requires: [logging] requires: [logging]
parameters: parameters:
puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/netconfig.pp puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/netconfig.pp
@ -11,7 +11,7 @@
- id: logging - id: logging
type: puppet type: puppet
groups: [primary-controller, controller, cinder, compute, ceph-osd, zabbix-server, primary-mongo, mongo] groups: [primary-controller, controller, cinder, compute, ceph-osd, zabbix-server, primary-mongo, mongo]
required_for: [deploy] required_for: [deploy_end]
requires: [globals] requires: [globals]
parameters: parameters:
puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/logging.pp puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/logging.pp
@ -21,7 +21,7 @@
- id: tools - id: tools
type: puppet type: puppet
groups: [primary-controller, controller, cinder, compute, ceph-osd, zabbix-server, primary-mongo, mongo] groups: [primary-controller, controller, cinder, compute, ceph-osd, zabbix-server, primary-mongo, mongo]
required_for: [deploy] required_for: [deploy_end]
requires: [logging] requires: [logging]
parameters: parameters:
puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/tools.pp puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/tools.pp
@ -31,7 +31,7 @@
- id: hosts - id: hosts
type: puppet type: puppet
groups: [primary-controller, controller, cinder, compute, ceph-osd, zabbix-server, primary-mongo, mongo] groups: [primary-controller, controller, cinder, compute, ceph-osd, zabbix-server, primary-mongo, mongo]
required_for: [deploy] required_for: [deploy_end]
requires: [netconfig] requires: [netconfig]
parameters: parameters:
puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/hosts.pp puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/hosts.pp
@ -41,7 +41,7 @@
- id: firewall - id: firewall
type: puppet type: puppet
groups: [primary-controller, controller, cinder, compute, ceph-osd, zabbix-server, primary-mongo, mongo] groups: [primary-controller, controller, cinder, compute, ceph-osd, zabbix-server, primary-mongo, mongo]
required_for: [deploy] required_for: [deploy_end]
requires: [netconfig] requires: [netconfig]
parameters: parameters:
puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/firewall.pp puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/firewall.pp
@ -51,7 +51,8 @@
- id: hiera - id: hiera
type: puppet type: puppet
groups: [primary-controller, controller, cinder, compute, ceph-osd, zabbix-server, primary-mongo, mongo] groups: [primary-controller, controller, cinder, compute, ceph-osd, zabbix-server, primary-mongo, mongo]
required_for: [deploy] requires: [deploy_start]
required_for: [deploy_end]
parameters: parameters:
puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/hiera.pp puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/hiera.pp
puppet_modules: /etc/puppet/modules puppet_modules: /etc/puppet/modules
@ -62,7 +63,7 @@
groups: [primary-controller, controller, groups: [primary-controller, controller,
cinder, compute, ceph-osd, cinder, compute, ceph-osd,
zabbix-server, primary-mongo, mongo] zabbix-server, primary-mongo, mongo]
required_for: [deploy] required_for: [deploy_end]
requires: [hiera] requires: [hiera]
parameters: parameters:
puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/globals.pp puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/globals.pp
@ -72,7 +73,7 @@
- id: top-role-controller - id: top-role-controller
type: puppet type: puppet
groups: [primary-controller, controller] groups: [primary-controller, controller]
required_for: [deploy] required_for: [deploy_end]
requires: [hosts, firewall] requires: [hosts, firewall]
parameters: parameters:
puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/controller.pp puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/controller.pp
@ -82,7 +83,7 @@
- id: top-role-compute - id: top-role-compute
type: puppet type: puppet
groups: [compute] groups: [compute]
required_for: [deploy] required_for: [deploy_end]
requires: [hosts, firewall] requires: [hosts, firewall]
parameters: parameters:
puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/compute.pp puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/compute.pp
@ -92,7 +93,7 @@
- id: top-role-cinder - id: top-role-cinder
type: puppet type: puppet
groups: [cinder] groups: [cinder]
required_for: [deploy] required_for: [deploy_end]
requires: [hosts, firewall] requires: [hosts, firewall]
parameters: parameters:
puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/cinder.pp puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/cinder.pp
@ -102,7 +103,7 @@
- id: top-role-ceph-osd - id: top-role-ceph-osd
type: puppet type: puppet
groups: [ceph-osd] groups: [ceph-osd]
required_for: [deploy] required_for: [deploy_end]
requires: [hosts, firewall] requires: [hosts, firewall]
parameters: parameters:
puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/ceph-osd.pp puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/ceph-osd.pp
@ -112,7 +113,7 @@
- id: top-role-primary-mongo - id: top-role-primary-mongo
type: puppet type: puppet
groups: [primary-mongo] groups: [primary-mongo]
required_for: [deploy] required_for: [deploy_end]
requires: [hosts, firewall] requires: [hosts, firewall]
parameters: parameters:
puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/mongo_primary.pp puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/mongo_primary.pp
@ -122,7 +123,7 @@
- id: top-role-mongo - id: top-role-mongo
type: puppet type: puppet
groups: [mongo] groups: [mongo]
required_for: [deploy] required_for: [deploy_end]
requires: [hosts, firewall] requires: [hosts, firewall]
parameters: parameters:
puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/mongo.pp puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/mongo.pp
@ -134,7 +135,7 @@
groups: [primary-controller, controller, groups: [primary-controller, controller,
cinder, compute, ceph-osd, cinder, compute, ceph-osd,
zabbix-server, primary-mongo, mongo] zabbix-server, primary-mongo, mongo]
required_for: [deploy] required_for: [deploy_end]
requires: [hosts, firewall] requires: [hosts, firewall]
parameters: parameters:
puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/zabbix.pp puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/zabbix.pp

View File

@ -1,7 +1,7 @@
- id: virtual_ips - id: virtual_ips
type: puppet type: puppet
groups: [primary-controller, controller] groups: [primary-controller, controller]
required_for: [top-role-controller, deploy] required_for: [top-role-controller, deploy_end]
requires: [cluster] requires: [cluster]
parameters: parameters:
puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/virtual_ips/virtual_ips.pp puppet_manifest: /etc/puppet/modules/osnailyfacter/modular/virtual_ips/virtual_ips.pp

View File

@ -1,7 +1,7 @@
- id: vmware-vcenter - id: vmware-vcenter
type: puppet type: puppet
groups: [primary-controller, controller] groups: [primary-controller, controller]
required_for: [deploy] required_for: [deploy_end]
requires: [top-role-controller] requires: [top-role-controller]
condition: "settings:common.libvirt_type.value == 'vcenter' or settings:common.use_vcenter.value == true" condition: "settings:common.libvirt_type.value == 'vcenter' or settings:common.use_vcenter.value == true"
parameters: parameters:
@ -12,7 +12,7 @@
- id: vmware-compute - id: vmware-compute
type: puppet type: puppet
groups: [compute] groups: [compute]
required_for: [deploy] required_for: [deploy_end]
requires: [top-role-compute] requires: [top-role-compute]
condition: "settings:common.libvirt_type.value == 'vcenter' or settings:common.use_vcenter.value == true" condition: "settings:common.libvirt_type.value == 'vcenter' or settings:common.use_vcenter.value == true"
parameters: parameters:

View File

@ -82,8 +82,6 @@ def graph(tasks):
for req in task['tasks']: for req in task['tasks']:
graph.add_edge(req, task['id']) graph.add_edge(req, task['id'])
if 'stage' in task:
graph.add_edge(task['id'], task['stage'])
return graph return graph