Change flat network name for nosdn fdio scenario
[apex-tripleo-heat-templates.git] / common / major_upgrade_steps.j2.yaml
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'
7
8 parameters:
9   servers:
10     type: json
11   stack_name:
12     type: string
13     description: Name of the topmost stack
14   role_data:
15     type: json
16     description: Mapping of Role name e.g Controller to the per-role data
17   ctlplane_service_ips:
18     type: json
19   UpdateIdentifier:
20     type: string
21     default: ''
22     description: >
23       Setting to a previously unused value during stack-update will trigger
24       the Upgrade resources to re-run on all roles.
25   EndpointMap:
26     default: {}
27     description: Mapping of service endpoint -> protocol. Typically set
28                  via parameter_defaults in the resource registry.
29     type: json
30   KeystoneRegion:
31     type: string
32     default: 'regionOne'
33     description: Keystone region for endpoint
34   NovaPassword:
35     description: The password for the nova service and db account
36     type: string
37     hidden: true
38
39 resources:
40
41 {% for role in roles if role.disable_upgrade_deployment|default(false) %}
42   {{role.name}}DeliverUpgradeScriptConfig:
43     type: OS::Heat::SoftwareConfig
44     properties:
45       group: script
46       config:
47         list_join:
48         - ''
49         - - "#!/bin/bash\n\n"
50           - "set -eu\n\n"
51           - str_replace:
52               template: |
53                 ROLE='ROLE_NAME'
54               params:
55                 ROLE_NAME: {{role.name}}
56           - get_file: ../extraconfig/tasks/pacemaker_common_functions.sh
57           - get_file: ../extraconfig/tasks/tripleo_upgrade_node.sh
58
59   {{role.name}}DeliverUpgradeScriptDeployment:
60     type: OS::Heat::SoftwareDeploymentGroup
61     properties:
62       servers:  {get_param: [servers, {{role.name}}]}
63       config: {get_resource: {{role.name}}DeliverUpgradeScriptConfig}
64 {% endfor %}
65
66 # Upgrade Steps for all roles, batched updates
67 # The UpgradeConfig resources could actually be created without
68 # serialization, but the event output is easier to follow if we
69 # do, and there should be minimal performance hit (creating the
70 # config is cheap compared to the time to apply the deployment).
71 {% for step in range(0, batch_upgrade_steps_max) %}
72   # Batch config resources step {{step}}
73   {%- for role in roles %}
74   {{role.name}}UpgradeBatchConfig_Step{{step}}:
75     type: OS::TripleO::UpgradeConfig
76     {%- if step > 0 %}
77     depends_on:
78       {%- for role_inside in enabled_roles %}
79       - {{role_inside.name}}UpgradeBatch_Step{{step -1}}
80       {%- endfor %}
81     {% else %}
82     {% for role in roles if role.disable_upgrade_deployment|default(false) %}
83       {% if deliver_script.update({'deliver': True}) %} {% endif %}
84     {% endfor %}
85     {% if deliver_script.deliver %}
86     depends_on:
87       {% for dep in roles if dep.disable_upgrade_deployment|default(false) %}
88       - {{dep.name}}DeliverUpgradeScriptDeployment
89       {% endfor %}
90     {% endif %}
91     {% endif %}
92     properties:
93       UpgradeStepConfig: {get_param: [role_data, {{role.name}}, upgrade_batch_tasks]}
94       step: {{step}}
95   {%- endfor %}
96
97   # Batch deployment resources for step {{step}} (only for enabled roles)
98   {%- for role in enabled_roles %}
99   {{role.name}}UpgradeBatch_Step{{step}}:
100     type: OS::Heat::SoftwareDeploymentGroup
101     {%- if step > 0 %}
102     depends_on:
103       {%- for role_inside in enabled_roles %}
104       - {{role_inside.name}}UpgradeBatch_Step{{step -1}}
105       {%- endfor %}
106     {% else %}
107     {% for role in roles if role.disable_upgrade_deployment|default(false) %}
108       {% if deliver_script.update({'deliver': True}) %} {% endif %}
109     {% endfor %}
110     {% if deliver_script.deliver %}
111     depends_on:
112       {% for dep in roles if dep.disable_upgrade_deployment|default(false) %}
113       - {{dep.name}}DeliverUpgradeScriptDeployment
114       {% endfor %}
115     {% endif %}
116     {% endif %}
117     update_policy:
118       batch_create:
119         max_batch_size: {{role.upgrade_batch_size|default(1)}}
120       rolling_update:
121         max_batch_size: {{role.upgrade_batch_size|default(1)}}
122     properties:
123       servers: {get_param: [servers, {{role.name}}]}
124       config: {get_resource: {{role.name}}UpgradeBatchConfig_Step{{step}}}
125       input_values:
126         role: {{role.name}}
127         update_identifier: {get_param: UpdateIdentifier}
128   {%- endfor %}
129 {%- endfor %}
130
131 # Upgrade Steps for all roles
132 {%- for step in range(0, upgrade_steps_max) %}
133   # Config resources for step {{step}}
134   {%- for role in roles %}
135   {{role.name}}UpgradeConfig_Step{{step}}:
136     type: OS::TripleO::UpgradeConfig
137     # The UpgradeConfig resources could actually be created without
138     # serialization, but the event output is easier to follow if we
139     # do, and there should be minimal performance hit (creating the
140     # config is cheap compared to the time to apply the deployment).
141     depends_on:
142       {%- for role_inside in enabled_roles %}
143       {%- if step > 0 %}
144       - {{role_inside.name}}Upgrade_Step{{step -1}}
145       {%- else %}
146       - {{role_inside.name}}UpgradeBatch_Step{{batch_upgrade_steps_max -1}}
147       {%- endif %}
148       {%- endfor %}
149     properties:
150       UpgradeStepConfig: {get_param: [role_data, {{role.name}}, upgrade_tasks]}
151       step: {{step}}
152   {%- endfor %}
153
154   # Deployment resources for step {{step}} (only for enabled roles)
155   {%- for role in enabled_roles %}
156   {{role.name}}Upgrade_Step{{step}}:
157     type: OS::Heat::SoftwareDeploymentGroup
158     depends_on:
159       {%- for role_inside in enabled_roles %}
160       {%- if step > 0 %}
161       - {{role_inside.name}}Upgrade_Step{{step -1}}
162       {%- else %}
163       - {{role_inside.name}}UpgradeBatch_Step{{batch_upgrade_steps_max -1}}
164       {%- endif %}
165       {%- endfor %}
166     properties:
167       servers: {get_param: [servers, {{role.name}}]}
168       config: {get_resource: {{role.name}}UpgradeConfig_Step{{step}}}
169       input_values:
170         role: {{role.name}}
171         update_identifier: {get_param: UpdateIdentifier}
172   {%- endfor %}
173 {%- endfor %}
174
175   # Post upgrade deployment steps for all roles
176   # This runs the normal configuration (e.g puppet) steps unless upgrade
177   # is disabled for the role
178   AllNodesPostUpgradeSteps:
179     type: OS::TripleO::PostUpgradeSteps
180     depends_on:
181 {%- for dep in enabled_roles %}
182       - {{dep.name}}Upgrade_Step{{upgrade_steps_max - 1}}
183 {%- endfor %}
184     properties:
185       servers: {get_param: servers}
186       stack_name: {get_param: stack_name}
187       role_data: {get_param: role_data}
188       ctlplane_service_ips: {get_param: ctlplane_service_ips}
189
190 {%- for step in range(0, upgrade_steps_max) %}
191   {%- for role in roles %}
192   {{role.name}}PostUpgradeConfig_Config{{step}}:
193     type: OS::TripleO::UpgradeConfig
194     depends_on:
195       {%- for role_inside in enabled_roles %}
196       {%- if step > 0 %}
197       - {{role_inside.name}}PostUpgradeConfig_Deployment{{step -1}}
198       {%- else %}
199       - AllNodesPostUpgradeSteps
200       {%- endif %}
201       {%- endfor %}
202     properties:
203       UpgradeStepConfig: {get_param: [role_data, {{role.name}}, post_upgrade_tasks]}
204       step: {{step}}
205   {%- endfor %}
206
207   {%- for role in enabled_roles %}
208   {{role.name}}PostUpgradeConfig_Deployment{{step}}:
209     type: OS::Heat::SoftwareDeploymentGroup
210     depends_on:
211       {%- for role_inside in enabled_roles %}
212       {%- if step > 0 %}
213       - {{role_inside.name}}PostUpgradeConfig_Deployment{{step -1}}
214       {%- else %}
215       - AllNodesPostUpgradeSteps
216       {%- endif %}
217       {%- endfor %}
218     properties:
219       servers: {get_param: [servers, {{role.name}}]}
220       config: {get_resource: {{role.name}}PostUpgradeConfig_Config{{step}}}
221       input_values:
222         role: {{role.name}}
223         update_identifier: {get_param: UpdateIdentifier}
224   {%- endfor %}
225 {%- endfor %}
226
227 outputs:
228   # Output the config for each role, just use Step1 as the config should be
229   # the same for all steps (only the tag provided differs)
230   upgrade_configs:
231     description: The per-role upgrade configuration used
232     value:
233 {% for role in roles %}
234       {{role.name.lower()}}: {get_attr: [{{role.name}}UpgradeConfig_Step1, upgrade_config]}
235 {% endfor %}
236   RoleConfig:
237     description: Mapping of config data for all roles
238     value: {get_attr: [AllNodesPostUpgradeSteps, RoleConfig]}
239