Add os-collect-config data as an output
[apex-tripleo-heat-templates.git] / puppet / blockstorage-role.yaml
1 heat_template_version: pike
2 description: 'OpenStack cinder storage configured by Puppet'
3 parameters:
4   BlockStorageImage:
5     default: overcloud-full
6     type: string
7     constraints:
8       - custom_constraint: glance.image
9   ExtraConfig:
10     default: {}
11     description: |
12       Additional hiera configuration to inject into the cluster. Note
13       that BlockStorageExtraConfig takes precedence over ExtraConfig.
14     type: json
15   BlockStorageExtraConfig:
16     default: {}
17     description: |
18       Role specific additional hiera configuration to inject into the cluster.
19     type: json
20   BlockStorageIPs:
21     default: {}
22     type: json
23   OvercloudBlockStorageFlavor:
24     description: Flavor for block storage nodes to request when deploying.
25     type: string
26     default: baremetal
27     constraints:
28       - custom_constraint: nova.flavor
29   KeyName:
30     default: default
31     description: Name of an existing Nova key pair to enable SSH access to the instances
32     type: string
33   UpdateIdentifier:
34     default: ''
35     type: string
36     description: >
37       Setting to a previously unused value during stack-update will trigger
38       package update on all nodes
39   Hostname:
40     type: string
41     default: '' # Defaults to Heat created hostname
42   HostnameMap:
43     type: json
44     default: {}
45     description: Optional mapping to override hostnames
46   ServiceNetMap:
47     default: {}
48     description: Mapping of service_name -> network name. Typically set
49                  via parameter_defaults in the resource registry.
50     type: json
51   EndpointMap:
52     default: {}
53     description: Mapping of service endpoint -> protocol. Typically set
54                  via parameter_defaults in the resource registry.
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   BlockStorageServerMetadata:
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   BlockStorageSchedulerHints:
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   BlockStorage:
156     type: OS::TripleO::BlockStorageServer
157     metadata:
158       os-collect-config:
159         command: {get_param: ConfigCommand}
160         splay: {get_param: ConfigCollectSplay}
161     properties:
162       image:
163         {get_param: BlockStorageImage}
164       flavor: {get_param: OvercloudBlockStorageFlavor}
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: BlockStorageServerMetadata}
179           - {get_param: ServiceMetadataSettings}
180       scheduler_hints: {get_param: BlockStorageSchedulerHints}
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::BlockStorage::NodeUserData
208
209   ExternalPort:
210     type: OS::TripleO::BlockStorage::Ports::ExternalPort
211     properties:
212       ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
213       IPPool: {get_param: BlockStorageIPs}
214       NodeIndex: {get_param: NodeIndex}
215
216   InternalApiPort:
217     type: OS::TripleO::BlockStorage::Ports::InternalApiPort
218     properties:
219       ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
220       IPPool: {get_param: BlockStorageIPs}
221       NodeIndex: {get_param: NodeIndex}
222
223   StoragePort:
224     type: OS::TripleO::BlockStorage::Ports::StoragePort
225     properties:
226       ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
227       IPPool: {get_param: BlockStorageIPs}
228       NodeIndex: {get_param: NodeIndex}
229
230   StorageMgmtPort:
231     type: OS::TripleO::BlockStorage::Ports::StorageMgmtPort
232     properties:
233       ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
234       IPPool: {get_param: BlockStorageIPs}
235       NodeIndex: {get_param: NodeIndex}
236
237   TenantPort:
238     type: OS::TripleO::BlockStorage::Ports::TenantPort
239     properties:
240       ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
241       IPPool: {get_param: BlockStorageIPs}
242       NodeIndex: {get_param: NodeIndex}
243
244   ManagementPort:
245     type: OS::TripleO::BlockStorage::Ports::ManagementPort
246     properties:
247       ControlPlaneIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
248       IPPool: {get_param: BlockStorageIPs}
249       NodeIndex: {get_param: NodeIndex}
250
251   NetworkConfig:
252     type: OS::TripleO::BlockStorage::Net::SoftwareConfig
253     properties:
254       ControlPlaneIp: {get_attr: [BlockStorage, 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: [BlockStorage, 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: [BlockStorage, name]}
295               - external
296               - {get_param: CloudDomain}
297           short:
298             list_join:
299             - '.'
300             - - {get_attr: [BlockStorage, name]}
301               - external
302         internal_api:
303           fqdn:
304             list_join:
305             - '.'
306             - - {get_attr: [BlockStorage, name]}
307               - internalapi
308               - {get_param: CloudDomain}
309           short:
310             list_join:
311             - '.'
312             - - {get_attr: [BlockStorage, name]}
313               - internalapi
314         storage:
315           fqdn:
316             list_join:
317             - '.'
318             - - {get_attr: [BlockStorage, name]}
319               - storage
320               - {get_param: CloudDomain}
321           short:
322             list_join:
323             - '.'
324             - - {get_attr: [BlockStorage, name]}
325               - storage
326         storage_mgmt:
327           fqdn:
328             list_join:
329             - '.'
330             - - {get_attr: [BlockStorage, name]}
331               - storagemgmt
332               - {get_param: CloudDomain}
333           short:
334             list_join:
335             - '.'
336             - - {get_attr: [BlockStorage, name]}
337               - storagemgmt
338         tenant:
339           fqdn:
340             list_join:
341             - '.'
342             - - {get_attr: [BlockStorage, name]}
343               - tenant
344               - {get_param: CloudDomain}
345           short:
346             list_join:
347             - '.'
348             - - {get_attr: [BlockStorage, name]}
349               - tenant
350         management:
351           fqdn:
352             list_join:
353             - '.'
354             - - {get_attr: [BlockStorage, name]}
355               - management
356               - {get_param: CloudDomain}
357           short:
358             list_join:
359             - '.'
360             - - {get_attr: [BlockStorage, name]}
361               - management
362         ctlplane:
363           fqdn:
364             list_join:
365             - '.'
366             - - {get_attr: [BlockStorage, name]}
367               - ctlplane
368               - {get_param: CloudDomain}
369           short:
370             list_join:
371             - '.'
372             - - {get_attr: [BlockStorage, name]}
373               - ctlplane
374
375   PreNetworkConfig:
376     type: OS::TripleO::BlockStorage::PreNetworkConfig
377     properties:
378       server: {get_resource: BlockStorage}
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: BlockStorage}
388       actions:
389         if:
390           - server_not_blacklisted
391           - {get_param: NetworkDeploymentActions}
392           - []
393
394   BlockStorageUpgradeInitConfig:
395     type: OS::Heat::SoftwareConfig
396     properties:
397       group: script
398       config:
399         list_join:
400         - ''
401         - - "#!/bin/bash\n\n"
402           - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
403           - get_param: UpgradeInitCommand
404           - get_param: UpgradeInitCommonCommand
405
406   # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
407   # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
408   BlockStorageUpgradeInitDeployment:
409     type: OS::Heat::SoftwareDeployment
410     depends_on: NetworkDeployment
411     properties:
412       name: BlockStorageUpgradeInitDeployment
413       server: {get_resource: BlockStorage}
414       config: {get_resource: BlockStorageUpgradeInitConfig}
415       actions:
416         if:
417           - server_not_blacklisted
418           - ['CREATE', 'UPDATE']
419           - []
420
421   BlockStorageDeployment:
422     type: OS::Heat::StructuredDeployment
423     depends_on: BlockStorageUpgradeInitDeployment
424     properties:
425       name: BlockStorageDeployment
426       server: {get_resource: BlockStorage}
427       config: {get_resource: BlockStorageConfig}
428       input_values:
429         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
430       actions:
431         if:
432           - server_not_blacklisted
433           - ['CREATE', 'UPDATE']
434           - []
435
436   # Map heat metadata into hiera datafiles
437   BlockStorageConfig:
438     type: OS::Heat::StructuredConfig
439     properties:
440       group: hiera
441       config:
442         hierarchy:
443           - '"%{::uuid}"'
444           - heat_config_%{::deploy_config_name}
445           - config_step
446           - volume_extraconfig
447           - extraconfig
448           - service_names
449           - service_configs
450           - volume
451           - bootstrap_node # provided by allNodesConfig
452           - all_nodes # provided by allNodesConfig
453           - vip_data # provided by allNodesConfig
454           - '"%{::osfamily}"'
455         merge_behavior: deeper
456         datafiles:
457           service_names:
458             service_names: {get_param: ServiceNames}
459             sensu::subscriptions: {get_param: MonitoringSubscriptions}
460           service_configs:
461             map_replace:
462               - {get_param: ServiceConfigSettings}
463               - values: {get_attr: [NetIpMap, net_ip_map]}
464           volume_extraconfig: {get_param: BlockStorageExtraConfig}
465           extraconfig: {get_param: ExtraConfig}
466           volume:
467             tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
468             fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
469             fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
470             fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
471             fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
472             fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
473             fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
474             fqdn_external: {get_attr: [NetHostMap, value, external, fqdn]}
475
476   # Resource for site-specific injection of root certificate
477   NodeTLSCAData:
478     depends_on: BlockStorageDeployment
479     type: OS::TripleO::NodeTLSCAData
480     properties:
481       server: {get_resource: BlockStorage}
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: BlockStorage}
490
491   UpdateConfig:
492     type: OS::TripleO::Tasks::PackageUpdate
493
494   UpdateDeployment:
495     type: OS::Heat::SoftwareDeployment
496     depends_on: NetworkDeployment
497     properties:
498       name: UpdateDeployment
499       config: {get_resource: UpdateConfig}
500       server: {get_resource: BlockStorage}
501       input_values:
502         update_identifier:
503           get_param: UpdateIdentifier
504       actions:
505         if:
506           - server_not_blacklisted
507           - ['CREATE', 'UPDATE']
508           - []
509
510   SshHostPubKey:
511     type: OS::TripleO::Ssh::HostPubKey
512     depends_on: BlockStorageDeployment
513     properties:
514         server: {get_resource: BlockStorage}
515
516 outputs:
517   ip_address:
518     description: IP address of the server in the ctlplane network
519     value: {get_attr: [BlockStorage, networks, ctlplane, 0]}
520   hostname:
521     description: Hostname of the server
522     value: {get_attr: [BlockStorage, name]}
523   hostname_map:
524     description: Mapping of network names to hostnames
525     value:
526       external: {get_attr: [NetHostMap, value, external, fqdn]}
527       internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
528       storage: {get_attr: [NetHostMap, value, storage, fqdn]}
529       storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
530       tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
531       management: {get_attr: [NetHostMap, value, management, fqdn]}
532       ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
533   hosts_entry:
534     value:
535       str_replace:
536         template: |
537           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
538           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
539           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
540           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
541           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
542           TENANTIP TENANTHOST.DOMAIN TENANTHOST
543           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
544           CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
545         params:
546           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, BlockStorageHostnameResolveNetwork]}]}
547           DOMAIN: {get_param: CloudDomain}
548           PRIMARYHOST: {get_attr: [BlockStorage, name]}
549           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
550           EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
551           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
552           INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
553           STORAGEIP: {get_attr: [StoragePort, ip_address]}
554           STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
555           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
556           STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
557           TENANTIP: {get_attr: [TenantPort, ip_address]}
558           TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
559           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
560           MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
561           CTLPLANEIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
562           CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
563   known_hosts_entry:
564     description: Entry for ssh known hosts
565     value:
566       str_replace:
567         template: "PRIMARYIP,PRIMARYHOST.DOMAIN,PRIMARYHOST,\
568 EXTERNALIP,EXTERNALHOST.DOMAIN,EXTERNALHOST,\
569 INTERNAL_APIIP,INTERNAL_APIHOST.DOMAIN,INTERNAL_APIHOST,\
570 STORAGEIP,STORAGEHOST.DOMAIN,STORAGEHOST,\
571 STORAGE_MGMTIP,STORAGE_MGMTHOST.DOMAIN,STORAGE_MGMTHOST,\
572 TENANTIP,TENANTHOST.DOMAIN,TENANTHOST,\
573 MANAGEMENTIP,MANAGEMENTHOST.DOMAIN,MANAGEMENTHOST,\
574 CTLPLANEIP,CTLPLANEHOST.DOMAIN,CTLPLANEHOST HOSTSSHPUBKEY"
575         params:
576           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, BlockStorageHostnameResolveNetwork]}]}
577           DOMAIN: {get_param: CloudDomain}
578           PRIMARYHOST: {get_attr: [BlockStorage, name]}
579           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
580           EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
581           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
582           INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
583           STORAGEIP: {get_attr: [StoragePort, ip_address]}
584           STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
585           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
586           STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
587           TENANTIP: {get_attr: [TenantPort, ip_address]}
588           TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
589           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
590           MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
591           CTLPLANEIP: {get_attr: [BlockStorage, networks, ctlplane, 0]}
592           CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
593           HOSTSSHPUBKEY: {get_attr: [SshHostPubKey, ecdsa]}
594   nova_server_resource:
595     description: Heat resource handle for the block storage server
596     value:
597       {get_resource: BlockStorage}
598     condition: server_not_blacklisted
599   external_ip_address:
600     description: IP address of the server in the external network
601     value: {get_attr: [ExternalPort, ip_address]}
602   internal_api_ip_address:
603     description: IP address of the server in the internal_api network
604     value: {get_attr: [InternalApiPort, ip_address]}
605   storage_ip_address:
606     description: IP address of the server in the storage network
607     value: {get_attr: [StoragePort, ip_address]}
608   storage_mgmt_ip_address:
609     description: IP address of the server in the storage_mgmt network
610     value: {get_attr: [StorageMgmtPort, ip_address]}
611   tenant_ip_address:
612     description: IP address of the server in the tenant network
613     value: {get_attr: [TenantPort, ip_address]}
614   management_ip_address:
615     description: IP address of the server in the management network
616     value: {get_attr: [ManagementPort, ip_address]}
617   os_collect_config:
618     description: The os-collect-config configuration associated with this server resource
619     value: {get_attr: [BlockStorage, os_collect_config]}