1 {% set enabled_roles = roles|rejectattr('disable_upgrade_deployment')|list -%}
2 {% set batch_upgrade_steps_max = 3 -%}
3 {% set upgrade_steps_max = 6 -%}
4 {% set deliver_script = {'deliver': False} -%}
5 heat_template_version: pike
6 description: 'Upgrade steps for all roles'
13 description: Name of the topmost stack
16 description: Mapping of Role name e.g Controller to the per-role data
23 Setting to a previously unused value during stack-update will trigger
24 the Upgrade resources to re-run on all roles.
27 description: Mapping of service endpoint -> protocol. Typically set
28 via parameter_defaults in the resource registry.
33 description: Keystone region for endpoint
35 description: The password for the nova service and db account
41 {% for role in roles if role.disable_upgrade_deployment|default(false) %}
42 {{role.name}}DeliverUpgradeScriptConfig:
43 type: OS::Heat::SoftwareConfig
55 ROLE_NAME: {{role.name}}
56 - get_file: ../extraconfig/tasks/pacemaker_common_functions.sh
57 - get_file: ../extraconfig/tasks/run_puppet.sh
58 - get_file: ../extraconfig/tasks/tripleo_upgrade_node.sh
60 {{role.name}}DeliverUpgradeScriptDeployment:
61 type: OS::Heat::SoftwareDeploymentGroup
63 servers: {get_param: [servers, {{role.name}}]}
64 config: {get_resource: {{role.name}}DeliverUpgradeScriptConfig}
67 # Upgrade Steps for all roles, batched updates
68 # The UpgradeConfig resources could actually be created without
69 # serialization, but the event output is easier to follow if we
70 # do, and there should be minimal performance hit (creating the
71 # config is cheap compared to the time to apply the deployment).
72 {% for step in range(0, batch_upgrade_steps_max) %}
73 # Batch config resources step {{step}}
74 {%- for role in roles %}
75 {{role.name}}UpgradeBatchConfig_Step{{step}}:
76 type: OS::TripleO::UpgradeConfig
79 {%- for role_inside in enabled_roles %}
80 - {{role_inside.name}}UpgradeBatch_Step{{step -1}}
83 {% for role in roles if role.disable_upgrade_deployment|default(false) %}
84 {% if deliver_script.update({'deliver': True}) %} {% endif %}
86 {% if deliver_script.deliver %}
88 {% for dep in roles if dep.disable_upgrade_deployment|default(false) %}
89 - {{dep.name}}DeliverUpgradeScriptDeployment
94 UpgradeStepConfig: {get_param: [role_data, {{role.name}}, upgrade_batch_tasks]}
98 # Batch deployment resources for step {{step}} (only for enabled roles)
99 {%- for role in enabled_roles %}
100 {{role.name}}UpgradeBatch_Step{{step}}:
101 type: OS::Heat::SoftwareDeploymentGroup
104 {%- for role_inside in enabled_roles %}
105 - {{role_inside.name}}UpgradeBatch_Step{{step -1}}
108 {% for role in roles if role.disable_upgrade_deployment|default(false) %}
109 {% if deliver_script.update({'deliver': True}) %} {% endif %}
111 {% if deliver_script.deliver %}
113 {% for dep in roles if dep.disable_upgrade_deployment|default(false) %}
114 - {{dep.name}}DeliverUpgradeScriptDeployment
120 max_batch_size: {{role.upgrade_batch_size|default(1)}}
122 max_batch_size: {{role.upgrade_batch_size|default(1)}}
124 servers: {get_param: [servers, {{role.name}}]}
125 config: {get_resource: {{role.name}}UpgradeBatchConfig_Step{{step}}}
128 update_identifier: {get_param: UpdateIdentifier}
132 # Dump the puppet manifests to be apply later when disable_upgrade_deployment
134 {% for role in roles if role.disable_upgrade_deployment|default(false) %}
135 {{role.name}}DeliverPuppetConfig:
136 type: OS::Heat::SoftwareConfig
145 cat > /root/{{role.name}}_puppet_config.pp << ENDOFCAT
149 PUPPET_CLASSES: {get_param: [role_data, {{role.name}}, step_config]}
151 {{role.name}}DeliverPuppetDeployment:
152 type: OS::Heat::SoftwareDeploymentGroup
154 servers: {get_param: [servers, {{role.name}}]}
155 config: {get_resource: {{role.name}}DeliverPuppetConfig}
158 # Upgrade Steps for all roles
159 {%- for step in range(0, upgrade_steps_max) %}
160 # Config resources for step {{step}}
161 {%- for role in roles %}
162 {{role.name}}UpgradeConfig_Step{{step}}:
163 type: OS::TripleO::UpgradeConfig
164 # The UpgradeConfig resources could actually be created without
165 # serialization, but the event output is easier to follow if we
166 # do, and there should be minimal performance hit (creating the
167 # config is cheap compared to the time to apply the deployment).
169 {%- for role_inside in enabled_roles %}
171 - {{role_inside.name}}Upgrade_Step{{step -1}}
173 - {{role_inside.name}}UpgradeBatch_Step{{batch_upgrade_steps_max -1}}
177 UpgradeStepConfig: {get_param: [role_data, {{role.name}}, upgrade_tasks]}
181 # Deployment resources for step {{step}} (only for enabled roles)
182 {%- for role in enabled_roles %}
183 {{role.name}}Upgrade_Step{{step}}:
184 type: OS::Heat::SoftwareDeploymentGroup
186 {%- for role_inside in enabled_roles %}
188 - {{role_inside.name}}Upgrade_Step{{step -1}}
190 - {{role_inside.name}}UpgradeBatch_Step{{batch_upgrade_steps_max -1}}
194 servers: {get_param: [servers, {{role.name}}]}
195 config: {get_resource: {{role.name}}UpgradeConfig_Step{{step}}}
198 update_identifier: {get_param: UpdateIdentifier}
202 # Post upgrade deployment steps for all roles
203 # This runs the normal configuration (e.g puppet) steps unless upgrade
204 # is disabled for the role
205 AllNodesPostUpgradeSteps:
206 type: OS::TripleO::PostUpgradeSteps
208 {%- for dep in enabled_roles %}
209 - {{dep.name}}Upgrade_Step{{upgrade_steps_max - 1}}
212 servers: {get_param: servers}
213 stack_name: {get_param: stack_name}
214 role_data: {get_param: role_data}
215 ctlplane_service_ips: {get_param: ctlplane_service_ips}
218 # Output the config for each role, just use Step1 as the config should be
219 # the same for all steps (only the tag provided differs)
221 description: The per-role upgrade configuration used
223 {% for role in roles %}
224 {{role.name.lower()}}: {get_attr: [{{role.name}}UpgradeConfig_Step1, upgrade_config]}