Pacemaker HA suport for OVN DB servers
[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
12   role_data:
13     type: json
14     description: Mapping of Role name e.g Controller to the per-role data
15
16   UpdateIdentifier:
17     type: string
18     description: >
19       Setting to a previously unused value during stack-update will trigger
20       the Upgrade resources to re-run on all roles.
21   EndpointMap:
22     default: {}
23     description: Mapping of service endpoint -> protocol. Typically set
24                  via parameter_defaults in the resource registry.
25     type: json
26   KeystoneRegion:
27     type: string
28     default: 'regionOne'
29     description: Keystone region for endpoint
30   NovaPassword:
31     description: The password for the nova service and db account, used by nova-api.
32     type: string
33     hidden: true
34
35 resources:
36
37 {% for role in roles if role.disable_upgrade_deployment|default(false) %}
38   {{role.name}}DeliverUpgradeScriptConfig:
39     type: OS::Heat::SoftwareConfig
40     properties:
41       group: script
42       config:
43         list_join:
44         - ''
45         - - "#!/bin/bash\n\n"
46           - "set -eu\n\n"
47           - str_replace:
48               template: |
49                 ROLE='ROLE_NAME'
50               params:
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
55
56   {{role.name}}DeliverUpgradeScriptDeployment:
57     type: OS::Heat::SoftwareDeploymentGroup
58     properties:
59       servers:  {get_param: [servers, {{role.name}}]}
60       config: {get_resource: {{role.name}}DeliverUpgradeScriptConfig}
61 {% endfor %}
62
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
73     {%- if step > 0 %}
74     depends_on:
75       {%- for role_inside in enabled_roles %}
76       - {{role_inside.name}}UpgradeBatch_Step{{step -1}}
77       {%- endfor %}
78     {% else %}
79     {% for role in roles if role.disable_upgrade_deployment|default(false) %}
80       {% if deliver_script.update({'deliver': True}) %} {% endif %}
81     {% endfor %}
82     {% if deliver_script.deliver %}
83     depends_on:
84       {% for dep in roles if dep.disable_upgrade_deployment|default(false) %}
85       - {{dep.name}}DeliverUpgradeScriptDeployment
86       {% endfor %}
87     {% endif %}
88     {% endif %}
89     properties:
90       UpgradeStepConfig: {get_param: [role_data, {{role.name}}, upgrade_batch_tasks]}
91       step: {{step}}
92   {%- endfor %}
93
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
98     {%- if step > 0 %}
99     depends_on:
100       {%- for role_inside in enabled_roles %}
101       - {{role_inside.name}}UpgradeBatch_Step{{step -1}}
102       {%- endfor %}
103     {% else %}
104     {% for role in roles if role.disable_upgrade_deployment|default(false) %}
105       {% if deliver_script.update({'deliver': True}) %} {% endif %}
106     {% endfor %}
107     {% if deliver_script.deliver %}
108     depends_on:
109       {% for dep in roles if dep.disable_upgrade_deployment|default(false) %}
110       - {{dep.name}}DeliverUpgradeScriptDeployment
111       {% endfor %}
112     {% endif %}
113     {% endif %}
114     update_policy:
115       batch_create:
116         max_batch_size: {{role.upgrade_batch_size|default(1)}}
117       rolling_update:
118         max_batch_size: {{role.upgrade_batch_size|default(1)}}
119     properties:
120       servers: {get_param: [servers, {{role.name}}]}
121       config: {get_resource: {{role.name}}UpgradeBatchConfig_Step{{step}}}
122       input_values:
123         role: {{role.name}}
124         update_identifier: {get_param: UpdateIdentifier}
125   {%- endfor %}
126 {%- endfor %}
127
128 # Dump the puppet manifests to be apply later when disable_upgrade_deployment
129 # is to true
130 {% for role in roles  if role.disable_upgrade_deployment|default(false) %}
131   {{role.name}}DeliverPuppetConfig:
132     type: OS::Heat::SoftwareConfig
133     properties:
134       group: script
135       config:
136         list_join:
137         - ''
138         - - str_replace:
139               template: |
140                 #!/bin/bash
141                 cat > /root/{{role.name}}_puppet_config.pp << ENDOFCAT
142                 PUPPET_CLASSES
143                 ENDOFCAT
144               params:
145                 PUPPET_CLASSES: {get_param: [role_data, {{role.name}}, step_config]}
146
147   {{role.name}}DeliverPuppetDeployment:
148     type: OS::Heat::SoftwareDeploymentGroup
149     properties:
150       servers:  {get_param: [servers, {{role.name}}]}
151       config: {get_resource: {{role.name}}DeliverPuppetConfig}
152 {% endfor %}
153
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).
164     depends_on:
165       {%- for role_inside in enabled_roles %}
166       {%- if step > 0 %}
167       - {{role_inside.name}}Upgrade_Step{{step -1}}
168       {%- else %}
169       - {{role_inside.name}}UpgradeBatch_Step{{batch_upgrade_steps_max -1}}
170       {%- endif %}
171       {%- endfor %}
172     properties:
173       UpgradeStepConfig: {get_param: [role_data, {{role.name}}, upgrade_tasks]}
174       step: {{step}}
175   {%- endfor %}
176
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
181     depends_on:
182       {%- for role_inside in enabled_roles %}
183       {%- if step > 0 %}
184       - {{role_inside.name}}Upgrade_Step{{step -1}}
185       {%- else %}
186       - {{role_inside.name}}UpgradeBatch_Step{{batch_upgrade_steps_max -1}}
187       {%- endif %}
188       {%- endfor %}
189     properties:
190       servers: {get_param: [servers, {{role.name}}]}
191       config: {get_resource: {{role.name}}UpgradeConfig_Step{{step}}}
192       input_values:
193         role: {{role.name}}
194         update_identifier: {get_param: UpdateIdentifier}
195   {%- endfor %}
196 {%- endfor %}
197
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
203     depends_on:
204 {%- for dep in enabled_roles %}
205       - {{dep.name}}Upgrade_Step{{upgrade_steps_max - 1}}
206 {%- endfor %}
207     properties:
208       servers: {get_param: servers}
209       role_data: {get_param: role_data}
210
211 outputs:
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)
214   upgrade_configs:
215     description: The per-role upgrade configuration used
216     value:
217 {% for role in roles %}
218       {{role.name.lower()}}: {get_attr: [{{role.name}}UpgradeConfig_Step1, upgrade_config]}
219 {% endfor %}