1 heat_template_version: pike
2 description: 'OpenStack ceph storage node configured by Puppet'
4 OvercloudCephStorageFlavor:
5 description: Flavor for the Ceph Storage node.
9 - custom_constraint: nova.flavor
12 default: overcloud-full
14 - custom_constraint: glance.image
16 default: 'REBUILD_PRESERVE_EPHEMERAL'
17 description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
20 description: Name of an existing Nova key pair to enable SSH access to the instances
24 - custom_constraint: nova.keypair
27 description: Mapping of service_name -> network name. Typically set
28 via parameter_defaults in the resource registry.
32 description: Mapping of service endpoint -> protocol. Typically set
33 via parameter_defaults in the resource registry.
39 Setting to a previously unused value during stack-update will trigger
40 package update on all nodes
43 default: '' # Defaults to Heat created hostname
47 description: Optional mapping to override hostnames
51 Additional hiera configuration to inject into the cluster. Note
52 that CephStorageExtraConfig takes precedence over ExtraConfig.
54 CephStorageExtraConfig:
57 Role specific additional hiera configuration to inject into the cluster.
62 NetworkDeploymentActions:
63 type: comma_delimited_list
65 Heat action when to apply network configuration changes
67 SoftwareConfigTransport:
68 default: POLL_SERVER_CFN
70 How the server should receive the metadata required for software configuration.
73 - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
75 default: 'localdomain'
78 The DNS domain used for the hosts. This must match the
79 overcloud_domain_name configured on the undercloud.
80 CephStorageServerMetadata:
83 Extra properties or metadata passed to Nova for the created nodes in
84 the overcloud. It's accessible via the Nova metadata API. This option is
85 role-specific and is merged with the values given to the ServerMetadata
91 Extra properties or metadata passed to Nova for the created nodes in
92 the overcloud. It's accessible via the Nova metadata API. This applies to
93 all roles and is merged with a role-specific metadata parameter.
95 CephStorageSchedulerHints:
97 description: Optional scheduler hints to pass to nova
102 ServiceConfigSettings:
106 type: comma_delimited_list
108 MonitoringSubscriptions:
109 type: comma_delimited_list
111 ServiceMetadataSettings:
116 description: Command which will be run whenever configuration data changes
117 default: os-refresh-config --timeout 14400
122 Maximum amount of time to possibly to delay configuation collection
123 polling. Defaults to 30 seconds. Set to 0 to disable it which will cause
124 the configuration collection to occur as soon as the collection process
125 starts. This setting is used to prevent the configuration collection
126 processes from polling all at the exact same time.
130 Command or script snippet to run on all overcloud nodes to
131 initialize the upgrade process. E.g. a repository switch.
133 UpgradeInitCommonCommand:
136 Common commands required by the upgrades process. This should not
137 normally be modified by the operator and is set and unset in the
138 major-upgrade-composable-steps.yaml and major-upgrade-converge.yaml
141 DeploymentServerBlacklistDict:
145 Map of server hostnames to blacklist from any triggered
146 deployments. If the value is 1, the server will be blacklisted. This
147 parameter is generated from the parent template.
150 description: Role Specific Parameters
152 DeploymentSwiftDataMap:
155 Map of servers to Swift container and object for storing deployment data.
156 The keys are the Heat assigned hostnames, and the value is a map of the
157 container/object name in Swift. Example value:
158 overcloud-controller-0:
159 container: overcloud-controller
161 overcloud-controller-1:
162 container: overcloud-controller
164 overcloud-controller-2:
165 container: overcloud-controller
167 overcloud-novacompute-0:
168 container: overcloud-compute
173 server_not_blacklisted:
176 - {get_param: [DeploymentServerBlacklistDict, {get_param: Hostname}]}
178 deployment_swift_data_map_unset:
181 - DeploymentSwiftDataMap
182 - {get_param: Hostname}
187 type: OS::TripleO::CephStorageServer
190 command: {get_param: ConfigCommand}
191 splay: {get_param: ConfigCollectSplay}
193 image: {get_param: CephStorageImage}
194 image_update_policy: {get_param: ImageUpdatePolicy}
195 flavor: {get_param: OvercloudCephStorageFlavor}
196 key_name: {get_param: KeyName}
199 user_data_format: SOFTWARE_CONFIG
200 user_data: {get_resource: UserData}
203 template: {get_param: Hostname}
204 params: {get_param: HostnameMap}
205 software_config_transport: {get_param: SoftwareConfigTransport}
208 - {get_param: ServerMetadata}
209 - {get_param: CephStorageServerMetadata}
210 - {get_param: ServiceMetadataSettings}
211 scheduler_hints: {get_param: CephStorageSchedulerHints}
212 deployment_swift_data:
214 - deployment_swift_data_map_unset
216 - {get_param: [DeploymentSwiftDataMap,
217 {get_param: Hostname}]}
219 # Combine the NodeAdminUserData and NodeUserData mime archives
221 type: OS::Heat::MultipartMime
224 - config: {get_resource: NodeAdminUserData}
226 - config: {get_resource: NodeUserData}
228 - config: {get_resource: RoleUserData}
231 # Creates the "heat-admin" user if configured via the environment
232 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
234 type: OS::TripleO::NodeAdminUserData
236 # For optional operator additional userdata
237 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
239 type: OS::TripleO::NodeUserData
241 # For optional operator role-specific userdata
242 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
244 type: OS::TripleO::CephStorage::NodeUserData
247 type: OS::TripleO::CephStorage::Ports::ExternalPort
249 ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
250 IPPool: {get_param: CephStorageIPs}
251 NodeIndex: {get_param: NodeIndex}
254 type: OS::TripleO::CephStorage::Ports::InternalApiPort
256 ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
257 IPPool: {get_param: CephStorageIPs}
258 NodeIndex: {get_param: NodeIndex}
261 type: OS::TripleO::CephStorage::Ports::StoragePort
263 ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
264 IPPool: {get_param: CephStorageIPs}
265 NodeIndex: {get_param: NodeIndex}
268 type: OS::TripleO::CephStorage::Ports::StorageMgmtPort
270 ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
271 IPPool: {get_param: CephStorageIPs}
272 NodeIndex: {get_param: NodeIndex}
275 type: OS::TripleO::CephStorage::Ports::TenantPort
277 ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
278 IPPool: {get_param: CephStorageIPs}
279 NodeIndex: {get_param: NodeIndex}
282 type: OS::TripleO::CephStorage::Ports::ManagementPort
284 ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
285 IPPool: {get_param: CephStorageIPs}
286 NodeIndex: {get_param: NodeIndex}
289 type: OS::TripleO::CephStorage::Net::SoftwareConfig
291 ControlPlaneIp: {get_attr: [CephStorage, networks, ctlplane, 0]}
292 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
293 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
294 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
295 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
296 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
297 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
300 type: OS::TripleO::Network::Ports::NetIpMap
302 ControlPlaneIp: {get_attr: [CephStorage, networks, ctlplane, 0]}
303 ExternalIp: {get_attr: [ExternalPort, ip_address]}
304 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
305 ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
306 InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
307 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
308 InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
309 StorageIp: {get_attr: [StoragePort, ip_address]}
310 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
311 StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
312 StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
313 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
314 StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
315 TenantIp: {get_attr: [TenantPort, ip_address]}
316 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
317 TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
318 ManagementIp: {get_attr: [ManagementPort, ip_address]}
319 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
320 ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
323 type: OS::Heat::Value
331 - - {get_attr: [CephStorage, name]}
333 - {get_param: CloudDomain}
337 - - {get_attr: [CephStorage, name]}
343 - - {get_attr: [CephStorage, name]}
345 - {get_param: CloudDomain}
349 - - {get_attr: [CephStorage, name]}
355 - - {get_attr: [CephStorage, name]}
357 - {get_param: CloudDomain}
361 - - {get_attr: [CephStorage, name]}
367 - - {get_attr: [CephStorage, name]}
369 - {get_param: CloudDomain}
373 - - {get_attr: [CephStorage, name]}
379 - - {get_attr: [CephStorage, name]}
381 - {get_param: CloudDomain}
385 - - {get_attr: [CephStorage, name]}
391 - - {get_attr: [CephStorage, name]}
393 - {get_param: CloudDomain}
397 - - {get_attr: [CephStorage, name]}
403 - - {get_attr: [CephStorage, name]}
405 - {get_param: CloudDomain}
409 - - {get_attr: [CephStorage, name]}
413 type: OS::TripleO::CephStorage::PreNetworkConfig
415 server: {get_resource: CephStorage}
416 RoleParameters: {get_param: RoleParameters}
417 ServiceNames: {get_param: ServiceNames}
418 deployment_actions: {get_attr: [DeploymentActions, value]}
421 type: OS::TripleO::SoftwareDeployment
422 depends_on: PreNetworkConfig
424 name: NetworkDeployment
425 config: {get_resource: NetworkConfig}
426 server: {get_resource: CephStorage}
429 - server_not_blacklisted
430 - {get_param: NetworkDeploymentActions}
433 CephStorageUpgradeInitConfig:
434 type: OS::Heat::SoftwareConfig
440 - - "#!/bin/bash\n\n"
441 - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
442 - get_param: UpgradeInitCommand
443 - get_param: UpgradeInitCommonCommand
445 # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
446 # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
447 CephStorageUpgradeInitDeployment:
448 type: OS::Heat::SoftwareDeployment
449 depends_on: NetworkDeployment
451 name: CephStorageUpgradeInitDeployment
452 server: {get_resource: CephStorage}
453 config: {get_resource: CephStorageUpgradeInitConfig}
456 - server_not_blacklisted
457 - ['CREATE', 'UPDATE']
460 CephStorageDeployment:
461 type: OS::Heat::StructuredDeployment
462 depends_on: CephStorageUpgradeInitDeployment
464 name: CephStorageDeployment
465 config: {get_resource: CephStorageConfig}
466 server: {get_resource: CephStorage}
468 enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
471 - server_not_blacklisted
472 - ['CREATE', 'UPDATE']
476 type: OS::Heat::StructuredConfig
482 - heat_config_%{::deploy_config_name}
489 - bootstrap_node # provided by allNodesConfig
490 - all_nodes # provided by allNodesConfig
491 - vip_data # provided by allNodesConfig
493 merge_behavior: deeper
496 service_names: {get_param: ServiceNames}
497 sensu::subscriptions: {get_param: MonitoringSubscriptions}
500 - {get_param: ServiceConfigSettings}
501 - values: {get_attr: [NetIpMap, net_ip_map]}
502 ceph_extraconfig: {get_param: CephStorageExtraConfig}
503 extraconfig: {get_param: ExtraConfig}
505 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
506 fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
507 fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
508 fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
509 fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
510 fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
511 fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
512 fqdn_external: {get_attr: [NetHostMap, value, external, fqdn]}
514 # Resource for site-specific injection of root certificate
516 depends_on: CephStorageDeployment
517 type: OS::TripleO::NodeTLSCAData
519 server: {get_resource: CephStorage}
521 # Hook for site-specific additional pre-deployment config, e.g extra hieradata
522 CephStorageExtraConfigPre:
523 depends_on: CephStorageDeployment
524 type: OS::TripleO::CephStorageExtraConfigPre
525 # We have to use conditions here so that we don't break backwards
526 # compatibility with templates everywhere
527 condition: server_not_blacklisted
529 server: {get_resource: CephStorage}
531 # Hook for site-specific additional pre-deployment config,
532 # applying to all nodes, e.g node registration/unregistration
534 depends_on: [CephStorageExtraConfigPre, NodeTLSCAData]
535 type: OS::TripleO::NodeExtraConfig
536 # We have to use conditions here so that we don't break backwards
537 # compatibility with templates everywhere
538 condition: server_not_blacklisted
540 server: {get_resource: CephStorage}
543 type: OS::TripleO::Tasks::PackageUpdate
546 type: OS::Heat::SoftwareDeployment
547 depends_on: NetworkDeployment
549 config: {get_resource: UpdateConfig}
550 server: {get_resource: CephStorage}
553 get_param: UpdateIdentifier
556 - server_not_blacklisted
557 - ['CREATE', 'UPDATE']
561 type: OS::Heat::Value
565 - server_not_blacklisted
566 - ['CREATE', 'UPDATE']
570 type: OS::TripleO::Ssh::HostPubKey
571 depends_on: CephStorageDeployment
573 server: {get_resource: CephStorage}
574 deployment_actions: {get_attr: [DeploymentActions, value]}
578 description: IP address of the server in the ctlplane network
579 value: {get_attr: [CephStorage, networks, ctlplane, 0]}
581 description: Hostname of the server
582 value: {get_attr: [CephStorage, name]}
584 description: Mapping of network names to hostnames
586 external: {get_attr: [NetHostMap, value, external, fqdn]}
587 internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
588 storage: {get_attr: [NetHostMap, value, storage, fqdn]}
589 storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
590 tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
591 management: {get_attr: [NetHostMap, value, management, fqdn]}
592 ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
597 PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
598 EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
599 INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
600 STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
601 STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
602 TENANTIP TENANTHOST.DOMAIN TENANTHOST
603 MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
604 CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
606 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephStorageHostnameResolveNetwork]}]}
607 DOMAIN: {get_param: CloudDomain}
608 PRIMARYHOST: {get_attr: [CephStorage, name]}
609 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
610 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
611 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
612 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
613 STORAGEIP: {get_attr: [StoragePort, ip_address]}
614 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
615 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
616 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
617 TENANTIP: {get_attr: [TenantPort, ip_address]}
618 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
619 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
620 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
621 CTLPLANEIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
622 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
624 description: Entry for ssh known hosts
627 template: "PRIMARYIP,PRIMARYHOST.DOMAIN,PRIMARYHOST,\
628 EXTERNALIP,EXTERNALHOST.DOMAIN,EXTERNALHOST,\
629 INTERNAL_APIIP,INTERNAL_APIHOST.DOMAIN,INTERNAL_APIHOST,\
630 STORAGEIP,STORAGEHOST.DOMAIN,STORAGEHOST,\
631 STORAGE_MGMTIP,STORAGE_MGMTHOST.DOMAIN,STORAGE_MGMTHOST,\
632 TENANTIP,TENANTHOST.DOMAIN,TENANTHOST,\
633 MANAGEMENTIP,MANAGEMENTHOST.DOMAIN,MANAGEMENTHOST,\
634 CTLPLANEIP,CTLPLANEHOST.DOMAIN,CTLPLANEHOST HOSTSSHPUBKEY"
636 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephStorageHostnameResolveNetwork]}]}
637 DOMAIN: {get_param: CloudDomain}
638 PRIMARYHOST: {get_attr: [CephStorage, name]}
639 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
640 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
641 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
642 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
643 STORAGEIP: {get_attr: [StoragePort, ip_address]}
644 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
645 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
646 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
647 TENANTIP: {get_attr: [TenantPort, ip_address]}
648 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
649 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
650 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
651 CTLPLANEIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
652 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
653 HOSTSSHPUBKEY: {get_attr: [SshHostPubKey, ecdsa]}
654 nova_server_resource:
655 description: Heat resource handle for the ceph storage server
657 {get_resource: CephStorage}
658 condition: server_not_blacklisted
660 description: IP address of the server in the external network
661 value: {get_attr: [ExternalPort, ip_address]}
662 internal_api_ip_address:
663 description: IP address of the server in the internal_api network
664 value: {get_attr: [InternalApiPort, ip_address]}
666 description: IP address of the server in the storage network
667 value: {get_attr: [StoragePort, ip_address]}
668 storage_mgmt_ip_address:
669 description: IP address of the server in the storage_mgmt network
670 value: {get_attr: [StorageMgmtPort, ip_address]}
672 description: IP address of the server in the tenant network
673 value: {get_attr: [TenantPort, ip_address]}
674 management_ip_address:
675 description: IP address of the server in the management network
676 value: {get_attr: [ManagementPort, ip_address]}
677 deployed_server_port_map:
679 Map of Heat created hostname of the server to ip address. This is the
680 hostname before it has been mapped with the HostnameMap parameter, and
681 the IP address from the ctlplane network. This map can be used to construct
682 the DeployedServerPortMap parameter when using split-stack.
687 - ip_address: {get_attr: [CephStorage, networks, ctlplane, 0]}
692 - - {get_param: Hostname}
694 deployed_server_deployment_swift_data_map:
696 Map of Heat created hostname of the server to the Swift container and object
697 used to created the temporary url for metadata polling with
705 - {get_attr: [CephStorage, os_collect_config, request, metadata_url]}
712 - {get_attr: [CephStorage, os_collect_config, request, metadata_url]}
715 - keys: {hostname: {get_param: Hostname}}
717 description: The os-collect-config configuration associated with this server resource
718 value: {get_attr: [CephStorage, os_collect_config]}