1 heat_template_version: pike
4 OpenStack hypervisor node configured via Puppet.
10 Additional hiera configuration to inject into the cluster. Note
11 that NovaComputeExtraConfig takes precedence over ExtraConfig.
13 OvercloudComputeFlavor:
14 description: Flavor for the nova compute node
18 - custom_constraint: nova.flavor
21 default: overcloud-full
23 - custom_constraint: glance.image
25 default: 'REBUILD_PRESERVE_EPHEMERAL'
26 description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
29 description: Name of an existing Nova key pair to enable SSH access to the instances
33 - custom_constraint: nova.keypair
34 NeutronPhysicalBridge:
36 description: An OVS bridge to create for accessing external networks.
38 NeutronPublicInterface:
40 description: A port to add to the NeutronPhysicalBridge.
45 NovaComputeExtraConfig:
48 NovaCompute specific configuration to inject into the cluster. Same
49 structure as ExtraConfig.
56 description: Mapping of service_name -> network name. Typically set
57 via parameter_defaults in the resource registry.
61 description: Mapping of service endpoint -> protocol. Typically set
62 via parameter_defaults in the resource registry.
68 Setting to a previously unused value during stack-update will trigger
69 package update on all nodes
72 default: '' # Defaults to Heat created hostname
76 description: Optional mapping to override hostnames
77 NetworkDeploymentActions:
78 type: comma_delimited_list
80 Heat action when to apply network configuration changes
82 SoftwareConfigTransport:
83 default: POLL_SERVER_CFN
85 How the server should receive the metadata required for software configuration.
88 - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
90 default: 'localdomain'
93 The DNS domain used for the hosts. This must match the
94 overcloud_domain_name configured on the undercloud.
95 NovaComputeServerMetadata:
98 Extra properties or metadata passed to Nova for the created nodes in
99 the overcloud. It's accessible via the Nova metadata API. This option is
100 role-specific and is merged with the values given to the ServerMetadata
106 Extra properties or metadata passed to Nova for the created nodes in
107 the overcloud. It's accessible via the Nova metadata API. This applies to
108 all roles and is merged with a role-specific metadata parameter.
110 NovaComputeSchedulerHints:
112 description: Optional scheduler hints to pass to nova
114 ServiceConfigSettings:
118 type: comma_delimited_list
120 MonitoringSubscriptions:
121 type: comma_delimited_list
123 ServiceMetadataSettings:
128 description: Command which will be run whenever configuration data changes
129 default: os-refresh-config --timeout 14400
134 Maximum amount of time to possibly to delay configuation collection
135 polling. Defaults to 30 seconds. Set to 0 to disable it which will cause
136 the configuration collection to occur as soon as the collection process
137 starts. This setting is used to prevent the configuration collection
138 processes from polling all at the exact same time.
142 Command or script snippet to run on all overcloud nodes to
143 initialize the upgrade process. E.g. a repository switch.
145 UpgradeInitCommonCommand:
148 Common commands required by the upgrades process. This should not
149 normally be modified by the operator and is set and unset in the
150 major-upgrade-composable-steps.yaml and major-upgrade-converge.yaml
153 DeploymentServerBlacklistDict:
157 Map of server hostnames to blacklist from any triggered
158 deployments. If the value is 1, the server will be blacklisted. This
159 parameter is generated from the parent template.
162 description: Role Specific Parameters
166 server_not_blacklisted:
169 - {get_param: [DeploymentServerBlacklistDict, {get_param: Hostname}]}
175 type: OS::TripleO::ComputeServer
178 command: {get_param: ConfigCommand}
179 splay: {get_param: ConfigCollectSplay}
181 image: {get_param: NovaImage}
183 get_param: ImageUpdatePolicy
184 flavor: {get_param: OvercloudComputeFlavor}
185 key_name: {get_param: KeyName}
188 user_data_format: SOFTWARE_CONFIG
189 user_data: {get_resource: UserData}
192 template: {get_param: Hostname}
193 params: {get_param: HostnameMap}
194 software_config_transport: {get_param: SoftwareConfigTransport}
197 - {get_param: ServerMetadata}
198 - {get_param: NovaComputeServerMetadata}
199 - {get_param: ServiceMetadataSettings}
200 scheduler_hints: {get_param: NovaComputeSchedulerHints}
202 # Combine the NodeAdminUserData and NodeUserData mime archives
204 type: OS::Heat::MultipartMime
207 - config: {get_resource: NodeAdminUserData}
209 - config: {get_resource: NodeUserData}
211 - config: {get_resource: RoleUserData}
214 # Creates the "heat-admin" user if configured via the environment
215 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
217 type: OS::TripleO::NodeAdminUserData
219 # For optional operator additional userdata
220 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
222 type: OS::TripleO::NodeUserData
224 # For optional operator role-specific userdata
225 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
227 type: OS::TripleO::Compute::NodeUserData
230 type: OS::TripleO::Compute::Ports::ExternalPort
232 ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
233 IPPool: {get_param: NovaComputeIPs}
234 NodeIndex: {get_param: NodeIndex}
237 type: OS::TripleO::Compute::Ports::InternalApiPort
239 ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
240 IPPool: {get_param: NovaComputeIPs}
241 NodeIndex: {get_param: NodeIndex}
244 type: OS::TripleO::Compute::Ports::StoragePort
246 ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
247 IPPool: {get_param: NovaComputeIPs}
248 NodeIndex: {get_param: NodeIndex}
251 type: OS::TripleO::Compute::Ports::StorageMgmtPort
253 ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
254 IPPool: {get_param: NovaComputeIPs}
255 NodeIndex: {get_param: NodeIndex}
258 type: OS::TripleO::Compute::Ports::TenantPort
260 ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
261 IPPool: {get_param: NovaComputeIPs}
262 NodeIndex: {get_param: NodeIndex}
265 type: OS::TripleO::Compute::Ports::ManagementPort
267 ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
268 IPPool: {get_param: NovaComputeIPs}
269 NodeIndex: {get_param: NodeIndex}
272 type: OS::TripleO::Network::Ports::NetIpMap
274 ControlPlaneIp: {get_attr: [NovaCompute, networks, ctlplane, 0]}
275 ExternalIp: {get_attr: [ExternalPort, ip_address]}
276 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
277 ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
278 InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
279 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
280 InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
281 StorageIp: {get_attr: [StoragePort, ip_address]}
282 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
283 StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
284 StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
285 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
286 StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
287 TenantIp: {get_attr: [TenantPort, ip_address]}
288 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
289 TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
290 ManagementIp: {get_attr: [ManagementPort, ip_address]}
291 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
292 ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
295 type: OS::Heat::Value
303 - - {get_attr: [NovaCompute, name]}
305 - {get_param: CloudDomain}
309 - - {get_attr: [NovaCompute, name]}
315 - - {get_attr: [NovaCompute, name]}
317 - {get_param: CloudDomain}
321 - - {get_attr: [NovaCompute, name]}
327 - - {get_attr: [NovaCompute, name]}
329 - {get_param: CloudDomain}
333 - - {get_attr: [NovaCompute, name]}
339 - - {get_attr: [NovaCompute, name]}
341 - {get_param: CloudDomain}
345 - - {get_attr: [NovaCompute, name]}
351 - - {get_attr: [NovaCompute, name]}
353 - {get_param: CloudDomain}
357 - - {get_attr: [NovaCompute, name]}
363 - - {get_attr: [NovaCompute, name]}
365 - {get_param: CloudDomain}
369 - - {get_attr: [NovaCompute, name]}
375 - - {get_attr: [NovaCompute, name]}
377 - {get_param: CloudDomain}
381 - - {get_attr: [NovaCompute, name]}
385 type: OS::TripleO::Compute::PreNetworkConfig
387 server: {get_resource: NovaCompute}
388 RoleParameters: {get_param: RoleParameters}
389 deployment_actions: {get_attr: [DeploymentActions, value]}
392 type: OS::TripleO::Compute::Net::SoftwareConfig
394 ControlPlaneIp: {get_attr: [NovaCompute, networks, ctlplane, 0]}
395 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
396 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
397 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
398 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
399 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
400 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
403 type: OS::TripleO::SoftwareDeployment
404 depends_on: PreNetworkConfig
406 name: NetworkDeployment
409 - server_not_blacklisted
410 - {get_param: NetworkDeploymentActions}
412 config: {get_resource: NetworkConfig}
413 server: {get_resource: NovaCompute}
415 bridge_name: {get_param: NeutronPhysicalBridge}
416 interface_name: {get_param: NeutronPublicInterface}
418 NovaComputeUpgradeInitConfig:
419 type: OS::Heat::SoftwareConfig
425 - - "#!/bin/bash\n\n"
426 - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
427 - get_param: UpgradeInitCommand
428 - get_param: UpgradeInitCommonCommand
430 # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
431 # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
432 NovaComputeUpgradeInitDeployment:
433 type: OS::Heat::SoftwareDeployment
434 depends_on: NetworkDeployment
436 name: NovaComputeUpgradeInitDeployment
439 - server_not_blacklisted
440 - ['CREATE', 'UPDATE']
442 server: {get_resource: NovaCompute}
443 config: {get_resource: NovaComputeUpgradeInitConfig}
446 type: OS::Heat::StructuredConfig
452 - heat_config_%{::deploy_config_name}
454 - compute_extraconfig
459 - bootstrap_node # provided by allNodesConfig
460 - all_nodes # provided by allNodesConfig
461 - vip_data # provided by allNodesConfig
463 - neutron_bigswitch_data # Optionally provided by ComputeExtraConfigPre
464 - cisco_n1kv_data # Optionally provided by ComputeExtraConfigPre
465 - nova_nuage_data # Optionally provided by ComputeExtraConfigPre
466 - midonet_data # Optionally provided by AllNodesExtraConfig
467 - neutron_opencontrail_data # Optionally provided by ComputeExtraConfigPre
468 - cisco_aci_data # Optionally provided by ComputeExtraConfigPre
469 merge_behavior: deeper
472 service_names: {get_param: ServiceNames}
473 sensu::subscriptions: {get_param: MonitoringSubscriptions}
476 - {get_param: ServiceConfigSettings}
477 - values: {get_attr: [NetIpMap, net_ip_map]}
478 compute_extraconfig: {get_param: NovaComputeExtraConfig}
479 extraconfig: {get_param: ExtraConfig}
481 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
482 fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
483 fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
484 fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
485 fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
486 fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
487 fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
488 fqdn_external: {get_attr: [NetHostMap, value, external, fqdn]}
490 NovaComputeDeployment:
491 type: OS::TripleO::SoftwareDeployment
492 depends_on: NovaComputeUpgradeInitDeployment
494 name: NovaComputeDeployment
497 - server_not_blacklisted
498 - ['CREATE', 'UPDATE']
500 config: {get_resource: NovaComputeConfig}
501 server: {get_resource: NovaCompute}
503 enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
505 # Resource for site-specific injection of root certificate
507 depends_on: NovaComputeDeployment
508 type: OS::TripleO::NodeTLSCAData
510 server: {get_resource: NovaCompute}
512 # Hook for site-specific additional pre-deployment config, e.g extra hieradata
513 ComputeExtraConfigPre:
514 depends_on: NovaComputeDeployment
515 type: OS::TripleO::ComputeExtraConfigPre
516 # We have to use conditions here so that we don't break backwards
517 # compatibility with templates everywhere
518 condition: server_not_blacklisted
520 server: {get_resource: NovaCompute}
522 # Hook for site-specific additional pre-deployment config,
523 # applying to all nodes, e.g node registration/unregistration
525 depends_on: [ComputeExtraConfigPre, NodeTLSCAData]
526 type: OS::TripleO::NodeExtraConfig
527 # We have to use conditions here so that we don't break backwards
528 # compatibility with templates everywhere
529 condition: server_not_blacklisted
531 server: {get_resource: NovaCompute}
534 type: OS::TripleO::Tasks::PackageUpdate
537 type: OS::Heat::SoftwareDeployment
538 depends_on: NetworkDeployment
540 name: UpdateDeployment
543 - server_not_blacklisted
544 - ['CREATE', 'UPDATE']
546 config: {get_resource: UpdateConfig}
547 server: {get_resource: NovaCompute}
550 get_param: UpdateIdentifier
553 type: OS::Heat::Value
557 - server_not_blacklisted
558 - ['CREATE', 'UPDATE']
562 type: OS::TripleO::Ssh::HostPubKey
563 depends_on: NovaComputeDeployment
565 server: {get_resource: NovaCompute}
566 deployment_actions: {get_attr: [DeploymentActions, value]}
570 description: IP address of the server in the ctlplane network
571 value: {get_attr: [NovaCompute, networks, ctlplane, 0]}
573 description: IP address of the server in the external network
574 value: {get_attr: [ExternalPort, ip_address]}
575 internal_api_ip_address:
576 description: IP address of the server in the internal_api network
577 value: {get_attr: [InternalApiPort, ip_address]}
579 description: IP address of the server in the storage network
580 value: {get_attr: [StoragePort, ip_address]}
581 storage_mgmt_ip_address:
582 description: IP address of the server in the storage_mgmt network
583 value: {get_attr: [StorageMgmtPort, ip_address]}
585 description: IP address of the server in the tenant network
586 value: {get_attr: [TenantPort, ip_address]}
587 management_ip_address:
588 description: IP address of the server in the management network
589 value: {get_attr: [ManagementPort, ip_address]}
591 description: Hostname of the server
592 value: {get_attr: [NovaCompute, name]}
594 description: Mapping of network names to hostnames
596 external: {get_attr: [NetHostMap, value, external, fqdn]}
597 internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
598 storage: {get_attr: [NetHostMap, value, storage, fqdn]}
599 storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
600 tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
601 management: {get_attr: [NetHostMap, value, management, fqdn]}
602 ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
605 Server's IP address and hostname in the /etc/hosts format
609 PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
610 EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
611 INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
612 STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
613 STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
614 TENANTIP TENANTHOST.DOMAIN TENANTHOST
615 MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
616 CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
618 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ComputeHostnameResolveNetwork]}]}
619 DOMAIN: {get_param: CloudDomain}
620 PRIMARYHOST: {get_attr: [NovaCompute, name]}
621 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
622 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
623 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
624 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
625 STORAGEIP: {get_attr: [StoragePort, ip_address]}
626 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
627 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
628 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
629 TENANTIP: {get_attr: [TenantPort, ip_address]}
630 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
631 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
632 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
633 CTLPLANEIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
634 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
636 description: Entry for ssh known hosts
639 template: "PRIMARYIP,PRIMARYHOST.DOMAIN,PRIMARYHOST,\
640 EXTERNALIP,EXTERNALHOST.DOMAIN,EXTERNALHOST,\
641 INTERNAL_APIIP,INTERNAL_APIHOST.DOMAIN,INTERNAL_APIHOST,\
642 STORAGEIP,STORAGEHOST.DOMAIN,STORAGEHOST,\
643 STORAGE_MGMTIP,STORAGE_MGMTHOST.DOMAIN,STORAGE_MGMTHOST,\
644 TENANTIP,TENANTHOST.DOMAIN,TENANTHOST,\
645 MANAGEMENTIP,MANAGEMENTHOST.DOMAIN,MANAGEMENTHOST,\
646 CTLPLANEIP,CTLPLANEHOST.DOMAIN,CTLPLANEHOST HOSTSSHPUBKEY"
648 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ComputeHostnameResolveNetwork]}]}
649 DOMAIN: {get_param: CloudDomain}
650 PRIMARYHOST: {get_attr: [NovaCompute, name]}
651 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
652 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
653 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
654 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
655 STORAGEIP: {get_attr: [StoragePort, ip_address]}
656 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
657 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
658 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
659 TENANTIP: {get_attr: [TenantPort, ip_address]}
660 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
661 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
662 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
663 CTLPLANEIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
664 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
665 HOSTSSHPUBKEY: {get_attr: [SshHostPubKey, ecdsa]}
666 nova_server_resource:
667 description: Heat resource handle for the Nova compute server
669 {get_resource: NovaCompute}
670 condition: server_not_blacklisted