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