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