1 heat_template_version: ocata
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
121 Command or script snippet to run on all overcloud nodes to
122 initialize the upgrade process. E.g. a repository switch.
124 UpgradeInitCommonCommand:
127 Common commands required by the upgrades process. This should not
128 normally be modified by the operator and is set and unset in the
129 major-upgrade-composable-steps.yaml and major-upgrade-converge.yaml
135 type: OS::TripleO::CephStorageServer
138 command: {get_param: ConfigCommand}
140 image: {get_param: CephStorageImage}
141 image_update_policy: {get_param: ImageUpdatePolicy}
142 flavor: {get_param: OvercloudCephStorageFlavor}
143 key_name: {get_param: KeyName}
146 user_data_format: SOFTWARE_CONFIG
147 user_data: {get_resource: UserData}
150 template: {get_param: Hostname}
151 params: {get_param: HostnameMap}
152 software_config_transport: {get_param: SoftwareConfigTransport}
155 - {get_param: ServerMetadata}
156 - {get_param: CephStorageServerMetadata}
157 - {get_param: ServiceMetadataSettings}
158 scheduler_hints: {get_param: CephStorageSchedulerHints}
160 # Combine the NodeAdminUserData and NodeUserData mime archives
162 type: OS::Heat::MultipartMime
165 - config: {get_resource: NodeAdminUserData}
167 - config: {get_resource: NodeUserData}
169 - config: {get_resource: RoleUserData}
172 # Creates the "heat-admin" user if configured via the environment
173 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
175 type: OS::TripleO::NodeAdminUserData
177 # For optional operator additional userdata
178 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
180 type: OS::TripleO::NodeUserData
182 # For optional operator role-specific userdata
183 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
185 type: OS::TripleO::CephStorage::NodeUserData
188 type: OS::TripleO::CephStorage::Ports::ExternalPort
190 ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
191 IPPool: {get_param: CephStorageIPs}
192 NodeIndex: {get_param: NodeIndex}
195 type: OS::TripleO::CephStorage::Ports::InternalApiPort
197 ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
198 IPPool: {get_param: CephStorageIPs}
199 NodeIndex: {get_param: NodeIndex}
202 type: OS::TripleO::CephStorage::Ports::StoragePort
204 ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
205 IPPool: {get_param: CephStorageIPs}
206 NodeIndex: {get_param: NodeIndex}
209 type: OS::TripleO::CephStorage::Ports::StorageMgmtPort
211 ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
212 IPPool: {get_param: CephStorageIPs}
213 NodeIndex: {get_param: NodeIndex}
216 type: OS::TripleO::CephStorage::Ports::TenantPort
218 ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
219 IPPool: {get_param: CephStorageIPs}
220 NodeIndex: {get_param: NodeIndex}
223 type: OS::TripleO::CephStorage::Ports::ManagementPort
225 ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
226 IPPool: {get_param: CephStorageIPs}
227 NodeIndex: {get_param: NodeIndex}
230 type: OS::TripleO::CephStorage::Net::SoftwareConfig
232 ControlPlaneIp: {get_attr: [CephStorage, networks, ctlplane, 0]}
233 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
234 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
235 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
236 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
237 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
238 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
241 type: OS::TripleO::Network::Ports::NetIpMap
243 ControlPlaneIp: {get_attr: [CephStorage, networks, ctlplane, 0]}
244 ExternalIp: {get_attr: [ExternalPort, ip_address]}
245 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
246 ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
247 InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
248 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
249 InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
250 StorageIp: {get_attr: [StoragePort, ip_address]}
251 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
252 StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
253 StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
254 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
255 StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
256 TenantIp: {get_attr: [TenantPort, ip_address]}
257 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
258 TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
259 ManagementIp: {get_attr: [ManagementPort, ip_address]}
260 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
261 ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
264 type: OS::Heat::Value
272 - - {get_attr: [CephStorage, name]}
274 - {get_param: CloudDomain}
278 - - {get_attr: [CephStorage, name]}
284 - - {get_attr: [CephStorage, name]}
286 - {get_param: CloudDomain}
290 - - {get_attr: [CephStorage, name]}
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]}
354 type: OS::TripleO::CephStorage::PreNetworkConfig
356 server: {get_resource: CephStorage}
359 type: OS::TripleO::SoftwareDeployment
360 depends_on: PreNetworkConfig
362 name: NetworkDeployment
363 config: {get_resource: NetworkConfig}
364 server: {get_resource: CephStorage}
365 actions: {get_param: NetworkDeploymentActions}
367 CephStorageUpgradeInitConfig:
368 type: OS::Heat::SoftwareConfig
374 - - "#!/bin/bash\n\n"
375 - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
376 - get_param: UpgradeInitCommand
377 - get_param: UpgradeInitCommonCommand
379 # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
380 # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
381 CephStorageUpgradeInitDeployment:
382 type: OS::Heat::SoftwareDeployment
383 depends_on: NetworkDeployment
385 name: CephStorageUpgradeInitDeployment
386 server: {get_resource: CephStorage}
387 config: {get_resource: CephStorageUpgradeInitConfig}
389 CephStorageDeployment:
390 type: OS::Heat::StructuredDeployment
391 depends_on: CephStorageUpgradeInitDeployment
393 name: CephStorageDeployment
394 config: {get_resource: CephStorageConfig}
395 server: {get_resource: CephStorage}
397 enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
400 type: OS::Heat::StructuredConfig
406 - heat_config_%{::deploy_config_name}
412 - bootstrap_node # provided by allNodesConfig
413 - all_nodes # provided by allNodesConfig
414 - vip_data # provided by allNodesConfig
416 merge_behavior: deeper
419 service_names: {get_param: ServiceNames}
420 sensu::subscriptions: {get_param: MonitoringSubscriptions}
423 - {get_param: ServiceConfigSettings}
424 - values: {get_attr: [NetIpMap, net_ip_map]}
425 ceph_extraconfig: {get_param: CephStorageExtraConfig}
426 extraconfig: {get_param: ExtraConfig}
428 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
429 fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
430 fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
431 fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
432 fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
433 fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
434 fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
436 # Resource for site-specific injection of root certificate
438 depends_on: CephStorageDeployment
439 type: OS::TripleO::NodeTLSCAData
441 server: {get_resource: CephStorage}
443 # Hook for site-specific additional pre-deployment config, e.g extra hieradata
444 CephStorageExtraConfigPre:
445 depends_on: CephStorageDeployment
446 type: OS::TripleO::CephStorageExtraConfigPre
448 server: {get_resource: CephStorage}
450 # Hook for site-specific additional pre-deployment config,
451 # applying to all nodes, e.g node registration/unregistration
453 depends_on: [CephStorageExtraConfigPre, NodeTLSCAData]
454 type: OS::TripleO::NodeExtraConfig
456 server: {get_resource: CephStorage}
459 type: OS::TripleO::Tasks::PackageUpdate
462 type: OS::Heat::SoftwareDeployment
463 depends_on: NetworkDeployment
465 config: {get_resource: UpdateConfig}
466 server: {get_resource: CephStorage}
469 get_param: UpdateIdentifier
472 type: OS::TripleO::Ssh::HostPubKey
473 depends_on: CephStorageDeployment
475 server: {get_resource: CephStorage}
479 description: IP address of the server in the ctlplane network
480 value: {get_attr: [CephStorage, networks, ctlplane, 0]}
482 description: Hostname of the server
483 value: {get_attr: [CephStorage, name]}
485 description: Mapping of network names to hostnames
487 external: {get_attr: [NetHostMap, value, external, fqdn]}
488 internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
489 storage: {get_attr: [NetHostMap, value, storage, fqdn]}
490 storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
491 tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
492 management: {get_attr: [NetHostMap, value, management, fqdn]}
493 ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
498 PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
499 EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
500 INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
501 STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
502 STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
503 TENANTIP TENANTHOST.DOMAIN TENANTHOST
504 MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
505 CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
507 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephStorageHostnameResolveNetwork]}]}
508 DOMAIN: {get_param: CloudDomain}
509 PRIMARYHOST: {get_attr: [CephStorage, name]}
510 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
511 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
512 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
513 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
514 STORAGEIP: {get_attr: [StoragePort, ip_address]}
515 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
516 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
517 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
518 TENANTIP: {get_attr: [TenantPort, ip_address]}
519 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
520 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
521 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
522 CTLPLANEIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
523 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
525 description: Entry for ssh known hosts
528 template: "PRIMARYIP,PRIMARYHOST.DOMAIN,PRIMARYHOST,\
529 EXTERNALIP,EXTERNALHOST.DOMAIN,EXTERNALHOST,\
530 INTERNAL_APIIP,INTERNAL_APIHOST.DOMAIN,INTERNAL_APIHOST,\
531 STORAGEIP,STORAGEHOST.DOMAIN,STORAGEHOST,\
532 STORAGE_MGMTIP,STORAGE_MGMTHOST.DOMAIN,STORAGE_MGMTHOST,\
533 TENANTIP,TENANTHOST.DOMAIN,TENANTHOST,\
534 MANAGEMENTIP,MANAGEMENTHOST.DOMAIN,MANAGEMENTHOST,\
535 CTLPLANEIP,CTLPLANEHOST.DOMAIN,CTLPLANEHOST HOSTSSHPUBKEY"
537 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephStorageHostnameResolveNetwork]}]}
538 DOMAIN: {get_param: CloudDomain}
539 PRIMARYHOST: {get_attr: [CephStorage, name]}
540 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
541 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
542 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
543 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
544 STORAGEIP: {get_attr: [StoragePort, ip_address]}
545 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
546 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
547 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
548 TENANTIP: {get_attr: [TenantPort, ip_address]}
549 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
550 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
551 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
552 CTLPLANEIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
553 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
554 HOSTSSHPUBKEY: {get_attr: [SshHostPubKey, ecdsa]}
555 nova_server_resource:
556 description: Heat resource handle for the ceph storage server
558 {get_resource: CephStorage}
560 description: IP address of the server in the external network
561 value: {get_attr: [ExternalPort, ip_address]}
562 internal_api_ip_address:
563 description: IP address of the server in the internal_api network
564 value: {get_attr: [InternalApiPort, ip_address]}
566 description: IP address of the server in the storage network
567 value: {get_attr: [StoragePort, ip_address]}
568 storage_mgmt_ip_address:
569 description: IP address of the server in the storage_mgmt network
570 value: {get_attr: [StorageMgmtPort, ip_address]}
572 description: IP address of the server in the tenant network
573 value: {get_attr: [TenantPort, ip_address]}
574 management_ip_address:
575 description: IP address of the server in the management network
576 value: {get_attr: [ManagementPort, ip_address]}