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}
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::SoftwareDeployment
365 name: NetworkDeployment
366 config: {get_resource: NetworkConfig}
367 server: {get_resource: {{role}}}
368 actions: {get_param: NetworkDeploymentActions}
371 interface_name: {get_param: NeutronPublicInterface}
373 {{role}}UpgradeInitConfig:
374 type: OS::Heat::SoftwareConfig
380 - - "#!/bin/bash\n\n"
381 - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
382 - get_param: UpgradeInitCommand
384 # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
385 # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
386 {{role}}UpgradeInitDeployment:
387 type: OS::Heat::SoftwareDeployment
388 depends_on: NetworkDeployment
390 name: {{role}}UpgradeInitDeployment
391 server: {get_resource: {{role}}}
392 config: {get_resource: {{role}}UpgradeInitConfig}
395 type: OS::Heat::StructuredDeployment
396 depends_on: {{role}}UpgradeInitDeployment
398 name: {{role}}Deployment
399 config: {get_resource: {{role}}Config}
400 server: {get_resource: {{role}}}
402 enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
405 type: OS::Heat::StructuredConfig
411 - heat_config_%{::deploy_config_name}
412 - {{role.lower()}}_extraconfig
417 - bootstrap_node # provided by allNodesConfig
418 - all_nodes # provided by allNodesConfig
419 - vip_data # provided by allNodesConfig
421 merge_behavior: deeper
424 service_names: {get_param: ServiceNames}
425 sensu::subscriptions: {get_param: MonitoringSubscriptions}
428 - {get_param: ServiceConfigSettings}
429 - values: {get_attr: [NetIpMap, net_ip_map]}
430 {{role.lower()}}_extraconfig: {get_param: {{role}}ExtraConfig}
431 extraconfig: {get_param: ExtraConfig}
433 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
434 tripleo::profile::base::logging::fluentd::fluentd_sources: {get_param: LoggingSources}
435 tripleo::profile::base::logging::fluentd::fluentd_groups: {get_param: LoggingGroups}
436 fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
437 fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
438 fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
439 fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
440 fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
441 fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
443 # Resource for site-specific injection of root certificate
445 depends_on: {{role}}Deployment
446 type: OS::TripleO::NodeTLSCAData
448 server: {get_resource: {{role}}}
450 # Hook for site-specific additional pre-deployment config, e.g extra hieradata
451 {{role}}ExtraConfigPre:
452 depends_on: {{role}}Deployment
453 type: OS::TripleO::{{role}}ExtraConfigPre
455 server: {get_resource: {{role}}}
457 # Hook for site-specific additional pre-deployment config,
458 # applying to all nodes, e.g node registration/unregistration
460 depends_on: [{{role}}ExtraConfigPre, NodeTLSCAData]
461 type: OS::TripleO::NodeExtraConfig
463 server: {get_resource: {{role}}}
466 type: OS::TripleO::Tasks::PackageUpdate
469 type: OS::Heat::SoftwareDeployment
471 config: {get_resource: UpdateConfig}
472 server: {get_resource: {{role}}}
475 get_param: UpdateIdentifier
479 description: IP address of the server in the ctlplane network
480 value: {get_attr: [{{role}}, networks, ctlplane, 0]}
482 description: Hostname of the server
483 value: {get_attr: [{{role}}, name]}
485 description: Mapping of network names to hostnames
487 external: {get_attr: [NetHostMap, value, external, fqdn]}
488 internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
489 storage: {get_attr: [NetHostMap, value, storage, fqdn]}
490 storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
491 tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
492 management: {get_attr: [NetHostMap, value, management, fqdn]}
493 ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
498 PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
499 EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
500 INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
501 STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
502 STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
503 TENANTIP TENANTHOST.DOMAIN TENANTHOST
504 MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
505 CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
507 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, {{role}}HostnameResolveNetwork]}]}
508 DOMAIN: {get_param: CloudDomain}
509 PRIMARYHOST: {get_attr: [{{role}}, name]}
510 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
511 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
512 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
513 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
514 STORAGEIP: {get_attr: [StoragePort, ip_address]}
515 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
516 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
517 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
518 TENANTIP: {get_attr: [TenantPort, ip_address]}
519 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
520 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
521 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
522 CTLPLANEIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
523 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
524 nova_server_resource:
525 description: Heat resource handle for {{role}} server
527 {get_resource: {{role}}}
529 description: IP address of the server in the external network
530 value: {get_attr: [ExternalPort, ip_address]}
531 internal_api_ip_address:
532 description: IP address of the server in the internal_api network
533 value: {get_attr: [InternalApiPort, ip_address]}
535 description: IP address of the server in the storage network
536 value: {get_attr: [StoragePort, ip_address]}
537 storage_mgmt_ip_address:
538 description: IP address of the server in the storage_mgmt network
539 value: {get_attr: [StorageMgmtPort, ip_address]}
541 description: IP address of the server in the tenant network
542 value: {get_attr: [TenantPort, ip_address]}
543 management_ip_address:
544 description: IP address of the server in the management network
545 value: {get_attr: [ManagementPort, ip_address]}