1 heat_template_version: pike
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 Maximum amount of time to possibly to delay configuation collection
133 polling. Defaults to 30 seconds. Set to 0 to disable it which will cause
134 the configuration collection to occur as soon as the collection process
135 starts. This setting is used to prevent the configuration collection
136 processes from polling all at the exact same time.
141 type: comma_delimited_list
146 Command or script snippet to run on all overcloud nodes to
147 initialize the upgrade process. E.g. a repository switch.
149 UpgradeInitCommonCommand:
152 Common commands required by the upgrades process. This should not
153 normally be modified by the operator and is set and unset in the
154 major-upgrade-composable-steps.yaml and major-upgrade-converge.yaml
160 type: OS::TripleO::{{role.name}}Server
163 command: {get_param: ConfigCommand}
164 splay: {get_param: ConfigCollectSplay}
166 image: {get_param: {{role}}Image}
167 image_update_policy: {get_param: ImageUpdatePolicy}
168 flavor: {get_param: Overcloud{{role}}Flavor}
169 key_name: {get_param: KeyName}
172 user_data_format: SOFTWARE_CONFIG
173 user_data: {get_resource: UserData}
176 template: {get_param: Hostname}
177 params: {get_param: HostnameMap}
178 software_config_transport: {get_param: SoftwareConfigTransport}
181 - {get_param: ServerMetadata}
182 - {get_param: {{role}}ServerMetadata}
183 - {get_param: ServiceMetadataSettings}
184 scheduler_hints: {get_param: {{role}}SchedulerHints}
186 # Combine the NodeAdminUserData and NodeUserData mime archives
188 type: OS::Heat::MultipartMime
191 - config: {get_resource: NodeAdminUserData}
193 - config: {get_resource: NodeUserData}
195 - config: {get_resource: RoleUserData}
198 # Creates the "heat-admin" user if configured via the environment
199 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
201 type: OS::TripleO::NodeAdminUserData
203 # For optional operator additional userdata
204 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
206 type: OS::TripleO::NodeUserData
208 # For optional operator role-specific userdata
209 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
211 type: OS::TripleO::{{role}}::NodeUserData
214 type: OS::TripleO::{{role}}::Ports::ExternalPort
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::InternalApiPort
223 ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
224 IPPool: {get_param: {{role}}IPs}
225 NodeIndex: {get_param: NodeIndex}
228 type: OS::TripleO::{{role}}::Ports::StoragePort
230 ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
231 IPPool: {get_param: {{role}}IPs}
232 NodeIndex: {get_param: NodeIndex}
235 type: OS::TripleO::{{role}}::Ports::StorageMgmtPort
237 ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
238 IPPool: {get_param: {{role}}IPs}
239 NodeIndex: {get_param: NodeIndex}
242 type: OS::TripleO::{{role}}::Ports::TenantPort
244 ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
245 IPPool: {get_param: {{role}}IPs}
246 NodeIndex: {get_param: NodeIndex}
249 type: OS::TripleO::{{role}}::Ports::ManagementPort
251 ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
252 IPPool: {get_param: {{role}}IPs}
253 NodeIndex: {get_param: NodeIndex}
256 type: OS::TripleO::{{role}}::Net::SoftwareConfig
258 ControlPlaneIp: {get_attr: [{{role}}, networks, ctlplane, 0]}
259 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
260 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
261 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
262 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
263 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
264 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
267 type: OS::TripleO::Network::Ports::NetIpMap
269 ControlPlaneIp: {get_attr: [{{role}}, networks, ctlplane, 0]}
270 ExternalIp: {get_attr: [ExternalPort, ip_address]}
271 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
272 ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
273 InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
274 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
275 InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
276 StorageIp: {get_attr: [StoragePort, ip_address]}
277 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
278 StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
279 StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
280 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
281 StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
282 TenantIp: {get_attr: [TenantPort, ip_address]}
283 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
284 TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
285 ManagementIp: {get_attr: [ManagementPort, ip_address]}
286 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
287 ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
290 type: OS::Heat::Value
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]}
358 - - {get_attr: [{{role}}, name]}
360 - {get_param: CloudDomain}
364 - - {get_attr: [{{role}}, name]}
370 - - {get_attr: [{{role}}, name]}
372 - {get_param: CloudDomain}
376 - - {get_attr: [{{role}}, name]}
380 type: OS::TripleO::{{role}}::PreNetworkConfig
382 server: {get_resource: {{role}}}
385 type: OS::TripleO::SoftwareDeployment
386 depends_on: PreNetworkConfig
388 name: NetworkDeployment
389 config: {get_resource: NetworkConfig}
390 server: {get_resource: {{role}}}
391 actions: {get_param: NetworkDeploymentActions}
394 interface_name: {get_param: NeutronPublicInterface}
396 {{role}}UpgradeInitConfig:
397 type: OS::Heat::SoftwareConfig
403 - - "#!/bin/bash\n\n"
404 - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
405 - get_param: UpgradeInitCommand
406 - get_param: UpgradeInitCommonCommand
408 # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
409 # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
410 {{role}}UpgradeInitDeployment:
411 type: OS::Heat::SoftwareDeployment
412 depends_on: NetworkDeployment
414 name: {{role}}UpgradeInitDeployment
415 server: {get_resource: {{role}}}
416 config: {get_resource: {{role}}UpgradeInitConfig}
419 type: OS::Heat::StructuredDeployment
420 depends_on: {{role}}UpgradeInitDeployment
422 name: {{role}}Deployment
423 config: {get_resource: {{role}}Config}
424 server: {get_resource: {{role}}}
426 enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
429 type: OS::Heat::StructuredConfig
435 - heat_config_%{::deploy_config_name}
436 - {{role.lower()}}_extraconfig
441 - bootstrap_node # provided by allNodesConfig
442 - all_nodes # provided by allNodesConfig
443 - vip_data # provided by allNodesConfig
445 merge_behavior: deeper
448 service_names: {get_param: ServiceNames}
449 sensu::subscriptions: {get_param: MonitoringSubscriptions}
452 - {get_param: ServiceConfigSettings}
453 - values: {get_attr: [NetIpMap, net_ip_map]}
454 {{role.lower()}}_extraconfig: {get_param: {{role}}ExtraConfig}
455 extraconfig: {get_param: ExtraConfig}
457 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
458 tripleo::profile::base::logging::fluentd::fluentd_sources: {get_param: LoggingSources}
459 tripleo::profile::base::logging::fluentd::fluentd_groups: {get_param: LoggingGroups}
460 fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
461 fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
462 fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
463 fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
464 fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
465 fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
467 # Resource for site-specific injection of root certificate
469 depends_on: {{role}}Deployment
470 type: OS::TripleO::NodeTLSCAData
472 server: {get_resource: {{role}}}
474 # Hook for site-specific additional pre-deployment config, e.g extra hieradata
475 {{role}}ExtraConfigPre:
476 depends_on: {{role}}Deployment
477 type: OS::TripleO::{{role}}ExtraConfigPre
479 server: {get_resource: {{role}}}
481 # Hook for site-specific additional pre-deployment config,
482 # applying to all nodes, e.g node registration/unregistration
484 depends_on: [{{role}}ExtraConfigPre, NodeTLSCAData]
485 type: OS::TripleO::NodeExtraConfig
487 server: {get_resource: {{role}}}
490 type: OS::TripleO::Tasks::PackageUpdate
493 type: OS::Heat::SoftwareDeployment
494 depends_on: NetworkDeployment
496 name: UpdateDeployment
497 config: {get_resource: UpdateConfig}
498 server: {get_resource: {{role}}}
501 get_param: UpdateIdentifier
504 type: OS::TripleO::Ssh::HostPubKey
505 depends_on: {{role}}Deployment
507 server: {get_resource: {{role}}}
511 description: IP address of the server in the ctlplane network
512 value: {get_attr: [{{role}}, networks, ctlplane, 0]}
514 description: Hostname of the server
515 value: {get_attr: [{{role}}, name]}
517 description: Mapping of network names to hostnames
519 external: {get_attr: [NetHostMap, value, external, fqdn]}
520 internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
521 storage: {get_attr: [NetHostMap, value, storage, fqdn]}
522 storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
523 tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
524 management: {get_attr: [NetHostMap, value, management, fqdn]}
525 ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
530 PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
531 EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
532 INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
533 STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
534 STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
535 TENANTIP TENANTHOST.DOMAIN TENANTHOST
536 MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
537 CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
539 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, {{role}}HostnameResolveNetwork]}]}
540 DOMAIN: {get_param: CloudDomain}
541 PRIMARYHOST: {get_attr: [{{role}}, name]}
542 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
543 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
544 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
545 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
546 STORAGEIP: {get_attr: [StoragePort, ip_address]}
547 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
548 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
549 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
550 TENANTIP: {get_attr: [TenantPort, ip_address]}
551 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
552 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
553 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
554 CTLPLANEIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
555 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
557 description: Entry for ssh known hosts
560 template: "PRIMARYIP,PRIMARYHOST.DOMAIN,PRIMARYHOST,\
561 EXTERNALIP,EXTERNALHOST.DOMAIN,EXTERNALHOST,\
562 INTERNAL_APIIP,INTERNAL_APIHOST.DOMAIN,INTERNAL_APIHOST,\
563 STORAGEIP,STORAGEHOST.DOMAIN,STORAGEHOST,\
564 STORAGE_MGMTIP,STORAGE_MGMTHOST.DOMAIN,STORAGE_MGMTHOST,\
565 TENANTIP,TENANTHOST.DOMAIN,TENANTHOST,\
566 MANAGEMENTIP,MANAGEMENTHOST.DOMAIN,MANAGEMENTHOST,\
567 CTLPLANEIP,CTLPLANEHOST.DOMAIN,CTLPLANEHOST HOSTSSHPUBKEY"
569 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, {{role}}HostnameResolveNetwork]}]}
570 DOMAIN: {get_param: CloudDomain}
571 PRIMARYHOST: {get_attr: [{{role}}, name]}
572 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
573 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
574 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
575 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
576 STORAGEIP: {get_attr: [StoragePort, ip_address]}
577 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
578 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
579 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
580 TENANTIP: {get_attr: [TenantPort, ip_address]}
581 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
582 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
583 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
584 CTLPLANEIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
585 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
586 HOSTSSHPUBKEY: {get_attr: [SshHostPubKey, ecdsa]}
587 nova_server_resource:
588 description: Heat resource handle for {{role}} server
590 {get_resource: {{role}}}
592 description: IP address of the server in the external network
593 value: {get_attr: [ExternalPort, ip_address]}
594 internal_api_ip_address:
595 description: IP address of the server in the internal_api network
596 value: {get_attr: [InternalApiPort, ip_address]}
598 description: IP address of the server in the storage network
599 value: {get_attr: [StoragePort, ip_address]}
600 storage_mgmt_ip_address:
601 description: IP address of the server in the storage_mgmt network
602 value: {get_attr: [StorageMgmtPort, ip_address]}
604 description: IP address of the server in the tenant network
605 value: {get_attr: [TenantPort, ip_address]}
606 management_ip_address:
607 description: IP address of the server in the management network
608 value: {get_attr: [ManagementPort, ip_address]}