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
121 ServiceMetadataSettings:
126 description: Command which will be run whenever configuration data changes
127 default: os-refresh-config --timeout 14400
132 type: comma_delimited_list
137 Command or script snippet to run on all overcloud nodes to
138 initialize the upgrade process. E.g. a repository switch.
144 type: OS::TripleO::Server
147 command: {get_param: ConfigCommand}
149 image: {get_param: {{role}}Image}
150 image_update_policy: {get_param: ImageUpdatePolicy}
151 flavor: {get_param: Overcloud{{role}}Flavor}
152 key_name: {get_param: KeyName}
155 user_data_format: SOFTWARE_CONFIG
156 user_data: {get_resource: UserData}
159 template: {get_param: Hostname}
160 params: {get_param: HostnameMap}
161 software_config_transport: {get_param: SoftwareConfigTransport}
164 - {get_param: ServerMetadata}
165 - {get_param: {{role}}ServerMetadata}
166 - {get_param: ServiceMetadataSettings}
167 scheduler_hints: {get_param: {{role}}SchedulerHints}
169 # Combine the NodeAdminUserData and NodeUserData mime archives
171 type: OS::Heat::MultipartMime
174 - config: {get_resource: NodeAdminUserData}
176 - config: {get_resource: NodeUserData}
179 # Creates the "heat-admin" user if configured via the environment
180 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
182 type: OS::TripleO::NodeAdminUserData
184 # For optional operator additional userdata
185 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
187 type: OS::TripleO::NodeUserData
190 type: OS::TripleO::{{role}}::Ports::ExternalPort
192 ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
193 IPPool: {get_param: {{role}}IPs}
194 NodeIndex: {get_param: NodeIndex}
197 type: OS::TripleO::{{role}}::Ports::InternalApiPort
199 ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
200 IPPool: {get_param: {{role}}IPs}
201 NodeIndex: {get_param: NodeIndex}
204 type: OS::TripleO::{{role}}::Ports::StoragePort
206 ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
207 IPPool: {get_param: {{role}}IPs}
208 NodeIndex: {get_param: NodeIndex}
211 type: OS::TripleO::{{role}}::Ports::StorageMgmtPort
213 ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
214 IPPool: {get_param: {{role}}IPs}
215 NodeIndex: {get_param: NodeIndex}
218 type: OS::TripleO::{{role}}::Ports::TenantPort
220 ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
221 IPPool: {get_param: {{role}}IPs}
222 NodeIndex: {get_param: NodeIndex}
225 type: OS::TripleO::{{role}}::Ports::ManagementPort
227 ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
228 IPPool: {get_param: {{role}}IPs}
229 NodeIndex: {get_param: NodeIndex}
232 type: OS::TripleO::{{role}}::Net::SoftwareConfig
234 ControlPlaneIp: {get_attr: [{{role}}, networks, ctlplane, 0]}
235 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
236 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
237 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
238 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
239 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
240 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
243 type: OS::TripleO::Network::Ports::NetIpMap
245 ControlPlaneIp: {get_attr: [{{role}}, networks, ctlplane, 0]}
246 ExternalIp: {get_attr: [ExternalPort, ip_address]}
247 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
248 ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
249 InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
250 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
251 InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
252 StorageIp: {get_attr: [StoragePort, ip_address]}
253 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
254 StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
255 StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
256 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
257 StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
258 TenantIp: {get_attr: [TenantPort, ip_address]}
259 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
260 TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
261 ManagementIp: {get_attr: [ManagementPort, ip_address]}
262 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
263 ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
266 type: OS::Heat::Value
274 - - {get_attr: [{{role}}, name]}
276 - {get_param: CloudDomain}
280 - - {get_attr: [{{role}}, name]}
286 - - {get_attr: [{{role}}, name]}
288 - {get_param: CloudDomain}
292 - - {get_attr: [{{role}}, name]}
298 - - {get_attr: [{{role}}, name]}
300 - {get_param: CloudDomain}
304 - - {get_attr: [{{role}}, name]}
310 - - {get_attr: [{{role}}, name]}
312 - {get_param: CloudDomain}
316 - - {get_attr: [{{role}}, name]}
322 - - {get_attr: [{{role}}, name]}
324 - {get_param: CloudDomain}
328 - - {get_attr: [{{role}}, name]}
334 - - {get_attr: [{{role}}, name]}
336 - {get_param: CloudDomain}
340 - - {get_attr: [{{role}}, name]}
346 - - {get_attr: [{{role}}, name]}
348 - {get_param: CloudDomain}
352 - - {get_attr: [{{role}}, name]}
356 type: OS::TripleO::SoftwareDeployment
358 name: NetworkDeployment
359 config: {get_resource: NetworkConfig}
360 server: {get_resource: {{role}}}
361 actions: {get_param: NetworkDeploymentActions}
364 interface_name: {get_param: NeutronPublicInterface}
366 {{role}}UpgradeInitConfig:
367 type: OS::Heat::SoftwareConfig
373 - - "#!/bin/bash\n\n"
374 - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
375 - get_param: UpgradeInitCommand
377 # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
378 # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
379 {{role}}UpgradeInitDeployment:
380 type: OS::Heat::SoftwareDeployment
381 depends_on: NetworkDeployment
383 name: {{role}}UpgradeInitDeployment
384 server: {get_resource: {{role}}}
385 config: {get_resource: {{role}}UpgradeInitConfig}
388 type: OS::Heat::StructuredDeployment
389 depends_on: {{role}}UpgradeInitDeployment
391 name: {{role}}Deployment
392 config: {get_resource: {{role}}Config}
393 server: {get_resource: {{role}}}
395 enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
398 type: OS::Heat::StructuredConfig
404 - heat_config_%{::deploy_config_name}
405 - {{role.lower()}}_extraconfig
410 - bootstrap_node # provided by allNodesConfig
411 - all_nodes # provided by allNodesConfig
412 - vip_data # provided by allNodesConfig
414 merge_behavior: deeper
417 service_names: {get_param: ServiceNames}
418 sensu::subscriptions: {get_param: MonitoringSubscriptions}
421 - {get_param: ServiceConfigSettings}
422 - values: {get_attr: [NetIpMap, net_ip_map]}
423 {{role.lower()}}_extraconfig: {get_param: {{role}}ExtraConfig}
424 extraconfig: {get_param: ExtraConfig}
426 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
427 tripleo::profile::base::logging::fluentd::fluentd_sources: {get_param: LoggingSources}
428 tripleo::profile::base::logging::fluentd::fluentd_groups: {get_param: LoggingGroups}
429 fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
430 fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
431 fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
432 fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
433 fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
434 fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
436 # Resource for site-specific injection of root certificate
438 depends_on: {{role}}Deployment
439 type: OS::TripleO::NodeTLSCAData
441 server: {get_resource: {{role}}}
443 # Hook for site-specific additional pre-deployment config, e.g extra hieradata
444 {{role}}ExtraConfigPre:
445 depends_on: {{role}}Deployment
446 type: OS::TripleO::{{role}}ExtraConfigPre
448 server: {get_resource: {{role}}}
450 # Hook for site-specific additional pre-deployment config,
451 # applying to all nodes, e.g node registration/unregistration
453 depends_on: [{{role}}ExtraConfigPre, NodeTLSCAData]
454 type: OS::TripleO::NodeExtraConfig
456 server: {get_resource: {{role}}}
459 type: OS::TripleO::Tasks::PackageUpdate
462 type: OS::Heat::SoftwareDeployment
464 config: {get_resource: UpdateConfig}
465 server: {get_resource: {{role}}}
468 get_param: UpdateIdentifier
472 description: IP address of the server in the ctlplane network
473 value: {get_attr: [{{role}}, networks, ctlplane, 0]}
475 description: Hostname of the server
476 value: {get_attr: [{{role}}, name]}
478 description: Mapping of network names to hostnames
480 external: {get_attr: [NetHostMap, value, external, fqdn]}
481 internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
482 storage: {get_attr: [NetHostMap, value, storage, fqdn]}
483 storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
484 tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
485 management: {get_attr: [NetHostMap, value, management, fqdn]}
486 ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
491 PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
492 EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
493 INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
494 STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
495 STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
496 TENANTIP TENANTHOST.DOMAIN TENANTHOST
497 MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
498 CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
500 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, {{role}}HostnameResolveNetwork]}]}
501 DOMAIN: {get_param: CloudDomain}
502 PRIMARYHOST: {get_attr: [{{role}}, name]}
503 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
504 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
505 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
506 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
507 STORAGEIP: {get_attr: [StoragePort, ip_address]}
508 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
509 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
510 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
511 TENANTIP: {get_attr: [TenantPort, ip_address]}
512 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
513 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
514 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
515 CTLPLANEIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
516 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
517 nova_server_resource:
518 description: Heat resource handle for {{role}} server
520 {get_resource: {{role}}}
522 description: IP address of the server in the external network
523 value: {get_attr: [ExternalPort, ip_address]}
524 internal_api_ip_address:
525 description: IP address of the server in the internal_api network
526 value: {get_attr: [InternalApiPort, ip_address]}
528 description: IP address of the server in the storage network
529 value: {get_attr: [StoragePort, ip_address]}
530 storage_mgmt_ip_address:
531 description: IP address of the server in the storage_mgmt network
532 value: {get_attr: [StorageMgmtPort, ip_address]}
534 description: IP address of the server in the tenant network
535 value: {get_attr: [TenantPort, ip_address]}
536 management_ip_address:
537 description: IP address of the server in the management network
538 value: {get_attr: [ManagementPort, ip_address]}