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