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