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: Role Specific Parameters
145 DeploymentSwiftDataMap:
148 Map of servers to Swift container and object for storing deployment data.
149 The keys are the Heat assigned hostnames, and the value is a map of the
150 container/object name in Swift. Example value:
151 overcloud-controller-0:
152 container: overcloud-controller
154 overcloud-controller-1:
155 container: overcloud-controller
157 overcloud-controller-2:
158 container: overcloud-controller
160 overcloud-novacompute-0:
161 container: overcloud-compute
166 server_not_blacklisted:
169 - {get_param: [DeploymentServerBlacklistDict, {get_param: Hostname}]}
171 deployment_swift_data_map_unset:
174 - DeploymentSwiftDataMap
175 - {get_param: Hostname}
180 type: OS::TripleO::BlockStorageServer
183 command: {get_param: ConfigCommand}
184 splay: {get_param: ConfigCollectSplay}
187 {get_param: BlockStorageImage}
188 flavor: {get_param: OvercloudBlockStorageFlavor}
189 key_name: {get_param: KeyName}
192 user_data_format: SOFTWARE_CONFIG
193 user_data: {get_resource: UserData}
196 template: {get_param: Hostname}
197 params: {get_param: HostnameMap}
198 software_config_transport: {get_param: SoftwareConfigTransport}
201 - {get_param: ServerMetadata}
202 - {get_param: BlockStorageServerMetadata}
203 - {get_param: ServiceMetadataSettings}
204 scheduler_hints: {get_param: BlockStorageSchedulerHints}
205 deployment_swift_data:
207 - deployment_swift_data_map_unset
209 - {get_param: [DeploymentSwiftDataMap,
210 {get_param: Hostname}]}
212 # Combine the NodeAdminUserData and NodeUserData mime archives
214 type: OS::Heat::MultipartMime
217 - config: {get_resource: NodeAdminUserData}
219 - config: {get_resource: NodeUserData}
221 - config: {get_resource: RoleUserData}
224 # Creates the "heat-admin" user if configured via the environment
225 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
227 type: OS::TripleO::NodeAdminUserData
229 # For optional operator additional userdata
230 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
232 type: OS::TripleO::NodeUserData
234 # For optional operator role-specific userdata
235 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
237 type: OS::TripleO::BlockStorage::NodeUserData
240 type: OS::TripleO::BlockStorage::Ports::ExternalPort
242 ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
243 IPPool: {get_param: BlockStorageIPs}
244 NodeIndex: {get_param: NodeIndex}
247 type: OS::TripleO::BlockStorage::Ports::InternalApiPort
249 ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
250 IPPool: {get_param: BlockStorageIPs}
251 NodeIndex: {get_param: NodeIndex}
254 type: OS::TripleO::BlockStorage::Ports::StoragePort
256 ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
257 IPPool: {get_param: BlockStorageIPs}
258 NodeIndex: {get_param: NodeIndex}
261 type: OS::TripleO::BlockStorage::Ports::StorageMgmtPort
263 ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
264 IPPool: {get_param: BlockStorageIPs}
265 NodeIndex: {get_param: NodeIndex}
268 type: OS::TripleO::BlockStorage::Ports::TenantPort
270 ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
271 IPPool: {get_param: BlockStorageIPs}
272 NodeIndex: {get_param: NodeIndex}
275 type: OS::TripleO::BlockStorage::Ports::ManagementPort
277 ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
278 IPPool: {get_param: BlockStorageIPs}
279 NodeIndex: {get_param: NodeIndex}
282 type: OS::TripleO::BlockStorage::Net::SoftwareConfig
284 ControlPlaneIp: {get_attr: [BlockStorage, networks, ctlplane, 0]}
285 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
286 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
287 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
288 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
289 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
290 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
293 type: OS::TripleO::Network::Ports::NetIpMap
295 ControlPlaneIp: {get_attr: [BlockStorage, networks, ctlplane, 0]}
296 ExternalIp: {get_attr: [ExternalPort, ip_address]}
297 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
298 ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
299 InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
300 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
301 InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
302 StorageIp: {get_attr: [StoragePort, ip_address]}
303 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
304 StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
305 StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
306 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
307 StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
308 TenantIp: {get_attr: [TenantPort, ip_address]}
309 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
310 TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
311 ManagementIp: {get_attr: [ManagementPort, ip_address]}
312 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
313 ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
316 type: OS::Heat::Value
324 - - {get_attr: [BlockStorage, name]}
326 - {get_param: CloudDomain}
330 - - {get_attr: [BlockStorage, name]}
336 - - {get_attr: [BlockStorage, name]}
338 - {get_param: CloudDomain}
342 - - {get_attr: [BlockStorage, name]}
348 - - {get_attr: [BlockStorage, name]}
350 - {get_param: CloudDomain}
354 - - {get_attr: [BlockStorage, name]}
360 - - {get_attr: [BlockStorage, name]}
362 - {get_param: CloudDomain}
366 - - {get_attr: [BlockStorage, name]}
372 - - {get_attr: [BlockStorage, name]}
374 - {get_param: CloudDomain}
378 - - {get_attr: [BlockStorage, name]}
384 - - {get_attr: [BlockStorage, name]}
386 - {get_param: CloudDomain}
390 - - {get_attr: [BlockStorage, name]}
396 - - {get_attr: [BlockStorage, name]}
398 - {get_param: CloudDomain}
402 - - {get_attr: [BlockStorage, name]}
406 type: OS::TripleO::BlockStorage::PreNetworkConfig
408 server: {get_resource: BlockStorage}
409 RoleParameters: {get_param: RoleParameters}
412 type: OS::TripleO::SoftwareDeployment
413 depends_on: PreNetworkConfig
415 name: NetworkDeployment
416 config: {get_resource: NetworkConfig}
417 server: {get_resource: BlockStorage}
420 - server_not_blacklisted
421 - {get_param: NetworkDeploymentActions}
424 BlockStorageUpgradeInitConfig:
425 type: OS::Heat::SoftwareConfig
431 - - "#!/bin/bash\n\n"
432 - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
433 - get_param: UpgradeInitCommand
434 - get_param: UpgradeInitCommonCommand
436 # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
437 # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
438 BlockStorageUpgradeInitDeployment:
439 type: OS::Heat::SoftwareDeployment
440 depends_on: NetworkDeployment
442 name: BlockStorageUpgradeInitDeployment
443 server: {get_resource: BlockStorage}
444 config: {get_resource: BlockStorageUpgradeInitConfig}
447 - server_not_blacklisted
448 - ['CREATE', 'UPDATE']
451 BlockStorageDeployment:
452 type: OS::Heat::StructuredDeployment
453 depends_on: BlockStorageUpgradeInitDeployment
455 name: BlockStorageDeployment
456 server: {get_resource: BlockStorage}
457 config: {get_resource: BlockStorageConfig}
459 enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
462 - server_not_blacklisted
463 - ['CREATE', 'UPDATE']
466 # Map heat metadata into hiera datafiles
468 type: OS::Heat::StructuredConfig
474 - heat_config_%{::deploy_config_name}
481 - bootstrap_node # provided by allNodesConfig
482 - all_nodes # provided by allNodesConfig
483 - vip_data # provided by allNodesConfig
485 merge_behavior: deeper
488 service_names: {get_param: ServiceNames}
489 sensu::subscriptions: {get_param: MonitoringSubscriptions}
492 - {get_param: ServiceConfigSettings}
493 - values: {get_attr: [NetIpMap, net_ip_map]}
494 volume_extraconfig: {get_param: BlockStorageExtraConfig}
495 extraconfig: {get_param: ExtraConfig}
497 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
498 fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
499 fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
500 fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
501 fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
502 fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
503 fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
504 fqdn_external: {get_attr: [NetHostMap, value, external, fqdn]}
506 # Resource for site-specific injection of root certificate
508 depends_on: BlockStorageDeployment
509 type: OS::TripleO::NodeTLSCAData
511 server: {get_resource: BlockStorage}
513 # Hook for site-specific additional pre-deployment config,
514 # applying to all nodes, e.g node registration/unregistration
516 depends_on: NodeTLSCAData
517 type: OS::TripleO::NodeExtraConfig
519 server: {get_resource: BlockStorage}
522 type: OS::TripleO::Tasks::PackageUpdate
525 type: OS::Heat::SoftwareDeployment
526 depends_on: NetworkDeployment
528 name: UpdateDeployment
529 config: {get_resource: UpdateConfig}
530 server: {get_resource: BlockStorage}
533 get_param: UpdateIdentifier
536 - server_not_blacklisted
537 - ['CREATE', 'UPDATE']
541 type: OS::TripleO::Ssh::HostPubKey
542 depends_on: BlockStorageDeployment
544 server: {get_resource: BlockStorage}
548 description: IP address of the server in the ctlplane network
549 value: {get_attr: [BlockStorage, networks, ctlplane, 0]}
551 description: Hostname of the server
552 value: {get_attr: [BlockStorage, name]}
554 description: Mapping of network names to hostnames
556 external: {get_attr: [NetHostMap, value, external, fqdn]}
557 internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
558 storage: {get_attr: [NetHostMap, value, storage, fqdn]}
559 storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
560 tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
561 management: {get_attr: [NetHostMap, value, management, fqdn]}
562 ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
567 PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
568 EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
569 INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
570 STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
571 STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
572 TENANTIP TENANTHOST.DOMAIN TENANTHOST
573 MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
574 CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
576 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, BlockStorageHostnameResolveNetwork]}]}
577 DOMAIN: {get_param: CloudDomain}
578 PRIMARYHOST: {get_attr: [BlockStorage, name]}
579 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
580 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
581 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
582 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
583 STORAGEIP: {get_attr: [StoragePort, ip_address]}
584 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
585 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
586 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
587 TENANTIP: {get_attr: [TenantPort, ip_address]}
588 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
589 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
590 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
591 CTLPLANEIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
592 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
594 description: Entry for ssh known hosts
597 template: "PRIMARYIP,PRIMARYHOST.DOMAIN,PRIMARYHOST,\
598 EXTERNALIP,EXTERNALHOST.DOMAIN,EXTERNALHOST,\
599 INTERNAL_APIIP,INTERNAL_APIHOST.DOMAIN,INTERNAL_APIHOST,\
600 STORAGEIP,STORAGEHOST.DOMAIN,STORAGEHOST,\
601 STORAGE_MGMTIP,STORAGE_MGMTHOST.DOMAIN,STORAGE_MGMTHOST,\
602 TENANTIP,TENANTHOST.DOMAIN,TENANTHOST,\
603 MANAGEMENTIP,MANAGEMENTHOST.DOMAIN,MANAGEMENTHOST,\
604 CTLPLANEIP,CTLPLANEHOST.DOMAIN,CTLPLANEHOST HOSTSSHPUBKEY"
606 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, BlockStorageHostnameResolveNetwork]}]}
607 DOMAIN: {get_param: CloudDomain}
608 PRIMARYHOST: {get_attr: [BlockStorage, name]}
609 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
610 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
611 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
612 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
613 STORAGEIP: {get_attr: [StoragePort, ip_address]}
614 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
615 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
616 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
617 TENANTIP: {get_attr: [TenantPort, ip_address]}
618 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
619 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
620 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
621 CTLPLANEIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
622 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
623 HOSTSSHPUBKEY: {get_attr: [SshHostPubKey, ecdsa]}
624 nova_server_resource:
625 description: Heat resource handle for the block storage server
627 {get_resource: BlockStorage}
628 condition: server_not_blacklisted
630 description: IP address of the server in the external network
631 value: {get_attr: [ExternalPort, ip_address]}
632 internal_api_ip_address:
633 description: IP address of the server in the internal_api network
634 value: {get_attr: [InternalApiPort, ip_address]}
636 description: IP address of the server in the storage network
637 value: {get_attr: [StoragePort, ip_address]}
638 storage_mgmt_ip_address:
639 description: IP address of the server in the storage_mgmt network
640 value: {get_attr: [StorageMgmtPort, ip_address]}
642 description: IP address of the server in the tenant network
643 value: {get_attr: [TenantPort, ip_address]}
644 management_ip_address:
645 description: IP address of the server in the management network
646 value: {get_attr: [ManagementPort, ip_address]}
648 description: The os-collect-config configuration associated with this server resource
649 value: {get_attr: [BlockStorage, os_collect_config]}