Disable batch upgrade deployments for disabled roles
[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 heat_template_version: ocata
5 description: 'Upgrade steps for all roles'
6
7 parameters:
8   servers:
9     type: json
10
11   role_data:
12     type: json
13     description: Mapping of Role name e.g Controller to the per-role data
14
15   UpdateIdentifier:
16     type: string
17     description: >
18       Setting to a previously unused value during stack-update will trigger
19       the Upgrade resources to re-run on all roles.
20
21 conditions:
22   # Conditions to disable any steps where the task list is empty
23 {%- for role in roles %}
24   {{role.name}}UpgradeBatchConfigEnabled:
25     not:
26       equals:
27         - {get_param: [role_data, {{role.name}}, upgrade_batch_tasks]}
28         - []
29   {{role.name}}UpgradeConfigEnabled:
30     not:
31       equals:
32         - {get_param: [role_data, {{role.name}}, upgrade_tasks]}
33         - []
34 {%- endfor %}
35
36 resources:
37
38 # Upgrade Steps for all roles, batched updates
39 # The UpgradeConfig resources could actually be created without
40 # serialization, but the event output is easier to follow if we
41 # do, and there should be minimal performance hit (creating the
42 # config is cheap compared to the time to apply the deployment).
43 {% for step in range(0, batch_upgrade_steps_max) %}
44   # Batch config resources step {{step}}
45   {%- for role in roles %}
46   {{role.name}}UpgradeBatchConfig_Step{{step}}:
47     type: OS::TripleO::UpgradeConfig
48   {%- if step > 0 %}
49     depends_on:
50       {%- for dep in enabled_roles %}
51       - {{dep.name}}UpgradeBatch_Step{{step -1}}
52       {%- endfor %}
53   {%- endif %}
54     properties:
55       UpgradeStepConfig: {get_param: [role_data, {{role.name}}, upgrade_batch_tasks]}
56       step: {{step}}
57   {%- endfor %}
58
59   # Batch deployment resources for step {{step}} (only for enabled roles)
60   {%- for role in enabled_roles %}
61   {{role.name}}UpgradeBatch_Step{{step}}:
62     type: OS::Heat::SoftwareDeploymentGroup
63     condition: {{role.name}}UpgradeBatchConfigEnabled
64   {%- if step > 0 %}
65     depends_on:
66       {%- for dep in enabled_roles %}
67       - {{dep.name}}UpgradeBatch_Step{{step -1}}
68       {%- endfor %}
69   {%- endif %}
70     update_policy:
71       batch_create:
72         max_batch_size: {{role.upgrade_batch_size|default(1)}}
73       rolling_update:
74         max_batch_size: {{role.upgrade_batch_size|default(1)}}
75     properties:
76       name: {{role.name}}UpgradeBatch_Step{{step}}
77       servers: {get_param: [servers, {{role.name}}]}
78       config: {get_resource: {{role.name}}UpgradeBatchConfig_Step{{step}}}
79       input_values:
80         role: {{role.name}}
81         update_identifier: {get_param: UpdateIdentifier}
82   {%- endfor %}
83 {%- endfor %}
84
85 # Upgrade Steps for all roles
86 {%- for step in range(0, upgrade_steps_max) %}
87   # Config resources for step {{step}}
88   {%- for role in roles %}
89   {{role.name}}UpgradeConfig_Step{{step}}:
90     type: OS::TripleO::UpgradeConfig
91   # The UpgradeConfig resources could actually be created without
92   # serialization, but the event output is easier to follow if we
93   # do, and there should be minimal performance hit (creating the
94   # config is cheap compared to the time to apply the deployment).
95     depends_on:
96   {%- if step > 0 %}
97       {%- for dep in enabled_roles %}
98       - {{dep.name}}Upgrade_Step{{step -1}}
99       {%- endfor %}
100   {%- else %}
101       {%- for dep in enabled_roles %}
102       - {{dep.name}}UpgradeBatch_Step{{batch_upgrade_steps_max -1}}
103       {%- endfor %}
104   {%- endif %}
105     properties:
106       UpgradeStepConfig: {get_param: [role_data, {{role.name}}, upgrade_tasks]}
107       step: {{step}}
108   {%- endfor %}
109
110   # Deployment resources for step {{step}} (only for enabled roles)
111   {%- for role in enabled_roles %}
112   {{role.name}}Upgrade_Step{{step}}:
113     type: OS::Heat::SoftwareDeploymentGroup
114     condition: {{role.name}}UpgradeConfigEnabled
115     depends_on:
116   {%- if step > 0 %}
117       {%- for dep in enabled_roles %}
118       - {{dep.name}}Upgrade_Step{{step -1}}
119       {%- endfor %}
120   {%- else %}
121       {%- for dep in enabled_roles %}
122       - {{dep.name}}UpgradeBatch_Step{{batch_upgrade_steps_max -1}}
123       {%- endfor %}
124   {%- endif %}
125     properties:
126       name: {{role.name}}Upgrade_Step{{step}}
127       servers: {get_param: [servers, {{role.name}}]}
128       config: {get_resource: {{role.name}}UpgradeConfig_Step{{step}}}
129       input_values:
130         role: {{role.name}}
131         update_identifier: {get_param: UpdateIdentifier}
132   {%- endfor %}
133 {%- endfor %}
134
135   # Post upgrade deployment steps for all roles
136   # This runs the normal configuration (e.g puppet) steps unless upgrade
137   # is disabled for the role
138   AllNodesPostUpgradeSteps:
139     type: OS::TripleO::PostUpgradeSteps
140     depends_on:
141 {%- for dep in enabled_roles %}
142       - {{dep.name}}Upgrade_Step{{upgrade_steps_max - 1}}
143 {%- endfor %}
144     properties:
145       servers: {get_param: servers}
146       role_data: {get_param: role_data}
147
148 outputs:
149   # Output the config for each role, just use Step1 as the config should be
150   # the same for all steps (only the tag provided differs)
151   upgrade_configs:
152     description: The per-role upgrade configuration used
153     value:
154 {% for role in roles %}
155       {{role.name.lower()}}: {get_attr: [{{role.name}}UpgradeConfig_Step1, upgrade_config]}
156 {% endfor %}
157