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
380 name: NetworkDeployment
381 config: {get_resource: NetworkConfig}
382 server: {get_resource: BlockStorage}
385 - server_not_blacklisted
386 - {get_param: NetworkDeploymentActions}
389 BlockStorageUpgradeInitConfig:
390 type: OS::Heat::SoftwareConfig
396 - - "#!/bin/bash\n\n"
397 - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
398 - get_param: UpgradeInitCommand
399 - get_param: UpgradeInitCommonCommand
401 # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
402 # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
403 BlockStorageUpgradeInitDeployment:
404 type: OS::Heat::SoftwareDeployment
405 depends_on: NetworkDeployment
407 name: BlockStorageUpgradeInitDeployment
408 server: {get_resource: BlockStorage}
409 config: {get_resource: BlockStorageUpgradeInitConfig}
412 - server_not_blacklisted
413 - ['CREATE', 'UPDATE']
416 BlockStorageDeployment:
417 type: OS::Heat::StructuredDeployment
418 depends_on: BlockStorageUpgradeInitDeployment
420 name: BlockStorageDeployment
421 server: {get_resource: BlockStorage}
422 config: {get_resource: BlockStorageConfig}
424 enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
427 - server_not_blacklisted
428 - ['CREATE', 'UPDATE']
431 # Map heat metadata into hiera datafiles
433 type: OS::Heat::StructuredConfig
439 - heat_config_%{::deploy_config_name}
446 - bootstrap_node # provided by allNodesConfig
447 - all_nodes # provided by allNodesConfig
448 - vip_data # provided by allNodesConfig
450 merge_behavior: deeper
453 service_names: {get_param: ServiceNames}
454 sensu::subscriptions: {get_param: MonitoringSubscriptions}
457 - {get_param: ServiceConfigSettings}
458 - values: {get_attr: [NetIpMap, net_ip_map]}
459 volume_extraconfig: {get_param: BlockStorageExtraConfig}
460 extraconfig: {get_param: ExtraConfig}
462 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
463 fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
464 fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
465 fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
466 fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
467 fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
468 fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
469 fqdn_external: {get_attr: [NetHostMap, value, external, fqdn]}
471 # Resource for site-specific injection of root certificate
473 depends_on: BlockStorageDeployment
474 type: OS::TripleO::NodeTLSCAData
476 server: {get_resource: BlockStorage}
478 # Hook for site-specific additional pre-deployment config,
479 # applying to all nodes, e.g node registration/unregistration
481 depends_on: NodeTLSCAData
482 type: OS::TripleO::NodeExtraConfig
484 server: {get_resource: BlockStorage}
487 type: OS::TripleO::Tasks::PackageUpdate
490 type: OS::Heat::SoftwareDeployment
491 depends_on: NetworkDeployment
493 name: UpdateDeployment
494 config: {get_resource: UpdateConfig}
495 server: {get_resource: BlockStorage}
498 get_param: UpdateIdentifier
501 - server_not_blacklisted
502 - ['CREATE', 'UPDATE']
506 type: OS::TripleO::Ssh::HostPubKey
507 depends_on: BlockStorageDeployment
509 server: {get_resource: BlockStorage}
513 description: IP address of the server in the ctlplane network
514 value: {get_attr: [BlockStorage, networks, ctlplane, 0]}
516 description: Hostname of the server
517 value: {get_attr: [BlockStorage, name]}
519 description: Mapping of network names to hostnames
521 external: {get_attr: [NetHostMap, value, external, fqdn]}
522 internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
523 storage: {get_attr: [NetHostMap, value, storage, fqdn]}
524 storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
525 tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
526 management: {get_attr: [NetHostMap, value, management, fqdn]}
527 ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
532 PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
533 EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
534 INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
535 STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
536 STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
537 TENANTIP TENANTHOST.DOMAIN TENANTHOST
538 MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
539 CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
541 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, BlockStorageHostnameResolveNetwork]}]}
542 DOMAIN: {get_param: CloudDomain}
543 PRIMARYHOST: {get_attr: [BlockStorage, name]}
544 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
545 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
546 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
547 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
548 STORAGEIP: {get_attr: [StoragePort, ip_address]}
549 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
550 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
551 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
552 TENANTIP: {get_attr: [TenantPort, ip_address]}
553 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
554 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
555 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
556 CTLPLANEIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
557 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
559 description: Entry for ssh known hosts
562 template: "PRIMARYIP,PRIMARYHOST.DOMAIN,PRIMARYHOST,\
563 EXTERNALIP,EXTERNALHOST.DOMAIN,EXTERNALHOST,\
564 INTERNAL_APIIP,INTERNAL_APIHOST.DOMAIN,INTERNAL_APIHOST,\
565 STORAGEIP,STORAGEHOST.DOMAIN,STORAGEHOST,\
566 STORAGE_MGMTIP,STORAGE_MGMTHOST.DOMAIN,STORAGE_MGMTHOST,\
567 TENANTIP,TENANTHOST.DOMAIN,TENANTHOST,\
568 MANAGEMENTIP,MANAGEMENTHOST.DOMAIN,MANAGEMENTHOST,\
569 CTLPLANEIP,CTLPLANEHOST.DOMAIN,CTLPLANEHOST HOSTSSHPUBKEY"
571 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, BlockStorageHostnameResolveNetwork]}]}
572 DOMAIN: {get_param: CloudDomain}
573 PRIMARYHOST: {get_attr: [BlockStorage, name]}
574 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
575 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
576 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
577 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
578 STORAGEIP: {get_attr: [StoragePort, ip_address]}
579 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
580 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
581 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
582 TENANTIP: {get_attr: [TenantPort, ip_address]}
583 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
584 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
585 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
586 CTLPLANEIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
587 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
588 HOSTSSHPUBKEY: {get_attr: [SshHostPubKey, ecdsa]}
589 nova_server_resource:
590 description: Heat resource handle for the block storage server
592 {get_resource: BlockStorage}
593 condition: server_not_blacklisted
595 description: IP address of the server in the external network
596 value: {get_attr: [ExternalPort, ip_address]}
597 internal_api_ip_address:
598 description: IP address of the server in the internal_api network
599 value: {get_attr: [InternalApiPort, ip_address]}
601 description: IP address of the server in the storage network
602 value: {get_attr: [StoragePort, ip_address]}
603 storage_mgmt_ip_address:
604 description: IP address of the server in the storage_mgmt network
605 value: {get_attr: [StorageMgmtPort, ip_address]}
607 description: IP address of the server in the tenant network
608 value: {get_attr: [TenantPort, ip_address]}
609 management_ip_address:
610 description: IP address of the server in the management network
611 value: {get_attr: [ManagementPort, ip_address]}