1 heat_template_version: ocata
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.
140 UpgradeInitCommonCommand:
143 Common commands required by the upgrades process. This should not
144 normally be modified by the operator and is set and unset in the
145 major-upgrade-composable-steps.yaml and major-upgrade-converge.yaml
151 type: OS::TripleO::Server
154 command: {get_param: ConfigCommand}
156 image: {get_param: {{role}}Image}
157 image_update_policy: {get_param: ImageUpdatePolicy}
158 flavor: {get_param: Overcloud{{role}}Flavor}
159 key_name: {get_param: KeyName}
162 user_data_format: SOFTWARE_CONFIG
163 user_data: {get_resource: UserData}
166 template: {get_param: Hostname}
167 params: {get_param: HostnameMap}
168 software_config_transport: {get_param: SoftwareConfigTransport}
171 - {get_param: ServerMetadata}
172 - {get_param: {{role}}ServerMetadata}
173 - {get_param: ServiceMetadataSettings}
174 scheduler_hints: {get_param: {{role}}SchedulerHints}
176 # Combine the NodeAdminUserData and NodeUserData mime archives
178 type: OS::Heat::MultipartMime
181 - config: {get_resource: NodeAdminUserData}
183 - config: {get_resource: NodeUserData}
185 - config: {get_resource: RoleUserData}
188 # Creates the "heat-admin" user if configured via the environment
189 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
191 type: OS::TripleO::NodeAdminUserData
193 # For optional operator additional userdata
194 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
196 type: OS::TripleO::NodeUserData
198 # For optional operator role-specific userdata
199 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
201 type: OS::TripleO::{{role}}::NodeUserData
204 type: OS::TripleO::{{role}}::Ports::ExternalPort
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::InternalApiPort
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::StoragePort
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::StorageMgmtPort
227 ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
228 IPPool: {get_param: {{role}}IPs}
229 NodeIndex: {get_param: NodeIndex}
232 type: OS::TripleO::{{role}}::Ports::TenantPort
234 ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
235 IPPool: {get_param: {{role}}IPs}
236 NodeIndex: {get_param: NodeIndex}
239 type: OS::TripleO::{{role}}::Ports::ManagementPort
241 ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
242 IPPool: {get_param: {{role}}IPs}
243 NodeIndex: {get_param: NodeIndex}
246 type: OS::TripleO::{{role}}::Net::SoftwareConfig
248 ControlPlaneIp: {get_attr: [{{role}}, networks, ctlplane, 0]}
249 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
250 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
251 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
252 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
253 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
254 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
257 type: OS::TripleO::Network::Ports::NetIpMap
259 ControlPlaneIp: {get_attr: [{{role}}, networks, ctlplane, 0]}
260 ExternalIp: {get_attr: [ExternalPort, ip_address]}
261 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
262 ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
263 InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
264 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
265 InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
266 StorageIp: {get_attr: [StoragePort, ip_address]}
267 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
268 StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
269 StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
270 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
271 StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
272 TenantIp: {get_attr: [TenantPort, ip_address]}
273 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
274 TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
275 ManagementIp: {get_attr: [ManagementPort, ip_address]}
276 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
277 ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
280 type: OS::Heat::Value
288 - - {get_attr: [{{role}}, name]}
290 - {get_param: CloudDomain}
294 - - {get_attr: [{{role}}, name]}
300 - - {get_attr: [{{role}}, name]}
302 - {get_param: CloudDomain}
306 - - {get_attr: [{{role}}, name]}
312 - - {get_attr: [{{role}}, name]}
314 - {get_param: CloudDomain}
318 - - {get_attr: [{{role}}, name]}
324 - - {get_attr: [{{role}}, name]}
326 - {get_param: CloudDomain}
330 - - {get_attr: [{{role}}, name]}
336 - - {get_attr: [{{role}}, name]}
338 - {get_param: CloudDomain}
342 - - {get_attr: [{{role}}, name]}
348 - - {get_attr: [{{role}}, name]}
350 - {get_param: CloudDomain}
354 - - {get_attr: [{{role}}, name]}
360 - - {get_attr: [{{role}}, name]}
362 - {get_param: CloudDomain}
366 - - {get_attr: [{{role}}, name]}
370 type: OS::TripleO::{{role}}::PreNetworkConfig
372 server: {get_resource: {{role}}}
375 type: OS::TripleO::SoftwareDeployment
376 depends_on: PreNetworkConfig
378 name: NetworkDeployment
379 config: {get_resource: NetworkConfig}
380 server: {get_resource: {{role}}}
381 actions: {get_param: NetworkDeploymentActions}
384 interface_name: {get_param: NeutronPublicInterface}
386 {{role}}UpgradeInitConfig:
387 type: OS::Heat::SoftwareConfig
393 - - "#!/bin/bash\n\n"
394 - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
395 - get_param: UpgradeInitCommand
396 - get_param: UpgradeInitCommonCommand
398 # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
399 # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
400 {{role}}UpgradeInitDeployment:
401 type: OS::Heat::SoftwareDeployment
402 depends_on: NetworkDeployment
404 name: {{role}}UpgradeInitDeployment
405 server: {get_resource: {{role}}}
406 config: {get_resource: {{role}}UpgradeInitConfig}
409 type: OS::Heat::StructuredDeployment
410 depends_on: {{role}}UpgradeInitDeployment
412 name: {{role}}Deployment
413 config: {get_resource: {{role}}Config}
414 server: {get_resource: {{role}}}
416 enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
419 type: OS::Heat::StructuredConfig
425 - heat_config_%{::deploy_config_name}
426 - {{role.lower()}}_extraconfig
431 - bootstrap_node # provided by allNodesConfig
432 - all_nodes # provided by allNodesConfig
433 - vip_data # provided by allNodesConfig
435 merge_behavior: deeper
438 service_names: {get_param: ServiceNames}
439 sensu::subscriptions: {get_param: MonitoringSubscriptions}
442 - {get_param: ServiceConfigSettings}
443 - values: {get_attr: [NetIpMap, net_ip_map]}
444 {{role.lower()}}_extraconfig: {get_param: {{role}}ExtraConfig}
445 extraconfig: {get_param: ExtraConfig}
447 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
448 tripleo::profile::base::logging::fluentd::fluentd_sources: {get_param: LoggingSources}
449 tripleo::profile::base::logging::fluentd::fluentd_groups: {get_param: LoggingGroups}
450 fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
451 fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
452 fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
453 fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
454 fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
455 fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
457 # Resource for site-specific injection of root certificate
459 depends_on: {{role}}Deployment
460 type: OS::TripleO::NodeTLSCAData
462 server: {get_resource: {{role}}}
464 # Hook for site-specific additional pre-deployment config, e.g extra hieradata
465 {{role}}ExtraConfigPre:
466 depends_on: {{role}}Deployment
467 type: OS::TripleO::{{role}}ExtraConfigPre
469 server: {get_resource: {{role}}}
471 # Hook for site-specific additional pre-deployment config,
472 # applying to all nodes, e.g node registration/unregistration
474 depends_on: [{{role}}ExtraConfigPre, NodeTLSCAData]
475 type: OS::TripleO::NodeExtraConfig
477 server: {get_resource: {{role}}}
480 type: OS::TripleO::Tasks::PackageUpdate
483 type: OS::Heat::SoftwareDeployment
484 depends_on: NetworkDeployment
486 config: {get_resource: UpdateConfig}
487 server: {get_resource: {{role}}}
490 get_param: UpdateIdentifier
493 type: OS::TripleO::Ssh::HostPubKey
494 depends_on: {{role}}Deployment
496 server: {get_resource: {{role}}}
500 description: IP address of the server in the ctlplane network
501 value: {get_attr: [{{role}}, networks, ctlplane, 0]}
503 description: Hostname of the server
504 value: {get_attr: [{{role}}, name]}
506 description: Mapping of network names to hostnames
508 external: {get_attr: [NetHostMap, value, external, fqdn]}
509 internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
510 storage: {get_attr: [NetHostMap, value, storage, fqdn]}
511 storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
512 tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
513 management: {get_attr: [NetHostMap, value, management, fqdn]}
514 ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
519 PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
520 EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
521 INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
522 STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
523 STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
524 TENANTIP TENANTHOST.DOMAIN TENANTHOST
525 MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
526 CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
528 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, {{role}}HostnameResolveNetwork]}]}
529 DOMAIN: {get_param: CloudDomain}
530 PRIMARYHOST: {get_attr: [{{role}}, name]}
531 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
532 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
533 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
534 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
535 STORAGEIP: {get_attr: [StoragePort, ip_address]}
536 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
537 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
538 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
539 TENANTIP: {get_attr: [TenantPort, ip_address]}
540 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
541 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
542 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
543 CTLPLANEIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
544 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
546 description: Entry for ssh known hosts
549 template: "PRIMARYIP,PRIMARYHOST.DOMAIN,PRIMARYHOST,\
550 EXTERNALIP,EXTERNALHOST.DOMAIN,EXTERNALHOST,\
551 INTERNAL_APIIP,INTERNAL_APIHOST.DOMAIN,INTERNAL_APIHOST,\
552 STORAGEIP,STORAGEHOST.DOMAIN,STORAGEHOST,\
553 STORAGE_MGMTIP,STORAGE_MGMTHOST.DOMAIN,STORAGE_MGMTHOST,\
554 TENANTIP,TENANTHOST.DOMAIN,TENANTHOST,\
555 MANAGEMENTIP,MANAGEMENTHOST.DOMAIN,MANAGEMENTHOST,\
556 CTLPLANEIP,CTLPLANEHOST.DOMAIN,CTLPLANEHOST HOSTSSHPUBKEY"
558 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, {{role}}HostnameResolveNetwork]}]}
559 DOMAIN: {get_param: CloudDomain}
560 PRIMARYHOST: {get_attr: [{{role}}, name]}
561 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
562 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
563 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
564 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
565 STORAGEIP: {get_attr: [StoragePort, ip_address]}
566 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
567 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
568 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
569 TENANTIP: {get_attr: [TenantPort, ip_address]}
570 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
571 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
572 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
573 CTLPLANEIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
574 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
575 HOSTSSHPUBKEY: {get_attr: [SshHostPubKey, ecdsa]}
576 nova_server_resource:
577 description: Heat resource handle for {{role}} server
579 {get_resource: {{role}}}
581 description: IP address of the server in the external network
582 value: {get_attr: [ExternalPort, ip_address]}
583 internal_api_ip_address:
584 description: IP address of the server in the internal_api network
585 value: {get_attr: [InternalApiPort, ip_address]}
587 description: IP address of the server in the storage network
588 value: {get_attr: [StoragePort, ip_address]}
589 storage_mgmt_ip_address:
590 description: IP address of the server in the storage_mgmt network
591 value: {get_attr: [StorageMgmtPort, ip_address]}
593 description: IP address of the server in the tenant network
594 value: {get_attr: [TenantPort, ip_address]}
595 management_ip_address:
596 description: IP address of the server in the management network
597 value: {get_attr: [ManagementPort, ip_address]}