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