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: Which interface 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: Parameters specific to the role
164 DeploymentSwiftDataMap:
167 Map of servers to Swift container and object for storing deployment data.
168 The keys are the Heat assigned hostnames, and the value is a map of the
169 container/object name in Swift. Example value:
170 overcloud-controller-0:
171 container: overcloud-controller
173 overcloud-controller-1:
174 container: overcloud-controller
176 overcloud-controller-2:
177 container: overcloud-controller
179 overcloud-novacompute-0:
180 container: overcloud-compute
185 deployment_swift_data_map_unset:
188 - DeploymentSwiftDataMap
189 - {get_param: Hostname}
191 server_not_blacklisted:
194 - {get_param: [DeploymentServerBlacklistDict, {get_param: Hostname}]}
200 type: OS::TripleO::ComputeServer
203 command: {get_param: ConfigCommand}
204 splay: {get_param: ConfigCollectSplay}
206 image: {get_param: NovaImage}
208 get_param: ImageUpdatePolicy
209 flavor: {get_param: OvercloudComputeFlavor}
210 key_name: {get_param: KeyName}
213 user_data_format: SOFTWARE_CONFIG
214 user_data: {get_resource: UserData}
217 template: {get_param: Hostname}
218 params: {get_param: HostnameMap}
219 software_config_transport: {get_param: SoftwareConfigTransport}
222 - {get_param: ServerMetadata}
223 - {get_param: NovaComputeServerMetadata}
224 - {get_param: ServiceMetadataSettings}
225 scheduler_hints: {get_param: NovaComputeSchedulerHints}
226 deployment_swift_data:
228 - deployment_swift_data_map_unset
230 - {get_param: [DeploymentSwiftDataMap,
231 {get_param: Hostname}]}
233 # Combine the NodeAdminUserData and NodeUserData mime archives
235 type: OS::Heat::MultipartMime
238 - config: {get_resource: NodeAdminUserData}
240 - config: {get_resource: NodeUserData}
242 - config: {get_resource: RoleUserData}
245 # Creates the "heat-admin" user if configured via the environment
246 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
248 type: OS::TripleO::NodeAdminUserData
250 # For optional operator additional userdata
251 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
253 type: OS::TripleO::NodeUserData
255 # For optional operator role-specific userdata
256 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
258 type: OS::TripleO::Compute::NodeUserData
261 type: OS::TripleO::Compute::Ports::ExternalPort
263 ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
264 IPPool: {get_param: NovaComputeIPs}
265 NodeIndex: {get_param: NodeIndex}
268 type: OS::TripleO::Compute::Ports::InternalApiPort
270 ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
271 IPPool: {get_param: NovaComputeIPs}
272 NodeIndex: {get_param: NodeIndex}
275 type: OS::TripleO::Compute::Ports::StoragePort
277 ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
278 IPPool: {get_param: NovaComputeIPs}
279 NodeIndex: {get_param: NodeIndex}
282 type: OS::TripleO::Compute::Ports::StorageMgmtPort
284 ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
285 IPPool: {get_param: NovaComputeIPs}
286 NodeIndex: {get_param: NodeIndex}
289 type: OS::TripleO::Compute::Ports::TenantPort
291 ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
292 IPPool: {get_param: NovaComputeIPs}
293 NodeIndex: {get_param: NodeIndex}
296 type: OS::TripleO::Compute::Ports::ManagementPort
298 ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
299 IPPool: {get_param: NovaComputeIPs}
300 NodeIndex: {get_param: NodeIndex}
303 type: OS::TripleO::Network::Ports::NetIpMap
305 ControlPlaneIp: {get_attr: [NovaCompute, networks, ctlplane, 0]}
306 ExternalIp: {get_attr: [ExternalPort, ip_address]}
307 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
308 ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
309 InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
310 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
311 InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
312 StorageIp: {get_attr: [StoragePort, ip_address]}
313 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
314 StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
315 StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
316 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
317 StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
318 TenantIp: {get_attr: [TenantPort, ip_address]}
319 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
320 TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
321 ManagementIp: {get_attr: [ManagementPort, ip_address]}
322 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
323 ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
326 type: OS::Heat::Value
334 - - {get_attr: [NovaCompute, name]}
336 - {get_param: CloudDomain}
340 - - {get_attr: [NovaCompute, name]}
346 - - {get_attr: [NovaCompute, name]}
348 - {get_param: CloudDomain}
352 - - {get_attr: [NovaCompute, name]}
358 - - {get_attr: [NovaCompute, name]}
360 - {get_param: CloudDomain}
364 - - {get_attr: [NovaCompute, name]}
370 - - {get_attr: [NovaCompute, name]}
372 - {get_param: CloudDomain}
376 - - {get_attr: [NovaCompute, name]}
382 - - {get_attr: [NovaCompute, name]}
384 - {get_param: CloudDomain}
388 - - {get_attr: [NovaCompute, name]}
394 - - {get_attr: [NovaCompute, name]}
396 - {get_param: CloudDomain}
400 - - {get_attr: [NovaCompute, name]}
406 - - {get_attr: [NovaCompute, name]}
408 - {get_param: CloudDomain}
412 - - {get_attr: [NovaCompute, name]}
416 type: OS::TripleO::Compute::PreNetworkConfig
418 server: {get_resource: NovaCompute}
419 RoleParameters: {get_param: RoleParameters}
420 ServiceNames: {get_param: ServiceNames}
421 deployment_actions: {get_attr: [DeploymentActions, value]}
424 type: OS::TripleO::Compute::Net::SoftwareConfig
426 ControlPlaneIp: {get_attr: [NovaCompute, networks, ctlplane, 0]}
427 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
428 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
429 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
430 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
431 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
432 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
435 type: OS::TripleO::SoftwareDeployment
436 depends_on: PreNetworkConfig
438 name: NetworkDeployment
441 - server_not_blacklisted
442 - {get_param: NetworkDeploymentActions}
444 config: {get_resource: NetworkConfig}
445 server: {get_resource: NovaCompute}
447 bridge_name: {get_param: NeutronPhysicalBridge}
448 interface_name: {get_param: NeutronPublicInterface}
450 NovaComputeUpgradeInitConfig:
451 type: OS::Heat::SoftwareConfig
457 - - "#!/bin/bash\n\n"
458 - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
459 - get_param: UpgradeInitCommand
460 - get_param: UpgradeInitCommonCommand
462 # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
463 # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
464 NovaComputeUpgradeInitDeployment:
465 type: OS::Heat::SoftwareDeployment
466 depends_on: NetworkDeployment
468 name: NovaComputeUpgradeInitDeployment
471 - server_not_blacklisted
472 - ['CREATE', 'UPDATE']
474 server: {get_resource: NovaCompute}
475 config: {get_resource: NovaComputeUpgradeInitConfig}
478 type: OS::Heat::StructuredConfig
484 - heat_config_%{::deploy_config_name}
486 - compute_extraconfig
491 - bootstrap_node # provided by allNodesConfig
492 - all_nodes # provided by allNodesConfig
493 - vip_data # provided by allNodesConfig
495 - neutron_bigswitch_data # Optionally provided by ComputeExtraConfigPre
496 - cisco_n1kv_data # Optionally provided by ComputeExtraConfigPre
497 - nova_nuage_data # Optionally provided by ComputeExtraConfigPre
498 - midonet_data # Optionally provided by AllNodesExtraConfig
499 - neutron_opencontrail_data # Optionally provided by ComputeExtraConfigPre
500 - cisco_aci_data # Optionally provided by ComputeExtraConfigPre
501 merge_behavior: deeper
504 service_names: {get_param: ServiceNames}
505 sensu::subscriptions: {get_param: MonitoringSubscriptions}
508 - {get_param: ServiceConfigSettings}
509 - values: {get_attr: [NetIpMap, net_ip_map]}
510 compute_extraconfig: {get_param: NovaComputeExtraConfig}
511 extraconfig: {get_param: ExtraConfig}
513 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
514 fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
515 fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
516 fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
517 fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
518 fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
519 fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
520 fqdn_external: {get_attr: [NetHostMap, value, external, fqdn]}
522 NovaComputeDeployment:
523 type: OS::TripleO::SoftwareDeployment
524 depends_on: NovaComputeUpgradeInitDeployment
526 name: NovaComputeDeployment
529 - server_not_blacklisted
530 - ['CREATE', 'UPDATE']
532 config: {get_resource: NovaComputeConfig}
533 server: {get_resource: NovaCompute}
535 enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
537 # Resource for site-specific injection of root certificate
539 depends_on: NovaComputeDeployment
540 type: OS::TripleO::NodeTLSCAData
542 server: {get_resource: NovaCompute}
544 # Hook for site-specific additional pre-deployment config, e.g extra hieradata
545 ComputeExtraConfigPre:
546 depends_on: NovaComputeDeployment
547 type: OS::TripleO::ComputeExtraConfigPre
548 # We have to use conditions here so that we don't break backwards
549 # compatibility with templates everywhere
550 condition: server_not_blacklisted
552 server: {get_resource: NovaCompute}
554 # Hook for site-specific additional pre-deployment config,
555 # applying to all nodes, e.g node registration/unregistration
557 depends_on: [ComputeExtraConfigPre, NodeTLSCAData]
558 type: OS::TripleO::NodeExtraConfig
559 # We have to use conditions here so that we don't break backwards
560 # compatibility with templates everywhere
561 condition: server_not_blacklisted
563 server: {get_resource: NovaCompute}
566 type: OS::TripleO::Tasks::PackageUpdate
569 type: OS::Heat::SoftwareDeployment
570 depends_on: NetworkDeployment
572 name: UpdateDeployment
575 - server_not_blacklisted
576 - ['CREATE', 'UPDATE']
578 config: {get_resource: UpdateConfig}
579 server: {get_resource: NovaCompute}
582 get_param: UpdateIdentifier
585 type: OS::Heat::Value
589 - server_not_blacklisted
590 - ['CREATE', 'UPDATE']
594 type: OS::TripleO::Ssh::HostPubKey
595 depends_on: NovaComputeDeployment
597 server: {get_resource: NovaCompute}
598 deployment_actions: {get_attr: [DeploymentActions, value]}
602 description: IP address of the server in the ctlplane network
603 value: {get_attr: [NovaCompute, networks, ctlplane, 0]}
605 description: IP address of the server in the external network
606 value: {get_attr: [ExternalPort, ip_address]}
607 internal_api_ip_address:
608 description: IP address of the server in the internal_api network
609 value: {get_attr: [InternalApiPort, ip_address]}
611 description: IP address of the server in the storage network
612 value: {get_attr: [StoragePort, ip_address]}
613 storage_mgmt_ip_address:
614 description: IP address of the server in the storage_mgmt network
615 value: {get_attr: [StorageMgmtPort, ip_address]}
617 description: IP address of the server in the tenant network
618 value: {get_attr: [TenantPort, ip_address]}
619 management_ip_address:
620 description: IP address of the server in the management network
621 value: {get_attr: [ManagementPort, ip_address]}
622 deployed_server_port_map:
624 Map of Heat created hostname of the server to ip address. This is the
625 hostname before it has been mapped with the HostnameMap parameter, and
626 the IP address from the ctlplane network. This map can be used to construct
627 the DeployedServerPortMap parameter when using split-stack.
632 - ip_address: {get_attr: [NovaCompute, networks, ctlplane, 0]}
637 - - {get_param: Hostname}
639 deployed_server_deployment_swift_data_map:
641 Map of Heat created hostname of the server to the Swift container and object
642 used to created the temporary url for metadata polling with
650 - {get_attr: [NovaCompute, os_collect_config, request, metadata_url]}
657 - {get_attr: [NovaCompute, os_collect_config, request, metadata_url]}
660 - keys: {hostname: {get_param: Hostname}}
662 description: Hostname of the server
663 value: {get_attr: [NovaCompute, name]}
665 description: Mapping of network names to hostnames
667 external: {get_attr: [NetHostMap, value, external, fqdn]}
668 internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
669 storage: {get_attr: [NetHostMap, value, storage, fqdn]}
670 storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
671 tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
672 management: {get_attr: [NetHostMap, value, management, fqdn]}
673 ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
676 Server's IP address and hostname in the /etc/hosts format
680 PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
681 EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
682 INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
683 STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
684 STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
685 TENANTIP TENANTHOST.DOMAIN TENANTHOST
686 MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
687 CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
689 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ComputeHostnameResolveNetwork]}]}
690 DOMAIN: {get_param: CloudDomain}
691 PRIMARYHOST: {get_attr: [NovaCompute, name]}
692 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
693 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
694 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
695 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
696 STORAGEIP: {get_attr: [StoragePort, ip_address]}
697 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
698 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
699 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
700 TENANTIP: {get_attr: [TenantPort, ip_address]}
701 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
702 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
703 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
704 CTLPLANEIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
705 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
707 description: Entry for ssh known hosts
710 template: "PRIMARYIP,PRIMARYHOST.DOMAIN,PRIMARYHOST,\
711 EXTERNALIP,EXTERNALHOST.DOMAIN,EXTERNALHOST,\
712 INTERNAL_APIIP,INTERNAL_APIHOST.DOMAIN,INTERNAL_APIHOST,\
713 STORAGEIP,STORAGEHOST.DOMAIN,STORAGEHOST,\
714 STORAGE_MGMTIP,STORAGE_MGMTHOST.DOMAIN,STORAGE_MGMTHOST,\
715 TENANTIP,TENANTHOST.DOMAIN,TENANTHOST,\
716 MANAGEMENTIP,MANAGEMENTHOST.DOMAIN,MANAGEMENTHOST,\
717 CTLPLANEIP,CTLPLANEHOST.DOMAIN,CTLPLANEHOST HOSTSSHPUBKEY"
719 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ComputeHostnameResolveNetwork]}]}
720 DOMAIN: {get_param: CloudDomain}
721 PRIMARYHOST: {get_attr: [NovaCompute, name]}
722 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
723 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
724 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
725 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
726 STORAGEIP: {get_attr: [StoragePort, ip_address]}
727 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
728 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
729 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
730 TENANTIP: {get_attr: [TenantPort, ip_address]}
731 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
732 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
733 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
734 CTLPLANEIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
735 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
736 HOSTSSHPUBKEY: {get_attr: [SshHostPubKey, ecdsa]}
737 nova_server_resource:
738 description: Heat resource handle for the Nova compute server
740 {get_resource: NovaCompute}
741 condition: server_not_blacklisted
743 description: The os-collect-config configuration associated with this server resource
744 value: {get_attr: [NovaCompute, os_collect_config]}