Merge "Dell SC: Add exclude_domain_ip option"
[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 should match the dhcp_domain
73       configured in the Undercloud neutron. Defaults to localdomain.
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
143 conditions:
144   server_not_blacklisted:
145     not:
146       equals:
147         - {get_param: [DeploymentServerBlacklistDict, {get_param: Hostname}]}
148         - 1
149
150 resources:
151
152   SwiftStorage:
153     type: OS::TripleO::ObjectStorageServer
154     metadata:
155       os-collect-config:
156         command: {get_param: ConfigCommand}
157         splay: {get_param: ConfigCollectSplay}
158     properties:
159       image: {get_param: SwiftStorageImage}
160       flavor: {get_param: OvercloudSwiftStorageFlavor}
161       key_name: {get_param: KeyName}
162       networks:
163         - network: ctlplane
164       user_data_format: SOFTWARE_CONFIG
165       user_data: {get_resource: UserData}
166       name:
167         str_replace:
168             template: {get_param: Hostname}
169             params: {get_param: HostnameMap}
170       software_config_transport: {get_param: SoftwareConfigTransport}
171       metadata:
172         map_merge:
173           - {get_param: ServerMetadata}
174           - {get_param: SwiftStorageServerMetadata}
175           - {get_param: ServiceMetadataSettings}
176       scheduler_hints: {get_param: ObjectStorageSchedulerHints}
177
178   # Combine the NodeAdminUserData and NodeUserData mime archives
179   UserData:
180     type: OS::Heat::MultipartMime
181     properties:
182       parts:
183       - config: {get_resource: NodeAdminUserData}
184         type: multipart
185       - config: {get_resource: NodeUserData}
186         type: multipart
187       - config: {get_resource: RoleUserData}
188         type: multipart
189
190   # Creates the "heat-admin" user if configured via the environment
191   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
192   NodeAdminUserData:
193     type: OS::TripleO::NodeAdminUserData
194
195   # For optional operator additional userdata
196   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
197   NodeUserData:
198     type: OS::TripleO::NodeUserData
199
200   # For optional operator role-specific userdata
201   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
202   RoleUserData:
203     type: OS::TripleO::ObjectStorage::NodeUserData
204
205   ExternalPort:
206     type: OS::TripleO::SwiftStorage::Ports::ExternalPort
207     properties:
208       ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
209       IPPool: {get_param: SwiftStorageIPs}
210       NodeIndex: {get_param: NodeIndex}
211
212   InternalApiPort:
213     type: OS::TripleO::SwiftStorage::Ports::InternalApiPort
214     properties:
215       ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
216       IPPool: {get_param: SwiftStorageIPs}
217       NodeIndex: {get_param: NodeIndex}
218
219   StoragePort:
220     type: OS::TripleO::SwiftStorage::Ports::StoragePort
221     properties:
222       ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
223       IPPool: {get_param: SwiftStorageIPs}
224       NodeIndex: {get_param: NodeIndex}
225
226   StorageMgmtPort:
227     type: OS::TripleO::SwiftStorage::Ports::StorageMgmtPort
228     properties:
229       ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
230       IPPool: {get_param: SwiftStorageIPs}
231       NodeIndex: {get_param: NodeIndex}
232
233   TenantPort:
234     type: OS::TripleO::SwiftStorage::Ports::TenantPort
235     properties:
236       ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
237       IPPool: {get_param: SwiftStorageIPs}
238       NodeIndex: {get_param: NodeIndex}
239
240   ManagementPort:
241     type: OS::TripleO::SwiftStorage::Ports::ManagementPort
242     properties:
243       ControlPlaneIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
244       IPPool: {get_param: SwiftStorageIPs}
245       NodeIndex: {get_param: NodeIndex}
246
247   NetworkConfig:
248     type: OS::TripleO::ObjectStorage::Net::SoftwareConfig
249     properties:
250       ControlPlaneIp: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
251       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
252       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
253       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
254       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
255       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
256       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
257
258   NetIpMap:
259     type: OS::TripleO::Network::Ports::NetIpMap
260     properties:
261       ControlPlaneIp: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
262       ExternalIp: {get_attr: [ExternalPort, ip_address]}
263       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
264       ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
265       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
266       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
267       InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
268       StorageIp: {get_attr: [StoragePort, ip_address]}
269       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
270       StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
271       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
272       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
273       StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
274       TenantIp: {get_attr: [TenantPort, ip_address]}
275       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
276       TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
277       ManagementIp: {get_attr: [ManagementPort, ip_address]}
278       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
279       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
280
281   NetHostMap:
282     type: OS::Heat::Value
283     properties:
284       type: json
285       value:
286         external:
287           fqdn:
288             list_join:
289             - '.'
290             - - {get_attr: [SwiftStorage, name]}
291               - external
292               - {get_param: CloudDomain}
293           short:
294             list_join:
295             - '.'
296             - - {get_attr: [SwiftStorage, name]}
297               - external
298         internal_api:
299           fqdn:
300             list_join:
301             - '.'
302             - - {get_attr: [SwiftStorage, name]}
303               - internalapi
304               - {get_param: CloudDomain}
305           short:
306             list_join:
307             - '.'
308             - - {get_attr: [SwiftStorage, name]}
309               - internalapi
310         storage:
311           fqdn:
312             list_join:
313             - '.'
314             - - {get_attr: [SwiftStorage, name]}
315               - storage
316               - {get_param: CloudDomain}
317           short:
318             list_join:
319             - '.'
320             - - {get_attr: [SwiftStorage, name]}
321               - storage
322         storage_mgmt:
323           fqdn:
324             list_join:
325             - '.'
326             - - {get_attr: [SwiftStorage, name]}
327               - storagemgmt
328               - {get_param: CloudDomain}
329           short:
330             list_join:
331             - '.'
332             - - {get_attr: [SwiftStorage, name]}
333               - storagemgmt
334         tenant:
335           fqdn:
336             list_join:
337             - '.'
338             - - {get_attr: [SwiftStorage, name]}
339               - tenant
340               - {get_param: CloudDomain}
341           short:
342             list_join:
343             - '.'
344             - - {get_attr: [SwiftStorage, name]}
345               - tenant
346         management:
347           fqdn:
348             list_join:
349             - '.'
350             - - {get_attr: [SwiftStorage, name]}
351               - management
352               - {get_param: CloudDomain}
353           short:
354             list_join:
355             - '.'
356             - - {get_attr: [SwiftStorage, name]}
357               - management
358         ctlplane:
359           fqdn:
360             list_join:
361             - '.'
362             - - {get_attr: [SwiftStorage, name]}
363               - ctlplane
364               - {get_param: CloudDomain}
365           short:
366             list_join:
367             - '.'
368             - - {get_attr: [SwiftStorage, name]}
369               - ctlplane
370
371   PreNetworkConfig:
372     type: OS::TripleO::ObjectStorage::PreNetworkConfig
373     properties:
374       server: {get_resource: SwiftStorage}
375
376   NetworkDeployment:
377     type: OS::TripleO::SoftwareDeployment
378     depends_on: PreNetworkConfig
379     properties:
380       name: NetworkDeployment
381       config: {get_resource: NetworkConfig}
382       server: {get_resource: SwiftStorage}
383       actions:
384         if:
385           - server_not_blacklisted
386           - {get_param: NetworkDeploymentActions}
387           - []
388
389
390   SwiftStorageUpgradeInitConfig:
391     type: OS::Heat::SoftwareConfig
392     properties:
393       group: script
394       config:
395         list_join:
396         - ''
397         - - "#!/bin/bash\n\n"
398           - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
399           - get_param: UpgradeInitCommand
400           - get_param: UpgradeInitCommonCommand
401
402   # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
403   # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
404   SwiftStorageUpgradeInitDeployment:
405     type: OS::Heat::SoftwareDeployment
406     depends_on: NetworkDeployment
407     properties:
408       name: SwiftStorageUpgradeInitDeployment
409       server: {get_resource: SwiftStorage}
410       config: {get_resource: SwiftStorageUpgradeInitConfig}
411       actions:
412         if:
413           - server_not_blacklisted
414           - ['CREATE', 'UPDATE']
415           - []
416
417   SwiftStorageHieraConfig:
418     type: OS::Heat::StructuredConfig
419     properties:
420       group: hiera
421       config:
422         hierarchy:
423           - '"%{::uuid}"'
424           - heat_config_%{::deploy_config_name}
425           - config_step
426           - object_extraconfig
427           - extraconfig
428           - service_names
429           - service_configs
430           - object
431           - bootstrap_node # provided by allNodesConfig
432           - all_nodes # provided by allNodesConfig
433           - vip_data # provided by allNodesConfig
434           - '"%{::osfamily}"'
435         merge_behavior: deeper
436         datafiles:
437           service_names:
438             service_names: {get_param: ServiceNames}
439             sensu::subscriptions: {get_param: MonitoringSubscriptions}
440           service_configs:
441             map_replace:
442               - {get_param: ServiceConfigSettings}
443               - values: {get_attr: [NetIpMap, net_ip_map]}
444           object_extraconfig: {get_param: ObjectStorageExtraConfig}
445           extraconfig: {get_param: ExtraConfig}
446           object:
447             tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
448             fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
449             fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
450             fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
451             fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
452             fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
453             fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
454             fqdn_external: {get_attr: [NetHostMap, value, external, fqdn]}
455
456   SwiftStorageHieraDeploy:
457     type: OS::Heat::StructuredDeployment
458     depends_on: SwiftStorageUpgradeInitDeployment
459     properties:
460       name: SwiftStorageHieraDeploy
461       server: {get_resource: SwiftStorage}
462       config: {get_resource: SwiftStorageHieraConfig}
463       input_values:
464         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
465       actions:
466         if:
467           - server_not_blacklisted
468           - ['CREATE', 'UPDATE']
469           - []
470
471   # Resource for site-specific injection of root certificate
472   NodeTLSCAData:
473     depends_on: SwiftStorageHieraDeploy
474     type: OS::TripleO::NodeTLSCAData
475     properties:
476       server: {get_resource: SwiftStorage}
477
478   # Hook for site-specific additional pre-deployment config,
479   # applying to all nodes, e.g node registration/unregistration
480   NodeExtraConfig:
481     depends_on: NodeTLSCAData
482     type: OS::TripleO::NodeExtraConfig
483     properties:
484         server: {get_resource: SwiftStorage}
485
486   UpdateConfig:
487     type: OS::TripleO::Tasks::PackageUpdate
488
489   UpdateDeployment:
490     type: OS::Heat::SoftwareDeployment
491     depends_on: NetworkDeployment
492     properties:
493       config: {get_resource: UpdateConfig}
494       server: {get_resource: SwiftStorage}
495       input_values:
496         update_identifier:
497           get_param: UpdateIdentifier
498       actions:
499         if:
500           - server_not_blacklisted
501           - ['CREATE', 'UPDATE']
502           - []
503
504   SshHostPubKey:
505     type: OS::TripleO::Ssh::HostPubKey
506     depends_on: SwiftStorageHieraDeploy
507     properties:
508         server: {get_resource: SwiftStorage}
509
510 outputs:
511   ip_address:
512     description: IP address of the server in the ctlplane network
513     value: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
514   hostname:
515     description: Hostname of the server
516     value: {get_attr: [SwiftStorage, name]}
517   hostname_map:
518     description: Mapping of network names to hostnames
519     value:
520       external: {get_attr: [NetHostMap, value, external, fqdn]}
521       internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
522       storage: {get_attr: [NetHostMap, value, storage, fqdn]}
523       storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
524       tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
525       management: {get_attr: [NetHostMap, value, management, fqdn]}
526       ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
527   hosts_entry:
528     value:
529       str_replace:
530         template: |
531           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
532           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
533           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
534           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
535           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
536           TENANTIP TENANTHOST.DOMAIN TENANTHOST
537           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
538           CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
539         params:
540           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ObjectStorageHostnameResolveNetwork]}]}
541           DOMAIN: {get_param: CloudDomain}
542           PRIMARYHOST: {get_attr: [SwiftStorage, name]}
543           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
544           EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
545           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
546           INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
547           STORAGEIP: {get_attr: [StoragePort, ip_address]}
548           STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
549           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
550           STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
551           TENANTIP: {get_attr: [TenantPort, ip_address]}
552           TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
553           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
554           MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
555           CTLPLANEIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
556           CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
557   known_hosts_entry:
558     description: Entry for ssh known hosts
559     value:
560       str_replace:
561         template: "PRIMARYIP,PRIMARYHOST.DOMAIN,PRIMARYHOST,\
562 EXTERNALIP,EXTERNALHOST.DOMAIN,EXTERNALHOST,\
563 INTERNAL_APIIP,INTERNAL_APIHOST.DOMAIN,INTERNAL_APIHOST,\
564 STORAGEIP,STORAGEHOST.DOMAIN,STORAGEHOST,\
565 STORAGE_MGMTIP,STORAGE_MGMTHOST.DOMAIN,STORAGE_MGMTHOST,\
566 TENANTIP,TENANTHOST.DOMAIN,TENANTHOST,\
567 MANAGEMENTIP,MANAGEMENTHOST.DOMAIN,MANAGEMENTHOST,\
568 CTLPLANEIP,CTLPLANEHOST.DOMAIN,CTLPLANEHOST HOSTSSHPUBKEY"
569         params:
570           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ObjectStorageHostnameResolveNetwork]}]}
571           DOMAIN: {get_param: CloudDomain}
572           PRIMARYHOST: {get_attr: [SwiftStorage, name]}
573           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
574           EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
575           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
576           INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
577           STORAGEIP: {get_attr: [StoragePort, ip_address]}
578           STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
579           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
580           STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
581           TENANTIP: {get_attr: [TenantPort, ip_address]}
582           TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
583           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
584           MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
585           CTLPLANEIP: {get_attr: [SwiftStorage, networks, ctlplane, 0]}
586           CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
587           HOSTSSHPUBKEY: {get_attr: [SshHostPubKey, ecdsa]}
588   nova_server_resource:
589     description: Heat resource handle for the swift storage server
590     value:
591       {get_resource: SwiftStorage}
592     condition: server_not_blacklisted
593   external_ip_address:
594     description: IP address of the server in the external network
595     value: {get_attr: [ExternalPort, ip_address]}
596   internal_api_ip_address:
597     description: IP address of the server in the internal_api network
598     value: {get_attr: [InternalApiPort, ip_address]}
599   storage_ip_address:
600     description: IP address of the server in the storage network
601     value: {get_attr: [StoragePort, ip_address]}
602   storage_mgmt_ip_address:
603     description: IP address of the server in the storage_mgmt network
604     value: {get_attr: [StorageMgmtPort, ip_address]}
605   tenant_ip_address:
606     description: IP address of the server in the tenant network
607     value: {get_attr: [TenantPort, ip_address]}
608   management_ip_address:
609     description: IP address of the server in the management network
610     value: {get_attr: [ManagementPort, ip_address]}