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}
420 type: OS::TripleO::SoftwareDeployment
421 depends_on: PreNetworkConfig
423 name: NetworkDeployment
424 config: {get_resource: NetworkConfig}
425 server: {get_resource: CephStorage}
428 - server_not_blacklisted
429 - {get_param: NetworkDeploymentActions}
432 CephStorageUpgradeInitConfig:
433 type: OS::Heat::SoftwareConfig
439 - - "#!/bin/bash\n\n"
440 - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
441 - get_param: UpgradeInitCommand
442 - get_param: UpgradeInitCommonCommand
444 # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
445 # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
446 CephStorageUpgradeInitDeployment:
447 type: OS::Heat::SoftwareDeployment
448 depends_on: NetworkDeployment
450 name: CephStorageUpgradeInitDeployment
451 server: {get_resource: CephStorage}
452 config: {get_resource: CephStorageUpgradeInitConfig}
455 - server_not_blacklisted
456 - ['CREATE', 'UPDATE']
459 CephStorageDeployment:
460 type: OS::Heat::StructuredDeployment
461 depends_on: CephStorageUpgradeInitDeployment
463 name: CephStorageDeployment
464 config: {get_resource: CephStorageConfig}
465 server: {get_resource: CephStorage}
467 enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
470 - server_not_blacklisted
471 - ['CREATE', 'UPDATE']
475 type: OS::Heat::StructuredConfig
481 - heat_config_%{::deploy_config_name}
488 - bootstrap_node # provided by allNodesConfig
489 - all_nodes # provided by allNodesConfig
490 - vip_data # provided by allNodesConfig
492 merge_behavior: deeper
495 service_names: {get_param: ServiceNames}
496 sensu::subscriptions: {get_param: MonitoringSubscriptions}
499 - {get_param: ServiceConfigSettings}
500 - values: {get_attr: [NetIpMap, net_ip_map]}
501 ceph_extraconfig: {get_param: CephStorageExtraConfig}
502 extraconfig: {get_param: ExtraConfig}
504 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
505 fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
506 fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
507 fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
508 fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
509 fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
510 fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
511 fqdn_external: {get_attr: [NetHostMap, value, external, fqdn]}
513 # Resource for site-specific injection of root certificate
515 depends_on: CephStorageDeployment
516 type: OS::TripleO::NodeTLSCAData
518 server: {get_resource: CephStorage}
520 # Hook for site-specific additional pre-deployment config, e.g extra hieradata
521 CephStorageExtraConfigPre:
522 depends_on: CephStorageDeployment
523 type: OS::TripleO::CephStorageExtraConfigPre
525 server: {get_resource: CephStorage}
527 # Hook for site-specific additional pre-deployment config,
528 # applying to all nodes, e.g node registration/unregistration
530 depends_on: [CephStorageExtraConfigPre, NodeTLSCAData]
531 type: OS::TripleO::NodeExtraConfig
533 server: {get_resource: CephStorage}
536 type: OS::TripleO::Tasks::PackageUpdate
539 type: OS::Heat::SoftwareDeployment
540 depends_on: NetworkDeployment
542 config: {get_resource: UpdateConfig}
543 server: {get_resource: CephStorage}
546 get_param: UpdateIdentifier
549 - server_not_blacklisted
550 - ['CREATE', 'UPDATE']
554 type: OS::TripleO::Ssh::HostPubKey
555 depends_on: CephStorageDeployment
557 server: {get_resource: CephStorage}
561 description: IP address of the server in the ctlplane network
562 value: {get_attr: [CephStorage, networks, ctlplane, 0]}
564 description: Hostname of the server
565 value: {get_attr: [CephStorage, name]}
567 description: Mapping of network names to hostnames
569 external: {get_attr: [NetHostMap, value, external, fqdn]}
570 internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
571 storage: {get_attr: [NetHostMap, value, storage, fqdn]}
572 storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
573 tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
574 management: {get_attr: [NetHostMap, value, management, fqdn]}
575 ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
580 PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
581 EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
582 INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
583 STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
584 STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
585 TENANTIP TENANTHOST.DOMAIN TENANTHOST
586 MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
587 CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
589 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephStorageHostnameResolveNetwork]}]}
590 DOMAIN: {get_param: CloudDomain}
591 PRIMARYHOST: {get_attr: [CephStorage, name]}
592 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
593 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
594 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
595 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
596 STORAGEIP: {get_attr: [StoragePort, ip_address]}
597 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
598 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
599 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
600 TENANTIP: {get_attr: [TenantPort, ip_address]}
601 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
602 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
603 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
604 CTLPLANEIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
605 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
607 description: Entry for ssh known hosts
610 template: "PRIMARYIP,PRIMARYHOST.DOMAIN,PRIMARYHOST,\
611 EXTERNALIP,EXTERNALHOST.DOMAIN,EXTERNALHOST,\
612 INTERNAL_APIIP,INTERNAL_APIHOST.DOMAIN,INTERNAL_APIHOST,\
613 STORAGEIP,STORAGEHOST.DOMAIN,STORAGEHOST,\
614 STORAGE_MGMTIP,STORAGE_MGMTHOST.DOMAIN,STORAGE_MGMTHOST,\
615 TENANTIP,TENANTHOST.DOMAIN,TENANTHOST,\
616 MANAGEMENTIP,MANAGEMENTHOST.DOMAIN,MANAGEMENTHOST,\
617 CTLPLANEIP,CTLPLANEHOST.DOMAIN,CTLPLANEHOST HOSTSSHPUBKEY"
619 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephStorageHostnameResolveNetwork]}]}
620 DOMAIN: {get_param: CloudDomain}
621 PRIMARYHOST: {get_attr: [CephStorage, name]}
622 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
623 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
624 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
625 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
626 STORAGEIP: {get_attr: [StoragePort, ip_address]}
627 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
628 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
629 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
630 TENANTIP: {get_attr: [TenantPort, ip_address]}
631 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
632 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
633 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
634 CTLPLANEIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
635 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
636 HOSTSSHPUBKEY: {get_attr: [SshHostPubKey, ecdsa]}
637 nova_server_resource:
638 description: Heat resource handle for the ceph storage server
640 {get_resource: CephStorage}
641 condition: server_not_blacklisted
643 description: IP address of the server in the external network
644 value: {get_attr: [ExternalPort, ip_address]}
645 internal_api_ip_address:
646 description: IP address of the server in the internal_api network
647 value: {get_attr: [InternalApiPort, ip_address]}
649 description: IP address of the server in the storage network
650 value: {get_attr: [StoragePort, ip_address]}
651 storage_mgmt_ip_address:
652 description: IP address of the server in the storage_mgmt network
653 value: {get_attr: [StorageMgmtPort, ip_address]}
655 description: IP address of the server in the tenant network
656 value: {get_attr: [TenantPort, ip_address]}
657 management_ip_address:
658 description: IP address of the server in the management network
659 value: {get_attr: [ManagementPort, ip_address]}
661 description: The os-collect-config configuration associated with this server resource
662 value: {get_attr: [CephStorage, os_collect_config]}