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
151 DeploymentSwiftDataMap:
154 Map of servers to Swift container and object for storing deployment data.
155 The keys are the Heat assigned hostnames, and the value is a map of the
156 container/object name in Swift. Example value:
157 overcloud-controller-0:
158 container: overcloud-controller
160 overcloud-controller-1:
161 container: overcloud-controller
163 overcloud-controller-2:
164 container: overcloud-controller
166 overcloud-novacompute-0:
167 container: overcloud-compute
172 server_not_blacklisted:
175 - {get_param: [DeploymentServerBlacklistDict, {get_param: Hostname}]}
177 deployment_swift_data_map_unset:
180 - DeploymentSwiftDataMap
181 - {get_param: Hostname}
186 type: OS::TripleO::CephStorageServer
189 command: {get_param: ConfigCommand}
190 splay: {get_param: ConfigCollectSplay}
192 image: {get_param: CephStorageImage}
193 image_update_policy: {get_param: ImageUpdatePolicy}
194 flavor: {get_param: OvercloudCephStorageFlavor}
195 key_name: {get_param: KeyName}
198 user_data_format: SOFTWARE_CONFIG
199 user_data: {get_resource: UserData}
202 template: {get_param: Hostname}
203 params: {get_param: HostnameMap}
204 software_config_transport: {get_param: SoftwareConfigTransport}
207 - {get_param: ServerMetadata}
208 - {get_param: CephStorageServerMetadata}
209 - {get_param: ServiceMetadataSettings}
210 scheduler_hints: {get_param: CephStorageSchedulerHints}
211 deployment_swift_data:
213 - deployment_swift_data_map_unset
215 - {get_param: [DeploymentSwiftDataMap,
216 {get_param: Hostname}]}
218 # Combine the NodeAdminUserData and NodeUserData mime archives
220 type: OS::Heat::MultipartMime
223 - config: {get_resource: NodeAdminUserData}
225 - config: {get_resource: NodeUserData}
227 - config: {get_resource: RoleUserData}
230 # Creates the "heat-admin" user if configured via the environment
231 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
233 type: OS::TripleO::NodeAdminUserData
235 # For optional operator additional userdata
236 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
238 type: OS::TripleO::NodeUserData
240 # For optional operator role-specific userdata
241 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
243 type: OS::TripleO::CephStorage::NodeUserData
246 type: OS::TripleO::CephStorage::Ports::ExternalPort
248 ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
249 IPPool: {get_param: CephStorageIPs}
250 NodeIndex: {get_param: NodeIndex}
253 type: OS::TripleO::CephStorage::Ports::InternalApiPort
255 ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
256 IPPool: {get_param: CephStorageIPs}
257 NodeIndex: {get_param: NodeIndex}
260 type: OS::TripleO::CephStorage::Ports::StoragePort
262 ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
263 IPPool: {get_param: CephStorageIPs}
264 NodeIndex: {get_param: NodeIndex}
267 type: OS::TripleO::CephStorage::Ports::StorageMgmtPort
269 ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
270 IPPool: {get_param: CephStorageIPs}
271 NodeIndex: {get_param: NodeIndex}
274 type: OS::TripleO::CephStorage::Ports::TenantPort
276 ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
277 IPPool: {get_param: CephStorageIPs}
278 NodeIndex: {get_param: NodeIndex}
281 type: OS::TripleO::CephStorage::Ports::ManagementPort
283 ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
284 IPPool: {get_param: CephStorageIPs}
285 NodeIndex: {get_param: NodeIndex}
288 type: OS::TripleO::CephStorage::Net::SoftwareConfig
290 ControlPlaneIp: {get_attr: [CephStorage, networks, ctlplane, 0]}
291 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
292 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
293 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
294 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
295 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
296 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
299 type: OS::TripleO::Network::Ports::NetIpMap
301 ControlPlaneIp: {get_attr: [CephStorage, networks, ctlplane, 0]}
302 ExternalIp: {get_attr: [ExternalPort, ip_address]}
303 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
304 ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
305 InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
306 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
307 InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
308 StorageIp: {get_attr: [StoragePort, ip_address]}
309 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
310 StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
311 StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
312 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
313 StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
314 TenantIp: {get_attr: [TenantPort, ip_address]}
315 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
316 TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
317 ManagementIp: {get_attr: [ManagementPort, ip_address]}
318 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
319 ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
322 type: OS::Heat::Value
330 - - {get_attr: [CephStorage, name]}
332 - {get_param: CloudDomain}
336 - - {get_attr: [CephStorage, name]}
342 - - {get_attr: [CephStorage, name]}
344 - {get_param: CloudDomain}
348 - - {get_attr: [CephStorage, name]}
354 - - {get_attr: [CephStorage, name]}
356 - {get_param: CloudDomain}
360 - - {get_attr: [CephStorage, name]}
366 - - {get_attr: [CephStorage, name]}
368 - {get_param: CloudDomain}
372 - - {get_attr: [CephStorage, name]}
378 - - {get_attr: [CephStorage, name]}
380 - {get_param: CloudDomain}
384 - - {get_attr: [CephStorage, name]}
390 - - {get_attr: [CephStorage, name]}
392 - {get_param: CloudDomain}
396 - - {get_attr: [CephStorage, name]}
402 - - {get_attr: [CephStorage, name]}
404 - {get_param: CloudDomain}
408 - - {get_attr: [CephStorage, name]}
412 type: OS::TripleO::CephStorage::PreNetworkConfig
414 server: {get_resource: CephStorage}
415 RoleParameters: {get_param: RoleParameters}
418 type: OS::TripleO::SoftwareDeployment
419 depends_on: PreNetworkConfig
421 name: NetworkDeployment
422 config: {get_resource: NetworkConfig}
423 server: {get_resource: CephStorage}
426 - server_not_blacklisted
427 - {get_param: NetworkDeploymentActions}
430 CephStorageUpgradeInitConfig:
431 type: OS::Heat::SoftwareConfig
437 - - "#!/bin/bash\n\n"
438 - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
439 - get_param: UpgradeInitCommand
440 - get_param: UpgradeInitCommonCommand
442 # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
443 # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
444 CephStorageUpgradeInitDeployment:
445 type: OS::Heat::SoftwareDeployment
446 depends_on: NetworkDeployment
448 name: CephStorageUpgradeInitDeployment
449 server: {get_resource: CephStorage}
450 config: {get_resource: CephStorageUpgradeInitConfig}
453 - server_not_blacklisted
454 - ['CREATE', 'UPDATE']
457 CephStorageDeployment:
458 type: OS::Heat::StructuredDeployment
459 depends_on: CephStorageUpgradeInitDeployment
461 name: CephStorageDeployment
462 config: {get_resource: CephStorageConfig}
463 server: {get_resource: CephStorage}
465 enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
468 - server_not_blacklisted
469 - ['CREATE', 'UPDATE']
473 type: OS::Heat::StructuredConfig
479 - heat_config_%{::deploy_config_name}
486 - bootstrap_node # provided by allNodesConfig
487 - all_nodes # provided by allNodesConfig
488 - vip_data # provided by allNodesConfig
490 merge_behavior: deeper
493 service_names: {get_param: ServiceNames}
494 sensu::subscriptions: {get_param: MonitoringSubscriptions}
497 - {get_param: ServiceConfigSettings}
498 - values: {get_attr: [NetIpMap, net_ip_map]}
499 ceph_extraconfig: {get_param: CephStorageExtraConfig}
500 extraconfig: {get_param: ExtraConfig}
502 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
503 fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
504 fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
505 fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
506 fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
507 fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
508 fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
509 fqdn_external: {get_attr: [NetHostMap, value, external, fqdn]}
511 # Resource for site-specific injection of root certificate
513 depends_on: CephStorageDeployment
514 type: OS::TripleO::NodeTLSCAData
516 server: {get_resource: CephStorage}
518 # Hook for site-specific additional pre-deployment config, e.g extra hieradata
519 CephStorageExtraConfigPre:
520 depends_on: CephStorageDeployment
521 type: OS::TripleO::CephStorageExtraConfigPre
523 server: {get_resource: CephStorage}
525 # Hook for site-specific additional pre-deployment config,
526 # applying to all nodes, e.g node registration/unregistration
528 depends_on: [CephStorageExtraConfigPre, NodeTLSCAData]
529 type: OS::TripleO::NodeExtraConfig
531 server: {get_resource: CephStorage}
534 type: OS::TripleO::Tasks::PackageUpdate
537 type: OS::Heat::SoftwareDeployment
538 depends_on: NetworkDeployment
540 config: {get_resource: UpdateConfig}
541 server: {get_resource: CephStorage}
544 get_param: UpdateIdentifier
547 - server_not_blacklisted
548 - ['CREATE', 'UPDATE']
552 type: OS::TripleO::Ssh::HostPubKey
553 depends_on: CephStorageDeployment
555 server: {get_resource: CephStorage}
559 description: IP address of the server in the ctlplane network
560 value: {get_attr: [CephStorage, networks, ctlplane, 0]}
562 description: Hostname of the server
563 value: {get_attr: [CephStorage, name]}
565 description: Mapping of network names to hostnames
567 external: {get_attr: [NetHostMap, value, external, fqdn]}
568 internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
569 storage: {get_attr: [NetHostMap, value, storage, fqdn]}
570 storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
571 tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
572 management: {get_attr: [NetHostMap, value, management, fqdn]}
573 ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
578 PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
579 EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
580 INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
581 STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
582 STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
583 TENANTIP TENANTHOST.DOMAIN TENANTHOST
584 MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
585 CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
587 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephStorageHostnameResolveNetwork]}]}
588 DOMAIN: {get_param: CloudDomain}
589 PRIMARYHOST: {get_attr: [CephStorage, name]}
590 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
591 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
592 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
593 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
594 STORAGEIP: {get_attr: [StoragePort, ip_address]}
595 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
596 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
597 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
598 TENANTIP: {get_attr: [TenantPort, ip_address]}
599 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
600 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
601 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
602 CTLPLANEIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
603 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
605 description: Entry for ssh known hosts
608 template: "PRIMARYIP,PRIMARYHOST.DOMAIN,PRIMARYHOST,\
609 EXTERNALIP,EXTERNALHOST.DOMAIN,EXTERNALHOST,\
610 INTERNAL_APIIP,INTERNAL_APIHOST.DOMAIN,INTERNAL_APIHOST,\
611 STORAGEIP,STORAGEHOST.DOMAIN,STORAGEHOST,\
612 STORAGE_MGMTIP,STORAGE_MGMTHOST.DOMAIN,STORAGE_MGMTHOST,\
613 TENANTIP,TENANTHOST.DOMAIN,TENANTHOST,\
614 MANAGEMENTIP,MANAGEMENTHOST.DOMAIN,MANAGEMENTHOST,\
615 CTLPLANEIP,CTLPLANEHOST.DOMAIN,CTLPLANEHOST HOSTSSHPUBKEY"
617 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephStorageHostnameResolveNetwork]}]}
618 DOMAIN: {get_param: CloudDomain}
619 PRIMARYHOST: {get_attr: [CephStorage, name]}
620 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
621 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
622 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
623 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
624 STORAGEIP: {get_attr: [StoragePort, ip_address]}
625 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
626 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
627 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
628 TENANTIP: {get_attr: [TenantPort, ip_address]}
629 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
630 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
631 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
632 CTLPLANEIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
633 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
634 HOSTSSHPUBKEY: {get_attr: [SshHostPubKey, ecdsa]}
635 nova_server_resource:
636 description: Heat resource handle for the ceph storage server
638 {get_resource: CephStorage}
639 condition: server_not_blacklisted
641 description: IP address of the server in the external network
642 value: {get_attr: [ExternalPort, ip_address]}
643 internal_api_ip_address:
644 description: IP address of the server in the internal_api network
645 value: {get_attr: [InternalApiPort, ip_address]}
647 description: IP address of the server in the storage network
648 value: {get_attr: [StoragePort, ip_address]}
649 storage_mgmt_ip_address:
650 description: IP address of the server in the storage_mgmt network
651 value: {get_attr: [StorageMgmtPort, ip_address]}
653 description: IP address of the server in the tenant network
654 value: {get_attr: [TenantPort, ip_address]}
655 management_ip_address:
656 description: IP address of the server in the management network
657 value: {get_attr: [ManagementPort, ip_address]}
659 description: The os-collect-config configuration associated with this server resource
660 value: {get_attr: [CephStorage, os_collect_config]}