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