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 should match the dhcp_domain
94 configured in the Undercloud neutron. Defaults to localdomain.
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 server_not_blacklisted:
165 - {get_param: [DeploymentServerBlacklistDict, {get_param: Hostname}]}
171 type: OS::TripleO::ComputeServer
174 command: {get_param: ConfigCommand}
175 splay: {get_param: ConfigCollectSplay}
177 image: {get_param: NovaImage}
179 get_param: ImageUpdatePolicy
180 flavor: {get_param: OvercloudComputeFlavor}
181 key_name: {get_param: KeyName}
184 user_data_format: SOFTWARE_CONFIG
185 user_data: {get_resource: UserData}
188 template: {get_param: Hostname}
189 params: {get_param: HostnameMap}
190 software_config_transport: {get_param: SoftwareConfigTransport}
193 - {get_param: ServerMetadata}
194 - {get_param: NovaComputeServerMetadata}
195 - {get_param: ServiceMetadataSettings}
196 scheduler_hints: {get_param: NovaComputeSchedulerHints}
198 # Combine the NodeAdminUserData and NodeUserData mime archives
200 type: OS::Heat::MultipartMime
203 - config: {get_resource: NodeAdminUserData}
205 - config: {get_resource: NodeUserData}
207 - config: {get_resource: RoleUserData}
210 # Creates the "heat-admin" user if configured via the environment
211 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
213 type: OS::TripleO::NodeAdminUserData
215 # For optional operator additional userdata
216 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
218 type: OS::TripleO::NodeUserData
220 # For optional operator role-specific userdata
221 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
223 type: OS::TripleO::Compute::NodeUserData
226 type: OS::TripleO::Compute::Ports::ExternalPort
228 ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
229 IPPool: {get_param: NovaComputeIPs}
230 NodeIndex: {get_param: NodeIndex}
233 type: OS::TripleO::Compute::Ports::InternalApiPort
235 ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
236 IPPool: {get_param: NovaComputeIPs}
237 NodeIndex: {get_param: NodeIndex}
240 type: OS::TripleO::Compute::Ports::StoragePort
242 ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
243 IPPool: {get_param: NovaComputeIPs}
244 NodeIndex: {get_param: NodeIndex}
247 type: OS::TripleO::Compute::Ports::StorageMgmtPort
249 ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
250 IPPool: {get_param: NovaComputeIPs}
251 NodeIndex: {get_param: NodeIndex}
254 type: OS::TripleO::Compute::Ports::TenantPort
256 ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
257 IPPool: {get_param: NovaComputeIPs}
258 NodeIndex: {get_param: NodeIndex}
261 type: OS::TripleO::Compute::Ports::ManagementPort
263 ControlPlaneIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
264 IPPool: {get_param: NovaComputeIPs}
265 NodeIndex: {get_param: NodeIndex}
268 type: OS::TripleO::Network::Ports::NetIpMap
270 ControlPlaneIp: {get_attr: [NovaCompute, networks, ctlplane, 0]}
271 ExternalIp: {get_attr: [ExternalPort, ip_address]}
272 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
273 ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
274 InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
275 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
276 InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
277 StorageIp: {get_attr: [StoragePort, ip_address]}
278 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
279 StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
280 StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
281 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
282 StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
283 TenantIp: {get_attr: [TenantPort, ip_address]}
284 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
285 TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
286 ManagementIp: {get_attr: [ManagementPort, ip_address]}
287 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
288 ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
291 type: OS::Heat::Value
299 - - {get_attr: [NovaCompute, name]}
301 - {get_param: CloudDomain}
305 - - {get_attr: [NovaCompute, name]}
311 - - {get_attr: [NovaCompute, name]}
313 - {get_param: CloudDomain}
317 - - {get_attr: [NovaCompute, name]}
323 - - {get_attr: [NovaCompute, name]}
325 - {get_param: CloudDomain}
329 - - {get_attr: [NovaCompute, name]}
335 - - {get_attr: [NovaCompute, name]}
337 - {get_param: CloudDomain}
341 - - {get_attr: [NovaCompute, name]}
347 - - {get_attr: [NovaCompute, name]}
349 - {get_param: CloudDomain}
353 - - {get_attr: [NovaCompute, name]}
359 - - {get_attr: [NovaCompute, name]}
361 - {get_param: CloudDomain}
365 - - {get_attr: [NovaCompute, name]}
371 - - {get_attr: [NovaCompute, name]}
373 - {get_param: CloudDomain}
377 - - {get_attr: [NovaCompute, name]}
381 type: OS::TripleO::Compute::PreNetworkConfig
383 server: {get_resource: NovaCompute}
386 type: OS::TripleO::Compute::Net::SoftwareConfig
388 ControlPlaneIp: {get_attr: [NovaCompute, networks, ctlplane, 0]}
389 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
390 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
391 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
392 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
393 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
394 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
397 type: OS::TripleO::SoftwareDeployment
398 depends_on: PreNetworkConfig
400 name: NetworkDeployment
403 - server_not_blacklisted
404 - {get_param: NetworkDeploymentActions}
406 config: {get_resource: NetworkConfig}
407 server: {get_resource: NovaCompute}
409 bridge_name: {get_param: NeutronPhysicalBridge}
410 interface_name: {get_param: NeutronPublicInterface}
412 NovaComputeUpgradeInitConfig:
413 type: OS::Heat::SoftwareConfig
419 - - "#!/bin/bash\n\n"
420 - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
421 - get_param: UpgradeInitCommand
422 - get_param: UpgradeInitCommonCommand
424 # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
425 # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
426 NovaComputeUpgradeInitDeployment:
427 type: OS::Heat::SoftwareDeployment
428 depends_on: NetworkDeployment
430 name: NovaComputeUpgradeInitDeployment
433 - server_not_blacklisted
434 - ['CREATE', 'UPDATE']
436 server: {get_resource: NovaCompute}
437 config: {get_resource: NovaComputeUpgradeInitConfig}
440 type: OS::Heat::StructuredConfig
446 - heat_config_%{::deploy_config_name}
448 - compute_extraconfig
453 - bootstrap_node # provided by allNodesConfig
454 - all_nodes # provided by allNodesConfig
455 - vip_data # provided by allNodesConfig
457 - neutron_bigswitch_data # Optionally provided by ComputeExtraConfigPre
458 - cisco_n1kv_data # Optionally provided by ComputeExtraConfigPre
459 - nova_nuage_data # Optionally provided by ComputeExtraConfigPre
460 - midonet_data # Optionally provided by AllNodesExtraConfig
461 - neutron_opencontrail_data # Optionally provided by ComputeExtraConfigPre
462 - cisco_aci_data # Optionally provided by ComputeExtraConfigPre
463 merge_behavior: deeper
466 service_names: {get_param: ServiceNames}
467 sensu::subscriptions: {get_param: MonitoringSubscriptions}
470 - {get_param: ServiceConfigSettings}
471 - values: {get_attr: [NetIpMap, net_ip_map]}
472 compute_extraconfig: {get_param: NovaComputeExtraConfig}
473 extraconfig: {get_param: ExtraConfig}
475 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
476 fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
477 fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
478 fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
479 fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
480 fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
481 fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
482 fqdn_external: {get_attr: [NetHostMap, value, external, fqdn]}
484 NovaComputeDeployment:
485 type: OS::TripleO::SoftwareDeployment
486 depends_on: NovaComputeUpgradeInitDeployment
488 name: NovaComputeDeployment
491 - server_not_blacklisted
492 - ['CREATE', 'UPDATE']
494 config: {get_resource: NovaComputeConfig}
495 server: {get_resource: NovaCompute}
497 enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
499 # Resource for site-specific injection of root certificate
501 depends_on: NovaComputeDeployment
502 type: OS::TripleO::NodeTLSCAData
504 server: {get_resource: NovaCompute}
506 # Hook for site-specific additional pre-deployment config, e.g extra hieradata
507 ComputeExtraConfigPre:
508 depends_on: NovaComputeDeployment
509 type: OS::TripleO::ComputeExtraConfigPre
511 server: {get_resource: NovaCompute}
513 # Hook for site-specific additional pre-deployment config,
514 # applying to all nodes, e.g node registration/unregistration
516 depends_on: [ComputeExtraConfigPre, NodeTLSCAData]
517 type: OS::TripleO::NodeExtraConfig
519 server: {get_resource: NovaCompute}
522 type: OS::TripleO::Tasks::PackageUpdate
525 type: OS::Heat::SoftwareDeployment
526 depends_on: NetworkDeployment
528 name: UpdateDeployment
531 - server_not_blacklisted
532 - ['CREATE', 'UPDATE']
534 config: {get_resource: UpdateConfig}
535 server: {get_resource: NovaCompute}
538 get_param: UpdateIdentifier
541 type: OS::TripleO::Ssh::HostPubKey
542 depends_on: NovaComputeDeployment
544 server: {get_resource: NovaCompute}
548 description: IP address of the server in the ctlplane network
549 value: {get_attr: [NovaCompute, networks, ctlplane, 0]}
551 description: IP address of the server in the external network
552 value: {get_attr: [ExternalPort, ip_address]}
553 internal_api_ip_address:
554 description: IP address of the server in the internal_api network
555 value: {get_attr: [InternalApiPort, ip_address]}
557 description: IP address of the server in the storage network
558 value: {get_attr: [StoragePort, ip_address]}
559 storage_mgmt_ip_address:
560 description: IP address of the server in the storage_mgmt network
561 value: {get_attr: [StorageMgmtPort, ip_address]}
563 description: IP address of the server in the tenant network
564 value: {get_attr: [TenantPort, ip_address]}
565 management_ip_address:
566 description: IP address of the server in the management network
567 value: {get_attr: [ManagementPort, ip_address]}
569 description: Hostname of the server
570 value: {get_attr: [NovaCompute, name]}
572 description: Mapping of network names to hostnames
574 external: {get_attr: [NetHostMap, value, external, fqdn]}
575 internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
576 storage: {get_attr: [NetHostMap, value, storage, fqdn]}
577 storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
578 tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
579 management: {get_attr: [NetHostMap, value, management, fqdn]}
580 ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
583 Server's IP address and hostname in the /etc/hosts format
587 PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
588 EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
589 INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
590 STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
591 STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
592 TENANTIP TENANTHOST.DOMAIN TENANTHOST
593 MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
594 CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
596 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ComputeHostnameResolveNetwork]}]}
597 DOMAIN: {get_param: CloudDomain}
598 PRIMARYHOST: {get_attr: [NovaCompute, name]}
599 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
600 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
601 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
602 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
603 STORAGEIP: {get_attr: [StoragePort, ip_address]}
604 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
605 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
606 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
607 TENANTIP: {get_attr: [TenantPort, ip_address]}
608 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
609 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
610 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
611 CTLPLANEIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
612 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
614 description: Entry for ssh known hosts
617 template: "PRIMARYIP,PRIMARYHOST.DOMAIN,PRIMARYHOST,\
618 EXTERNALIP,EXTERNALHOST.DOMAIN,EXTERNALHOST,\
619 INTERNAL_APIIP,INTERNAL_APIHOST.DOMAIN,INTERNAL_APIHOST,\
620 STORAGEIP,STORAGEHOST.DOMAIN,STORAGEHOST,\
621 STORAGE_MGMTIP,STORAGE_MGMTHOST.DOMAIN,STORAGE_MGMTHOST,\
622 TENANTIP,TENANTHOST.DOMAIN,TENANTHOST,\
623 MANAGEMENTIP,MANAGEMENTHOST.DOMAIN,MANAGEMENTHOST,\
624 CTLPLANEIP,CTLPLANEHOST.DOMAIN,CTLPLANEHOST HOSTSSHPUBKEY"
626 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ComputeHostnameResolveNetwork]}]}
627 DOMAIN: {get_param: CloudDomain}
628 PRIMARYHOST: {get_attr: [NovaCompute, name]}
629 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
630 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
631 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
632 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
633 STORAGEIP: {get_attr: [StoragePort, ip_address]}
634 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
635 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
636 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
637 TENANTIP: {get_attr: [TenantPort, ip_address]}
638 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
639 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
640 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
641 CTLPLANEIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
642 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
643 HOSTSSHPUBKEY: {get_attr: [SshHostPubKey, ecdsa]}
644 nova_server_resource:
645 description: Heat resource handle for the Nova compute server
647 {get_resource: NovaCompute}
648 condition: server_not_blacklisted