Update the template_version alias for all the templates to pike.
[apex-tripleo-heat-templates.git] / puppet / role.role.j2.yaml
1 heat_template_version: pike
2 description: 'OpenStack {{role}} node configured by Puppet'
3 parameters:
4   Overcloud{{role}}Flavor:
5     description: Flavor for the {{role}} node.
6     default: baremetal
7     type: string
8 {% if disable_constraints is not defined %}
9     constraints:
10       - custom_constraint: nova.flavor
11 {% endif %}
12   {{role}}Image:
13     type: string
14     default: overcloud-full
15 {% if disable_constraints is not defined %}
16     constraints:
17       - custom_constraint: glance.image
18 {% endif %}
19   ImageUpdatePolicy:
20     default: 'REBUILD_PRESERVE_EPHEMERAL'
21     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
22     type: string
23   KeyName:
24     description: Name of an existing Nova key pair to enable SSH access to the instances
25     type: string
26     default: default
27 {% if disable_constraints is not defined %}
28     constraints:
29       - custom_constraint: nova.keypair
30 {% endif %}
31   NeutronPublicInterface:
32     default: nic1
33     description: What interface to bridge onto br-ex for network nodes.
34     type: string
35   ServiceNetMap:
36     default: {}
37     description: Mapping of service_name -> network name. Typically set
38                  via parameter_defaults in the resource registry.
39     type: json
40   EndpointMap:
41     default: {}
42     description: Mapping of service endpoint -> protocol. Typically set
43                  via parameter_defaults in the resource registry.
44     type: json
45   UpdateIdentifier:
46     default: ''
47     type: string
48     description: >
49       Setting to a previously unused value during stack-update will trigger
50       package update on all nodes
51   Hostname:
52     type: string
53     default: '' # Defaults to Heat created hostname
54   HostnameMap:
55     type: json
56     default: {}
57     description: Optional mapping to override hostnames
58   ExtraConfig:
59     default: {}
60     description: |
61       Additional hiera configuration to inject into the cluster. Note
62       that {{role}}ExtraConfig takes precedence over ExtraConfig.
63     type: json
64   {{role}}ExtraConfig:
65     default: {}
66     description: |
67       Role specific additional hiera configuration to inject into the cluster.
68     type: json
69   {{role}}IPs:
70     default: {}
71     type: json
72   NetworkDeploymentActions:
73     type: comma_delimited_list
74     description: >
75       Heat action when to apply network configuration changes
76     default: ['CREATE']
77   SoftwareConfigTransport:
78     default: POLL_SERVER_CFN
79     description: |
80       How the server should receive the metadata required for software configuration.
81     type: string
82     constraints:
83     - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
84   CloudDomain:
85     default: 'localdomain'
86     type: string
87     description: >
88       The DNS domain used for the hosts. This should match the dhcp_domain
89       configured in the Undercloud neutron. Defaults to localdomain.
90   {{role}}ServerMetadata:
91     default: {}
92     description: >
93       Extra properties or metadata passed to Nova for the created nodes in
94       the overcloud. It's accessible via the Nova metadata API. This option is
95       role-specific and is merged with the values given to the ServerMetadata
96       parameter.
97     type: json
98   ServerMetadata:
99     default: {}
100     description: >
101       Extra properties or metadata passed to Nova for the created nodes in
102       the overcloud. It's accessible via the Nova metadata API. This applies to
103       all roles and is merged with a role-specific metadata parameter.
104     type: json
105   {{role}}SchedulerHints:
106     type: json
107     description: Optional scheduler hints to pass to nova
108     default: {}
109   NodeIndex:
110     type: number
111     default: 0
112   ServiceConfigSettings:
113     type: json
114     default: {}
115   ServiceNames:
116     type: comma_delimited_list
117     default: []
118   MonitoringSubscriptions:
119     type: comma_delimited_list
120     default: []
121   ServiceMetadataSettings:
122     type: json
123     default: {}
124   ConfigCommand:
125     type: string
126     description: Command which will be run whenever configuration data changes
127     default: os-refresh-config --timeout 14400
128   ConfigCollectSplay:
129     type: number
130     default: 30
131     description: |
132       Maximum amount of time to possibly to delay configuation collection
133       polling. Defaults to 30 seconds. Set to 0 to disable it which will cause
134       the configuration collection to occur as soon as the collection process
135       starts.  This setting is used to prevent the configuration collection
136       processes from polling all at the exact same time.
137   LoggingSources:
138     type: json
139     default: []
140   LoggingGroups:
141     type: comma_delimited_list
142     default: []
143   UpgradeInitCommand:
144     type: string
145     description: |
146       Command or script snippet to run on all overcloud nodes to
147       initialize the upgrade process. E.g. a repository switch.
148     default: ''
149   UpgradeInitCommonCommand:
150     type: string
151     description: |
152       Common commands required by the upgrades process. This should not
153       normally be modified by the operator and is set and unset in the
154       major-upgrade-composable-steps.yaml and major-upgrade-converge.yaml
155       environment files.
156     default: ''
157
158 resources:
159   {{role}}:
160     type: OS::TripleO::{{role.name}}Server
161     metadata:
162       os-collect-config:
163         command: {get_param: ConfigCommand}
164         splay: {get_param: ConfigCollectSplay}
165     properties:
166       image: {get_param: {{role}}Image}
167       image_update_policy: {get_param: ImageUpdatePolicy}
168       flavor: {get_param: Overcloud{{role}}Flavor}
169       key_name: {get_param: KeyName}
170       networks:
171         - network: ctlplane
172       user_data_format: SOFTWARE_CONFIG
173       user_data: {get_resource: UserData}
174       name:
175         str_replace:
176             template: {get_param: Hostname}
177             params: {get_param: HostnameMap}
178       software_config_transport: {get_param: SoftwareConfigTransport}
179       metadata:
180         map_merge:
181           - {get_param: ServerMetadata}
182           - {get_param: {{role}}ServerMetadata}
183           - {get_param: ServiceMetadataSettings}
184       scheduler_hints: {get_param: {{role}}SchedulerHints}
185
186   # Combine the NodeAdminUserData and NodeUserData mime archives
187   UserData:
188     type: OS::Heat::MultipartMime
189     properties:
190       parts:
191       - config: {get_resource: NodeAdminUserData}
192         type: multipart
193       - config: {get_resource: NodeUserData}
194         type: multipart
195       - config: {get_resource: RoleUserData}
196         type: multipart
197
198   # Creates the "heat-admin" user if configured via the environment
199   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
200   NodeAdminUserData:
201     type: OS::TripleO::NodeAdminUserData
202
203   # For optional operator additional userdata
204   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
205   NodeUserData:
206     type: OS::TripleO::NodeUserData
207
208   # For optional operator role-specific userdata
209   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
210   RoleUserData:
211     type: OS::TripleO::{{role}}::NodeUserData
212
213   ExternalPort:
214     type: OS::TripleO::{{role}}::Ports::ExternalPort
215     properties:
216       ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
217       IPPool: {get_param: {{role}}IPs}
218       NodeIndex: {get_param: NodeIndex}
219
220   InternalApiPort:
221     type: OS::TripleO::{{role}}::Ports::InternalApiPort
222     properties:
223       ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
224       IPPool: {get_param: {{role}}IPs}
225       NodeIndex: {get_param: NodeIndex}
226
227   StoragePort:
228     type: OS::TripleO::{{role}}::Ports::StoragePort
229     properties:
230       ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
231       IPPool: {get_param: {{role}}IPs}
232       NodeIndex: {get_param: NodeIndex}
233
234   StorageMgmtPort:
235     type: OS::TripleO::{{role}}::Ports::StorageMgmtPort
236     properties:
237       ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
238       IPPool: {get_param: {{role}}IPs}
239       NodeIndex: {get_param: NodeIndex}
240
241   TenantPort:
242     type: OS::TripleO::{{role}}::Ports::TenantPort
243     properties:
244       ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
245       IPPool: {get_param: {{role}}IPs}
246       NodeIndex: {get_param: NodeIndex}
247
248   ManagementPort:
249     type: OS::TripleO::{{role}}::Ports::ManagementPort
250     properties:
251       ControlPlaneIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
252       IPPool: {get_param: {{role}}IPs}
253       NodeIndex: {get_param: NodeIndex}
254
255   NetworkConfig:
256     type: OS::TripleO::{{role}}::Net::SoftwareConfig
257     properties:
258       ControlPlaneIp: {get_attr: [{{role}}, networks, ctlplane, 0]}
259       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
260       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
261       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
262       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
263       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
264       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
265
266   NetIpMap:
267     type: OS::TripleO::Network::Ports::NetIpMap
268     properties:
269       ControlPlaneIp: {get_attr: [{{role}}, networks, ctlplane, 0]}
270       ExternalIp: {get_attr: [ExternalPort, ip_address]}
271       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
272       ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
273       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
274       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
275       InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
276       StorageIp: {get_attr: [StoragePort, ip_address]}
277       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
278       StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
279       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
280       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
281       StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
282       TenantIp: {get_attr: [TenantPort, ip_address]}
283       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
284       TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
285       ManagementIp: {get_attr: [ManagementPort, ip_address]}
286       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
287       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
288
289   NetHostMap:
290     type: OS::Heat::Value
291     properties:
292       type: json
293       value:
294         external:
295           fqdn:
296             list_join:
297             - '.'
298             - - {get_attr: [{{role}}, name]}
299               - external
300               - {get_param: CloudDomain}
301           short:
302             list_join:
303             - '.'
304             - - {get_attr: [{{role}}, name]}
305               - external
306         internal_api:
307           fqdn:
308             list_join:
309             - '.'
310             - - {get_attr: [{{role}}, name]}
311               - internalapi
312               - {get_param: CloudDomain}
313           short:
314             list_join:
315             - '.'
316             - - {get_attr: [{{role}}, name]}
317               - internalapi
318         storage:
319           fqdn:
320             list_join:
321             - '.'
322             - - {get_attr: [{{role}}, name]}
323               - storage
324               - {get_param: CloudDomain}
325           short:
326             list_join:
327             - '.'
328             - - {get_attr: [{{role}}, name]}
329               - storage
330         storage_mgmt:
331           fqdn:
332             list_join:
333             - '.'
334             - - {get_attr: [{{role}}, name]}
335               - storagemgmt
336               - {get_param: CloudDomain}
337           short:
338             list_join:
339             - '.'
340             - - {get_attr: [{{role}}, name]}
341               - storagemgmt
342         tenant:
343           fqdn:
344             list_join:
345             - '.'
346             - - {get_attr: [{{role}}, name]}
347               - tenant
348               - {get_param: CloudDomain}
349           short:
350             list_join:
351             - '.'
352             - - {get_attr: [{{role}}, name]}
353               - tenant
354         management:
355           fqdn:
356             list_join:
357             - '.'
358             - - {get_attr: [{{role}}, name]}
359               - management
360               - {get_param: CloudDomain}
361           short:
362             list_join:
363             - '.'
364             - - {get_attr: [{{role}}, name]}
365               - management
366         ctlplane:
367           fqdn:
368             list_join:
369             - '.'
370             - - {get_attr: [{{role}}, name]}
371               - ctlplane
372               - {get_param: CloudDomain}
373           short:
374             list_join:
375             - '.'
376             - - {get_attr: [{{role}}, name]}
377               - ctlplane
378
379   PreNetworkConfig:
380     type: OS::TripleO::{{role}}::PreNetworkConfig
381     properties:
382       server: {get_resource: {{role}}}
383
384   NetworkDeployment:
385     type: OS::TripleO::SoftwareDeployment
386     depends_on: PreNetworkConfig
387     properties:
388       name: NetworkDeployment
389       config: {get_resource: NetworkConfig}
390       server: {get_resource: {{role}}}
391       actions: {get_param: NetworkDeploymentActions}
392       input_values:
393         bridge_name: br-ex
394         interface_name: {get_param: NeutronPublicInterface}
395
396   {{role}}UpgradeInitConfig:
397     type: OS::Heat::SoftwareConfig
398     properties:
399       group: script
400       config:
401         list_join:
402         - ''
403         - - "#!/bin/bash\n\n"
404           - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
405           - get_param: UpgradeInitCommand
406           - get_param: UpgradeInitCommonCommand
407
408   # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
409   # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
410   {{role}}UpgradeInitDeployment:
411     type: OS::Heat::SoftwareDeployment
412     depends_on: NetworkDeployment
413     properties:
414       name: {{role}}UpgradeInitDeployment
415       server: {get_resource: {{role}}}
416       config: {get_resource: {{role}}UpgradeInitConfig}
417
418   {{role}}Deployment:
419     type: OS::Heat::StructuredDeployment
420     depends_on: {{role}}UpgradeInitDeployment
421     properties:
422       name: {{role}}Deployment
423       config: {get_resource: {{role}}Config}
424       server: {get_resource: {{role}}}
425       input_values:
426         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
427
428   {{role}}Config:
429     type: OS::Heat::StructuredConfig
430     properties:
431       group: hiera
432       config:
433         hierarchy:
434           - '"%{::uuid}"'
435           - heat_config_%{::deploy_config_name}
436           - {{role.lower()}}_extraconfig
437           - extraconfig
438           - service_names
439           - service_configs
440           - {{role.lower()}}
441           - bootstrap_node # provided by allNodesConfig
442           - all_nodes # provided by allNodesConfig
443           - vip_data # provided by allNodesConfig
444           - '"%{::osfamily}"'
445         merge_behavior: deeper
446         datafiles:
447           service_names:
448             service_names: {get_param: ServiceNames}
449             sensu::subscriptions: {get_param: MonitoringSubscriptions}
450           service_configs:
451             map_replace:
452               - {get_param: ServiceConfigSettings}
453               - values: {get_attr: [NetIpMap, net_ip_map]}
454           {{role.lower()}}_extraconfig: {get_param: {{role}}ExtraConfig}
455           extraconfig: {get_param: ExtraConfig}
456           {{role.lower()}}:
457             tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
458             tripleo::profile::base::logging::fluentd::fluentd_sources: {get_param: LoggingSources}
459             tripleo::profile::base::logging::fluentd::fluentd_groups: {get_param: LoggingGroups}
460             fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
461             fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
462             fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
463             fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
464             fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
465             fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
466
467   # Resource for site-specific injection of root certificate
468   NodeTLSCAData:
469     depends_on: {{role}}Deployment
470     type: OS::TripleO::NodeTLSCAData
471     properties:
472       server: {get_resource: {{role}}}
473
474   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
475   {{role}}ExtraConfigPre:
476     depends_on: {{role}}Deployment
477     type: OS::TripleO::{{role}}ExtraConfigPre
478     properties:
479         server: {get_resource: {{role}}}
480
481   # Hook for site-specific additional pre-deployment config,
482   # applying to all nodes, e.g node registration/unregistration
483   NodeExtraConfig:
484     depends_on: [{{role}}ExtraConfigPre, NodeTLSCAData]
485     type: OS::TripleO::NodeExtraConfig
486     properties:
487         server: {get_resource: {{role}}}
488
489   UpdateConfig:
490     type: OS::TripleO::Tasks::PackageUpdate
491
492   UpdateDeployment:
493     type: OS::Heat::SoftwareDeployment
494     depends_on: NetworkDeployment
495     properties:
496       name: UpdateDeployment
497       config: {get_resource: UpdateConfig}
498       server: {get_resource: {{role}}}
499       input_values:
500         update_identifier:
501           get_param: UpdateIdentifier
502
503   SshHostPubKey:
504     type: OS::TripleO::Ssh::HostPubKey
505     depends_on: {{role}}Deployment
506     properties:
507         server: {get_resource: {{role}}}
508
509 outputs:
510   ip_address:
511     description: IP address of the server in the ctlplane network
512     value: {get_attr: [{{role}}, networks, ctlplane, 0]}
513   hostname:
514     description: Hostname of the server
515     value: {get_attr: [{{role}}, name]}
516   hostname_map:
517     description: Mapping of network names to hostnames
518     value:
519       external: {get_attr: [NetHostMap, value, external, fqdn]}
520       internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
521       storage: {get_attr: [NetHostMap, value, storage, fqdn]}
522       storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
523       tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
524       management: {get_attr: [NetHostMap, value, management, fqdn]}
525       ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
526   hosts_entry:
527     value:
528       str_replace:
529         template: |
530           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
531           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
532           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
533           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
534           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
535           TENANTIP TENANTHOST.DOMAIN TENANTHOST
536           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
537           CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
538         params:
539           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, {{role}}HostnameResolveNetwork]}]}
540           DOMAIN: {get_param: CloudDomain}
541           PRIMARYHOST: {get_attr: [{{role}}, name]}
542           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
543           EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
544           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
545           INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
546           STORAGEIP: {get_attr: [StoragePort, ip_address]}
547           STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
548           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
549           STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
550           TENANTIP: {get_attr: [TenantPort, ip_address]}
551           TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
552           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
553           MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
554           CTLPLANEIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
555           CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
556   known_hosts_entry:
557     description: Entry for ssh known hosts
558     value:
559       str_replace:
560         template: "PRIMARYIP,PRIMARYHOST.DOMAIN,PRIMARYHOST,\
561 EXTERNALIP,EXTERNALHOST.DOMAIN,EXTERNALHOST,\
562 INTERNAL_APIIP,INTERNAL_APIHOST.DOMAIN,INTERNAL_APIHOST,\
563 STORAGEIP,STORAGEHOST.DOMAIN,STORAGEHOST,\
564 STORAGE_MGMTIP,STORAGE_MGMTHOST.DOMAIN,STORAGE_MGMTHOST,\
565 TENANTIP,TENANTHOST.DOMAIN,TENANTHOST,\
566 MANAGEMENTIP,MANAGEMENTHOST.DOMAIN,MANAGEMENTHOST,\
567 CTLPLANEIP,CTLPLANEHOST.DOMAIN,CTLPLANEHOST HOSTSSHPUBKEY"
568         params:
569           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, {{role}}HostnameResolveNetwork]}]}
570           DOMAIN: {get_param: CloudDomain}
571           PRIMARYHOST: {get_attr: [{{role}}, name]}
572           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
573           EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
574           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
575           INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
576           STORAGEIP: {get_attr: [StoragePort, ip_address]}
577           STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
578           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
579           STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
580           TENANTIP: {get_attr: [TenantPort, ip_address]}
581           TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
582           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
583           MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
584           CTLPLANEIP: {get_attr: [{{role}}, networks, ctlplane, 0]}
585           CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
586           HOSTSSHPUBKEY: {get_attr: [SshHostPubKey, ecdsa]}
587   nova_server_resource:
588     description: Heat resource handle for {{role}} server
589     value:
590       {get_resource: {{role}}}
591   external_ip_address:
592     description: IP address of the server in the external network
593     value: {get_attr: [ExternalPort, ip_address]}
594   internal_api_ip_address:
595     description: IP address of the server in the internal_api network
596     value: {get_attr: [InternalApiPort, ip_address]}
597   storage_ip_address:
598     description: IP address of the server in the storage network
599     value: {get_attr: [StoragePort, ip_address]}
600   storage_mgmt_ip_address:
601     description: IP address of the server in the storage_mgmt network
602     value: {get_attr: [StorageMgmtPort, ip_address]}
603   tenant_ip_address:
604     description: IP address of the server in the tenant network
605     value: {get_attr: [TenantPort, ip_address]}
606   management_ip_address:
607     description: IP address of the server in the management network
608     value: {get_attr: [ManagementPort, ip_address]}