Merge "Containerize Horizon"
[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
483   NovaComputeDeployment:
484     type: OS::TripleO::SoftwareDeployment
485     depends_on: NovaComputeUpgradeInitDeployment
486     properties:
487       name: NovaComputeDeployment
488       actions:
489         if:
490           - server_not_blacklisted
491           - ['CREATE', 'UPDATE']
492           - []
493       config: {get_resource: NovaComputeConfig}
494       server: {get_resource: NovaCompute}
495       input_values:
496         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
497
498   # Resource for site-specific injection of root certificate
499   NodeTLSCAData:
500     depends_on: NovaComputeDeployment
501     type: OS::TripleO::NodeTLSCAData
502     properties:
503       server: {get_resource: NovaCompute}
504
505   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
506   ComputeExtraConfigPre:
507     depends_on: NovaComputeDeployment
508     type: OS::TripleO::ComputeExtraConfigPre
509     properties:
510         server: {get_resource: NovaCompute}
511
512   # Hook for site-specific additional pre-deployment config,
513   # applying to all nodes, e.g node registration/unregistration
514   NodeExtraConfig:
515     depends_on: [ComputeExtraConfigPre, NodeTLSCAData]
516     type: OS::TripleO::NodeExtraConfig
517     properties:
518         server: {get_resource: NovaCompute}
519
520   UpdateConfig:
521     type: OS::TripleO::Tasks::PackageUpdate
522
523   UpdateDeployment:
524     type: OS::Heat::SoftwareDeployment
525     depends_on: NetworkDeployment
526     properties:
527       name: UpdateDeployment
528       actions:
529         if:
530           - server_not_blacklisted
531           - ['CREATE', 'UPDATE']
532           - []
533       config: {get_resource: UpdateConfig}
534       server: {get_resource: NovaCompute}
535       input_values:
536         update_identifier:
537           get_param: UpdateIdentifier
538
539   SshHostPubKey:
540     type: OS::TripleO::Ssh::HostPubKey
541     depends_on: NovaComputeDeployment
542     properties:
543         server: {get_resource: NovaCompute}
544
545 outputs:
546   ip_address:
547     description: IP address of the server in the ctlplane network
548     value: {get_attr: [NovaCompute, networks, ctlplane, 0]}
549   external_ip_address:
550     description: IP address of the server in the external network
551     value: {get_attr: [ExternalPort, ip_address]}
552   internal_api_ip_address:
553     description: IP address of the server in the internal_api network
554     value: {get_attr: [InternalApiPort, ip_address]}
555   storage_ip_address:
556     description: IP address of the server in the storage network
557     value: {get_attr: [StoragePort, ip_address]}
558   storage_mgmt_ip_address:
559     description: IP address of the server in the storage_mgmt network
560     value: {get_attr: [StorageMgmtPort, ip_address]}
561   tenant_ip_address:
562     description: IP address of the server in the tenant network
563     value: {get_attr: [TenantPort, ip_address]}
564   management_ip_address:
565     description: IP address of the server in the management network
566     value: {get_attr: [ManagementPort, ip_address]}
567   hostname:
568     description: Hostname of the server
569     value: {get_attr: [NovaCompute, name]}
570   hostname_map:
571     description: Mapping of network names to hostnames
572     value:
573       external: {get_attr: [NetHostMap, value, external, fqdn]}
574       internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
575       storage: {get_attr: [NetHostMap, value, storage, fqdn]}
576       storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
577       tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
578       management: {get_attr: [NetHostMap, value, management, fqdn]}
579       ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
580   hosts_entry:
581     description: >
582       Server's IP address and hostname in the /etc/hosts format
583     value:
584       str_replace:
585         template: |
586           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
587           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
588           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
589           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
590           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
591           TENANTIP TENANTHOST.DOMAIN TENANTHOST
592           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
593           CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
594         params:
595           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ComputeHostnameResolveNetwork]}]}
596           DOMAIN: {get_param: CloudDomain}
597           PRIMARYHOST: {get_attr: [NovaCompute, name]}
598           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
599           EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
600           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
601           INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
602           STORAGEIP: {get_attr: [StoragePort, ip_address]}
603           STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
604           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
605           STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
606           TENANTIP: {get_attr: [TenantPort, ip_address]}
607           TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
608           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
609           MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
610           CTLPLANEIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
611           CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
612   known_hosts_entry:
613     description: Entry for ssh known hosts
614     value:
615       str_replace:
616         template: "PRIMARYIP,PRIMARYHOST.DOMAIN,PRIMARYHOST,\
617 EXTERNALIP,EXTERNALHOST.DOMAIN,EXTERNALHOST,\
618 INTERNAL_APIIP,INTERNAL_APIHOST.DOMAIN,INTERNAL_APIHOST,\
619 STORAGEIP,STORAGEHOST.DOMAIN,STORAGEHOST,\
620 STORAGE_MGMTIP,STORAGE_MGMTHOST.DOMAIN,STORAGE_MGMTHOST,\
621 TENANTIP,TENANTHOST.DOMAIN,TENANTHOST,\
622 MANAGEMENTIP,MANAGEMENTHOST.DOMAIN,MANAGEMENTHOST,\
623 CTLPLANEIP,CTLPLANEHOST.DOMAIN,CTLPLANEHOST HOSTSSHPUBKEY"
624         params:
625           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ComputeHostnameResolveNetwork]}]}
626           DOMAIN: {get_param: CloudDomain}
627           PRIMARYHOST: {get_attr: [NovaCompute, name]}
628           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
629           EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
630           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
631           INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
632           STORAGEIP: {get_attr: [StoragePort, ip_address]}
633           STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
634           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
635           STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
636           TENANTIP: {get_attr: [TenantPort, ip_address]}
637           TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
638           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
639           MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
640           CTLPLANEIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
641           CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
642           HOSTSSHPUBKEY: {get_attr: [SshHostPubKey, ecdsa]}
643   nova_server_resource:
644     description: Heat resource handle for the Nova compute server
645     value:
646       {get_resource: NovaCompute}
647     condition: server_not_blacklisted