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'
14 description: Mapping of Role name e.g Controller to the per-role data
19 Setting to a previously unused value during stack-update will trigger
20 the Upgrade resources to re-run on all roles.
23 description: Mapping of service endpoint -> protocol. Typically set
24 via parameter_defaults in the resource registry.
29 description: Keystone region for endpoint
31 description: The password for the nova service and db account, used by nova-api.
37 {% for role in roles if role.disable_upgrade_deployment|default(false) %}
38 {{role.name}}DeliverUpgradeScriptConfig:
39 type: OS::Heat::SoftwareConfig
51 ROLE_NAME: {{role.name}}
52 - get_file: ../extraconfig/tasks/pacemaker_common_functions.sh
53 - get_file: ../extraconfig/tasks/run_puppet.sh
54 - get_file: ../extraconfig/tasks/tripleo_upgrade_node.sh
56 {{role.name}}DeliverUpgradeScriptDeployment:
57 type: OS::Heat::SoftwareDeploymentGroup
59 servers: {get_param: [servers, {{role.name}}]}
60 config: {get_resource: {{role.name}}DeliverUpgradeScriptConfig}
63 # Upgrade Steps for all roles, batched updates
64 # The UpgradeConfig resources could actually be created without
65 # serialization, but the event output is easier to follow if we
66 # do, and there should be minimal performance hit (creating the
67 # config is cheap compared to the time to apply the deployment).
68 {% for step in range(0, batch_upgrade_steps_max) %}
69 # Batch config resources step {{step}}
70 {%- for role in roles %}
71 {{role.name}}UpgradeBatchConfig_Step{{step}}:
72 type: OS::TripleO::UpgradeConfig
75 {%- for role_inside in enabled_roles %}
76 - {{role_inside.name}}UpgradeBatch_Step{{step -1}}
79 {% for role in roles if role.disable_upgrade_deployment|default(false) %}
80 {% if deliver_script.update({'deliver': True}) %} {% endif %}
82 {% if deliver_script.deliver %}
84 {% for dep in roles if dep.disable_upgrade_deployment|default(false) %}
85 - {{dep.name}}DeliverUpgradeScriptDeployment
90 UpgradeStepConfig: {get_param: [role_data, {{role.name}}, upgrade_batch_tasks]}
94 # Batch deployment resources for step {{step}} (only for enabled roles)
95 {%- for role in enabled_roles %}
96 {{role.name}}UpgradeBatch_Step{{step}}:
97 type: OS::Heat::SoftwareDeploymentGroup
100 {%- for role_inside in enabled_roles %}
101 - {{role_inside.name}}UpgradeBatch_Step{{step -1}}
104 {% for role in roles if role.disable_upgrade_deployment|default(false) %}
105 {% if deliver_script.update({'deliver': True}) %} {% endif %}
107 {% if deliver_script.deliver %}
109 {% for dep in roles if dep.disable_upgrade_deployment|default(false) %}
110 - {{dep.name}}DeliverUpgradeScriptDeployment
116 max_batch_size: {{role.upgrade_batch_size|default(1)}}
118 max_batch_size: {{role.upgrade_batch_size|default(1)}}
120 servers: {get_param: [servers, {{role.name}}]}
121 config: {get_resource: {{role.name}}UpgradeBatchConfig_Step{{step}}}
124 update_identifier: {get_param: UpdateIdentifier}
128 # Dump the puppet manifests to be apply later when disable_upgrade_deployment
130 {% for role in roles if role.disable_upgrade_deployment|default(false) %}
131 {{role.name}}DeliverPuppetConfig:
132 type: OS::Heat::SoftwareConfig
141 cat > /root/{{role.name}}_puppet_config.pp << ENDOFCAT
145 PUPPET_CLASSES: {get_param: [role_data, {{role.name}}, step_config]}
147 {{role.name}}DeliverPuppetDeployment:
148 type: OS::Heat::SoftwareDeploymentGroup
150 servers: {get_param: [servers, {{role.name}}]}
151 config: {get_resource: {{role.name}}DeliverPuppetConfig}
154 # Upgrade Steps for all roles
155 {%- for step in range(0, upgrade_steps_max) %}
156 # Config resources for step {{step}}
157 {%- for role in roles %}
158 {{role.name}}UpgradeConfig_Step{{step}}:
159 type: OS::TripleO::UpgradeConfig
160 # The UpgradeConfig resources could actually be created without
161 # serialization, but the event output is easier to follow if we
162 # do, and there should be minimal performance hit (creating the
163 # config is cheap compared to the time to apply the deployment).
165 {%- for role_inside in enabled_roles %}
167 - {{role_inside.name}}Upgrade_Step{{step -1}}
169 - {{role_inside.name}}UpgradeBatch_Step{{batch_upgrade_steps_max -1}}
173 UpgradeStepConfig: {get_param: [role_data, {{role.name}}, upgrade_tasks]}
177 # Deployment resources for step {{step}} (only for enabled roles)
178 {%- for role in enabled_roles %}
179 {{role.name}}Upgrade_Step{{step}}:
180 type: OS::Heat::SoftwareDeploymentGroup
182 {%- for role_inside in enabled_roles %}
184 - {{role_inside.name}}Upgrade_Step{{step -1}}
186 - {{role_inside.name}}UpgradeBatch_Step{{batch_upgrade_steps_max -1}}
190 servers: {get_param: [servers, {{role.name}}]}
191 config: {get_resource: {{role.name}}UpgradeConfig_Step{{step}}}
194 update_identifier: {get_param: UpdateIdentifier}
198 # Post upgrade deployment steps for all roles
199 # This runs the normal configuration (e.g puppet) steps unless upgrade
200 # is disabled for the role
201 AllNodesPostUpgradeSteps:
202 type: OS::TripleO::PostUpgradeSteps
204 {%- for dep in enabled_roles %}
205 - {{dep.name}}Upgrade_Step{{upgrade_steps_max - 1}}
208 servers: {get_param: servers}
209 role_data: {get_param: role_data}
212 # Output the config for each role, just use Step1 as the config should be
213 # the same for all steps (only the tag provided differs)
215 description: The per-role upgrade configuration used
217 {% for role in roles %}
218 {{role.name.lower()}}: {get_attr: [{{role.name}}UpgradeConfig_Step1, upgrade_config]}