Merge "Add docker templates for octavia services"
[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       ServiceNames: {get_param: ServiceNames}
420
421   NetworkConfig:
422     type: OS::TripleO::Compute::Net::SoftwareConfig
423     properties:
424       ControlPlaneIp: {get_attr: [NovaCompute, networks, ctlplane, 0]}
425       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
426       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
427       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
428       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
429       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
430       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
431
432   NetworkDeployment:
433     type: OS::TripleO::SoftwareDeployment
434     depends_on: PreNetworkConfig
435     properties:
436       name: NetworkDeployment
437       actions:
438         if:
439           - server_not_blacklisted
440           - {get_param: NetworkDeploymentActions}
441           - []
442       config: {get_resource: NetworkConfig}
443       server: {get_resource: NovaCompute}
444       input_values:
445         bridge_name: {get_param: NeutronPhysicalBridge}
446         interface_name: {get_param: NeutronPublicInterface}
447
448   NovaComputeUpgradeInitConfig:
449     type: OS::Heat::SoftwareConfig
450     properties:
451       group: script
452       config:
453         list_join:
454         - ''
455         - - "#!/bin/bash\n\n"
456           - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
457           - get_param: UpgradeInitCommand
458           - get_param: UpgradeInitCommonCommand
459
460   # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
461   # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
462   NovaComputeUpgradeInitDeployment:
463     type: OS::Heat::SoftwareDeployment
464     depends_on: NetworkDeployment
465     properties:
466       name: NovaComputeUpgradeInitDeployment
467       actions:
468         if:
469           - server_not_blacklisted
470           - ['CREATE', 'UPDATE']
471           - []
472       server: {get_resource: NovaCompute}
473       config: {get_resource: NovaComputeUpgradeInitConfig}
474
475   NovaComputeConfig:
476     type: OS::Heat::StructuredConfig
477     properties:
478       group: hiera
479       config:
480         hierarchy:
481           - '"%{::uuid}"'
482           - heat_config_%{::deploy_config_name}
483           - config_step
484           - compute_extraconfig
485           - extraconfig
486           - service_names
487           - service_configs
488           - compute
489           - bootstrap_node # provided by allNodesConfig
490           - all_nodes # provided by allNodesConfig
491           - vip_data # provided by allNodesConfig
492           - '"%{::osfamily}"'
493           - neutron_bigswitch_data # Optionally provided by ComputeExtraConfigPre
494           - cisco_n1kv_data  # Optionally provided by ComputeExtraConfigPre
495           - nova_nuage_data  # Optionally provided by ComputeExtraConfigPre
496           - midonet_data # Optionally provided by AllNodesExtraConfig
497           - neutron_opencontrail_data  # Optionally provided by ComputeExtraConfigPre
498           - cisco_aci_data # Optionally provided by ComputeExtraConfigPre
499         merge_behavior: deeper
500         datafiles:
501           service_names:
502             service_names: {get_param: ServiceNames}
503             sensu::subscriptions: {get_param: MonitoringSubscriptions}
504           service_configs:
505             map_replace:
506               - {get_param: ServiceConfigSettings}
507               - values: {get_attr: [NetIpMap, net_ip_map]}
508           compute_extraconfig: {get_param: NovaComputeExtraConfig}
509           extraconfig: {get_param: ExtraConfig}
510           compute:
511             tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
512             fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
513             fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
514             fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
515             fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
516             fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
517             fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
518             fqdn_external: {get_attr: [NetHostMap, value, external, fqdn]}
519
520   NovaComputeDeployment:
521     type: OS::TripleO::SoftwareDeployment
522     depends_on: NovaComputeUpgradeInitDeployment
523     properties:
524       name: NovaComputeDeployment
525       actions:
526         if:
527           - server_not_blacklisted
528           - ['CREATE', 'UPDATE']
529           - []
530       config: {get_resource: NovaComputeConfig}
531       server: {get_resource: NovaCompute}
532       input_values:
533         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
534
535   # Resource for site-specific injection of root certificate
536   NodeTLSCAData:
537     depends_on: NovaComputeDeployment
538     type: OS::TripleO::NodeTLSCAData
539     properties:
540       server: {get_resource: NovaCompute}
541
542   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
543   ComputeExtraConfigPre:
544     depends_on: NovaComputeDeployment
545     type: OS::TripleO::ComputeExtraConfigPre
546     properties:
547         server: {get_resource: NovaCompute}
548
549   # Hook for site-specific additional pre-deployment config,
550   # applying to all nodes, e.g node registration/unregistration
551   NodeExtraConfig:
552     depends_on: [ComputeExtraConfigPre, NodeTLSCAData]
553     type: OS::TripleO::NodeExtraConfig
554     properties:
555         server: {get_resource: NovaCompute}
556
557   UpdateConfig:
558     type: OS::TripleO::Tasks::PackageUpdate
559
560   UpdateDeployment:
561     type: OS::Heat::SoftwareDeployment
562     depends_on: NetworkDeployment
563     properties:
564       name: UpdateDeployment
565       actions:
566         if:
567           - server_not_blacklisted
568           - ['CREATE', 'UPDATE']
569           - []
570       config: {get_resource: UpdateConfig}
571       server: {get_resource: NovaCompute}
572       input_values:
573         update_identifier:
574           get_param: UpdateIdentifier
575
576   SshHostPubKey:
577     type: OS::TripleO::Ssh::HostPubKey
578     depends_on: NovaComputeDeployment
579     properties:
580         server: {get_resource: NovaCompute}
581
582 outputs:
583   ip_address:
584     description: IP address of the server in the ctlplane network
585     value: {get_attr: [NovaCompute, networks, ctlplane, 0]}
586   external_ip_address:
587     description: IP address of the server in the external network
588     value: {get_attr: [ExternalPort, ip_address]}
589   internal_api_ip_address:
590     description: IP address of the server in the internal_api network
591     value: {get_attr: [InternalApiPort, ip_address]}
592   storage_ip_address:
593     description: IP address of the server in the storage network
594     value: {get_attr: [StoragePort, ip_address]}
595   storage_mgmt_ip_address:
596     description: IP address of the server in the storage_mgmt network
597     value: {get_attr: [StorageMgmtPort, ip_address]}
598   tenant_ip_address:
599     description: IP address of the server in the tenant network
600     value: {get_attr: [TenantPort, ip_address]}
601   management_ip_address:
602     description: IP address of the server in the management network
603     value: {get_attr: [ManagementPort, ip_address]}
604   hostname:
605     description: Hostname of the server
606     value: {get_attr: [NovaCompute, name]}
607   hostname_map:
608     description: Mapping of network names to hostnames
609     value:
610       external: {get_attr: [NetHostMap, value, external, fqdn]}
611       internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
612       storage: {get_attr: [NetHostMap, value, storage, fqdn]}
613       storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
614       tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
615       management: {get_attr: [NetHostMap, value, management, fqdn]}
616       ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
617   hosts_entry:
618     description: >
619       Server's IP address and hostname in the /etc/hosts format
620     value:
621       str_replace:
622         template: |
623           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
624           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
625           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
626           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
627           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
628           TENANTIP TENANTHOST.DOMAIN TENANTHOST
629           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
630           CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
631         params:
632           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ComputeHostnameResolveNetwork]}]}
633           DOMAIN: {get_param: CloudDomain}
634           PRIMARYHOST: {get_attr: [NovaCompute, name]}
635           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
636           EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
637           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
638           INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
639           STORAGEIP: {get_attr: [StoragePort, ip_address]}
640           STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
641           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
642           STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
643           TENANTIP: {get_attr: [TenantPort, ip_address]}
644           TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
645           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
646           MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
647           CTLPLANEIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
648           CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
649   known_hosts_entry:
650     description: Entry for ssh known hosts
651     value:
652       str_replace:
653         template: "PRIMARYIP,PRIMARYHOST.DOMAIN,PRIMARYHOST,\
654 EXTERNALIP,EXTERNALHOST.DOMAIN,EXTERNALHOST,\
655 INTERNAL_APIIP,INTERNAL_APIHOST.DOMAIN,INTERNAL_APIHOST,\
656 STORAGEIP,STORAGEHOST.DOMAIN,STORAGEHOST,\
657 STORAGE_MGMTIP,STORAGE_MGMTHOST.DOMAIN,STORAGE_MGMTHOST,\
658 TENANTIP,TENANTHOST.DOMAIN,TENANTHOST,\
659 MANAGEMENTIP,MANAGEMENTHOST.DOMAIN,MANAGEMENTHOST,\
660 CTLPLANEIP,CTLPLANEHOST.DOMAIN,CTLPLANEHOST HOSTSSHPUBKEY"
661         params:
662           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ComputeHostnameResolveNetwork]}]}
663           DOMAIN: {get_param: CloudDomain}
664           PRIMARYHOST: {get_attr: [NovaCompute, name]}
665           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
666           EXTERNALHOST: {get_attr: [NetHostMap, value, external, short]}
667           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
668           INTERNAL_APIHOST: {get_attr: [NetHostMap, value, internal_api, short]}
669           STORAGEIP: {get_attr: [StoragePort, ip_address]}
670           STORAGEHOST: {get_attr: [NetHostMap, value, storage, short]}
671           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
672           STORAGE_MGMTHOST: {get_attr: [NetHostMap, value, storage_mgmt, short]}
673           TENANTIP: {get_attr: [TenantPort, ip_address]}
674           TENANTHOST: {get_attr: [NetHostMap, value, tenant, short]}
675           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
676           MANAGEMENTHOST: {get_attr: [NetHostMap, value, management, short]}
677           CTLPLANEIP: {get_attr: [NovaCompute, networks, ctlplane, 0]}
678           CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
679           HOSTSSHPUBKEY: {get_attr: [SshHostPubKey, ecdsa]}
680   nova_server_resource:
681     description: Heat resource handle for the Nova compute server
682     value:
683       {get_resource: NovaCompute}
684     condition: server_not_blacklisted
685   os_collect_config:
686     description: The os-collect-config configuration associated with this server resource
687     value: {get_attr: [NovaCompute, os_collect_config]}