Merge "Replace outdated instruction with link to upstream doc"
[apex-tripleo-heat-templates.git] / puppet / cephstorage-role.yaml
1 heat_template_version: pike
2 description: 'OpenStack ceph storage node configured by Puppet'
3 parameters:
4   OvercloudCephStorageFlavor:
5     description: Flavor for the Ceph Storage node.
6     default: baremetal
7     type: string
8     constraints:
9       - custom_constraint: nova.flavor
10   CephStorageImage:
11     type: string
12     default: overcloud-full
13     constraints:
14       - custom_constraint: glance.image
15   ImageUpdatePolicy:
16     default: 'REBUILD_PRESERVE_EPHEMERAL'
17     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
18     type: string
19   KeyName:
20     description: Name of an existing Nova key pair to enable SSH access to the instances
21     type: string
22     default: default
23     constraints:
24       - custom_constraint: nova.keypair
25   ServiceNetMap:
26     default: {}
27     description: Mapping of service_name -> network name. Typically set
28                  via parameter_defaults in the resource registry.
29     type: json
30   EndpointMap:
31     default: {}
32     description: Mapping of service endpoint -> protocol. Typically set
33                  via parameter_defaults in the resource registry.
34     type: json
35   UpdateIdentifier:
36     default: ''
37     type: string
38     description: >
39       Setting to a previously unused value during stack-update will trigger
40       package update on all nodes
41   Hostname:
42     type: string
43     default: '' # Defaults to Heat created hostname
44   HostnameMap:
45     type: json
46     default: {}
47     description: Optional mapping to override hostnames
48   ExtraConfig:
49     default: {}
50     description: |
51       Additional hiera configuration to inject into the cluster. Note
52       that CephStorageExtraConfig takes precedence over ExtraConfig.
53     type: json
54   CephStorageExtraConfig:
55     default: {}
56     description: |
57       Role specific additional hiera configuration to inject into the cluster.
58     type: json
59   CephStorageIPs:
60     default: {}
61     type: json
62   NetworkDeploymentActions:
63     type: comma_delimited_list
64     description: >
65       Heat action when to apply network configuration changes
66     default: ['CREATE']
67   SoftwareConfigTransport:
68     default: POLL_SERVER_CFN
69     description: |
70       How the server should receive the metadata required for software configuration.
71     type: string
72     constraints:
73     - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
74   CloudDomain:
75     default: 'localdomain'
76     type: string
77     description: >
78       The DNS domain used for the hosts. This must match the
79       overcloud_domain_name configured on the undercloud.
80   CephStorageServerMetadata:
81     default: {}
82     description: >
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
86       parameter.
87     type: json
88   ServerMetadata:
89     default: {}
90     description: >
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.
94     type: json
95   CephStorageSchedulerHints:
96     type: json
97     description: Optional scheduler hints to pass to nova
98     default: {}
99   NodeIndex:
100     type: number
101     default: 0
102   ServiceConfigSettings:
103     type: json
104     default: {}
105   ServiceNames:
106     type: comma_delimited_list
107     default: []
108   MonitoringSubscriptions:
109     type: comma_delimited_list
110     default: []
111   ServiceMetadataSettings:
112     type: json
113     default: {}
114   ConfigCommand:
115     type: string
116     description: Command which will be run whenever configuration data changes
117     default: os-refresh-config --timeout 14400
118   ConfigCollectSplay:
119     type: number
120     default: 30
121     description: |
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.
127   UpgradeInitCommand:
128     type: string
129     description: |
130       Command or script snippet to run on all overcloud nodes to
131       initialize the upgrade process. E.g. a repository switch.
132     default: ''
133   UpgradeInitCommonCommand:
134     type: string
135     description: |
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
139       environment files.
140     default: ''
141   DeploymentServerBlacklistDict:
142     default: {}
143     type: json
144     description: >
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.
148   RoleParameters:
149     type: json
150     description: Role Specific Parameters
151     default: {}
152   DeploymentSwiftDataMap:
153     type: json
154     description: |
155       Map of servers to Swift container and object for storing deployment data.
156       The keys are the Heat assigned hostnames, and the value is a map of the
157       container/object name in Swift. Example value:
158         overcloud-controller-0:
159           container: overcloud-controller
160           object: 0
161         overcloud-controller-1:
162           container: overcloud-controller
163           object: 1
164         overcloud-controller-2:
165           container: overcloud-controller
166           object: 2
167         overcloud-novacompute-0:
168           container: overcloud-compute
169           object: 0
170     default: {}
171
172 conditions:
173   server_not_blacklisted:
174     not:
175       equals:
176         - {get_param: [DeploymentServerBlacklistDict, {get_param: Hostname}]}
177         - 1
178   deployment_swift_data_map_unset:
179     equals:
180       - get_param:
181           - DeploymentSwiftDataMap
182           - {get_param: Hostname}
183       - ""
184
185 resources:
186   CephStorage:
187     type: OS::TripleO::CephStorageServer
188     metadata:
189       os-collect-config:
190         command: {get_param: ConfigCommand}
191         splay: {get_param: ConfigCollectSplay}
192     properties:
193       image: {get_param: CephStorageImage}
194       image_update_policy: {get_param: ImageUpdatePolicy}
195       flavor: {get_param: OvercloudCephStorageFlavor}
196       key_name: {get_param: KeyName}
197       networks:
198         - network: ctlplane
199       user_data_format: SOFTWARE_CONFIG
200       user_data: {get_resource: UserData}
201       name:
202         str_replace:
203             template: {get_param: Hostname}
204             params: {get_param: HostnameMap}
205       software_config_transport: {get_param: SoftwareConfigTransport}
206       metadata:
207         map_merge:
208           - {get_param: ServerMetadata}
209           - {get_param: CephStorageServerMetadata}
210           - {get_param: ServiceMetadataSettings}
211       scheduler_hints: {get_param: CephStorageSchedulerHints}
212       deployment_swift_data:
213         if:
214           - deployment_swift_data_map_unset
215           - {}
216           - {get_param: [DeploymentSwiftDataMap,
217                          {get_param: Hostname}]}
218
219   # Combine the NodeAdminUserData and NodeUserData mime archives
220   UserData:
221     type: OS::Heat::MultipartMime
222     properties:
223       parts:
224       - config: {get_resource: NodeAdminUserData}
225         type: multipart
226       - config: {get_resource: NodeUserData}
227         type: multipart
228       - config: {get_resource: RoleUserData}
229         type: multipart
230
231   # Creates the "heat-admin" user if configured via the environment
232   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
233   NodeAdminUserData:
234     type: OS::TripleO::NodeAdminUserData
235
236   # For optional operator additional userdata
237   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
238   NodeUserData:
239     type: OS::TripleO::NodeUserData
240
241   # For optional operator role-specific userdata
242   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
243   RoleUserData:
244     type: OS::TripleO::CephStorage::NodeUserData
245
246   ExternalPort:
247     type: OS::TripleO::CephStorage::Ports::ExternalPort
248     properties:
249       ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
250       IPPool: {get_param: CephStorageIPs}
251       NodeIndex: {get_param: NodeIndex}
252
253   InternalApiPort:
254     type: OS::TripleO::CephStorage::Ports::InternalApiPort
255     properties:
256       ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
257       IPPool: {get_param: CephStorageIPs}
258       NodeIndex: {get_param: NodeIndex}
259
260   StoragePort:
261     type: OS::TripleO::CephStorage::Ports::StoragePort
262     properties:
263       ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
264       IPPool: {get_param: CephStorageIPs}
265       NodeIndex: {get_param: NodeIndex}
266
267   StorageMgmtPort:
268     type: OS::TripleO::CephStorage::Ports::StorageMgmtPort
269     properties:
270       ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
271       IPPool: {get_param: CephStorageIPs}
272       NodeIndex: {get_param: NodeIndex}
273
274   TenantPort:
275     type: OS::TripleO::CephStorage::Ports::TenantPort
276     properties:
277       ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
278       IPPool: {get_param: CephStorageIPs}
279       NodeIndex: {get_param: NodeIndex}
280
281   ManagementPort:
282     type: OS::TripleO::CephStorage::Ports::ManagementPort
283     properties:
284       ControlPlaneIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
285       IPPool: {get_param: CephStorageIPs}
286       NodeIndex: {get_param: NodeIndex}
287
288   NetworkConfig:
289     type: OS::TripleO::CephStorage::Net::SoftwareConfig
290     properties:
291       ControlPlaneIp: {get_attr: [CephStorage, networks, ctlplane, 0]}
292       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
293       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
294       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
295       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
296       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
297       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
298
299   NetIpMap:
300     type: OS::TripleO::Network::Ports::NetIpMap
301     properties:
302       ControlPlaneIp: {get_attr: [CephStorage, networks, ctlplane, 0]}
303       ExternalIp: {get_attr: [ExternalPort, ip_address]}
304       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
305       ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
306       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
307       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
308       InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
309       StorageIp: {get_attr: [StoragePort, ip_address]}
310       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
311       StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
312       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
313       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
314       StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
315       TenantIp: {get_attr: [TenantPort, ip_address]}
316       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
317       TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
318       ManagementIp: {get_attr: [ManagementPort, ip_address]}
319       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
320       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
321
322   NetHostMap:
323     type: OS::Heat::Value
324     properties:
325       type: json
326       value:
327         external:
328           fqdn:
329             list_join:
330             - '.'
331             - - {get_attr: [CephStorage, name]}
332               - external
333               - {get_param: CloudDomain}
334           short:
335             list_join:
336             - '.'
337             - - {get_attr: [CephStorage, name]}
338               - external
339         internal_api:
340           fqdn:
341             list_join:
342             - '.'
343             - - {get_attr: [CephStorage, name]}
344               - internalapi
345               - {get_param: CloudDomain}
346           short:
347             list_join:
348             - '.'
349             - - {get_attr: [CephStorage, name]}
350               - internalapi
351         storage:
352           fqdn:
353             list_join:
354             - '.'
355             - - {get_attr: [CephStorage, name]}
356               - storage
357               - {get_param: CloudDomain}
358           short:
359             list_join:
360             - '.'
361             - - {get_attr: [CephStorage, name]}
362               - storage
363         storage_mgmt:
364           fqdn:
365             list_join:
366             - '.'
367             - - {get_attr: [CephStorage, name]}
368               - storagemgmt
369               - {get_param: CloudDomain}
370           short:
371             list_join:
372             - '.'
373             - - {get_attr: [CephStorage, name]}
374               - storagemgmt
375         tenant:
376           fqdn:
377             list_join:
378             - '.'
379             - - {get_attr: [CephStorage, name]}
380               - tenant
381               - {get_param: CloudDomain}
382           short:
383             list_join:
384             - '.'
385             - - {get_attr: [CephStorage, name]}
386               - tenant
387         management:
388           fqdn:
389             list_join:
390             - '.'
391             - - {get_attr: [CephStorage, name]}
392               - management
393               - {get_param: CloudDomain}
394           short:
395             list_join:
396             - '.'
397             - - {get_attr: [CephStorage, name]}
398               - management
399         ctlplane:
400           fqdn:
401             list_join:
402             - '.'
403             - - {get_attr: [CephStorage, name]}
404               - ctlplane
405               - {get_param: CloudDomain}
406           short:
407             list_join:
408             - '.'
409             - - {get_attr: [CephStorage, name]}
410               - ctlplane
411
412   PreNetworkConfig:
413     type: OS::TripleO::CephStorage::PreNetworkConfig
414     properties:
415       server: {get_resource: CephStorage}
416       RoleParameters: {get_param: RoleParameters}
417       ServiceNames: {get_param: ServiceNames}
418       deployment_actions: {get_attr: [DeploymentActions, value]}
419
420   NetworkDeployment:
421     type: OS::TripleO::SoftwareDeployment
422     depends_on: PreNetworkConfig
423     properties:
424       name: NetworkDeployment
425       config: {get_resource: NetworkConfig}
426       server: {get_resource: CephStorage}
427       actions:
428         if:
429           - server_not_blacklisted
430           - {get_param: NetworkDeploymentActions}
431           - []
432
433   CephStorageUpgradeInitConfig:
434     type: OS::Heat::SoftwareConfig
435     properties:
436       group: script
437       config:
438         list_join:
439         - ''
440         - - "#!/bin/bash\n\n"
441           - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
442           - get_param: UpgradeInitCommand
443           - get_param: UpgradeInitCommonCommand
444
445   # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
446   # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
447   CephStorageUpgradeInitDeployment:
448     type: OS::Heat::SoftwareDeployment
449     depends_on: NetworkDeployment
450     properties:
451       name: CephStorageUpgradeInitDeployment
452       server: {get_resource: CephStorage}
453       config: {get_resource: CephStorageUpgradeInitConfig}
454       actions:
455         if:
456           - server_not_blacklisted
457           - ['CREATE', 'UPDATE']
458           - []
459
460   CephStorageDeployment:
461     type: OS::Heat::StructuredDeployment
462     depends_on: CephStorageUpgradeInitDeployment
463     properties:
464       name: CephStorageDeployment
465       config: {get_resource: CephStorageConfig}
466       server: {get_resource: CephStorage}
467       input_values:
468         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
469       actions:
470         if:
471           - server_not_blacklisted
472           - ['CREATE', 'UPDATE']
473           - []
474
475   CephStorageConfig:
476     type: OS::Heat::StructuredConfig
477     properties:
478       group: hiera
479       config:
480         hierarchy:
481           - '"%{::uuid}"'
482           - heat_config_%{::deploy_config_name}
483           - config_step
484           - ceph_extraconfig
485           - extraconfig
486           - service_names
487           - service_configs
488           - ceph
489           - bootstrap_node # provided by allNodesConfig
490           - all_nodes # provided by allNodesConfig
491           - vip_data # provided by allNodesConfig
492           - '"%{::osfamily}"'
493         merge_behavior: deeper
494         datafiles:
495           service_names:
496             service_names: {get_param: ServiceNames}
497             sensu::subscriptions: {get_param: MonitoringSubscriptions}
498           service_configs:
499             map_replace:
500               - {get_param: ServiceConfigSettings}
501               - values: {get_attr: [NetIpMap, net_ip_map]}
502           ceph_extraconfig: {get_param: CephStorageExtraConfig}
503           extraconfig: {get_param: ExtraConfig}
504           ceph:
505             tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
506             fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
507             fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
508             fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
509             fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
510             fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
511             fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
512             fqdn_external: {get_attr: [NetHostMap, value, external, fqdn]}
513
514   # Resource for site-specific injection of root certificate
515   NodeTLSCAData:
516     depends_on: CephStorageDeployment
517     type: OS::TripleO::NodeTLSCAData
518     properties:
519       server: {get_resource: CephStorage}
520
521   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
522   CephStorageExtraConfigPre:
523     depends_on: CephStorageDeployment
524     type: OS::TripleO::CephStorageExtraConfigPre
525     # We have to use conditions here so that we don't break backwards
526     # compatibility with templates everywhere
527     condition: server_not_blacklisted
528     properties:
529         server: {get_resource: CephStorage}
530
531   # Hook for site-specific additional pre-deployment config,
532   # applying to all nodes, e.g node registration/unregistration
533   NodeExtraConfig:
534     depends_on: [CephStorageExtraConfigPre, NodeTLSCAData]
535     type: OS::TripleO::NodeExtraConfig
536     # We have to use conditions here so that we don't break backwards
537     # compatibility with templates everywhere
538     condition: server_not_blacklisted
539     properties:
540         server: {get_resource: CephStorage}
541
542   UpdateConfig:
543     type: OS::TripleO::Tasks::PackageUpdate
544
545   UpdateDeployment:
546     type: OS::Heat::SoftwareDeployment
547     depends_on: NetworkDeployment
548     properties:
549       config: {get_resource: UpdateConfig}
550       server: {get_resource: CephStorage}
551       input_values:
552         update_identifier:
553           get_param: UpdateIdentifier
554       actions:
555         if:
556           - server_not_blacklisted
557           - ['CREATE', 'UPDATE']
558           - []
559
560   DeploymentActions:
561     type: OS::Heat::Value
562     properties:
563       value:
564         if:
565           - server_not_blacklisted
566           - ['CREATE', 'UPDATE']
567           - []
568
569   SshHostPubKey:
570     type: OS::TripleO::Ssh::HostPubKey
571     depends_on: CephStorageDeployment
572     properties:
573         server: {get_resource: CephStorage}
574         deployment_actions: {get_attr: [DeploymentActions, value]}
575
576 outputs:
577   ip_address:
578     description: IP address of the server in the ctlplane network
579     value: {get_attr: [CephStorage, networks, ctlplane, 0]}
580   hostname:
581     description: Hostname of the server
582     value: {get_attr: [CephStorage, name]}
583   hostname_map:
584     description: Mapping of network names to hostnames
585     value:
586       external: {get_attr: [NetHostMap, value, external, fqdn]}
587       internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
588       storage: {get_attr: [NetHostMap, value, storage, fqdn]}
589       storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
590       tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
591       management: {get_attr: [NetHostMap, value, management, fqdn]}
592       ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
593   hosts_entry:
594     value:
595       str_replace:
596         template: |
597           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
598           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
599           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
600           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
601           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
602           TENANTIP TENANTHOST.DOMAIN TENANTHOST
603           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
604           CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
605         params:
606           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephStorageHostnameResolveNetwork]}]}
607           DOMAIN: {get_param: CloudDomain}
608           PRIMARYHOST: {get_attr: [CephStorage, name]}
609           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
610           EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
611           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
612           INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
613           STORAGEIP: {get_attr: [StoragePort, ip_address]}
614           STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
615           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
616           STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
617           TENANTIP: {get_attr: [TenantPort, ip_address]}
618           TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
619           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
620           MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
621           CTLPLANEIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
622           CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
623   known_hosts_entry:
624     description: Entry for ssh known hosts
625     value:
626       str_replace:
627         template: "PRIMARYIP,PRIMARYHOST.DOMAIN,PRIMARYHOST,\
628 EXTERNALIP,EXTERNALHOST.DOMAIN,EXTERNALHOST,\
629 INTERNAL_APIIP,INTERNAL_APIHOST.DOMAIN,INTERNAL_APIHOST,\
630 STORAGEIP,STORAGEHOST.DOMAIN,STORAGEHOST,\
631 STORAGE_MGMTIP,STORAGE_MGMTHOST.DOMAIN,STORAGE_MGMTHOST,\
632 TENANTIP,TENANTHOST.DOMAIN,TENANTHOST,\
633 MANAGEMENTIP,MANAGEMENTHOST.DOMAIN,MANAGEMENTHOST,\
634 CTLPLANEIP,CTLPLANEHOST.DOMAIN,CTLPLANEHOST HOSTSSHPUBKEY"
635         params:
636           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephStorageHostnameResolveNetwork]}]}
637           DOMAIN: {get_param: CloudDomain}
638           PRIMARYHOST: {get_attr: [CephStorage, name]}
639           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
640           EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
641           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
642           INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
643           STORAGEIP: {get_attr: [StoragePort, ip_address]}
644           STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
645           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
646           STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
647           TENANTIP: {get_attr: [TenantPort, ip_address]}
648           TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
649           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
650           MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
651           CTLPLANEIP: {get_attr: [CephStorage, networks, ctlplane, 0]}
652           CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
653           HOSTSSHPUBKEY: {get_attr: [SshHostPubKey, ecdsa]}
654   nova_server_resource:
655     description: Heat resource handle for the ceph storage server
656     value:
657       {get_resource: CephStorage}
658     condition: server_not_blacklisted
659   external_ip_address:
660     description: IP address of the server in the external network
661     value: {get_attr: [ExternalPort, ip_address]}
662   internal_api_ip_address:
663     description: IP address of the server in the internal_api network
664     value: {get_attr: [InternalApiPort, ip_address]}
665   storage_ip_address:
666     description: IP address of the server in the storage network
667     value: {get_attr: [StoragePort, ip_address]}
668   storage_mgmt_ip_address:
669     description: IP address of the server in the storage_mgmt network
670     value: {get_attr: [StorageMgmtPort, ip_address]}
671   tenant_ip_address:
672     description: IP address of the server in the tenant network
673     value: {get_attr: [TenantPort, ip_address]}
674   management_ip_address:
675     description: IP address of the server in the management network
676     value: {get_attr: [ManagementPort, ip_address]}
677   deployed_server_port_map:
678     description: |
679       Map of Heat created hostname of the server to ip address. This is the
680       hostname before it has been mapped with the HostnameMap parameter, and
681       the IP address from the ctlplane network. This map can be used to construct
682       the DeployedServerPortMap parameter when using split-stack.
683     value:
684       map_replace:
685         - hostname:
686             fixed_ips:
687               - ip_address: {get_attr: [CephStorage, networks, ctlplane, 0]}
688         - keys:
689             hostname:
690               list_join:
691                 - '-'
692                 - - {get_param: Hostname}
693                   - ctlplane
694   deployed_server_deployment_swift_data_map:
695     description:
696       Map of Heat created hostname of the server to the Swift container and object
697       used to created the temporary url for metadata polling with
698       os-collect-config.
699     value:
700       map_replace:
701         - hostname:
702             container:
703               str_split:
704                 - '/'
705                 - {get_attr: [CephStorage, os_collect_config, request, metadata_url]}
706                 - 5
707             object:
708               str_split:
709                 - '?'
710                 - str_split:
711                     - '/'
712                     - {get_attr: [CephStorage, os_collect_config, request, metadata_url]}
713                     - 6
714                 - 0
715         - keys: {hostname: {get_param: Hostname}}
716   os_collect_config:
717     description: The os-collect-config configuration associated with this server resource
718     value: {get_attr: [CephStorage, os_collect_config]}