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
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}
414 type: OS::TripleO::SoftwareDeployment
415 depends_on: PreNetworkConfig
417 name: NetworkDeployment
418 config: {get_resource: NetworkConfig}
419 server: {get_resource: BlockStorage}
422 - server_not_blacklisted
423 - {get_param: NetworkDeploymentActions}
426 BlockStorageUpgradeInitConfig:
427 type: OS::Heat::SoftwareConfig
433 - - "#!/bin/bash\n\n"
434 - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
435 - get_param: UpgradeInitCommand
436 - get_param: UpgradeInitCommonCommand
438 # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
439 # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
440 BlockStorageUpgradeInitDeployment:
441 type: OS::Heat::SoftwareDeployment
442 depends_on: NetworkDeployment
444 name: BlockStorageUpgradeInitDeployment
445 server: {get_resource: BlockStorage}
446 config: {get_resource: BlockStorageUpgradeInitConfig}
449 - server_not_blacklisted
450 - ['CREATE', 'UPDATE']
453 BlockStorageDeployment:
454 type: OS::Heat::StructuredDeployment
455 depends_on: BlockStorageUpgradeInitDeployment
457 name: BlockStorageDeployment
458 server: {get_resource: BlockStorage}
459 config: {get_resource: BlockStorageConfig}
461 enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
464 - server_not_blacklisted
465 - ['CREATE', 'UPDATE']
468 # Map heat metadata into hiera datafiles
470 type: OS::Heat::StructuredConfig
476 - heat_config_%{::deploy_config_name}
483 - bootstrap_node # provided by allNodesConfig
484 - all_nodes # provided by allNodesConfig
485 - vip_data # provided by allNodesConfig
487 merge_behavior: deeper
490 service_names: {get_param: ServiceNames}
491 sensu::subscriptions: {get_param: MonitoringSubscriptions}
494 - {get_param: ServiceConfigSettings}
495 - values: {get_attr: [NetIpMap, net_ip_map]}
496 volume_extraconfig: {get_param: BlockStorageExtraConfig}
497 extraconfig: {get_param: ExtraConfig}
499 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
500 fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
501 fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
502 fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
503 fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
504 fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
505 fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
506 fqdn_external: {get_attr: [NetHostMap, value, external, fqdn]}
508 # Resource for site-specific injection of root certificate
510 depends_on: BlockStorageDeployment
511 type: OS::TripleO::NodeTLSCAData
513 server: {get_resource: BlockStorage}
515 # Hook for site-specific additional pre-deployment config,
516 # applying to all nodes, e.g node registration/unregistration
518 depends_on: NodeTLSCAData
519 type: OS::TripleO::NodeExtraConfig
521 server: {get_resource: BlockStorage}
524 type: OS::TripleO::Tasks::PackageUpdate
527 type: OS::Heat::SoftwareDeployment
528 depends_on: NetworkDeployment
530 name: UpdateDeployment
531 config: {get_resource: UpdateConfig}
532 server: {get_resource: BlockStorage}
535 get_param: UpdateIdentifier
538 - server_not_blacklisted
539 - ['CREATE', 'UPDATE']
543 type: OS::TripleO::Ssh::HostPubKey
544 depends_on: BlockStorageDeployment
546 server: {get_resource: BlockStorage}
550 description: IP address of the server in the ctlplane network
551 value: {get_attr: [BlockStorage, networks, ctlplane, 0]}
553 description: Hostname of the server
554 value: {get_attr: [BlockStorage, name]}
556 description: Mapping of network names to hostnames
558 external: {get_attr: [NetHostMap, value, external, fqdn]}
559 internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
560 storage: {get_attr: [NetHostMap, value, storage, fqdn]}
561 storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
562 tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
563 management: {get_attr: [NetHostMap, value, management, fqdn]}
564 ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
569 PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
570 EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
571 INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
572 STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
573 STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
574 TENANTIP TENANTHOST.DOMAIN TENANTHOST
575 MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
576 CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
578 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, BlockStorageHostnameResolveNetwork]}]}
579 DOMAIN: {get_param: CloudDomain}
580 PRIMARYHOST: {get_attr: [BlockStorage, name]}
581 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
582 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
583 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
584 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
585 STORAGEIP: {get_attr: [StoragePort, ip_address]}
586 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
587 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
588 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
589 TENANTIP: {get_attr: [TenantPort, ip_address]}
590 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
591 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
592 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
593 CTLPLANEIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
594 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
596 description: Entry for ssh known hosts
599 template: "PRIMARYIP,PRIMARYHOST.DOMAIN,PRIMARYHOST,\
600 EXTERNALIP,EXTERNALHOST.DOMAIN,EXTERNALHOST,\
601 INTERNAL_APIIP,INTERNAL_APIHOST.DOMAIN,INTERNAL_APIHOST,\
602 STORAGEIP,STORAGEHOST.DOMAIN,STORAGEHOST,\
603 STORAGE_MGMTIP,STORAGE_MGMTHOST.DOMAIN,STORAGE_MGMTHOST,\
604 TENANTIP,TENANTHOST.DOMAIN,TENANTHOST,\
605 MANAGEMENTIP,MANAGEMENTHOST.DOMAIN,MANAGEMENTHOST,\
606 CTLPLANEIP,CTLPLANEHOST.DOMAIN,CTLPLANEHOST HOSTSSHPUBKEY"
608 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, BlockStorageHostnameResolveNetwork]}]}
609 DOMAIN: {get_param: CloudDomain}
610 PRIMARYHOST: {get_attr: [BlockStorage, name]}
611 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
612 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
613 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
614 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
615 STORAGEIP: {get_attr: [StoragePort, ip_address]}
616 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
617 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
618 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
619 TENANTIP: {get_attr: [TenantPort, ip_address]}
620 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
621 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
622 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
623 CTLPLANEIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
624 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
625 HOSTSSHPUBKEY: {get_attr: [SshHostPubKey, ecdsa]}
626 nova_server_resource:
627 description: Heat resource handle for the block storage server
629 {get_resource: BlockStorage}
630 condition: server_not_blacklisted
632 description: IP address of the server in the external network
633 value: {get_attr: [ExternalPort, ip_address]}
634 internal_api_ip_address:
635 description: IP address of the server in the internal_api network
636 value: {get_attr: [InternalApiPort, ip_address]}
638 description: IP address of the server in the storage network
639 value: {get_attr: [StoragePort, ip_address]}
640 storage_mgmt_ip_address:
641 description: IP address of the server in the storage_mgmt network
642 value: {get_attr: [StorageMgmtPort, ip_address]}
644 description: IP address of the server in the tenant network
645 value: {get_attr: [TenantPort, ip_address]}
646 management_ip_address:
647 description: IP address of the server in the management network
648 value: {get_attr: [ManagementPort, ip_address]}
650 description: The os-collect-config configuration associated with this server resource
651 value: {get_attr: [BlockStorage, os_collect_config]}