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