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 should match the dhcp_domain
73 configured in the Undercloud neutron. Defaults to localdomain.
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 server_not_blacklisted:
147 - {get_param: [DeploymentServerBlacklistDict, {get_param: Hostname}]}
152 type: OS::TripleO::BlockStorageServer
155 command: {get_param: ConfigCommand}
156 splay: {get_param: ConfigCollectSplay}
159 {get_param: BlockStorageImage}
160 flavor: {get_param: OvercloudBlockStorageFlavor}
161 key_name: {get_param: KeyName}
164 user_data_format: SOFTWARE_CONFIG
165 user_data: {get_resource: UserData}
168 template: {get_param: Hostname}
169 params: {get_param: HostnameMap}
170 software_config_transport: {get_param: SoftwareConfigTransport}
173 - {get_param: ServerMetadata}
174 - {get_param: BlockStorageServerMetadata}
175 - {get_param: ServiceMetadataSettings}
176 scheduler_hints: {get_param: BlockStorageSchedulerHints}
178 # Combine the NodeAdminUserData and NodeUserData mime archives
180 type: OS::Heat::MultipartMime
183 - config: {get_resource: NodeAdminUserData}
185 - config: {get_resource: NodeUserData}
187 - config: {get_resource: RoleUserData}
190 # Creates the "heat-admin" user if configured via the environment
191 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
193 type: OS::TripleO::NodeAdminUserData
195 # For optional operator additional userdata
196 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
198 type: OS::TripleO::NodeUserData
200 # For optional operator role-specific userdata
201 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
203 type: OS::TripleO::BlockStorage::NodeUserData
206 type: OS::TripleO::BlockStorage::Ports::ExternalPort
208 ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
209 IPPool: {get_param: BlockStorageIPs}
210 NodeIndex: {get_param: NodeIndex}
213 type: OS::TripleO::BlockStorage::Ports::InternalApiPort
215 ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
216 IPPool: {get_param: BlockStorageIPs}
217 NodeIndex: {get_param: NodeIndex}
220 type: OS::TripleO::BlockStorage::Ports::StoragePort
222 ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
223 IPPool: {get_param: BlockStorageIPs}
224 NodeIndex: {get_param: NodeIndex}
227 type: OS::TripleO::BlockStorage::Ports::StorageMgmtPort
229 ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
230 IPPool: {get_param: BlockStorageIPs}
231 NodeIndex: {get_param: NodeIndex}
234 type: OS::TripleO::BlockStorage::Ports::TenantPort
236 ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
237 IPPool: {get_param: BlockStorageIPs}
238 NodeIndex: {get_param: NodeIndex}
241 type: OS::TripleO::BlockStorage::Ports::ManagementPort
243 ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
244 IPPool: {get_param: BlockStorageIPs}
245 NodeIndex: {get_param: NodeIndex}
248 type: OS::TripleO::BlockStorage::Net::SoftwareConfig
250 ControlPlaneIp: {get_attr: [BlockStorage, networks, ctlplane, 0]}
251 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
252 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
253 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
254 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
255 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
256 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
259 type: OS::TripleO::Network::Ports::NetIpMap
261 ControlPlaneIp: {get_attr: [BlockStorage, networks, ctlplane, 0]}
262 ExternalIp: {get_attr: [ExternalPort, ip_address]}
263 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
264 ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
265 InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
266 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
267 InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
268 StorageIp: {get_attr: [StoragePort, ip_address]}
269 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
270 StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
271 StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
272 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
273 StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
274 TenantIp: {get_attr: [TenantPort, ip_address]}
275 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
276 TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
277 ManagementIp: {get_attr: [ManagementPort, ip_address]}
278 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
279 ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
282 type: OS::Heat::Value
290 - - {get_attr: [BlockStorage, name]}
292 - {get_param: CloudDomain}
296 - - {get_attr: [BlockStorage, name]}
302 - - {get_attr: [BlockStorage, name]}
304 - {get_param: CloudDomain}
308 - - {get_attr: [BlockStorage, name]}
314 - - {get_attr: [BlockStorage, name]}
316 - {get_param: CloudDomain}
320 - - {get_attr: [BlockStorage, name]}
326 - - {get_attr: [BlockStorage, name]}
328 - {get_param: CloudDomain}
332 - - {get_attr: [BlockStorage, name]}
338 - - {get_attr: [BlockStorage, name]}
340 - {get_param: CloudDomain}
344 - - {get_attr: [BlockStorage, name]}
350 - - {get_attr: [BlockStorage, name]}
352 - {get_param: CloudDomain}
356 - - {get_attr: [BlockStorage, name]}
362 - - {get_attr: [BlockStorage, name]}
364 - {get_param: CloudDomain}
368 - - {get_attr: [BlockStorage, name]}
372 type: OS::TripleO::BlockStorage::PreNetworkConfig
374 server: {get_resource: BlockStorage}
377 type: OS::TripleO::SoftwareDeployment
378 depends_on: PreNetworkConfig
379 condition: server_not_blacklisted
381 name: NetworkDeployment
382 config: {get_resource: NetworkConfig}
383 server: {get_resource: BlockStorage}
384 actions: {get_param: NetworkDeploymentActions}
386 BlockStorageUpgradeInitConfig:
387 type: OS::Heat::SoftwareConfig
393 - - "#!/bin/bash\n\n"
394 - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
395 - get_param: UpgradeInitCommand
396 - get_param: UpgradeInitCommonCommand
398 # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
399 # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
400 BlockStorageUpgradeInitDeployment:
401 type: OS::Heat::SoftwareDeployment
402 depends_on: NetworkDeployment
403 condition: server_not_blacklisted
405 name: BlockStorageUpgradeInitDeployment
406 server: {get_resource: BlockStorage}
407 config: {get_resource: BlockStorageUpgradeInitConfig}
409 BlockStorageDeployment:
410 type: OS::Heat::StructuredDeployment
411 depends_on: BlockStorageUpgradeInitDeployment
412 condition: server_not_blacklisted
414 name: BlockStorageDeployment
415 server: {get_resource: BlockStorage}
416 config: {get_resource: BlockStorageConfig}
418 enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
420 # Map heat metadata into hiera datafiles
422 type: OS::Heat::StructuredConfig
428 - heat_config_%{::deploy_config_name}
435 - bootstrap_node # provided by allNodesConfig
436 - all_nodes # provided by allNodesConfig
437 - vip_data # provided by allNodesConfig
439 merge_behavior: deeper
442 service_names: {get_param: ServiceNames}
443 sensu::subscriptions: {get_param: MonitoringSubscriptions}
446 - {get_param: ServiceConfigSettings}
447 - values: {get_attr: [NetIpMap, net_ip_map]}
448 volume_extraconfig: {get_param: BlockStorageExtraConfig}
449 extraconfig: {get_param: ExtraConfig}
451 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
452 fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
453 fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
454 fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
455 fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
456 fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
457 fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
459 # Resource for site-specific injection of root certificate
461 depends_on: BlockStorageDeployment
462 type: OS::TripleO::NodeTLSCAData
464 server: {get_resource: BlockStorage}
466 # Hook for site-specific additional pre-deployment config,
467 # applying to all nodes, e.g node registration/unregistration
469 depends_on: NodeTLSCAData
470 type: OS::TripleO::NodeExtraConfig
472 server: {get_resource: BlockStorage}
475 type: OS::TripleO::Tasks::PackageUpdate
478 type: OS::Heat::SoftwareDeployment
479 depends_on: NetworkDeployment
480 condition: server_not_blacklisted
482 name: UpdateDeployment
483 config: {get_resource: UpdateConfig}
484 server: {get_resource: BlockStorage}
487 get_param: UpdateIdentifier
490 type: OS::TripleO::Ssh::HostPubKey
491 depends_on: BlockStorageDeployment
493 server: {get_resource: BlockStorage}
497 description: IP address of the server in the ctlplane network
498 value: {get_attr: [BlockStorage, networks, ctlplane, 0]}
500 description: Hostname of the server
501 value: {get_attr: [BlockStorage, name]}
503 description: Mapping of network names to hostnames
505 external: {get_attr: [NetHostMap, value, external, fqdn]}
506 internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
507 storage: {get_attr: [NetHostMap, value, storage, fqdn]}
508 storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
509 tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
510 management: {get_attr: [NetHostMap, value, management, fqdn]}
511 ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
516 PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
517 EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
518 INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
519 STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
520 STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
521 TENANTIP TENANTHOST.DOMAIN TENANTHOST
522 MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
523 CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
525 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, BlockStorageHostnameResolveNetwork]}]}
526 DOMAIN: {get_param: CloudDomain}
527 PRIMARYHOST: {get_attr: [BlockStorage, name]}
528 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
529 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
530 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
531 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
532 STORAGEIP: {get_attr: [StoragePort, ip_address]}
533 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
534 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
535 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
536 TENANTIP: {get_attr: [TenantPort, ip_address]}
537 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
538 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
539 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
540 CTLPLANEIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
541 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
543 description: Entry for ssh known hosts
546 template: "PRIMARYIP,PRIMARYHOST.DOMAIN,PRIMARYHOST,\
547 EXTERNALIP,EXTERNALHOST.DOMAIN,EXTERNALHOST,\
548 INTERNAL_APIIP,INTERNAL_APIHOST.DOMAIN,INTERNAL_APIHOST,\
549 STORAGEIP,STORAGEHOST.DOMAIN,STORAGEHOST,\
550 STORAGE_MGMTIP,STORAGE_MGMTHOST.DOMAIN,STORAGE_MGMTHOST,\
551 TENANTIP,TENANTHOST.DOMAIN,TENANTHOST,\
552 MANAGEMENTIP,MANAGEMENTHOST.DOMAIN,MANAGEMENTHOST,\
553 CTLPLANEIP,CTLPLANEHOST.DOMAIN,CTLPLANEHOST HOSTSSHPUBKEY"
555 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, BlockStorageHostnameResolveNetwork]}]}
556 DOMAIN: {get_param: CloudDomain}
557 PRIMARYHOST: {get_attr: [BlockStorage, name]}
558 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
559 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
560 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
561 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
562 STORAGEIP: {get_attr: [StoragePort, ip_address]}
563 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
564 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
565 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
566 TENANTIP: {get_attr: [TenantPort, ip_address]}
567 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
568 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
569 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
570 CTLPLANEIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
571 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
572 HOSTSSHPUBKEY: {get_attr: [SshHostPubKey, ecdsa]}
573 nova_server_resource:
574 description: Heat resource handle for the block storage server
576 {get_resource: BlockStorage}
577 condition: server_not_blacklisted
579 description: IP address of the server in the external network
580 value: {get_attr: [ExternalPort, ip_address]}
581 internal_api_ip_address:
582 description: IP address of the server in the internal_api network
583 value: {get_attr: [InternalApiPort, ip_address]}
585 description: IP address of the server in the storage network
586 value: {get_attr: [StoragePort, ip_address]}
587 storage_mgmt_ip_address:
588 description: IP address of the server in the storage_mgmt network
589 value: {get_attr: [StorageMgmtPort, ip_address]}
591 description: IP address of the server in the tenant network
592 value: {get_attr: [TenantPort, ip_address]}
593 management_ip_address:
594 description: IP address of the server in the management network
595 value: {get_attr: [ManagementPort, ip_address]}