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