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