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