Merge "Changing the default port-binding configuration"
[apex-tripleo-heat-templates.git] / puppet / 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/run_puppet.sh
58           - get_file: ../extraconfig/tasks/tripleo_upgrade_node.sh
59
60   {{role.name}}DeliverUpgradeScriptDeployment:
61     type: OS::Heat::SoftwareDeploymentGroup
62     properties:
63       servers:  {get_param: [servers, {{role.name}}]}
64       config: {get_resource: {{role.name}}DeliverUpgradeScriptConfig}
65 {% endfor %}
66
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
77     {%- if step > 0 %}
78     depends_on:
79       {%- for role_inside in enabled_roles %}
80       - {{role_inside.name}}UpgradeBatch_Step{{step -1}}
81       {%- endfor %}
82     {% else %}
83     {% for role in roles if role.disable_upgrade_deployment|default(false) %}
84       {% if deliver_script.update({'deliver': True}) %} {% endif %}
85     {% endfor %}
86     {% if deliver_script.deliver %}
87     depends_on:
88       {% for dep in roles if dep.disable_upgrade_deployment|default(false) %}
89       - {{dep.name}}DeliverUpgradeScriptDeployment
90       {% endfor %}
91     {% endif %}
92     {% endif %}
93     properties:
94       UpgradeStepConfig: {get_param: [role_data, {{role.name}}, upgrade_batch_tasks]}
95       step: {{step}}
96   {%- endfor %}
97
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
102     {%- if step > 0 %}
103     depends_on:
104       {%- for role_inside in enabled_roles %}
105       - {{role_inside.name}}UpgradeBatch_Step{{step -1}}
106       {%- endfor %}
107     {% else %}
108     {% for role in roles if role.disable_upgrade_deployment|default(false) %}
109       {% if deliver_script.update({'deliver': True}) %} {% endif %}
110     {% endfor %}
111     {% if deliver_script.deliver %}
112     depends_on:
113       {% for dep in roles if dep.disable_upgrade_deployment|default(false) %}
114       - {{dep.name}}DeliverUpgradeScriptDeployment
115       {% endfor %}
116     {% endif %}
117     {% endif %}
118     update_policy:
119       batch_create:
120         max_batch_size: {{role.upgrade_batch_size|default(1)}}
121       rolling_update:
122         max_batch_size: {{role.upgrade_batch_size|default(1)}}
123     properties:
124       servers: {get_param: [servers, {{role.name}}]}
125       config: {get_resource: {{role.name}}UpgradeBatchConfig_Step{{step}}}
126       input_values:
127         role: {{role.name}}
128         update_identifier: {get_param: UpdateIdentifier}
129   {%- endfor %}
130 {%- endfor %}
131
132 # Dump the puppet manifests to be apply later when disable_upgrade_deployment
133 # is to true
134 {% for role in roles  if role.disable_upgrade_deployment|default(false) %}
135   {{role.name}}DeliverPuppetConfig:
136     type: OS::Heat::SoftwareConfig
137     properties:
138       group: script
139       config:
140         list_join:
141         - ''
142         - - str_replace:
143               template: |
144                 #!/bin/bash
145                 cat > /root/{{role.name}}_puppet_config.pp << ENDOFCAT
146                 PUPPET_CLASSES
147                 ENDOFCAT
148               params:
149                 PUPPET_CLASSES: {get_param: [role_data, {{role.name}}, step_config]}
150
151   {{role.name}}DeliverPuppetDeployment:
152     type: OS::Heat::SoftwareDeploymentGroup
153     properties:
154       servers:  {get_param: [servers, {{role.name}}]}
155       config: {get_resource: {{role.name}}DeliverPuppetConfig}
156 {% endfor %}
157
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).
168     depends_on:
169       {%- for role_inside in enabled_roles %}
170       {%- if step > 0 %}
171       - {{role_inside.name}}Upgrade_Step{{step -1}}
172       {%- else %}
173       - {{role_inside.name}}UpgradeBatch_Step{{batch_upgrade_steps_max -1}}
174       {%- endif %}
175       {%- endfor %}
176     properties:
177       UpgradeStepConfig: {get_param: [role_data, {{role.name}}, upgrade_tasks]}
178       step: {{step}}
179   {%- endfor %}
180
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
185     depends_on:
186       {%- for role_inside in enabled_roles %}
187       {%- if step > 0 %}
188       - {{role_inside.name}}Upgrade_Step{{step -1}}
189       {%- else %}
190       - {{role_inside.name}}UpgradeBatch_Step{{batch_upgrade_steps_max -1}}
191       {%- endif %}
192       {%- endfor %}
193     properties:
194       servers: {get_param: [servers, {{role.name}}]}
195       config: {get_resource: {{role.name}}UpgradeConfig_Step{{step}}}
196       input_values:
197         role: {{role.name}}
198         update_identifier: {get_param: UpdateIdentifier}
199   {%- endfor %}
200 {%- endfor %}
201
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
207     depends_on:
208 {%- for dep in enabled_roles %}
209       - {{dep.name}}Upgrade_Step{{upgrade_steps_max - 1}}
210 {%- endfor %}
211     properties:
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}
216
217 outputs:
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)
220   upgrade_configs:
221     description: The per-role upgrade configuration used
222     value:
223 {% for role in roles %}
224       {{role.name.lower()}}: {get_attr: [{{role.name}}UpgradeConfig_Step1, upgrade_config]}
225 {% endfor %}