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.
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}
178 - config: {get_resource: RoleUserData}
181 # Creates the "heat-admin" user if configured via the environment
182 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
184 type: OS::TripleO::NodeAdminUserData
186 # For optional operator additional userdata
187 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
189 type: OS::TripleO::NodeUserData
191 # For optional operator role-specific userdata
192 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
194 type: OS::TripleO::{{role}}::NodeUserData
197 type: OS::TripleO::{{role}}::Ports::ExternalPort
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::InternalApiPort
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::StoragePort
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::StorageMgmtPort
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::TenantPort
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::ManagementPort
234 ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
235 IPPool: {get_param: {{role}}IPs}
236 NodeIndex: {get_param: NodeIndex}
239 type: OS::TripleO::{{role}}::Net::SoftwareConfig
241 ControlPlaneIp: {get_attr: [{{role}}, networks, ctlplane, 0]}
242 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
243 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
244 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
245 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
246 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
247 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
250 type: OS::TripleO::Network::Ports::NetIpMap
252 ControlPlaneIp: {get_attr: [{{role}}, networks, ctlplane, 0]}
253 ExternalIp: {get_attr: [ExternalPort, ip_address]}
254 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
255 ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
256 InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
257 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
258 InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
259 StorageIp: {get_attr: [StoragePort, ip_address]}
260 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
261 StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
262 StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
263 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
264 StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
265 TenantIp: {get_attr: [TenantPort, ip_address]}
266 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
267 TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
268 ManagementIp: {get_attr: [ManagementPort, ip_address]}
269 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
270 ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
273 type: OS::Heat::Value
281 - - {get_attr: [{{role}}, name]}
283 - {get_param: CloudDomain}
287 - - {get_attr: [{{role}}, name]}
293 - - {get_attr: [{{role}}, name]}
295 - {get_param: CloudDomain}
299 - - {get_attr: [{{role}}, name]}
305 - - {get_attr: [{{role}}, name]}
307 - {get_param: CloudDomain}
311 - - {get_attr: [{{role}}, name]}
317 - - {get_attr: [{{role}}, name]}
319 - {get_param: CloudDomain}
323 - - {get_attr: [{{role}}, name]}
329 - - {get_attr: [{{role}}, name]}
331 - {get_param: CloudDomain}
335 - - {get_attr: [{{role}}, name]}
341 - - {get_attr: [{{role}}, name]}
343 - {get_param: CloudDomain}
347 - - {get_attr: [{{role}}, name]}
353 - - {get_attr: [{{role}}, name]}
355 - {get_param: CloudDomain}
359 - - {get_attr: [{{role}}, name]}
363 type: OS::TripleO::{{role}}::PreNetworkConfig
365 server: {get_resource: {{role}}}
368 type: OS::TripleO::SoftwareDeployment
369 depends_on: PreNetworkConfig
371 name: NetworkDeployment
372 config: {get_resource: NetworkConfig}
373 server: {get_resource: {{role}}}
374 actions: {get_param: NetworkDeploymentActions}
377 interface_name: {get_param: NeutronPublicInterface}
379 {{role}}UpgradeInitConfig:
380 type: OS::Heat::SoftwareConfig
386 - - "#!/bin/bash\n\n"
387 - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
388 - get_param: UpgradeInitCommand
390 # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
391 # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
392 {{role}}UpgradeInitDeployment:
393 type: OS::Heat::SoftwareDeployment
394 depends_on: NetworkDeployment
396 name: {{role}}UpgradeInitDeployment
397 server: {get_resource: {{role}}}
398 config: {get_resource: {{role}}UpgradeInitConfig}
401 type: OS::Heat::StructuredDeployment
402 depends_on: {{role}}UpgradeInitDeployment
404 name: {{role}}Deployment
405 config: {get_resource: {{role}}Config}
406 server: {get_resource: {{role}}}
408 enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
411 type: OS::Heat::StructuredConfig
417 - heat_config_%{::deploy_config_name}
418 - {{role.lower()}}_extraconfig
423 - bootstrap_node # provided by allNodesConfig
424 - all_nodes # provided by allNodesConfig
425 - vip_data # provided by allNodesConfig
427 merge_behavior: deeper
430 service_names: {get_param: ServiceNames}
431 sensu::subscriptions: {get_param: MonitoringSubscriptions}
434 - {get_param: ServiceConfigSettings}
435 - values: {get_attr: [NetIpMap, net_ip_map]}
436 {{role.lower()}}_extraconfig: {get_param: {{role}}ExtraConfig}
437 extraconfig: {get_param: ExtraConfig}
439 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
440 tripleo::profile::base::logging::fluentd::fluentd_sources: {get_param: LoggingSources}
441 tripleo::profile::base::logging::fluentd::fluentd_groups: {get_param: LoggingGroups}
442 fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
443 fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
444 fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
445 fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
446 fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
447 fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
449 # Resource for site-specific injection of root certificate
451 depends_on: {{role}}Deployment
452 type: OS::TripleO::NodeTLSCAData
454 server: {get_resource: {{role}}}
456 # Hook for site-specific additional pre-deployment config, e.g extra hieradata
457 {{role}}ExtraConfigPre:
458 depends_on: {{role}}Deployment
459 type: OS::TripleO::{{role}}ExtraConfigPre
461 server: {get_resource: {{role}}}
463 # Hook for site-specific additional pre-deployment config,
464 # applying to all nodes, e.g node registration/unregistration
466 depends_on: [{{role}}ExtraConfigPre, NodeTLSCAData]
467 type: OS::TripleO::NodeExtraConfig
469 server: {get_resource: {{role}}}
472 type: OS::TripleO::Tasks::PackageUpdate
475 type: OS::Heat::SoftwareDeployment
477 config: {get_resource: UpdateConfig}
478 server: {get_resource: {{role}}}
481 get_param: UpdateIdentifier
485 description: IP address of the server in the ctlplane network
486 value: {get_attr: [{{role}}, networks, ctlplane, 0]}
488 description: Hostname of the server
489 value: {get_attr: [{{role}}, name]}
491 description: Mapping of network names to hostnames
493 external: {get_attr: [NetHostMap, value, external, fqdn]}
494 internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
495 storage: {get_attr: [NetHostMap, value, storage, fqdn]}
496 storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
497 tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
498 management: {get_attr: [NetHostMap, value, management, fqdn]}
499 ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
504 PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
505 EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
506 INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
507 STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
508 STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
509 TENANTIP TENANTHOST.DOMAIN TENANTHOST
510 MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
511 CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
513 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, {{role}}HostnameResolveNetwork]}]}
514 DOMAIN: {get_param: CloudDomain}
515 PRIMARYHOST: {get_attr: [{{role}}, name]}
516 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
517 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
518 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
519 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
520 STORAGEIP: {get_attr: [StoragePort, ip_address]}
521 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
522 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
523 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
524 TENANTIP: {get_attr: [TenantPort, ip_address]}
525 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
526 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
527 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
528 CTLPLANEIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
529 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
530 nova_server_resource:
531 description: Heat resource handle for {{role}} server
533 {get_resource: {{role}}}
535 description: IP address of the server in the external network
536 value: {get_attr: [ExternalPort, ip_address]}
537 internal_api_ip_address:
538 description: IP address of the server in the internal_api network
539 value: {get_attr: [InternalApiPort, ip_address]}
541 description: IP address of the server in the storage network
542 value: {get_attr: [StoragePort, ip_address]}
543 storage_mgmt_ip_address:
544 description: IP address of the server in the storage_mgmt network
545 value: {get_attr: [StorageMgmtPort, ip_address]}
547 description: IP address of the server in the tenant network
548 value: {get_attr: [TenantPort, ip_address]}
549 management_ip_address:
550 description: IP address of the server in the management network
551 value: {get_attr: [ManagementPort, ip_address]}