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
138 type: OS::TripleO::BlockStorageServer
141 command: {get_param: ConfigCommand}
142 splay: {get_param: ConfigCollectSplay}
145 {get_param: BlockStorageImage}
146 flavor: {get_param: OvercloudBlockStorageFlavor}
147 key_name: {get_param: KeyName}
150 user_data_format: SOFTWARE_CONFIG
151 user_data: {get_resource: UserData}
154 template: {get_param: Hostname}
155 params: {get_param: HostnameMap}
156 software_config_transport: {get_param: SoftwareConfigTransport}
159 - {get_param: ServerMetadata}
160 - {get_param: BlockStorageServerMetadata}
161 - {get_param: ServiceMetadataSettings}
162 scheduler_hints: {get_param: BlockStorageSchedulerHints}
164 # Combine the NodeAdminUserData and NodeUserData mime archives
166 type: OS::Heat::MultipartMime
169 - config: {get_resource: NodeAdminUserData}
171 - config: {get_resource: NodeUserData}
173 - config: {get_resource: RoleUserData}
176 # Creates the "heat-admin" user if configured via the environment
177 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
179 type: OS::TripleO::NodeAdminUserData
181 # For optional operator additional userdata
182 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
184 type: OS::TripleO::NodeUserData
186 # For optional operator role-specific userdata
187 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
189 type: OS::TripleO::BlockStorage::NodeUserData
192 type: OS::TripleO::BlockStorage::Ports::ExternalPort
194 ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
195 IPPool: {get_param: BlockStorageIPs}
196 NodeIndex: {get_param: NodeIndex}
199 type: OS::TripleO::BlockStorage::Ports::InternalApiPort
201 ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
202 IPPool: {get_param: BlockStorageIPs}
203 NodeIndex: {get_param: NodeIndex}
206 type: OS::TripleO::BlockStorage::Ports::StoragePort
208 ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
209 IPPool: {get_param: BlockStorageIPs}
210 NodeIndex: {get_param: NodeIndex}
213 type: OS::TripleO::BlockStorage::Ports::StorageMgmtPort
215 ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
216 IPPool: {get_param: BlockStorageIPs}
217 NodeIndex: {get_param: NodeIndex}
220 type: OS::TripleO::BlockStorage::Ports::TenantPort
222 ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
223 IPPool: {get_param: BlockStorageIPs}
224 NodeIndex: {get_param: NodeIndex}
227 type: OS::TripleO::BlockStorage::Ports::ManagementPort
229 ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
230 IPPool: {get_param: BlockStorageIPs}
231 NodeIndex: {get_param: NodeIndex}
234 type: OS::TripleO::BlockStorage::Net::SoftwareConfig
236 ControlPlaneIp: {get_attr: [BlockStorage, networks, ctlplane, 0]}
237 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
238 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
239 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
240 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
241 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
242 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
245 type: OS::TripleO::Network::Ports::NetIpMap
247 ControlPlaneIp: {get_attr: [BlockStorage, networks, ctlplane, 0]}
248 ExternalIp: {get_attr: [ExternalPort, ip_address]}
249 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
250 ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
251 InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
252 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
253 InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
254 StorageIp: {get_attr: [StoragePort, ip_address]}
255 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
256 StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
257 StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
258 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
259 StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
260 TenantIp: {get_attr: [TenantPort, ip_address]}
261 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
262 TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
263 ManagementIp: {get_attr: [ManagementPort, ip_address]}
264 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
265 ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
268 type: OS::Heat::Value
276 - - {get_attr: [BlockStorage, name]}
278 - {get_param: CloudDomain}
282 - - {get_attr: [BlockStorage, name]}
288 - - {get_attr: [BlockStorage, name]}
290 - {get_param: CloudDomain}
294 - - {get_attr: [BlockStorage, name]}
300 - - {get_attr: [BlockStorage, name]}
302 - {get_param: CloudDomain}
306 - - {get_attr: [BlockStorage, name]}
312 - - {get_attr: [BlockStorage, name]}
314 - {get_param: CloudDomain}
318 - - {get_attr: [BlockStorage, name]}
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]}
358 type: OS::TripleO::BlockStorage::PreNetworkConfig
360 server: {get_resource: BlockStorage}
363 type: OS::TripleO::SoftwareDeployment
364 depends_on: PreNetworkConfig
366 name: NetworkDeployment
367 config: {get_resource: NetworkConfig}
368 server: {get_resource: BlockStorage}
369 actions: {get_param: NetworkDeploymentActions}
371 BlockStorageUpgradeInitConfig:
372 type: OS::Heat::SoftwareConfig
378 - - "#!/bin/bash\n\n"
379 - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
380 - get_param: UpgradeInitCommand
381 - get_param: UpgradeInitCommonCommand
383 # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
384 # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
385 BlockStorageUpgradeInitDeployment:
386 type: OS::Heat::SoftwareDeployment
387 depends_on: NetworkDeployment
389 name: BlockStorageUpgradeInitDeployment
390 server: {get_resource: BlockStorage}
391 config: {get_resource: BlockStorageUpgradeInitConfig}
393 BlockStorageDeployment:
394 type: OS::Heat::StructuredDeployment
395 depends_on: BlockStorageUpgradeInitDeployment
397 name: BlockStorageDeployment
398 server: {get_resource: BlockStorage}
399 config: {get_resource: BlockStorageConfig}
401 enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
403 # Map heat metadata into hiera datafiles
405 type: OS::Heat::StructuredConfig
411 - heat_config_%{::deploy_config_name}
417 - bootstrap_node # provided by allNodesConfig
418 - all_nodes # provided by allNodesConfig
419 - vip_data # provided by allNodesConfig
421 merge_behavior: deeper
424 service_names: {get_param: ServiceNames}
425 sensu::subscriptions: {get_param: MonitoringSubscriptions}
428 - {get_param: ServiceConfigSettings}
429 - values: {get_attr: [NetIpMap, net_ip_map]}
430 volume_extraconfig: {get_param: BlockStorageExtraConfig}
431 extraconfig: {get_param: ExtraConfig}
433 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
434 fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
435 fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
436 fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
437 fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
438 fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
439 fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
441 # Resource for site-specific injection of root certificate
443 depends_on: BlockStorageDeployment
444 type: OS::TripleO::NodeTLSCAData
446 server: {get_resource: BlockStorage}
448 # Hook for site-specific additional pre-deployment config,
449 # applying to all nodes, e.g node registration/unregistration
451 depends_on: NodeTLSCAData
452 type: OS::TripleO::NodeExtraConfig
454 server: {get_resource: BlockStorage}
457 type: OS::TripleO::Tasks::PackageUpdate
460 type: OS::Heat::SoftwareDeployment
461 depends_on: NetworkDeployment
463 name: UpdateDeployment
464 config: {get_resource: UpdateConfig}
465 server: {get_resource: BlockStorage}
468 get_param: UpdateIdentifier
471 type: OS::TripleO::Ssh::HostPubKey
472 depends_on: BlockStorageDeployment
474 server: {get_resource: BlockStorage}
478 description: IP address of the server in the ctlplane network
479 value: {get_attr: [BlockStorage, networks, ctlplane, 0]}
481 description: Hostname of the server
482 value: {get_attr: [BlockStorage, name]}
484 description: Mapping of network names to hostnames
486 external: {get_attr: [NetHostMap, value, external, fqdn]}
487 internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
488 storage: {get_attr: [NetHostMap, value, storage, fqdn]}
489 storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
490 tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
491 management: {get_attr: [NetHostMap, value, management, fqdn]}
492 ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
497 PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
498 EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
499 INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
500 STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
501 STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
502 TENANTIP TENANTHOST.DOMAIN TENANTHOST
503 MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
504 CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
506 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, BlockStorageHostnameResolveNetwork]}]}
507 DOMAIN: {get_param: CloudDomain}
508 PRIMARYHOST: {get_attr: [BlockStorage, name]}
509 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
510 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
511 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
512 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
513 STORAGEIP: {get_attr: [StoragePort, ip_address]}
514 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
515 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
516 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
517 TENANTIP: {get_attr: [TenantPort, ip_address]}
518 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
519 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
520 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
521 CTLPLANEIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
522 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
524 description: Entry for ssh known hosts
527 template: "PRIMARYIP,PRIMARYHOST.DOMAIN,PRIMARYHOST,\
528 EXTERNALIP,EXTERNALHOST.DOMAIN,EXTERNALHOST,\
529 INTERNAL_APIIP,INTERNAL_APIHOST.DOMAIN,INTERNAL_APIHOST,\
530 STORAGEIP,STORAGEHOST.DOMAIN,STORAGEHOST,\
531 STORAGE_MGMTIP,STORAGE_MGMTHOST.DOMAIN,STORAGE_MGMTHOST,\
532 TENANTIP,TENANTHOST.DOMAIN,TENANTHOST,\
533 MANAGEMENTIP,MANAGEMENTHOST.DOMAIN,MANAGEMENTHOST,\
534 CTLPLANEIP,CTLPLANEHOST.DOMAIN,CTLPLANEHOST HOSTSSHPUBKEY"
536 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, BlockStorageHostnameResolveNetwork]}]}
537 DOMAIN: {get_param: CloudDomain}
538 PRIMARYHOST: {get_attr: [BlockStorage, name]}
539 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
540 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
541 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
542 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
543 STORAGEIP: {get_attr: [StoragePort, ip_address]}
544 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
545 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
546 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
547 TENANTIP: {get_attr: [TenantPort, ip_address]}
548 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
549 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
550 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
551 CTLPLANEIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
552 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
553 HOSTSSHPUBKEY: {get_attr: [SshHostPubKey, ecdsa]}
554 nova_server_resource:
555 description: Heat resource handle for the block storage server
557 {get_resource: BlockStorage}
559 description: IP address of the server in the external network
560 value: {get_attr: [ExternalPort, ip_address]}
561 internal_api_ip_address:
562 description: IP address of the server in the internal_api network
563 value: {get_attr: [InternalApiPort, ip_address]}
565 description: IP address of the server in the storage network
566 value: {get_attr: [StoragePort, ip_address]}
567 storage_mgmt_ip_address:
568 description: IP address of the server in the storage_mgmt network
569 value: {get_attr: [StorageMgmtPort, ip_address]}
571 description: IP address of the server in the tenant network
572 value: {get_attr: [TenantPort, ip_address]}
573 management_ip_address:
574 description: IP address of the server in the management network
575 value: {get_attr: [ManagementPort, ip_address]}