1 heat_template_version: ocata
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
115 Command or script snippet to run on all overcloud nodes to
116 initialize the upgrade process. E.g. a repository switch.
118 UpgradeInitCommonCommand:
121 Common commands required by the upgrades process. This should not
122 normally be modified by the operator and is set and unset in the
123 major-upgrade-composable-steps.yaml and major-upgrade-converge.yaml
129 type: OS::TripleO::BlockStorageServer
132 command: {get_param: ConfigCommand}
135 {get_param: BlockStorageImage}
136 flavor: {get_param: OvercloudBlockStorageFlavor}
137 key_name: {get_param: KeyName}
140 user_data_format: SOFTWARE_CONFIG
141 user_data: {get_resource: UserData}
144 template: {get_param: Hostname}
145 params: {get_param: HostnameMap}
146 software_config_transport: {get_param: SoftwareConfigTransport}
149 - {get_param: ServerMetadata}
150 - {get_param: BlockStorageServerMetadata}
151 - {get_param: ServiceMetadataSettings}
152 scheduler_hints: {get_param: BlockStorageSchedulerHints}
154 # Combine the NodeAdminUserData and NodeUserData mime archives
156 type: OS::Heat::MultipartMime
159 - config: {get_resource: NodeAdminUserData}
161 - config: {get_resource: NodeUserData}
163 - config: {get_resource: RoleUserData}
166 # Creates the "heat-admin" user if configured via the environment
167 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
169 type: OS::TripleO::NodeAdminUserData
171 # For optional operator additional userdata
172 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
174 type: OS::TripleO::NodeUserData
176 # For optional operator role-specific userdata
177 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
179 type: OS::TripleO::BlockStorage::NodeUserData
182 type: OS::TripleO::BlockStorage::Ports::ExternalPort
184 ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
185 IPPool: {get_param: BlockStorageIPs}
186 NodeIndex: {get_param: NodeIndex}
189 type: OS::TripleO::BlockStorage::Ports::InternalApiPort
191 ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
192 IPPool: {get_param: BlockStorageIPs}
193 NodeIndex: {get_param: NodeIndex}
196 type: OS::TripleO::BlockStorage::Ports::StoragePort
198 ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
199 IPPool: {get_param: BlockStorageIPs}
200 NodeIndex: {get_param: NodeIndex}
203 type: OS::TripleO::BlockStorage::Ports::StorageMgmtPort
205 ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
206 IPPool: {get_param: BlockStorageIPs}
207 NodeIndex: {get_param: NodeIndex}
210 type: OS::TripleO::BlockStorage::Ports::TenantPort
212 ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
213 IPPool: {get_param: BlockStorageIPs}
214 NodeIndex: {get_param: NodeIndex}
217 type: OS::TripleO::BlockStorage::Ports::ManagementPort
219 ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
220 IPPool: {get_param: BlockStorageIPs}
221 NodeIndex: {get_param: NodeIndex}
224 type: OS::TripleO::BlockStorage::Net::SoftwareConfig
226 ControlPlaneIp: {get_attr: [BlockStorage, networks, ctlplane, 0]}
227 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
228 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
229 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
230 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
231 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
232 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
235 type: OS::TripleO::Network::Ports::NetIpMap
237 ControlPlaneIp: {get_attr: [BlockStorage, networks, ctlplane, 0]}
238 ExternalIp: {get_attr: [ExternalPort, ip_address]}
239 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
240 ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
241 InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
242 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
243 InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
244 StorageIp: {get_attr: [StoragePort, ip_address]}
245 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
246 StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
247 StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
248 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
249 StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
250 TenantIp: {get_attr: [TenantPort, ip_address]}
251 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
252 TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
253 ManagementIp: {get_attr: [ManagementPort, ip_address]}
254 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
255 ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
258 type: OS::Heat::Value
266 - - {get_attr: [BlockStorage, name]}
268 - {get_param: CloudDomain}
272 - - {get_attr: [BlockStorage, name]}
278 - - {get_attr: [BlockStorage, name]}
280 - {get_param: CloudDomain}
284 - - {get_attr: [BlockStorage, name]}
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]}
348 type: OS::TripleO::BlockStorage::PreNetworkConfig
350 server: {get_resource: BlockStorage}
353 type: OS::TripleO::SoftwareDeployment
354 depends_on: PreNetworkConfig
356 name: NetworkDeployment
357 config: {get_resource: NetworkConfig}
358 server: {get_resource: BlockStorage}
359 actions: {get_param: NetworkDeploymentActions}
361 BlockStorageUpgradeInitConfig:
362 type: OS::Heat::SoftwareConfig
368 - - "#!/bin/bash\n\n"
369 - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
370 - get_param: UpgradeInitCommand
371 - get_param: UpgradeInitCommonCommand
373 # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
374 # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
375 BlockStorageUpgradeInitDeployment:
376 type: OS::Heat::SoftwareDeployment
377 depends_on: NetworkDeployment
379 name: BlockStorageUpgradeInitDeployment
380 server: {get_resource: BlockStorage}
381 config: {get_resource: BlockStorageUpgradeInitConfig}
383 BlockStorageDeployment:
384 type: OS::Heat::StructuredDeployment
385 depends_on: BlockStorageUpgradeInitDeployment
387 name: BlockStorageDeployment
388 server: {get_resource: BlockStorage}
389 config: {get_resource: BlockStorageConfig}
391 enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
393 # Map heat metadata into hiera datafiles
395 type: OS::Heat::StructuredConfig
401 - heat_config_%{::deploy_config_name}
407 - bootstrap_node # provided by allNodesConfig
408 - all_nodes # provided by allNodesConfig
409 - vip_data # provided by allNodesConfig
411 merge_behavior: deeper
414 service_names: {get_param: ServiceNames}
415 sensu::subscriptions: {get_param: MonitoringSubscriptions}
418 - {get_param: ServiceConfigSettings}
419 - values: {get_attr: [NetIpMap, net_ip_map]}
420 volume_extraconfig: {get_param: BlockStorageExtraConfig}
421 extraconfig: {get_param: ExtraConfig}
423 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
424 fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
425 fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
426 fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
427 fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
428 fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
429 fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
431 # Resource for site-specific injection of root certificate
433 depends_on: BlockStorageDeployment
434 type: OS::TripleO::NodeTLSCAData
436 server: {get_resource: BlockStorage}
438 # Hook for site-specific additional pre-deployment config,
439 # applying to all nodes, e.g node registration/unregistration
441 depends_on: NodeTLSCAData
442 type: OS::TripleO::NodeExtraConfig
444 server: {get_resource: BlockStorage}
447 type: OS::TripleO::Tasks::PackageUpdate
450 type: OS::Heat::SoftwareDeployment
451 depends_on: NetworkDeployment
453 name: UpdateDeployment
454 config: {get_resource: UpdateConfig}
455 server: {get_resource: BlockStorage}
458 get_param: UpdateIdentifier
461 type: OS::TripleO::Ssh::HostPubKey
462 depends_on: BlockStorageDeployment
464 server: {get_resource: BlockStorage}
468 description: IP address of the server in the ctlplane network
469 value: {get_attr: [BlockStorage, networks, ctlplane, 0]}
471 description: Hostname of the server
472 value: {get_attr: [BlockStorage, name]}
474 description: Mapping of network names to hostnames
476 external: {get_attr: [NetHostMap, value, external, fqdn]}
477 internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
478 storage: {get_attr: [NetHostMap, value, storage, fqdn]}
479 storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
480 tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
481 management: {get_attr: [NetHostMap, value, management, fqdn]}
482 ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
487 PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
488 EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
489 INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
490 STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
491 STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
492 TENANTIP TENANTHOST.DOMAIN TENANTHOST
493 MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
494 CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
496 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, BlockStorageHostnameResolveNetwork]}]}
497 DOMAIN: {get_param: CloudDomain}
498 PRIMARYHOST: {get_attr: [BlockStorage, name]}
499 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
500 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
501 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
502 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
503 STORAGEIP: {get_attr: [StoragePort, ip_address]}
504 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
505 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
506 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
507 TENANTIP: {get_attr: [TenantPort, ip_address]}
508 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
509 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
510 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
511 CTLPLANEIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
512 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
514 description: Entry for ssh known hosts
517 template: "PRIMARYIP,PRIMARYHOST.DOMAIN,PRIMARYHOST,\
518 EXTERNALIP,EXTERNALHOST.DOMAIN,EXTERNALHOST,\
519 INTERNAL_APIIP,INTERNAL_APIHOST.DOMAIN,INTERNAL_APIHOST,\
520 STORAGEIP,STORAGEHOST.DOMAIN,STORAGEHOST,\
521 STORAGE_MGMTIP,STORAGE_MGMTHOST.DOMAIN,STORAGE_MGMTHOST,\
522 TENANTIP,TENANTHOST.DOMAIN,TENANTHOST,\
523 MANAGEMENTIP,MANAGEMENTHOST.DOMAIN,MANAGEMENTHOST,\
524 CTLPLANEIP,CTLPLANEHOST.DOMAIN,CTLPLANEHOST HOSTSSHPUBKEY"
526 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, BlockStorageHostnameResolveNetwork]}]}
527 DOMAIN: {get_param: CloudDomain}
528 PRIMARYHOST: {get_attr: [BlockStorage, name]}
529 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
530 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
531 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
532 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
533 STORAGEIP: {get_attr: [StoragePort, ip_address]}
534 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
535 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
536 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
537 TENANTIP: {get_attr: [TenantPort, ip_address]}
538 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
539 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
540 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
541 CTLPLANEIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
542 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
543 HOSTSSHPUBKEY: {get_attr: [SshHostPubKey, ecdsa]}
544 nova_server_resource:
545 description: Heat resource handle for the block storage server
547 {get_resource: BlockStorage}
549 description: IP address of the server in the external network
550 value: {get_attr: [ExternalPort, ip_address]}
551 internal_api_ip_address:
552 description: IP address of the server in the internal_api network
553 value: {get_attr: [InternalApiPort, ip_address]}
555 description: IP address of the server in the storage network
556 value: {get_attr: [StoragePort, ip_address]}
557 storage_mgmt_ip_address:
558 description: IP address of the server in the storage_mgmt network
559 value: {get_attr: [StorageMgmtPort, ip_address]}
561 description: IP address of the server in the tenant network
562 value: {get_attr: [TenantPort, ip_address]}
563 management_ip_address:
564 description: IP address of the server in the management network
565 value: {get_attr: [ManagementPort, ip_address]}