{% set deploy_steps_max = 6 %} conditions: {% for step in range(1, deploy_steps_max) %} WorkflowTasks_Step{{step}}_Enabled: or: {% for role in roles %} - not: equals: - get_param: [role_data, {{role.name}}, service_workflow_tasks, step{{step}}] - '' - False {% endfor %} {% endfor %} resources: # Post deployment steps for all roles # A single config is re-applied with an incrementing step number {% for role in roles %} # {{role.name}} Role post-deploy steps {{role.name}}ArtifactsConfig: type: deploy-artifacts.yaml {{role.name}}ArtifactsDeploy: type: OS::Heat::StructuredDeployments properties: servers: {get_param: [servers, {{role.name}}]} config: {get_resource: {{role.name}}ArtifactsConfig} {{role.name}}PreConfig: type: OS::TripleO::Tasks::{{role.name}}PreConfig properties: servers: {get_param: [servers, {{role.name}}]} input_values: update_identifier: {get_param: DeployIdentifier} {{role.name}}Config: type: OS::TripleO::{{role.name}}Config properties: StepConfig: {list_join: ["\n", {get_param: [role_data, {{role.name}}, step_config]}]} # Step through a series of configuration steps {% for step in range(1, deploy_steps_max) %} {{role.name}}Deployment_Step{{step}}: type: OS::Heat::StructuredDeploymentGroup depends_on: - WorkflowTasks_Step{{step}}_Execution # TODO(gfidente): the following if/else condition # replicates what is already defined for the # WorkflowTasks_StepX resource and can be remove # if https://bugs.launchpad.net/heat/+bug/1700569 # is fixed. {% if step == 1 %} {% for dep in roles %} - {{dep.name}}PreConfig - {{dep.name}}ArtifactsDeploy {% endfor %} {% else %} {% for dep in roles %} - {{dep.name}}Deployment_Step{{step -1}} {% endfor %} {% endif %} properties: name: {{role.name}}Deployment_Step{{step}} servers: {get_param: [servers, {{role.name}}]} config: {get_resource: {{role.name}}Config} input_values: step: {{step}} update_identifier: {get_param: DeployIdentifier} {% endfor %} # Note, this should be the last step to execute configuration changes. # Ensure that all {{role.name}}ExtraConfigPost steps are executed # after all the previous deployment steps. {{role.name}}ExtraConfigPost: depends_on: {% for dep in roles %} - {{dep.name}}Deployment_Step5 {% endfor %} type: OS::TripleO::NodeExtraConfigPost properties: servers: {get_param: [servers, {{role.name}}]} # The {{role.name}}PostConfig steps are in charge of # quiescing all services, i.e. in the Controller case, # we should run a full service reload. {{role.name}}PostConfig: type: OS::TripleO::Tasks::{{role.name}}PostConfig depends_on: {% for dep in roles %} - {{dep.name}}ExtraConfigPost {% endfor %} properties: servers: {get_param: servers} input_values: update_identifier: {get_param: DeployIdentifier} {% endfor %} # BEGIN service_workflow_tasks handling {% for step in range(1, deploy_steps_max) %} WorkflowTasks_Step{{step}}: type: OS::Mistral::Workflow condition: WorkflowTasks_Step{{step}}_Enabled depends_on: {% if step == 1 %} {% for dep in roles %} - {{dep.name}}PreConfig - {{dep.name}}ArtifactsDeploy {% endfor %} {% else %} {% for dep in roles %} - {{dep.name}}Deployment_Step{{step -1}} {% endfor %} {% endif %} properties: name: {list_join: [".", ["tripleo", {get_param: stack_name}, "workflowtasks", "step{{step}}"]]} type: direct tasks: yaql: expression: $.data.where($ != '').select($.get('step{{step}}')).where($ != null).flatten() data: {% for role in roles %} - get_param: [role_data, {{role.name}}, service_workflow_tasks] {% endfor %} WorkflowTasks_Step{{step}}_Execution: type: OS::Mistral::ExternalResource condition: WorkflowTasks_Step{{step}}_Enabled depends_on: WorkflowTasks_Step{{step}} properties: actions: CREATE: workflow: { get_resource: WorkflowTasks_Step{{step}} } params: env: service_ips: { get_param: ctlplane_service_ips } UPDATE: workflow: { get_resource: WorkflowTasks_Step{{step}} } params: env: service_ips: { get_param: ctlplane_service_ips } always_update: true {% endfor %} # END service_workflow_tasks handling