Merge "Telemetry specific config for scenario001" into stable/pike
[apex-tripleo-heat-templates.git] / puppet / role.role.j2.yaml
1 {#- ## Some variables are set to enable rendering backwards compatible templates #}
2 {#- ## where a few parameter/resource names don't match the expected pattern #}
3 {#- ## FIXME: we need some way to deprecate the old inconsistent parameters #}
4 {%- set server_resource_name = role.deprecated_server_resource_name|default(role.name) -%}
5 heat_template_version: pike
6 description: 'OpenStack {{role.name}} node configured by Puppet'
7 parameters:
8 {%- set default_flavor_name = 'baremetal' %}
9 {%- if role.deprecated_param_flavor is defined %}
10   {{role.deprecated_param_flavor}}:
11     description: DEPRECATED Use Overcloud{{role.name}}Flavor instead.
12     default: {{default_flavor_name}}
13     type: string
14 {%- endif %}
15   Overcloud{{role.name}}Flavor:
16     description: Flavor for the {{role.name}} node.
17     default: {{default_flavor_name}}
18     type: string
19 {%- if role.disable_constraints is not defined %}
20     constraints:
21       - custom_constraint: nova.flavor
22 {%- endif %}
23 {%- set default_image_name = 'overcloud-full' %}
24 {%- if role.deprecated_param_image is defined %}
25   {{role.deprecated_param_image}}:
26     type: string
27     default: {{default_image_name}}
28     description: DEPRECATED Use {{role.name}}Image instead
29 {%- endif %}
30   {{role.name}}Image:
31     type: string
32     default: {{default_image_name}}
33     description: The disk image file to use for the role.
34 {%- if role.disable_constraints is not defined %}
35     constraints:
36       - custom_constraint: glance.image
37 {%- endif %}
38   ImageUpdatePolicy:
39     default: 'REBUILD_PRESERVE_EPHEMERAL'
40     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
41     type: string
42   KeyName:
43     description: Name of an existing Nova key pair to enable SSH access to the instances
44     type: string
45     default: default
46 {%- if role.disable_constraints is not defined %}
47     constraints:
48       - custom_constraint: nova.keypair
49 {%- endif %}
50   NeutronPhysicalBridge:
51     default: 'br-ex'
52     description: An OVS bridge to create for accessing external networks.
53     type: string
54   NeutronPublicInterface:
55     default: nic1
56     description: Which interface to add to the NeutronPhysicalBridge.
57     type: string
58   ServiceNetMap:
59     default: {}
60     description: Mapping of service_name -> network name. Typically set
61                  via parameter_defaults in the resource registry.
62     type: json
63   EndpointMap:
64     default: {}
65     description: Mapping of service endpoint -> protocol. Typically set
66                  via parameter_defaults in the resource registry.
67     type: json
68   UpdateIdentifier:
69     default: ''
70     type: string
71     description: >
72       Setting to a previously unused value during stack-update will trigger
73       package update on all nodes
74   Hostname:
75     type: string
76     default: '' # Defaults to Heat created hostname
77   HostnameMap:
78     type: json
79     default: {}
80     description: Optional mapping to override hostnames
81   ExtraConfig:
82     default: {}
83     description: |
84       Additional hiera configuration to inject into the cluster. Note
85       that {{role.name}}ExtraConfig takes precedence over ExtraConfig.
86     type: json
87   {{role.name}}ExtraConfig:
88     default: {}
89     description: |
90       Role specific additional hiera configuration to inject into the cluster.
91     type: json
92 {%- if role.deprecated_param_extraconfig is defined %}
93   {{role.deprecated_param_extraconfig}}:
94     default: {}
95     description: |
96       DEPRECATED use {{role.name}}ExtraConfig instead
97     type: json
98 {%- endif %}
99   {{role.name}}IPs:
100     default: {}
101     type: json
102 {%- if role.deprecated_param_ips is defined %}
103   {{role.deprecated_param_ips}}:
104     default: {}
105     description: DEPRECATED - use {{role.name}}IPs instead
106     type: json
107 {%- endif %}
108   NetworkDeploymentActions:
109     type: comma_delimited_list
110     description: >
111       Heat action when to apply network configuration changes
112     default: ['CREATE']
113   SoftwareConfigTransport:
114     default: POLL_SERVER_CFN
115     description: |
116       How the server should receive the metadata required for software configuration.
117     type: string
118     constraints:
119     - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
120   CloudDomain:
121     default: 'localdomain'
122     type: string
123     description: >
124       The DNS domain used for the hosts. This must match the
125       overcloud_domain_name configured on the undercloud.
126   {{role.name}}ServerMetadata:
127     default: {}
128     description: >
129       Extra properties or metadata passed to Nova for the created nodes in
130       the overcloud. It's accessible via the Nova metadata API. This option is
131       role-specific and is merged with the values given to the ServerMetadata
132       parameter.
133     type: json
134 {%- if role.deprecated_param_metadata is defined %}
135   {{role.deprecated_param_metadata}}:
136     default: {}
137     description: DEPRECATED - use {{role.name}}ServerMetadata instead
138     type: json
139 {%- endif %}
140   ServerMetadata:
141     default: {}
142     description: >
143       Extra properties or metadata passed to Nova for the created nodes in
144       the overcloud. It's accessible via the Nova metadata API. This applies to
145       all roles and is merged with a role-specific metadata parameter.
146     type: json
147   {{role.name}}SchedulerHints:
148     type: json
149     description: Optional scheduler hints to pass to nova
150     default: {}
151   NodeIndex:
152     type: number
153     default: 0
154   ServiceConfigSettings:
155     type: json
156     default: {}
157   ServiceNames:
158     type: comma_delimited_list
159     default: []
160   MonitoringSubscriptions:
161     type: comma_delimited_list
162     default: []
163   ServiceMetadataSettings:
164     type: json
165     default: {}
166   ConfigCommand:
167     type: string
168     description: Command which will be run whenever configuration data changes
169     default: os-refresh-config --timeout 14400
170   ConfigCollectSplay:
171     type: number
172     default: 30
173     description: |
174       Maximum amount of time to possibly to delay configuation collection
175       polling. Defaults to 30 seconds. Set to 0 to disable it which will cause
176       the configuration collection to occur as soon as the collection process
177       starts.  This setting is used to prevent the configuration collection
178       processes from polling all at the exact same time.
179   LoggingSources:
180     type: json
181     default: []
182   LoggingGroups:
183     type: comma_delimited_list
184     default: []
185   UpgradeInitCommand:
186     type: string
187     description: |
188       Command or script snippet to run on all overcloud nodes to
189       initialize the upgrade process. E.g. a repository switch.
190     default: ''
191   UpgradeInitCommonCommand:
192     type: string
193     description: |
194       Common commands required by the upgrades process. This should not
195       normally be modified by the operator and is set and unset in the
196       major-upgrade-composable-steps.yaml and major-upgrade-converge.yaml
197       environment files.
198     default: ''
199   DeploymentServerBlacklistDict:
200     default: {}
201     type: json
202     description: >
203       Map of server hostnames to blacklist from any triggered
204       deployments. If the value is 1, the server will be blacklisted. This
205       parameter is generated from the parent template.
206   RoleParameters:
207     type: json
208     description: Parameters specific to the role
209     default: {}
210   DeploymentSwiftDataMap:
211     type: json
212     description: |
213       Map of servers to Swift container and object for storing deployment data.
214       The keys are the Heat assigned hostnames, and the value is a map of the
215       container/object name in Swift. Example value:
216         overcloud-controller-0:
217           container: overcloud-controller
218           object: 0
219         overcloud-controller-1:
220           container: overcloud-controller
221           object: 1
222         overcloud-controller-2:
223           container: overcloud-controller
224           object: 2
225         overcloud-novacompute-0:
226           container: overcloud-compute
227           object: 0
228     default: {}
229
230 {% if role.uses_deprecated_params is defined %}
231 parameter_groups:
232 - label: deprecated
233   description: Do not use deprecated params, they will be removed.
234   parameters:
235 {%- for property in role %}
236 {%- if property.startswith('deprecated_param_') and not role[property].endswith('SchedulerHints') %}
237   - {{role[property]}}
238 {%- endif %}
239 {%- endfor %}
240 {%- endif %}
241
242 conditions:
243   server_not_blacklisted:
244     not:
245       equals:
246         - {get_param: [DeploymentServerBlacklistDict, {get_param: Hostname}]}
247         - 1
248   deployment_swift_data_map_unset:
249     equals:
250       - get_param:
251           - DeploymentSwiftDataMap
252           - {get_param: Hostname}
253       - ""
254 {%- if role.deprecated_param_image is defined %}
255   deprecated_param_image_set:
256     not:
257       equals:
258         - {get_param: {{role.deprecated_param_image}}}
259         - {{default_image_name}}
260 {%- endif %}
261 {%- if role.deprecated_param_flavor is defined %}
262   deprecated_param_flavor_set:
263     not:
264       equals:
265         - {get_param: {{role.deprecated_param_flavor}}}
266         - {{default_flavor_name}}
267 {%- endif %}
268
269 resources:
270   {{server_resource_name}}:
271     type: OS::TripleO::{{role.name}}Server
272     metadata:
273       os-collect-config:
274         command: {get_param: ConfigCommand}
275         splay: {get_param: ConfigCollectSplay}
276     properties:
277       image:
278 {%- if role.deprecated_param_image is defined %}
279         if:
280           - deprecated_param_image_set
281           - {get_param: {{role.deprecated_param_image}}}
282           - {get_param: {{role.name}}Image}
283 {%- else %}
284         get_param: {{role.name}}Image
285 {%- endif %}
286       image_update_policy: {get_param: ImageUpdatePolicy}
287       flavor: 
288 {%- if role.deprecated_param_flavor is defined %}
289         if:
290           - deprecated_param_flavor_set
291           - {get_param: {{role.deprecated_param_flavor}}}
292           - {get_param: Overcloud{{role.name}}Flavor}
293 {%- else %}
294         get_param: Overcloud{{role.name}}Flavor
295 {%- endif %}
296       key_name: {get_param: KeyName}
297       networks:
298         - network: ctlplane
299       user_data_format: SOFTWARE_CONFIG
300       user_data: {get_resource: UserData}
301       name:
302         str_replace:
303             template: {get_param: Hostname}
304             params: {get_param: HostnameMap}
305       software_config_transport: {get_param: SoftwareConfigTransport}
306       metadata:
307         map_merge:
308           - {get_param: ServerMetadata}
309 {%- if role.deprecated_param_metadata is defined %}
310           - {get_param: {{role.deprecated_param_metadata}}}
311 {%- endif %}
312           - {get_param: {{role.name}}ServerMetadata}
313           - {get_param: ServiceMetadataSettings}
314       scheduler_hints: {get_param: {{role.name}}SchedulerHints}
315       deployment_swift_data:
316         if:
317           - deployment_swift_data_map_unset
318           - {}
319           - {get_param: [DeploymentSwiftDataMap,
320                          {get_param: Hostname}]}
321
322   # Combine the NodeAdminUserData and NodeUserData mime archives
323   UserData:
324     type: OS::Heat::MultipartMime
325     properties:
326       parts:
327       - config: {get_resource: NodeAdminUserData}
328         type: multipart
329       - config: {get_resource: NodeUserData}
330         type: multipart
331       - config: {get_resource: RoleUserData}
332         type: multipart
333
334   # Creates the "heat-admin" user if configured via the environment
335   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
336   NodeAdminUserData:
337     type: OS::TripleO::NodeAdminUserData
338
339   # For optional operator additional userdata
340   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
341   NodeUserData:
342     type: OS::TripleO::NodeUserData
343
344   # For optional operator role-specific userdata
345   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
346   RoleUserData:
347     type: OS::TripleO::{{role.name}}::NodeUserData
348
349   {%- for network in networks %}
350   {{network.name}}Port:
351     type: OS::TripleO::{{role.name}}::Ports::{{network.name}}Port
352     properties:
353       ControlPlaneIP: {get_attr: [{{server_resource_name}}, networks, ctlplane, 0]}
354       IPPool:
355         map_merge:
356 {%- if role.deprecated_param_ips is defined %}
357           - {get_param: {{role.deprecated_param_ips}}}
358 {%- endif %}
359           - {get_param: {{role.name}}IPs}
360       NodeIndex: {get_param: NodeIndex}
361   {%- endfor %}
362
363   NetworkConfig:
364     type: OS::TripleO::{{role.name}}::Net::SoftwareConfig
365     properties:
366       ControlPlaneIp: {get_attr: [{{server_resource_name}}, networks, ctlplane, 0]}
367   {%- for network in networks %}
368       {{network.name}}IpSubnet: {get_attr: [{{network.name}}Port, ip_subnet]}
369   {%- endfor %}
370
371   NetIpMap:
372     type: OS::TripleO::Network::Ports::NetIpMap
373     properties:
374       ControlPlaneIp: {get_attr: [{{server_resource_name}}, networks, ctlplane, 0]}
375   {%- for network in networks %}
376       {{network.name}}Ip: {get_attr: [{{network.name}}Port, ip_address]}
377       {{network.name}}IpSubnet: {get_attr: [{{network.name}}Port, ip_subnet]}
378       {{network.name}}IpUri: {get_attr: [{{network.name}}Port, ip_address_uri]}
379   {%- endfor %}
380
381   NetHostMap:
382     type: OS::Heat::Value
383     properties:
384       type: json
385       value:
386         external:
387           fqdn:
388             list_join:
389             - '.'
390             - - {get_attr: [{{server_resource_name}}, name]}
391               - external
392               - {get_param: CloudDomain}
393           short:
394             list_join:
395             - '.'
396             - - {get_attr: [{{server_resource_name}}, name]}
397               - external
398         internal_api:
399           fqdn:
400             list_join:
401             - '.'
402             - - {get_attr: [{{server_resource_name}}, name]}
403               - internalapi
404               - {get_param: CloudDomain}
405           short:
406             list_join:
407             - '.'
408             - - {get_attr: [{{server_resource_name}}, name]}
409               - internalapi
410         storage:
411           fqdn:
412             list_join:
413             - '.'
414             - - {get_attr: [{{server_resource_name}}, name]}
415               - storage
416               - {get_param: CloudDomain}
417           short:
418             list_join:
419             - '.'
420             - - {get_attr: [{{server_resource_name}}, name]}
421               - storage
422         storage_mgmt:
423           fqdn:
424             list_join:
425             - '.'
426             - - {get_attr: [{{server_resource_name}}, name]}
427               - storagemgmt
428               - {get_param: CloudDomain}
429           short:
430             list_join:
431             - '.'
432             - - {get_attr: [{{server_resource_name}}, name]}
433               - storagemgmt
434         tenant:
435           fqdn:
436             list_join:
437             - '.'
438             - - {get_attr: [{{server_resource_name}}, name]}
439               - tenant
440               - {get_param: CloudDomain}
441           short:
442             list_join:
443             - '.'
444             - - {get_attr: [{{server_resource_name}}, name]}
445               - tenant
446         management:
447           fqdn:
448             list_join:
449             - '.'
450             - - {get_attr: [{{server_resource_name}}, name]}
451               - management
452               - {get_param: CloudDomain}
453           short:
454             list_join:
455             - '.'
456             - - {get_attr: [{{server_resource_name}}, name]}
457               - management
458         ctlplane:
459           fqdn:
460             list_join:
461             - '.'
462             - - {get_attr: [{{server_resource_name}}, name]}
463               - ctlplane
464               - {get_param: CloudDomain}
465           short:
466             list_join:
467             - '.'
468             - - {get_attr: [{{server_resource_name}}, name]}
469               - ctlplane
470
471   PreNetworkConfig:
472     type: OS::TripleO::{{role.name}}::PreNetworkConfig
473     properties:
474       server: {get_resource: {{server_resource_name}}}
475       RoleParameters: {get_param: RoleParameters}
476       ServiceNames: {get_param: ServiceNames}
477       deployment_actions: {get_attr: [DeploymentActions, value]}
478
479   NetworkDeployment:
480     type: OS::TripleO::SoftwareDeployment
481     depends_on: PreNetworkConfig
482     properties:
483       name: NetworkDeployment
484       config: {get_resource: NetworkConfig}
485       server: {get_resource: {{server_resource_name}}}
486       actions: {get_param: NetworkDeploymentActions}
487       input_values:
488         bridge_name: {get_param: NeutronPhysicalBridge}
489         interface_name: {get_param: NeutronPublicInterface}
490       actions:
491         if:
492           - server_not_blacklisted
493           - {get_param: NetworkDeploymentActions}
494           - []
495
496   {{server_resource_name}}UpgradeInitConfig:
497     type: OS::Heat::SoftwareConfig
498     properties:
499       group: script
500       config:
501         list_join:
502         - ''
503         - - "#!/bin/bash\n\n"
504           - "if [[ -f /etc/resolv.conf.save ]] ; then rm /etc/resolv.conf.save; fi\n\n"
505           - get_param: UpgradeInitCommand
506           - get_param: UpgradeInitCommonCommand
507
508   # Note we may be able to make this conditional on UpgradeInitCommandNotEmpty
509   # but https://bugs.launchpad.net/heat/+bug/1649900 needs fixing first
510   {{server_resource_name}}UpgradeInitDeployment:
511     type: OS::Heat::SoftwareDeployment
512     depends_on: NetworkDeployment
513     properties:
514       name: {{server_resource_name}}UpgradeInitDeployment
515       server: {get_resource: {{server_resource_name}}}
516       config: {get_resource: {{server_resource_name}}UpgradeInitConfig}
517       actions:
518         if:
519           - server_not_blacklisted
520           - ['CREATE', 'UPDATE']
521           - []
522
523   {{server_resource_name}}Deployment:
524     type: OS::Heat::StructuredDeployment
525     depends_on: {{server_resource_name}}UpgradeInitDeployment
526     properties:
527       name: {{server_resource_name}}Deployment
528       config: {get_resource: {{server_resource_name}}Config}
529       server: {get_resource: {{server_resource_name}}}
530       input_values:
531         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
532       actions:
533         if:
534           - server_not_blacklisted
535           - ['CREATE', 'UPDATE']
536           - []
537
538   {{server_resource_name}}Config:
539     type: OS::Heat::StructuredConfig
540     properties:
541       group: hiera
542       config:
543         hierarchy:
544           - '"%{::uuid}"'
545           - heat_config_%{::deploy_config_name}
546           - config_step
547           - {{role.name.lower()}}_extraconfig
548           - extraconfig
549           - service_names
550           - service_configs
551           - {{role.name.lower()}}
552           - bootstrap_node # provided by allNodesConfig
553           - all_nodes # provided by allNodesConfig
554           - vip_data # provided by allNodesConfig
555           - '"%{::osfamily}"'
556           # The following are required for compatibility with the Controller role
557           # where some vendor integrations added hieradata via ExtraConfigPre
558           - neutron_bigswitch_data # Optionally provided by Controller/ComputeExtraConfigPre
559           - neutron_cisco_data # Optionally provided by Controller/ComputeExtraConfigPre
560           - cisco_n1kv_data # Optionally provided by Controller/ComputeExtraConfigPre
561           - midonet_data #Optionally provided by AllNodesExtraConfig
562           - cisco_aci_data # Optionally provided by Controller/ComputeExtraConfigPre
563         merge_behavior: deeper
564         datafiles:
565           service_names:
566             service_names: {get_param: ServiceNames}
567             sensu::subscriptions: {get_param: MonitoringSubscriptions}
568           service_configs:
569             map_replace:
570               - {get_param: ServiceConfigSettings}
571               - values: {get_attr: [NetIpMap, net_ip_map]}
572           {{role.name.lower()}}_extraconfig:
573             map_merge:
574 {%- if role.deprecated_param_extraconfig is defined %}
575               - {get_param: {{role.deprecated_param_extraconfig}}}
576 {%- endif %}
577               - {get_param: {{server_resource_name}}ExtraConfig}
578           extraconfig: {get_param: ExtraConfig}
579           {{role.name.lower()}}:
580             tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
581             tripleo::profile::base::logging::fluentd::fluentd_sources: {get_param: LoggingSources}
582             tripleo::profile::base::logging::fluentd::fluentd_groups: {get_param: LoggingGroups}
583             fqdn_internal_api: {get_attr: [NetHostMap, value, internal_api, fqdn]}
584             fqdn_storage: {get_attr: [NetHostMap, value, storage, fqdn]}
585             fqdn_storage_mgmt: {get_attr: [NetHostMap, value, storage_mgmt, fqdn]}
586             fqdn_tenant: {get_attr: [NetHostMap, value, tenant, fqdn]}
587             fqdn_management: {get_attr: [NetHostMap, value, management, fqdn]}
588             fqdn_ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
589             fqdn_external: {get_attr: [NetHostMap, value, external, fqdn]}
590
591   # Resource for site-specific injection of root certificate
592   NodeTLSCAData:
593     depends_on: NetworkDeployment
594     type: OS::TripleO::NodeTLSCAData
595     properties:
596       server: {get_resource: {{server_resource_name}}}
597
598   {%- if 'primary' in role.tags and 'controller' in role.tags %}
599   # Resource for site-specific passing of private keys/certificates
600   NodeTLSData:
601     depends_on: NodeTLSCAData
602     type: OS::TripleO::NodeTLSData
603     properties:
604       server: {get_resource: {{server_resource_name}}}
605       NodeIndex: {get_param: NodeIndex}
606   {%- endif -%}
607
608   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
609   {{role.name}}ExtraConfigPre:
610     depends_on: {{server_resource_name}}Deployment
611     type: OS::TripleO::{{role.name}}ExtraConfigPre
612     # We have to use conditions here so that we don't break backwards
613     # compatibility with templates everywhere
614     condition: server_not_blacklisted
615     properties:
616         server: {get_resource: {{server_resource_name}}}
617
618   # Hook for site-specific additional pre-deployment config,
619   # applying to all nodes, e.g node registration/unregistration
620   NodeExtraConfig:
621     depends_on:
622       - {{role.name}}ExtraConfigPre
623   {%- if 'primary' in role.tags and 'controller' in role.tags %}
624       - NodeTLSData
625   {%- else %}
626       - NodeTLSCAData
627   {%- endif %}
628     type: OS::TripleO::NodeExtraConfig
629     # We have to use conditions here so that we don't break backwards
630     # compatibility with templates everywhere
631     condition: server_not_blacklisted
632     properties:
633         server: {get_resource: {{server_resource_name}}}
634
635   UpdateConfig:
636     type: OS::TripleO::Tasks::PackageUpdate
637
638   UpdateDeployment:
639     type: OS::Heat::SoftwareDeployment
640     depends_on: NetworkDeployment
641     properties:
642       name: UpdateDeployment
643       config: {get_resource: UpdateConfig}
644       server: {get_resource: {{server_resource_name}}}
645       input_values:
646         update_identifier:
647           get_param: UpdateIdentifier
648       actions:
649         if:
650           - server_not_blacklisted
651           - ['CREATE', 'UPDATE']
652           - []
653
654   DeploymentActions:
655     type: OS::Heat::Value
656     properties:
657       value:
658         if:
659           - server_not_blacklisted
660           - ['CREATE', 'UPDATE']
661           - []
662
663   SshHostPubKey:
664     type: OS::TripleO::Ssh::HostPubKey
665     depends_on: {{server_resource_name}}Deployment
666     properties:
667         server: {get_resource: {{server_resource_name}}}
668         deployment_actions: {get_attr: [DeploymentActions, value]}
669
670 outputs:
671   ip_address:
672     description: IP address of the server in the ctlplane network
673     value: {get_attr: [{{server_resource_name}}, networks, ctlplane, 0]}
674   hostname:
675     description: Hostname of the server
676     value: {get_attr: [{{server_resource_name}}, name]}
677   hostname_map:
678     description: Mapping of network names to hostnames
679     value:
680   {%- for network in networks %}
681       {{network.name_lower|default(network.name.lower())}}: {get_attr: [NetHostMap, value, {{network.name_lower|default(network.name.lower()) }}, fqdn]}
682   {%- endfor %}
683       ctlplane: {get_attr: [NetHostMap, value, ctlplane, fqdn]}
684   hosts_entry:
685     value:
686       str_replace:
687         template: |
688           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
689   {%- for network in networks %}
690           {{network.name}}IP {{network.name}}HOST.DOMAIN {{network.name}}HOST
691   {%- endfor %}
692           CTLPLANEIP CTLPLANEHOST.DOMAIN CTLPLANEHOST
693         params:
694           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, {{role.name}}HostnameResolveNetwork]}]}
695           DOMAIN: {get_param: CloudDomain}
696           PRIMARYHOST: {get_attr: [{{server_resource_name}}, name]}
697   {%- for network in networks %}
698           {{network.name}}IP: {get_attr: [{{network.name}}Port, ip_address]}
699           {{network.name}}HOST: {get_attr: [NetHostMap, value, {{network.name_lower|default(network.name.lower())}}, short]}
700   {%- endfor %}
701           CTLPLANEIP: {get_attr: [{{server_resource_name}}, networks, ctlplane, 0]}
702           CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
703   known_hosts_entry:
704     description: Entry for ssh known hosts
705     value:
706       str_replace:
707         template: "PRIMARYIP,PRIMARYHOST.DOMAIN,PRIMARYHOST,\
708   {%- for network in networks %}
709 {{network.name}}IP,{{network.name}}HOST.DOMAIN,{{network.name}}HOST,\
710   {%- endfor %}
711 CTLPLANEIP,CTLPLANEHOST.DOMAIN,CTLPLANEHOST HOSTSSHPUBKEY"
712         params:
713           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, {{role.name}}HostnameResolveNetwork]}]}
714           DOMAIN: {get_param: CloudDomain}
715           PRIMARYHOST: {get_attr: [{{server_resource_name}}, name]}
716   {%- for network in networks %}
717           {{network.name}}IP: {get_attr: [{{network.name}}Port, ip_address]}
718           {{network.name}}HOST: {get_attr: [NetHostMap, value, {{network.name_lower|default(network.name.lower())}}, short]}
719   {%- endfor %}
720           CTLPLANEIP: {get_attr: [{{server_resource_name}}, networks, ctlplane, 0]}
721           CTLPLANEHOST: {get_attr: [NetHostMap, value, ctlplane, short]}
722           HOSTSSHPUBKEY: {get_attr: [SshHostPubKey, ecdsa]}
723   nova_server_resource:
724     description: Heat resource handle for {{role.name}} server
725     value:
726       {get_resource: {{server_resource_name}}}
727     condition: server_not_blacklisted
728   deployed_server_port_map:
729     description: |
730       Map of Heat created hostname of the server to ip address. This is the
731       hostname before it has been mapped with the HostnameMap parameter, and
732       the IP address from the ctlplane network. This map can be used to construct
733       the DeployedServerPortMap parameter when using split-stack.
734     value:
735       map_replace:
736         - hostname:
737             fixed_ips:
738               - ip_address: {get_attr: [{{server_resource_name}}, networks, ctlplane, 0]}
739         - keys:
740             hostname:
741               list_join:
742                 - '-'
743                 - - {get_param: Hostname}
744                   - ctlplane
745   deployed_server_deployment_swift_data_map:
746     description:
747       Map of Heat created hostname of the server to the Swift container and object
748       used to created the temporary url for metadata polling with
749       os-collect-config.
750     value:
751       map_replace:
752         - hostname:
753             container:
754               str_split:
755                 - '/'
756                 - {get_attr: [{{server_resource_name}}, os_collect_config, request, metadata_url]}
757                 - 5
758             object:
759               str_split:
760                 - '?'
761                 - str_split:
762                     - '/'
763                     - {get_attr: [{{server_resource_name}}, os_collect_config, request, metadata_url]}
764                     - 6
765                 - 0
766         - keys: {hostname: {get_param: Hostname}}
767   {%- if 'primary' in role.tags and 'controller' in role.tags %}
768   tls_key_modulus_md5:
769     description: MD5 checksum of the TLS Key Modulus
770     value: {get_attr: [NodeTLSData, key_modulus_md5]}
771   tls_cert_modulus_md5:
772     description: MD5 checksum of the TLS Certificate Modulus
773     value: {get_attr: [NodeTLSData, cert_modulus_md5]}
774   {%- endif %}
775   os_collect_config:
776     description: The os-collect-config configuration associated with this server resource
777     value: {get_attr: [{{server_resource_name}}, os_collect_config]}
778   {%- for network in networks %}
779   {{network.name_lower|default(network.name.lower())}}_ip_address:
780     description: IP address of the server in the {{network.name}} network
781     value: {get_attr: [{{network.name}}Port, ip_address]}
782   {%- endfor %}