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 should match the dhcp_domain
79 configured in the Undercloud neutron. Defaults to localdomain.
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 server_not_blacklisted:
153 - {get_param: [DeploymentServerBlacklistDict, {get_param: Hostname}]}
158 type: OS::TripleO::CephStorageServer
161 command: {get_param: ConfigCommand}
162 splay: {get_param: ConfigCollectSplay}
164 image: {get_param: CephStorageImage}
165 image_update_policy: {get_param: ImageUpdatePolicy}
166 flavor: {get_param: OvercloudCephStorageFlavor}
167 key_name: {get_param: KeyName}
170 user_data_format: SOFTWARE_CONFIG
171 user_data: {get_resource: UserData}
174 template: {get_param: Hostname}
175 params: {get_param: HostnameMap}
176 software_config_transport: {get_param: SoftwareConfigTransport}
179 - {get_param: ServerMetadata}
180 - {get_param: CephStorageServerMetadata}
181 - {get_param: ServiceMetadataSettings}
182 scheduler_hints: {get_param: CephStorageSchedulerHints}
184 # Combine the NodeAdminUserData and NodeUserData mime archives
186 type: OS::Heat::MultipartMime
189 - config: {get_resource: NodeAdminUserData}
191 - config: {get_resource: NodeUserData}
193 - config: {get_resource: RoleUserData}
196 # Creates the "heat-admin" user if configured via the environment
197 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
199 type: OS::TripleO::NodeAdminUserData
201 # For optional operator additional userdata
202 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
204 type: OS::TripleO::NodeUserData
206 # For optional operator role-specific userdata
207 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
209 type: OS::TripleO::CephStorage::NodeUserData
212 type: OS::TripleO::CephStorage::Ports::ExternalPort
214 ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
215 IPPool: {get_param: CephStorageIPs}
216 NodeIndex: {get_param: NodeIndex}
219 type: OS::TripleO::CephStorage::Ports::InternalApiPort
221 ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
222 IPPool: {get_param: CephStorageIPs}
223 NodeIndex: {get_param: NodeIndex}
226 type: OS::TripleO::CephStorage::Ports::StoragePort
228 ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
229 IPPool: {get_param: CephStorageIPs}
230 NodeIndex: {get_param: NodeIndex}
233 type: OS::TripleO::CephStorage::Ports::StorageMgmtPort
235 ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
236 IPPool: {get_param: CephStorageIPs}
237 NodeIndex: {get_param: NodeIndex}
240 type: OS::TripleO::CephStorage::Ports::TenantPort
242 ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
243 IPPool: {get_param: CephStorageIPs}
244 NodeIndex: {get_param: NodeIndex}
247 type: OS::TripleO::CephStorage::Ports::ManagementPort
249 ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
250 IPPool: {get_param: CephStorageIPs}
251 NodeIndex: {get_param: NodeIndex}
254 type: OS::TripleO::CephStorage::Net::SoftwareConfig
256 ControlPlaneIp: {get_attr: [CephStorage, networks, ctlplane, 0]}
257 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
258 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
259 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
260 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
261 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
262 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
265 type: OS::TripleO::Network::Ports::NetIpMap
267 ControlPlaneIp: {get_attr: [CephStorage, networks, ctlplane, 0]}
268 ExternalIp: {get_attr: [ExternalPort, ip_address]}
269 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
270 ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
271 InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
272 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
273 InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
274 StorageIp: {get_attr: [StoragePort, ip_address]}
275 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
276 StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
277 StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
278 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
279 StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
280 TenantIp: {get_attr: [TenantPort, ip_address]}
281 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
282 TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
283 ManagementIp: {get_attr: [ManagementPort, ip_address]}
284 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
285 ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
288 type: OS::Heat::Value
296 - - {get_attr: [CephStorage, name]}
298 - {get_param: CloudDomain}
302 - - {get_attr: [CephStorage, name]}
308 - - {get_attr: [CephStorage, name]}
310 - {get_param: CloudDomain}
314 - - {get_attr: [CephStorage, name]}
320 - - {get_attr: [CephStorage, name]}
322 - {get_param: CloudDomain}
326 - - {get_attr: [CephStorage, name]}
332 - - {get_attr: [CephStorage, name]}
334 - {get_param: CloudDomain}
338 - - {get_attr: [CephStorage, name]}
344 - - {get_attr: [CephStorage, name]}
346 - {get_param: CloudDomain}
350 - - {get_attr: [CephStorage, name]}
356 - - {get_attr: [CephStorage, name]}
358 - {get_param: CloudDomain}
362 - - {get_attr: [CephStorage, name]}
368 - - {get_attr: [CephStorage, name]}
370 - {get_param: CloudDomain}
374 - - {get_attr: [CephStorage, name]}
378 type: OS::TripleO::CephStorage::PreNetworkConfig
380 server: {get_resource: CephStorage}
383 type: OS::TripleO::SoftwareDeployment
384 depends_on: PreNetworkConfig
386 name: NetworkDeployment
387 config: {get_resource: NetworkConfig}
388 server: {get_resource: CephStorage}
391 - server_not_blacklisted
392 - {get_param: NetworkDeploymentActions}
395 CephStorageUpgradeInitConfig:
396 type: OS::Heat::SoftwareConfig
402 - - "#!/bin/bash\n\n"
403 - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
404 - get_param: UpgradeInitCommand
405 - get_param: UpgradeInitCommonCommand
407 # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
408 # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
409 CephStorageUpgradeInitDeployment:
410 type: OS::Heat::SoftwareDeployment
411 depends_on: NetworkDeployment
413 name: CephStorageUpgradeInitDeployment
414 server: {get_resource: CephStorage}
415 config: {get_resource: CephStorageUpgradeInitConfig}
418 - server_not_blacklisted
419 - ['CREATE', 'UPDATE']
422 CephStorageDeployment:
423 type: OS::Heat::StructuredDeployment
424 depends_on: CephStorageUpgradeInitDeployment
426 name: CephStorageDeployment
427 config: {get_resource: CephStorageConfig}
428 server: {get_resource: CephStorage}
430 enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
433 - server_not_blacklisted
434 - ['CREATE', 'UPDATE']
438 type: OS::Heat::StructuredConfig
444 - heat_config_%{::deploy_config_name}
451 - bootstrap_node # provided by allNodesConfig
452 - all_nodes # provided by allNodesConfig
453 - vip_data # provided by allNodesConfig
455 merge_behavior: deeper
458 service_names: {get_param: ServiceNames}
459 sensu::subscriptions: {get_param: MonitoringSubscriptions}
462 - {get_param: ServiceConfigSettings}
463 - values: {get_attr: [NetIpMap, net_ip_map]}
464 ceph_extraconfig: {get_param: CephStorageExtraConfig}
465 extraconfig: {get_param: ExtraConfig}
467 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
468 fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
469 fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
470 fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
471 fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
472 fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
473 fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
474 fqdn_external: {get_attr: [NetHostMap, value, external, fqdn]}
476 # Resource for site-specific injection of root certificate
478 depends_on: CephStorageDeployment
479 type: OS::TripleO::NodeTLSCAData
481 server: {get_resource: CephStorage}
483 # Hook for site-specific additional pre-deployment config, e.g extra hieradata
484 CephStorageExtraConfigPre:
485 depends_on: CephStorageDeployment
486 type: OS::TripleO::CephStorageExtraConfigPre
488 server: {get_resource: CephStorage}
490 # Hook for site-specific additional pre-deployment config,
491 # applying to all nodes, e.g node registration/unregistration
493 depends_on: [CephStorageExtraConfigPre, NodeTLSCAData]
494 type: OS::TripleO::NodeExtraConfig
496 server: {get_resource: CephStorage}
499 type: OS::TripleO::Tasks::PackageUpdate
502 type: OS::Heat::SoftwareDeployment
503 depends_on: NetworkDeployment
505 config: {get_resource: UpdateConfig}
506 server: {get_resource: CephStorage}
509 get_param: UpdateIdentifier
512 - server_not_blacklisted
513 - ['CREATE', 'UPDATE']
517 type: OS::TripleO::Ssh::HostPubKey
518 depends_on: CephStorageDeployment
520 server: {get_resource: CephStorage}
524 description: IP address of the server in the ctlplane network
525 value: {get_attr: [CephStorage, networks, ctlplane, 0]}
527 description: Hostname of the server
528 value: {get_attr: [CephStorage, name]}
530 description: Mapping of network names to hostnames
532 external: {get_attr: [NetHostMap, value, external, fqdn]}
533 internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
534 storage: {get_attr: [NetHostMap, value, storage, fqdn]}
535 storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
536 tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
537 management: {get_attr: [NetHostMap, value, management, fqdn]}
538 ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
543 PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
544 EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
545 INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
546 STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
547 STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
548 TENANTIP TENANTHOST.DOMAIN TENANTHOST
549 MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
550 CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
552 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephStorageHostnameResolveNetwork]}]}
553 DOMAIN: {get_param: CloudDomain}
554 PRIMARYHOST: {get_attr: [CephStorage, name]}
555 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
556 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
557 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
558 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
559 STORAGEIP: {get_attr: [StoragePort, ip_address]}
560 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
561 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
562 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
563 TENANTIP: {get_attr: [TenantPort, ip_address]}
564 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
565 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
566 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
567 CTLPLANEIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
568 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
570 description: Entry for ssh known hosts
573 template: "PRIMARYIP,PRIMARYHOST.DOMAIN,PRIMARYHOST,\
574 EXTERNALIP,EXTERNALHOST.DOMAIN,EXTERNALHOST,\
575 INTERNAL_APIIP,INTERNAL_APIHOST.DOMAIN,INTERNAL_APIHOST,\
576 STORAGEIP,STORAGEHOST.DOMAIN,STORAGEHOST,\
577 STORAGE_MGMTIP,STORAGE_MGMTHOST.DOMAIN,STORAGE_MGMTHOST,\
578 TENANTIP,TENANTHOST.DOMAIN,TENANTHOST,\
579 MANAGEMENTIP,MANAGEMENTHOST.DOMAIN,MANAGEMENTHOST,\
580 CTLPLANEIP,CTLPLANEHOST.DOMAIN,CTLPLANEHOST HOSTSSHPUBKEY"
582 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephStorageHostnameResolveNetwork]}]}
583 DOMAIN: {get_param: CloudDomain}
584 PRIMARYHOST: {get_attr: [CephStorage, name]}
585 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
586 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
587 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
588 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
589 STORAGEIP: {get_attr: [StoragePort, ip_address]}
590 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
591 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
592 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
593 TENANTIP: {get_attr: [TenantPort, ip_address]}
594 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
595 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
596 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
597 CTLPLANEIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
598 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
599 HOSTSSHPUBKEY: {get_attr: [SshHostPubKey, ecdsa]}
600 nova_server_resource:
601 description: Heat resource handle for the ceph storage server
603 {get_resource: CephStorage}
604 condition: server_not_blacklisted
606 description: IP address of the server in the external network
607 value: {get_attr: [ExternalPort, ip_address]}
608 internal_api_ip_address:
609 description: IP address of the server in the internal_api network
610 value: {get_attr: [InternalApiPort, ip_address]}
612 description: IP address of the server in the storage network
613 value: {get_attr: [StoragePort, ip_address]}
614 storage_mgmt_ip_address:
615 description: IP address of the server in the storage_mgmt network
616 value: {get_attr: [StorageMgmtPort, ip_address]}
618 description: IP address of the server in the tenant network
619 value: {get_attr: [TenantPort, ip_address]}
620 management_ip_address:
621 description: IP address of the server in the management network
622 value: {get_attr: [ManagementPort, ip_address]}