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