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