1 # certain initialization steps (run in a container) will occur
2 # on the first role listed in the roles file
3 {% set primary_role_name = roles[0].name -%}
5 heat_template_version: ocata
8 Post-deploy configuration steps via puppet for all roles,
9 as defined in ../roles_data.yaml
14 description: Mapping of Role name e.g Controller to a list of servers
17 description: Mapping of Role name e.g Controller to the per-role data
22 Setting this to a unique value will re-run any deployment tasks which
23 perform configuration on a Heat stack-update.
26 description: Mapping of service endpoint -> protocol. Typically set
27 via parameter_defaults in the resource registry.
32 {% for role in roles %}
33 # Post deployment steps for all roles
34 # A single config is re-applied with an incrementing step number
35 # {{role.name}} Role steps
36 {{role.name}}ArtifactsConfig:
37 type: ../puppet/deploy-artifacts.yaml
39 {{role.name}}ArtifactsDeploy:
40 type: OS::Heat::StructuredDeploymentGroup
42 servers: {get_param: [servers, {{role.name}}]}
43 config: {get_resource: {{role.name}}ArtifactsConfig}
45 {{role.name}}PreConfig:
46 type: OS::TripleO::Tasks::{{role.name}}PreConfig
48 servers: {get_param: [servers, {{role.name}}]}
50 update_identifier: {get_param: DeployIdentifier}
52 {{role.name}}CreateConfigDir:
53 type: OS::Heat::SoftwareConfig
56 config: {get_file: create-config-dir.sh}
58 {{role.name}}CreateConfigDirDeployment:
59 type: OS::Heat::SoftwareDeploymentGroup
61 servers: {get_param: [servers, {{role.name}}]}
62 config: {get_resource: {{role.name}}CreateConfigDir}
64 # this creates a JSON config file for our docker-puppet.py script
65 {{role.name}}GenPuppetConfig:
66 type: OS::Heat::StructuredConfig
70 /var/lib/docker-puppet/docker-puppet.json:
72 # select only services that have a non-null config_image with
73 # a step_config as well
75 $.data.config_volume.zip($.data.puppet_tags, $.data.step_config, $.data.config_image).where($[3] != null and $[1] != null)
77 config_volume: {get_param: [role_data, {{role.name}}, config_volume]}
78 step_config: {get_param: [role_data, {{role.name}}, step_config]}
79 puppet_tags: {get_param: [role_data, {{role.name}}, puppet_tags]}
80 config_image: {get_param: [role_data, {{role.name}}, config_image]}
82 {{role.name}}GenPuppetDeployment:
83 type: OS::Heat::SoftwareDeploymentGroup
85 servers: {get_param: [servers, {{role.name}}]}
86 config: {get_resource: {{role.name}}GenPuppetConfig}
88 {{role.name}}GenerateConfig:
89 type: OS::Heat::SoftwareConfig
92 config: {get_file: docker-puppet.py}
94 {{role.name}}GenerateConfigDeployment:
95 type: OS::Heat::SoftwareDeploymentGroup
96 depends_on: [{{role.name}}GenPuppetDeployment, {{role.name}}ArtifactsDeploy, {{role.name}}CreateConfigDirDeployment]
98 name: {{role.name}}GenerateConfigDeployment
99 servers: {get_param: [servers, {{role.name}}]}
100 config: {get_resource: {{role.name}}GenerateConfig}
102 {{role.name}}PuppetStepConfig:
103 type: OS::Heat::Value
109 # select 'step_config' only from services that do not have a docker_image
110 $.data.service_names.zip($.data.step_config, $.data.docker_image).where($[2] = null).where($[1] != null).select($[1]).join("\n")
112 service_names: {get_param: [role_data, {{role.name}}, service_names]}
113 step_config: {get_param: [role_data, {{role.name}}, step_config]}
114 docker_image: {get_param: [role_data, {{role.name}}, docker_image]}
116 {{role.name}}DockerConfig:
117 type: OS::Heat::Value
123 # select 'docker_config' only from services that have a docker_image
124 $.data.service_names.zip($.data.docker_config, $.data.docker_image).where($[2] != null).select($[1]).reduce($1.mergeWith($2), {})
126 service_names: {get_param: [role_data, {{role.name}}, service_names]}
127 docker_config: {get_param: [role_data, {{role.name}}, docker_config]}
128 docker_image: {get_param: [role_data, {{role.name}}, docker_image]}
130 {{role.name}}KollaJsonConfig:
131 type: OS::Heat::StructuredConfig
135 {get_param: [role_data, {{role.name}}, kolla_config]}
137 {{role.name}}KollaJsonDeployment:
138 type: OS::Heat::SoftwareDeploymentGroup
140 name: {{role.name}}KollaJsonDeployment
141 config: {get_resource: {{role.name}}KollaJsonConfig}
142 servers: {get_param: [servers, {{role.name}}]}
144 # BEGIN BAREMETAL CONFIG STEPS
146 {% if role.name == 'Controller' %}
148 type: OS::TripleO::Tasks::ControllerPrePuppet
150 servers: {get_param: [servers, Controller]}
152 update_identifier: {get_param: DeployIdentifier}
156 type: OS::TripleO::{{role.name}}Config
158 StepConfig: {get_attr: [{{role.name}}PuppetStepConfig, value]}
160 {% for step in range(1, 6) %}
162 {{role.name}}Deployment_Step{{step}}:
163 type: OS::Heat::StructuredDeploymentGroup
165 depends_on: [{{role.name}}PreConfig, {{role.name}}ArtifactsDeploy]
168 {% for dep in roles %}
169 - {{dep.name}}Deployment_Step{{step -1}}
170 - {{dep.name}}ContainersDeployment_Step{{step -1}}
174 name: {{role.name}}Deployment_Step{{step}}
175 servers: {get_param: [servers, {{role.name}}]}
176 config: {get_resource: {{role.name}}Config}
179 update_identifier: {get_param: DeployIdentifier}
182 # END BAREMETAL CONFIG STEPS
184 # BEGIN CONTAINER CONFIG STEPS
185 {% for step in range(1, 6) %}
187 {{role.name}}ContainersConfig_Step{{step}}:
188 type: OS::Heat::StructuredConfig
192 {get_attr: [{{role.name}}DockerConfig, value, step_{{step}}]}
194 {{role.name}}ContainersDeployment_Step{{step}}:
195 type: OS::Heat::StructuredDeploymentGroup
198 - {{role.name}}PreConfig
199 - {{role.name}}KollaJsonDeployment
200 - {{role.name}}GenPuppetDeployment
201 - {{role.name}}GenerateConfigDeployment
204 {% for dep in roles %}
205 - {{dep.name}}ContainersDeployment_Step{{step -1}}
206 - {{dep.name}}Deployment_Step{{step}} # baremetal steps of the same level run first
207 - {{dep.name}}Deployment_Step{{step -1}}
211 name: {{role.name}}ContainersDeployment_Step{{step}}
212 servers: {get_param: [servers, {{role.name}}]}
213 config: {get_resource: {{role.name}}ContainersConfig_Step{{step}}}
216 # END CONTAINER CONFIG STEPS
218 {{role.name}}PostConfig:
219 type: OS::TripleO::Tasks::{{role.name}}PostConfig
221 {% for dep in roles %}
222 - {{dep.name}}Deployment_Step5
225 servers: {get_param: servers}
227 update_identifier: {get_param: DeployIdentifier}
229 # Note, this should come last, so use depends_on to ensure
230 # this is created after any other resources.
231 {{role.name}}ExtraConfigPost:
233 {% for dep in roles %}
234 - {{dep.name}}PostConfig
236 type: OS::TripleO::NodeExtraConfigPost
238 servers: {get_param: [servers, {{role.name}}]}
240 {% if role.name == 'Controller' %}
241 ControllerPostPuppet:
243 - ControllerExtraConfigPost
244 type: OS::TripleO::Tasks::ControllerPostPuppet
246 servers: {get_param: [servers, Controller]}
248 update_identifier: {get_param: DeployIdentifier}