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}
416 ServiceNames: {get_param: ServiceNames}
419 type: OS::TripleO::SoftwareDeployment
420 depends_on: PreNetworkConfig
422 name: NetworkDeployment
423 config: {get_resource: NetworkConfig}
424 server: {get_resource: CephStorage}
427 - server_not_blacklisted
428 - {get_param: NetworkDeploymentActions}
431 CephStorageUpgradeInitConfig:
432 type: OS::Heat::SoftwareConfig
438 - - "#!/bin/bash\n\n"
439 - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
440 - get_param: UpgradeInitCommand
441 - get_param: UpgradeInitCommonCommand
443 # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
444 # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
445 CephStorageUpgradeInitDeployment:
446 type: OS::Heat::SoftwareDeployment
447 depends_on: NetworkDeployment
449 name: CephStorageUpgradeInitDeployment
450 server: {get_resource: CephStorage}
451 config: {get_resource: CephStorageUpgradeInitConfig}
454 - server_not_blacklisted
455 - ['CREATE', 'UPDATE']
458 CephStorageDeployment:
459 type: OS::Heat::StructuredDeployment
460 depends_on: CephStorageUpgradeInitDeployment
462 name: CephStorageDeployment
463 config: {get_resource: CephStorageConfig}
464 server: {get_resource: CephStorage}
466 enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
469 - server_not_blacklisted
470 - ['CREATE', 'UPDATE']
474 type: OS::Heat::StructuredConfig
480 - heat_config_%{::deploy_config_name}
487 - bootstrap_node # provided by allNodesConfig
488 - all_nodes # provided by allNodesConfig
489 - vip_data # provided by allNodesConfig
491 merge_behavior: deeper
494 service_names: {get_param: ServiceNames}
495 sensu::subscriptions: {get_param: MonitoringSubscriptions}
498 - {get_param: ServiceConfigSettings}
499 - values: {get_attr: [NetIpMap, net_ip_map]}
500 ceph_extraconfig: {get_param: CephStorageExtraConfig}
501 extraconfig: {get_param: ExtraConfig}
503 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
504 fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
505 fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
506 fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
507 fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
508 fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
509 fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
510 fqdn_external: {get_attr: [NetHostMap, value, external, fqdn]}
512 # Resource for site-specific injection of root certificate
514 depends_on: CephStorageDeployment
515 type: OS::TripleO::NodeTLSCAData
517 server: {get_resource: CephStorage}
519 # Hook for site-specific additional pre-deployment config, e.g extra hieradata
520 CephStorageExtraConfigPre:
521 depends_on: CephStorageDeployment
522 type: OS::TripleO::CephStorageExtraConfigPre
524 server: {get_resource: CephStorage}
526 # Hook for site-specific additional pre-deployment config,
527 # applying to all nodes, e.g node registration/unregistration
529 depends_on: [CephStorageExtraConfigPre, NodeTLSCAData]
530 type: OS::TripleO::NodeExtraConfig
532 server: {get_resource: CephStorage}
535 type: OS::TripleO::Tasks::PackageUpdate
538 type: OS::Heat::SoftwareDeployment
539 depends_on: NetworkDeployment
541 config: {get_resource: UpdateConfig}
542 server: {get_resource: CephStorage}
545 get_param: UpdateIdentifier
548 - server_not_blacklisted
549 - ['CREATE', 'UPDATE']
553 type: OS::TripleO::Ssh::HostPubKey
554 depends_on: CephStorageDeployment
556 server: {get_resource: CephStorage}
560 description: IP address of the server in the ctlplane network
561 value: {get_attr: [CephStorage, networks, ctlplane, 0]}
563 description: Hostname of the server
564 value: {get_attr: [CephStorage, name]}
566 description: Mapping of network names to hostnames
568 external: {get_attr: [NetHostMap, value, external, fqdn]}
569 internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
570 storage: {get_attr: [NetHostMap, value, storage, fqdn]}
571 storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
572 tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
573 management: {get_attr: [NetHostMap, value, management, fqdn]}
574 ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
579 PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
580 EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
581 INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
582 STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
583 STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
584 TENANTIP TENANTHOST.DOMAIN TENANTHOST
585 MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
586 CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
588 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephStorageHostnameResolveNetwork]}]}
589 DOMAIN: {get_param: CloudDomain}
590 PRIMARYHOST: {get_attr: [CephStorage, name]}
591 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
592 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
593 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
594 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
595 STORAGEIP: {get_attr: [StoragePort, ip_address]}
596 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
597 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
598 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
599 TENANTIP: {get_attr: [TenantPort, ip_address]}
600 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
601 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
602 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
603 CTLPLANEIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
604 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
606 description: Entry for ssh known hosts
609 template: "PRIMARYIP,PRIMARYHOST.DOMAIN,PRIMARYHOST,\
610 EXTERNALIP,EXTERNALHOST.DOMAIN,EXTERNALHOST,\
611 INTERNAL_APIIP,INTERNAL_APIHOST.DOMAIN,INTERNAL_APIHOST,\
612 STORAGEIP,STORAGEHOST.DOMAIN,STORAGEHOST,\
613 STORAGE_MGMTIP,STORAGE_MGMTHOST.DOMAIN,STORAGE_MGMTHOST,\
614 TENANTIP,TENANTHOST.DOMAIN,TENANTHOST,\
615 MANAGEMENTIP,MANAGEMENTHOST.DOMAIN,MANAGEMENTHOST,\
616 CTLPLANEIP,CTLPLANEHOST.DOMAIN,CTLPLANEHOST HOSTSSHPUBKEY"
618 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephStorageHostnameResolveNetwork]}]}
619 DOMAIN: {get_param: CloudDomain}
620 PRIMARYHOST: {get_attr: [CephStorage, name]}
621 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
622 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
623 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
624 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
625 STORAGEIP: {get_attr: [StoragePort, ip_address]}
626 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
627 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
628 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
629 TENANTIP: {get_attr: [TenantPort, ip_address]}
630 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
631 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
632 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
633 CTLPLANEIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
634 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
635 HOSTSSHPUBKEY: {get_attr: [SshHostPubKey, ecdsa]}
636 nova_server_resource:
637 description: Heat resource handle for the ceph storage server
639 {get_resource: CephStorage}
640 condition: server_not_blacklisted
642 description: IP address of the server in the external network
643 value: {get_attr: [ExternalPort, ip_address]}
644 internal_api_ip_address:
645 description: IP address of the server in the internal_api network
646 value: {get_attr: [InternalApiPort, ip_address]}
648 description: IP address of the server in the storage network
649 value: {get_attr: [StoragePort, ip_address]}
650 storage_mgmt_ip_address:
651 description: IP address of the server in the storage_mgmt network
652 value: {get_attr: [StorageMgmtPort, ip_address]}
654 description: IP address of the server in the tenant network
655 value: {get_attr: [TenantPort, ip_address]}
656 management_ip_address:
657 description: IP address of the server in the management network
658 value: {get_attr: [ManagementPort, ip_address]}
660 description: The os-collect-config configuration associated with this server resource
661 value: {get_attr: [CephStorage, os_collect_config]}