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
144 type: OS::TripleO::CephStorageServer
147 command: {get_param: ConfigCommand}
148 splay: {get_param: ConfigCollectSplay}
150 image: {get_param: CephStorageImage}
151 image_update_policy: {get_param: ImageUpdatePolicy}
152 flavor: {get_param: OvercloudCephStorageFlavor}
153 key_name: {get_param: KeyName}
156 user_data_format: SOFTWARE_CONFIG
157 user_data: {get_resource: UserData}
160 template: {get_param: Hostname}
161 params: {get_param: HostnameMap}
162 software_config_transport: {get_param: SoftwareConfigTransport}
165 - {get_param: ServerMetadata}
166 - {get_param: CephStorageServerMetadata}
167 - {get_param: ServiceMetadataSettings}
168 scheduler_hints: {get_param: CephStorageSchedulerHints}
170 # Combine the NodeAdminUserData and NodeUserData mime archives
172 type: OS::Heat::MultipartMime
175 - config: {get_resource: NodeAdminUserData}
177 - config: {get_resource: NodeUserData}
179 - config: {get_resource: RoleUserData}
182 # Creates the "heat-admin" user if configured via the environment
183 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
185 type: OS::TripleO::NodeAdminUserData
187 # For optional operator additional userdata
188 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
190 type: OS::TripleO::NodeUserData
192 # For optional operator role-specific userdata
193 # Should return a OS::Heat::MultipartMime reference via OS::stack_id
195 type: OS::TripleO::CephStorage::NodeUserData
198 type: OS::TripleO::CephStorage::Ports::ExternalPort
200 ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
201 IPPool: {get_param: CephStorageIPs}
202 NodeIndex: {get_param: NodeIndex}
205 type: OS::TripleO::CephStorage::Ports::InternalApiPort
207 ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
208 IPPool: {get_param: CephStorageIPs}
209 NodeIndex: {get_param: NodeIndex}
212 type: OS::TripleO::CephStorage::Ports::StoragePort
214 ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
215 IPPool: {get_param: CephStorageIPs}
216 NodeIndex: {get_param: NodeIndex}
219 type: OS::TripleO::CephStorage::Ports::StorageMgmtPort
221 ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
222 IPPool: {get_param: CephStorageIPs}
223 NodeIndex: {get_param: NodeIndex}
226 type: OS::TripleO::CephStorage::Ports::TenantPort
228 ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
229 IPPool: {get_param: CephStorageIPs}
230 NodeIndex: {get_param: NodeIndex}
233 type: OS::TripleO::CephStorage::Ports::ManagementPort
235 ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
236 IPPool: {get_param: CephStorageIPs}
237 NodeIndex: {get_param: NodeIndex}
240 type: OS::TripleO::CephStorage::Net::SoftwareConfig
242 ControlPlaneIp: {get_attr: [CephStorage, networks, ctlplane, 0]}
243 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
244 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
245 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
246 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
247 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
248 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
251 type: OS::TripleO::Network::Ports::NetIpMap
253 ControlPlaneIp: {get_attr: [CephStorage, networks, ctlplane, 0]}
254 ExternalIp: {get_attr: [ExternalPort, ip_address]}
255 ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
256 ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
257 InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
258 InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
259 InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
260 StorageIp: {get_attr: [StoragePort, ip_address]}
261 StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
262 StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
263 StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
264 StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
265 StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
266 TenantIp: {get_attr: [TenantPort, ip_address]}
267 TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
268 TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
269 ManagementIp: {get_attr: [ManagementPort, ip_address]}
270 ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
271 ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
274 type: OS::Heat::Value
282 - - {get_attr: [CephStorage, name]}
284 - {get_param: CloudDomain}
288 - - {get_attr: [CephStorage, name]}
294 - - {get_attr: [CephStorage, name]}
296 - {get_param: CloudDomain}
300 - - {get_attr: [CephStorage, name]}
306 - - {get_attr: [CephStorage, name]}
308 - {get_param: CloudDomain}
312 - - {get_attr: [CephStorage, name]}
318 - - {get_attr: [CephStorage, name]}
320 - {get_param: CloudDomain}
324 - - {get_attr: [CephStorage, name]}
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]}
364 type: OS::TripleO::CephStorage::PreNetworkConfig
366 server: {get_resource: CephStorage}
369 type: OS::TripleO::SoftwareDeployment
370 depends_on: PreNetworkConfig
372 name: NetworkDeployment
373 config: {get_resource: NetworkConfig}
374 server: {get_resource: CephStorage}
375 actions: {get_param: NetworkDeploymentActions}
377 CephStorageUpgradeInitConfig:
378 type: OS::Heat::SoftwareConfig
384 - - "#!/bin/bash\n\n"
385 - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
386 - get_param: UpgradeInitCommand
387 - get_param: UpgradeInitCommonCommand
389 # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
390 # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
391 CephStorageUpgradeInitDeployment:
392 type: OS::Heat::SoftwareDeployment
393 depends_on: NetworkDeployment
395 name: CephStorageUpgradeInitDeployment
396 server: {get_resource: CephStorage}
397 config: {get_resource: CephStorageUpgradeInitConfig}
399 CephStorageDeployment:
400 type: OS::Heat::StructuredDeployment
401 depends_on: CephStorageUpgradeInitDeployment
403 name: CephStorageDeployment
404 config: {get_resource: CephStorageConfig}
405 server: {get_resource: CephStorage}
407 enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
410 type: OS::Heat::StructuredConfig
416 - heat_config_%{::deploy_config_name}
422 - bootstrap_node # provided by allNodesConfig
423 - all_nodes # provided by allNodesConfig
424 - vip_data # provided by allNodesConfig
426 merge_behavior: deeper
429 service_names: {get_param: ServiceNames}
430 sensu::subscriptions: {get_param: MonitoringSubscriptions}
433 - {get_param: ServiceConfigSettings}
434 - values: {get_attr: [NetIpMap, net_ip_map]}
435 ceph_extraconfig: {get_param: CephStorageExtraConfig}
436 extraconfig: {get_param: ExtraConfig}
438 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
439 fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
440 fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
441 fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
442 fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
443 fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
444 fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
446 # Resource for site-specific injection of root certificate
448 depends_on: CephStorageDeployment
449 type: OS::TripleO::NodeTLSCAData
451 server: {get_resource: CephStorage}
453 # Hook for site-specific additional pre-deployment config, e.g extra hieradata
454 CephStorageExtraConfigPre:
455 depends_on: CephStorageDeployment
456 type: OS::TripleO::CephStorageExtraConfigPre
458 server: {get_resource: CephStorage}
460 # Hook for site-specific additional pre-deployment config,
461 # applying to all nodes, e.g node registration/unregistration
463 depends_on: [CephStorageExtraConfigPre, NodeTLSCAData]
464 type: OS::TripleO::NodeExtraConfig
466 server: {get_resource: CephStorage}
469 type: OS::TripleO::Tasks::PackageUpdate
472 type: OS::Heat::SoftwareDeployment
473 depends_on: NetworkDeployment
475 config: {get_resource: UpdateConfig}
476 server: {get_resource: CephStorage}
479 get_param: UpdateIdentifier
482 type: OS::TripleO::Ssh::HostPubKey
483 depends_on: CephStorageDeployment
485 server: {get_resource: CephStorage}
489 description: IP address of the server in the ctlplane network
490 value: {get_attr: [CephStorage, networks, ctlplane, 0]}
492 description: Hostname of the server
493 value: {get_attr: [CephStorage, name]}
495 description: Mapping of network names to hostnames
497 external: {get_attr: [NetHostMap, value, external, fqdn]}
498 internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
499 storage: {get_attr: [NetHostMap, value, storage, fqdn]}
500 storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
501 tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
502 management: {get_attr: [NetHostMap, value, management, fqdn]}
503 ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
508 PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
509 EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
510 INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
511 STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
512 STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
513 TENANTIP TENANTHOST.DOMAIN TENANTHOST
514 MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
515 CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
517 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephStorageHostnameResolveNetwork]}]}
518 DOMAIN: {get_param: CloudDomain}
519 PRIMARYHOST: {get_attr: [CephStorage, name]}
520 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
521 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
522 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
523 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
524 STORAGEIP: {get_attr: [StoragePort, ip_address]}
525 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
526 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
527 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
528 TENANTIP: {get_attr: [TenantPort, ip_address]}
529 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
530 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
531 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
532 CTLPLANEIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
533 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
535 description: Entry for ssh known hosts
538 template: "PRIMARYIP,PRIMARYHOST.DOMAIN,PRIMARYHOST,\
539 EXTERNALIP,EXTERNALHOST.DOMAIN,EXTERNALHOST,\
540 INTERNAL_APIIP,INTERNAL_APIHOST.DOMAIN,INTERNAL_APIHOST,\
541 STORAGEIP,STORAGEHOST.DOMAIN,STORAGEHOST,\
542 STORAGE_MGMTIP,STORAGE_MGMTHOST.DOMAIN,STORAGE_MGMTHOST,\
543 TENANTIP,TENANTHOST.DOMAIN,TENANTHOST,\
544 MANAGEMENTIP,MANAGEMENTHOST.DOMAIN,MANAGEMENTHOST,\
545 CTLPLANEIP,CTLPLANEHOST.DOMAIN,CTLPLANEHOST HOSTSSHPUBKEY"
547 PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephStorageHostnameResolveNetwork]}]}
548 DOMAIN: {get_param: CloudDomain}
549 PRIMARYHOST: {get_attr: [CephStorage, name]}
550 EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
551 EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
552 INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
553 INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
554 STORAGEIP: {get_attr: [StoragePort, ip_address]}
555 STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
556 STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
557 STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
558 TENANTIP: {get_attr: [TenantPort, ip_address]}
559 TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
560 MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
561 MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
562 CTLPLANEIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
563 CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
564 HOSTSSHPUBKEY: {get_attr: [SshHostPubKey, ecdsa]}
565 nova_server_resource:
566 description: Heat resource handle for the ceph storage server
568 {get_resource: CephStorage}
570 description: IP address of the server in the external network
571 value: {get_attr: [ExternalPort, ip_address]}
572 internal_api_ip_address:
573 description: IP address of the server in the internal_api network
574 value: {get_attr: [InternalApiPort, ip_address]}
576 description: IP address of the server in the storage network
577 value: {get_attr: [StoragePort, ip_address]}
578 storage_mgmt_ip_address:
579 description: IP address of the server in the storage_mgmt network
580 value: {get_attr: [StorageMgmtPort, ip_address]}
582 description: IP address of the server in the tenant network
583 value: {get_attr: [TenantPort, ip_address]}
584 management_ip_address:
585 description: IP address of the server in the management network
586 value: {get_attr: [ManagementPort, ip_address]}