1 heat_template_version: 2016-10-14
2 description: 'OpenStack {{role}} node configured by Puppet'
4 Overcloud{{role}}Flavor:
5 description: Flavor for the {{role}} node.
8 {% if disable_constraints is not defined %}
10 - custom_constraint: nova.flavor
14 default: overcloud-full
15 {% if disable_constraints is not defined %}
17 - custom_constraint: glance.image
20 default: 'REBUILD_PRESERVE_EPHEMERAL'
21 description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
24 description: Name of an existing Nova key pair to enable SSH access to the instances
27 {% if disable_constraints is not defined %}
29 - custom_constraint: nova.keypair
31 NeutronPublicInterface:
33 description: What interface to bridge onto br-ex for network nodes.
37 description: Mapping of service_name -> network name. Typically set
38 via parameter_defaults in the resource registry.
42 description: Mapping of service endpoint -> protocol. Typically set
43 via parameter_defaults in the resource registry.
49 Setting to a previously unused value during stack-update will trigger
50 package update on all nodes
53 default: '' # Defaults to Heat created hostname
57 description: Optional mapping to override hostnames
61 Additional hiera configuration to inject into the cluster. Note
62 that {{role}}ExtraConfig takes precedence over ExtraConfig.
67 Role specific additional hiera configuration to inject into the cluster.
72 NetworkDeploymentActions:
73 type: comma_delimited_list
75 Heat action when to apply network configuration changes
77 SoftwareConfigTransport:
78 default: POLL_SERVER_CFN
80 How the server should receive the metadata required for software configuration.
83 - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
85 default: 'localdomain'
88 The DNS domain used for the hosts. This should match the dhcp_domain
89 configured in the Undercloud neutron. Defaults to localdomain.
90 {{role}}ServerMetadata:
93 Extra properties or metadata passed to Nova for the created nodes in
94 the overcloud. It's accessible via the Nova metadata API. This option is
95 role-specific and is merged with the values given to the ServerMetadata
101 Extra properties or metadata passed to Nova for the created nodes in
102 the overcloud. It's accessible via the Nova metadata API. This applies to
103 all roles and is merged with a role-specific metadata parameter.
105 {{role}}SchedulerHints:
107 description: Optional scheduler hints to pass to nova
112 ServiceConfigSettings:
116 type: comma_delimited_list
118 MonitoringSubscriptions:
119 type: comma_delimited_list
123 description: Command which will be run whenever configuration data changes
124 default: os-refresh-config --timeout 14400
129 type: comma_delimited_list
134 Command or script snippet to run on all overcloud nodes to
135 initialize the upgrade process. E.g. a repository switch.
141 type: OS::TripleO::Server
144 command: {get_param: ConfigCommand}
146 image: {get_param: {{role}}Image}
147 image_update_policy: {get_param: ImageUpdatePolicy}
148 flavor: {get_param: Overcloud{{role}}Flavor}
149 key_name: {get_param: KeyName}
152 user_data_format: SOFTWARE_CONFIG
153 user_data: {get_resource: UserData}
156 template: {get_param: Hostname}
157 params: {get_param: HostnameMap}
158 software_config_transport: {get_param: SoftwareConfigTransport}
161 - {get_param: ServerMetadata}
162 - {get_param: {{role}}ServerMetadata}
163 scheduler_hints: {get_param: {{role}}SchedulerHints}
165 # Combine the NodeAdminUserData and NodeUserData mime archives
167 type: OS::Heat::MultipartMime
170 - config: {get_resource: NodeAdminUserData}
172 - config: {get_resource: NodeUserData}
175 # Creates the "heat-admin" user if configured via the environment
176 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
178 type: OS::TripleO::NodeAdminUserData
180 # For optional operator additional userdata
181 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
183 type: OS::TripleO::NodeUserData
186 type: OS::TripleO::{{role}}::Ports::ExternalPort
188 ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
189 IPPool: {get_param: {{role}}IPs}
190 NodeIndex: {get_param: NodeIndex}
193 type: OS::TripleO::{{role}}::Ports::InternalApiPort
195 ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
196 IPPool: {get_param: {{role}}IPs}
197 NodeIndex: {get_param: NodeIndex}
200 type: OS::TripleO::{{role}}::Ports::StoragePort
202 ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
203 IPPool: {get_param: {{role}}IPs}
204 NodeIndex: {get_param: NodeIndex}
207 type: OS::TripleO::{{role}}::Ports::StorageMgmtPort
209 ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
210 IPPool: {get_param: {{role}}IPs}
211 NodeIndex: {get_param: NodeIndex}
214 type: OS::TripleO::{{role}}::Ports::TenantPort
216 ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
217 IPPool: {get_param: {{role}}IPs}
218 NodeIndex: {get_param: NodeIndex}
221 type: OS::TripleO::{{role}}::Ports::ManagementPort
223 ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
224 IPPool: {get_param: {{role}}IPs}
225 NodeIndex: {get_param: NodeIndex}
228 type: OS::TripleO::{{role}}::Net::SoftwareConfig
230 ControlPlaneIp: {get_attr: [{{role}}, networks, ctlplane, 0]}
231 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
232 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
233 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
234 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
235 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
236 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
239 type: OS::TripleO::Network::Ports::NetIpMap
241 ControlPlaneIp: {get_attr: [{{role}}, networks, ctlplane, 0]}
242 ExternalIp: {get_attr: [ExternalPort, ip_address]}
243 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
244 ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
245 InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
246 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
247 InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
248 StorageIp: {get_attr: [StoragePort, ip_address]}
249 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
250 StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
251 StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
252 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
253 StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
254 TenantIp: {get_attr: [TenantPort, ip_address]}
255 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
256 TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
257 ManagementIp: {get_attr: [ManagementPort, ip_address]}
258 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
259 ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
262 type: OS::Heat::Value
270 - - {get_attr: [{{role}}, name]}
272 - {get_param: CloudDomain}
276 - - {get_attr: [{{role}}, name]}
282 - - {get_attr: [{{role}}, name]}
284 - {get_param: CloudDomain}
288 - - {get_attr: [{{role}}, name]}
294 - - {get_attr: [{{role}}, name]}
296 - {get_param: CloudDomain}
300 - - {get_attr: [{{role}}, name]}
306 - - {get_attr: [{{role}}, name]}
308 - {get_param: CloudDomain}
312 - - {get_attr: [{{role}}, name]}
318 - - {get_attr: [{{role}}, name]}
320 - {get_param: CloudDomain}
324 - - {get_attr: [{{role}}, name]}
330 - - {get_attr: [{{role}}, name]}
332 - {get_param: CloudDomain}
336 - - {get_attr: [{{role}}, name]}
342 - - {get_attr: [{{role}}, name]}
344 - {get_param: CloudDomain}
348 - - {get_attr: [{{role}}, name]}
352 type: OS::TripleO::SoftwareDeployment
354 name: NetworkDeployment
355 config: {get_resource: NetworkConfig}
356 server: {get_resource: {{role}}}
357 actions: {get_param: NetworkDeploymentActions}
360 interface_name: {get_param: NeutronPublicInterface}
362 {{role}}UpgradeInitConfig:
363 type: OS::Heat::SoftwareConfig
369 - - "#!/bin/bash\n\n"
370 - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
371 - get_param: UpgradeInitCommand
373 # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
374 # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
375 {{role}}UpgradeInitDeployment:
376 type: OS::Heat::SoftwareDeployment
377 depends_on: NetworkDeployment
379 name: {{role}}UpgradeInitDeployment
380 server: {get_resource: {{role}}}
381 config: {get_resource: {{role}}UpgradeInitConfig}
384 type: OS::Heat::StructuredDeployment
385 depends_on: {{role}}UpgradeInitDeployment
387 name: {{role}}Deployment
388 config: {get_resource: {{role}}Config}
389 server: {get_resource: {{role}}}
391 enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
394 type: OS::Heat::StructuredConfig
400 - heat_config_%{::deploy_config_name}
401 - {{role.lower()}}_extraconfig
406 - bootstrap_node # provided by allNodesConfig
407 - all_nodes # provided by allNodesConfig
408 - vip_data # provided by allNodesConfig
410 merge_behavior: deeper
413 service_names: {get_param: ServiceNames}
414 sensu::subscriptions: {get_param: MonitoringSubscriptions}
417 - {get_param: ServiceConfigSettings}
418 - values: {get_attr: [NetIpMap, net_ip_map]}
419 {{role.lower()}}_extraconfig: {get_param: {{role}}ExtraConfig}
420 extraconfig: {get_param: ExtraConfig}
422 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
423 tripleo::profile::base::logging::fluentd::fluentd_sources: {get_param: LoggingSources}
424 tripleo::profile::base::logging::fluentd::fluentd_groups: {get_param: LoggingGroups}
425 fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
426 fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
427 fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
428 fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
429 fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
430 fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
432 # Resource for site-specific injection of root certificate
434 depends_on: {{role}}Deployment
435 type: OS::TripleO::NodeTLSCAData
437 server: {get_resource: {{role}}}
439 # Hook for site-specific additional pre-deployment config, e.g extra hieradata
440 {{role}}ExtraConfigPre:
441 depends_on: {{role}}Deployment
442 type: OS::TripleO::{{role}}ExtraConfigPre
444 server: {get_resource: {{role}}}
446 # Hook for site-specific additional pre-deployment config,
447 # applying to all nodes, e.g node registration/unregistration
449 depends_on: [{{role}}ExtraConfigPre, NodeTLSCAData]
450 type: OS::TripleO::NodeExtraConfig
452 server: {get_resource: {{role}}}
455 type: OS::TripleO::Tasks::PackageUpdate
458 type: OS::Heat::SoftwareDeployment
460 config: {get_resource: UpdateConfig}
461 server: {get_resource: {{role}}}
464 get_param: UpdateIdentifier
468 description: IP address of the server in the ctlplane network
469 value: {get_attr: [{{role}}, networks, ctlplane, 0]}
471 description: Hostname of the server
472 value: {get_attr: [{{role}}, name]}
474 description: Mapping of network names to hostnames
476 external: {get_attr: [NetHostMap, value, external, fqdn]}
477 internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
478 storage: {get_attr: [NetHostMap, value, storage, fqdn]}
479 storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
480 tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
481 management: {get_attr: [NetHostMap, value, management, fqdn]}
482 ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
487 PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
488 EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
489 INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
490 STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
491 STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
492 TENANTIP TENANTHOST.DOMAIN TENANTHOST
493 MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
494 CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
496 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, {{role}}HostnameResolveNetwork]}]}
497 DOMAIN: {get_param: CloudDomain}
498 PRIMARYHOST: {get_attr: [{{role}}, name]}
499 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
500 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
501 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
502 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
503 STORAGEIP: {get_attr: [StoragePort, ip_address]}
504 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
505 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
506 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
507 TENANTIP: {get_attr: [TenantPort, ip_address]}
508 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
509 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
510 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
511 CTLPLANEIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
512 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
513 nova_server_resource:
514 description: Heat resource handle for {{role}} server
516 {get_resource: {{role}}}
518 description: IP address of the server in the external network
519 value: {get_attr: [ExternalPort, ip_address]}
520 internal_api_ip_address:
521 description: IP address of the server in the internal_api network
522 value: {get_attr: [InternalApiPort, ip_address]}
524 description: IP address of the server in the storage network
525 value: {get_attr: [StoragePort, ip_address]}
526 storage_mgmt_ip_address:
527 description: IP address of the server in the storage_mgmt network
528 value: {get_attr: [StorageMgmtPort, ip_address]}
530 description: IP address of the server in the tenant network
531 value: {get_attr: [TenantPort, ip_address]}
532 management_ip_address:
533 description: IP address of the server in the management network
534 value: {get_attr: [ManagementPort, ip_address]}