1 heat_template_version: pike
2 description: 'OpenStack cinder storage configured by Puppet'
5 default: overcloud-full
8 - custom_constraint: glance.image
12 Additional hiera configuration to inject into the cluster. Note
13 that BlockStorageExtraConfig takes precedence over ExtraConfig.
15 BlockStorageExtraConfig:
18 Role specific additional hiera configuration to inject into the cluster.
23 OvercloudBlockStorageFlavor:
24 description: Flavor for block storage nodes to request when deploying.
28 - custom_constraint: nova.flavor
31 description: Name of an existing Nova key pair to enable SSH access to the instances
37 Setting to a previously unused value during stack-update will trigger
38 package update on all nodes
41 default: '' # Defaults to Heat created hostname
45 description: Optional mapping to override hostnames
48 description: Mapping of service_name -> network name. Typically set
49 via parameter_defaults in the resource registry.
53 description: Mapping of service endpoint -> protocol. Typically set
54 via parameter_defaults in the resource registry.
56 NetworkDeploymentActions:
57 type: comma_delimited_list
59 Heat action when to apply network configuration changes
61 SoftwareConfigTransport:
62 default: POLL_SERVER_CFN
64 How the server should receive the metadata required for software configuration.
67 - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
69 default: 'localdomain'
72 The DNS domain used for the hosts. This must match the
73 overcloud_domain_name configured on the undercloud.
74 BlockStorageServerMetadata:
77 Extra properties or metadata passed to Nova for the created nodes in
78 the overcloud. It's accessible via the Nova metadata API. This option is
79 role-specific and is merged with the values given to the ServerMetadata
85 Extra properties or metadata passed to Nova for the created nodes in
86 the overcloud. It's accessible via the Nova metadata API. This applies to
87 all roles and is merged with a role-specific metadata parameter.
89 BlockStorageSchedulerHints:
91 description: Optional scheduler hints to pass to nova
96 ServiceConfigSettings:
100 type: comma_delimited_list
102 MonitoringSubscriptions:
103 type: comma_delimited_list
105 ServiceMetadataSettings:
110 description: Command which will be run whenever configuration data changes
111 default: os-refresh-config --timeout 14400
116 Maximum amount of time to possibly to delay configuation collection
117 polling. Defaults to 30 seconds. Set to 0 to disable it which will cause
118 the configuration collection to occur as soon as the collection process
119 starts. This setting is used to prevent the configuration collection
120 processes from polling all at the exact same time.
124 Command or script snippet to run on all overcloud nodes to
125 initialize the upgrade process. E.g. a repository switch.
127 UpgradeInitCommonCommand:
130 Common commands required by the upgrades process. This should not
131 normally be modified by the operator and is set and unset in the
132 major-upgrade-composable-steps.yaml and major-upgrade-converge.yaml
135 DeploymentServerBlacklistDict:
139 Map of server hostnames to blacklist from any triggered
140 deployments. If the value is 1, the server will be blacklisted. This
141 parameter is generated from the parent template.
144 description: Parameters specific to the role
146 DeploymentSwiftDataMap:
149 Map of servers to Swift container and object for storing deployment data.
150 The keys are the Heat assigned hostnames, and the value is a map of the
151 container/object name in Swift. Example value:
152 overcloud-controller-0:
153 container: overcloud-controller
155 overcloud-controller-1:
156 container: overcloud-controller
158 overcloud-controller-2:
159 container: overcloud-controller
161 overcloud-novacompute-0:
162 container: overcloud-compute
167 server_not_blacklisted:
170 - {get_param: [DeploymentServerBlacklistDict, {get_param: Hostname}]}
172 deployment_swift_data_map_unset:
175 - DeploymentSwiftDataMap
176 - {get_param: Hostname}
181 type: OS::TripleO::BlockStorageServer
184 command: {get_param: ConfigCommand}
185 splay: {get_param: ConfigCollectSplay}
188 {get_param: BlockStorageImage}
189 flavor: {get_param: OvercloudBlockStorageFlavor}
190 key_name: {get_param: KeyName}
193 user_data_format: SOFTWARE_CONFIG
194 user_data: {get_resource: UserData}
197 template: {get_param: Hostname}
198 params: {get_param: HostnameMap}
199 software_config_transport: {get_param: SoftwareConfigTransport}
202 - {get_param: ServerMetadata}
203 - {get_param: BlockStorageServerMetadata}
204 - {get_param: ServiceMetadataSettings}
205 scheduler_hints: {get_param: BlockStorageSchedulerHints}
206 deployment_swift_data:
208 - deployment_swift_data_map_unset
210 - {get_param: [DeploymentSwiftDataMap,
211 {get_param: Hostname}]}
213 # Combine the NodeAdminUserData and NodeUserData mime archives
215 type: OS::Heat::MultipartMime
218 - config: {get_resource: NodeAdminUserData}
220 - config: {get_resource: NodeUserData}
222 - config: {get_resource: RoleUserData}
225 # Creates the "heat-admin" user if configured via the environment
226 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
228 type: OS::TripleO::NodeAdminUserData
230 # For optional operator additional userdata
231 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
233 type: OS::TripleO::NodeUserData
235 # For optional operator role-specific userdata
236 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
238 type: OS::TripleO::BlockStorage::NodeUserData
241 type: OS::TripleO::BlockStorage::Ports::ExternalPort
243 ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
244 IPPool: {get_param: BlockStorageIPs}
245 NodeIndex: {get_param: NodeIndex}
248 type: OS::TripleO::BlockStorage::Ports::InternalApiPort
250 ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
251 IPPool: {get_param: BlockStorageIPs}
252 NodeIndex: {get_param: NodeIndex}
255 type: OS::TripleO::BlockStorage::Ports::StoragePort
257 ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
258 IPPool: {get_param: BlockStorageIPs}
259 NodeIndex: {get_param: NodeIndex}
262 type: OS::TripleO::BlockStorage::Ports::StorageMgmtPort
264 ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
265 IPPool: {get_param: BlockStorageIPs}
266 NodeIndex: {get_param: NodeIndex}
269 type: OS::TripleO::BlockStorage::Ports::TenantPort
271 ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
272 IPPool: {get_param: BlockStorageIPs}
273 NodeIndex: {get_param: NodeIndex}
276 type: OS::TripleO::BlockStorage::Ports::ManagementPort
278 ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
279 IPPool: {get_param: BlockStorageIPs}
280 NodeIndex: {get_param: NodeIndex}
283 type: OS::TripleO::BlockStorage::Net::SoftwareConfig
285 ControlPlaneIp: {get_attr: [BlockStorage, networks, ctlplane, 0]}
286 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
287 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
288 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
289 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
290 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
291 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
294 type: OS::TripleO::Network::Ports::NetIpMap
296 ControlPlaneIp: {get_attr: [BlockStorage, networks, ctlplane, 0]}
297 ExternalIp: {get_attr: [ExternalPort, ip_address]}
298 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
299 ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
300 InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
301 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
302 InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
303 StorageIp: {get_attr: [StoragePort, ip_address]}
304 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
305 StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
306 StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
307 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
308 StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
309 TenantIp: {get_attr: [TenantPort, ip_address]}
310 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
311 TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
312 ManagementIp: {get_attr: [ManagementPort, ip_address]}
313 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
314 ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
317 type: OS::Heat::Value
325 - - {get_attr: [BlockStorage, name]}
327 - {get_param: CloudDomain}
331 - - {get_attr: [BlockStorage, name]}
337 - - {get_attr: [BlockStorage, name]}
339 - {get_param: CloudDomain}
343 - - {get_attr: [BlockStorage, name]}
349 - - {get_attr: [BlockStorage, name]}
351 - {get_param: CloudDomain}
355 - - {get_attr: [BlockStorage, name]}
361 - - {get_attr: [BlockStorage, name]}
363 - {get_param: CloudDomain}
367 - - {get_attr: [BlockStorage, name]}
373 - - {get_attr: [BlockStorage, name]}
375 - {get_param: CloudDomain}
379 - - {get_attr: [BlockStorage, name]}
385 - - {get_attr: [BlockStorage, name]}
387 - {get_param: CloudDomain}
391 - - {get_attr: [BlockStorage, name]}
397 - - {get_attr: [BlockStorage, name]}
399 - {get_param: CloudDomain}
403 - - {get_attr: [BlockStorage, name]}
407 type: OS::TripleO::BlockStorage::PreNetworkConfig
409 server: {get_resource: BlockStorage}
410 RoleParameters: {get_param: RoleParameters}
411 ServiceNames: {get_param: ServiceNames}
412 deployment_actions: {get_attr: [DeploymentActions, value]}
415 type: OS::TripleO::SoftwareDeployment
416 depends_on: PreNetworkConfig
418 name: NetworkDeployment
419 config: {get_resource: NetworkConfig}
420 server: {get_resource: BlockStorage}
423 - server_not_blacklisted
424 - {get_param: NetworkDeploymentActions}
427 BlockStorageUpgradeInitConfig:
428 type: OS::Heat::SoftwareConfig
434 - - "#!/bin/bash\n\n"
435 - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
436 - get_param: UpgradeInitCommand
437 - get_param: UpgradeInitCommonCommand
439 # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
440 # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
441 BlockStorageUpgradeInitDeployment:
442 type: OS::Heat::SoftwareDeployment
443 depends_on: NetworkDeployment
445 name: BlockStorageUpgradeInitDeployment
446 server: {get_resource: BlockStorage}
447 config: {get_resource: BlockStorageUpgradeInitConfig}
450 - server_not_blacklisted
451 - ['CREATE', 'UPDATE']
454 BlockStorageDeployment:
455 type: OS::Heat::StructuredDeployment
456 depends_on: BlockStorageUpgradeInitDeployment
458 name: BlockStorageDeployment
459 server: {get_resource: BlockStorage}
460 config: {get_resource: BlockStorageConfig}
462 enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
465 - server_not_blacklisted
466 - ['CREATE', 'UPDATE']
469 # Map heat metadata into hiera datafiles
471 type: OS::Heat::StructuredConfig
477 - heat_config_%{::deploy_config_name}
484 - bootstrap_node # provided by allNodesConfig
485 - all_nodes # provided by allNodesConfig
486 - vip_data # provided by allNodesConfig
488 merge_behavior: deeper
491 service_names: {get_param: ServiceNames}
492 sensu::subscriptions: {get_param: MonitoringSubscriptions}
495 - {get_param: ServiceConfigSettings}
496 - values: {get_attr: [NetIpMap, net_ip_map]}
497 volume_extraconfig: {get_param: BlockStorageExtraConfig}
498 extraconfig: {get_param: ExtraConfig}
500 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
501 fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
502 fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
503 fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
504 fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
505 fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
506 fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
507 fqdn_external: {get_attr: [NetHostMap, value, external, fqdn]}
509 # Resource for site-specific injection of root certificate
511 depends_on: BlockStorageDeployment
512 type: OS::TripleO::NodeTLSCAData
514 server: {get_resource: BlockStorage}
516 # Hook for site-specific additional pre-deployment config,
517 # applying to all nodes, e.g node registration/unregistration
519 depends_on: NodeTLSCAData
520 type: OS::TripleO::NodeExtraConfig
521 # We have to use conditions here so that we don't break backwards
522 # compatibility with templates everywhere
523 condition: server_not_blacklisted
525 server: {get_resource: BlockStorage}
528 type: OS::TripleO::Tasks::PackageUpdate
531 type: OS::Heat::SoftwareDeployment
532 depends_on: NetworkDeployment
534 name: UpdateDeployment
535 config: {get_resource: UpdateConfig}
536 server: {get_resource: BlockStorage}
539 get_param: UpdateIdentifier
542 - server_not_blacklisted
543 - ['CREATE', 'UPDATE']
547 type: OS::Heat::Value
551 - server_not_blacklisted
552 - ['CREATE', 'UPDATE']
556 type: OS::TripleO::Ssh::HostPubKey
557 depends_on: BlockStorageDeployment
559 server: {get_resource: BlockStorage}
560 deployment_actions: {get_attr: [DeploymentActions, value]}
564 description: IP address of the server in the ctlplane network
565 value: {get_attr: [BlockStorage, networks, ctlplane, 0]}
567 description: Hostname of the server
568 value: {get_attr: [BlockStorage, name]}
570 description: Mapping of network names to hostnames
572 external: {get_attr: [NetHostMap, value, external, fqdn]}
573 internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
574 storage: {get_attr: [NetHostMap, value, storage, fqdn]}
575 storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
576 tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
577 management: {get_attr: [NetHostMap, value, management, fqdn]}
578 ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
583 PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
584 EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
585 INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
586 STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
587 STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
588 TENANTIP TENANTHOST.DOMAIN TENANTHOST
589 MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
590 CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
592 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, BlockStorageHostnameResolveNetwork]}]}
593 DOMAIN: {get_param: CloudDomain}
594 PRIMARYHOST: {get_attr: [BlockStorage, name]}
595 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
596 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
597 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
598 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
599 STORAGEIP: {get_attr: [StoragePort, ip_address]}
600 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
601 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
602 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
603 TENANTIP: {get_attr: [TenantPort, ip_address]}
604 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
605 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
606 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
607 CTLPLANEIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
608 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
610 description: Entry for ssh known hosts
613 template: "PRIMARYIP,PRIMARYHOST.DOMAIN,PRIMARYHOST,\
614 EXTERNALIP,EXTERNALHOST.DOMAIN,EXTERNALHOST,\
615 INTERNAL_APIIP,INTERNAL_APIHOST.DOMAIN,INTERNAL_APIHOST,\
616 STORAGEIP,STORAGEHOST.DOMAIN,STORAGEHOST,\
617 STORAGE_MGMTIP,STORAGE_MGMTHOST.DOMAIN,STORAGE_MGMTHOST,\
618 TENANTIP,TENANTHOST.DOMAIN,TENANTHOST,\
619 MANAGEMENTIP,MANAGEMENTHOST.DOMAIN,MANAGEMENTHOST,\
620 CTLPLANEIP,CTLPLANEHOST.DOMAIN,CTLPLANEHOST HOSTSSHPUBKEY"
622 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, BlockStorageHostnameResolveNetwork]}]}
623 DOMAIN: {get_param: CloudDomain}
624 PRIMARYHOST: {get_attr: [BlockStorage, name]}
625 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
626 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
627 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
628 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
629 STORAGEIP: {get_attr: [StoragePort, ip_address]}
630 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
631 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
632 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
633 TENANTIP: {get_attr: [TenantPort, ip_address]}
634 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
635 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
636 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
637 CTLPLANEIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
638 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
639 HOSTSSHPUBKEY: {get_attr: [SshHostPubKey, ecdsa]}
640 nova_server_resource:
641 description: Heat resource handle for the block storage server
643 {get_resource: BlockStorage}
644 condition: server_not_blacklisted
646 description: IP address of the server in the external network
647 value: {get_attr: [ExternalPort, ip_address]}
648 internal_api_ip_address:
649 description: IP address of the server in the internal_api network
650 value: {get_attr: [InternalApiPort, ip_address]}
652 description: IP address of the server in the storage network
653 value: {get_attr: [StoragePort, ip_address]}
654 storage_mgmt_ip_address:
655 description: IP address of the server in the storage_mgmt network
656 value: {get_attr: [StorageMgmtPort, ip_address]}
658 description: IP address of the server in the tenant network
659 value: {get_attr: [TenantPort, ip_address]}
660 management_ip_address:
661 description: IP address of the server in the management network
662 value: {get_attr: [ManagementPort, ip_address]}
663 deployed_server_port_map:
665 Map of Heat created hostname of the server to ip address. This is the
666 hostname before it has been mapped with the HostnameMap parameter, and
667 the IP address from the ctlplane network. This map can be used to construct
668 the DeployedServerPortMap parameter when using split-stack.
673 - ip_address: {get_attr: [BlockStorage, networks, ctlplane, 0]}
678 - - {get_param: Hostname}
680 deployed_server_deployment_swift_data_map:
682 Map of Heat created hostname of the server to the Swift container and object
683 used to created the temporary url for metadata polling with
691 - {get_attr: [BlockStorage, os_collect_config, request, metadata_url]}
698 - {get_attr: [BlockStorage, os_collect_config, request, metadata_url]}
701 - keys: {hostname: {get_param: Hostname}}
703 description: The os-collect-config configuration associated with this server resource
704 value: {get_attr: [BlockStorage, os_collect_config]}