Merge "SR-IOV nic agent changes in line with composable roles."
[apex-tripleo-heat-templates.git] / puppet / controller.yaml
1 heat_template_version: 2016-10-14
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   CorosyncIPv6:
27     default: false
28     description: Enable IPv6 in Corosync
29     type: boolean
30   Debug:
31     default: ''
32     description: Set to True to enable debugging on all services.
33     type: string
34   EnableFencing:
35     default: false
36     description: Whether to enable fencing in Pacemaker or not.
37     type: boolean
38   EnableLoadBalancer:
39     default: true
40     description: Whether to deploy a LoadBalancer on the Controller
41     type: boolean
42   ExtraConfig:
43     default: {}
44     description: |
45       Additional hieradata to inject into the cluster, note that
46       ControllerExtraConfig takes precedence over ExtraConfig.
47     type: json
48   FencingConfig:
49     default: {}
50     description: |
51       Pacemaker fencing configuration. The JSON should have
52       the following structure:
53         {
54           "devices": [
55             {
56               "agent": "AGENT_NAME",
57               "host_mac": "HOST_MAC_ADDRESS",
58               "params": {"PARAM_NAME": "PARAM_VALUE"}
59             }
60           ]
61         }
62       For instance:
63         {
64           "devices": [
65             {
66               "agent": "fence_xvm",
67               "host_mac": "52:54:00:aa:bb:cc",
68               "params": {
69                 "multicast_address": "225.0.0.12",
70                 "port": "baremetal_0",
71                 "manage_fw": true,
72                 "manage_key_file": true,
73                 "key_file": "/etc/fence_xvm.key",
74                 "key_file_password": "abcdef"
75               }
76             }
77           ]
78         }
79     type: json
80   OvercloudControlFlavor:
81     description: Flavor for control nodes to request when deploying.
82     default: baremetal
83     type: string
84     constraints:
85       - custom_constraint: nova.flavor
86   HorizonSecret:
87     description: Secret key for Django
88     type: string
89     hidden: true
90   controllerImage:
91     type: string
92     default: overcloud-full
93     constraints:
94       - custom_constraint: glance.image
95   ImageUpdatePolicy:
96     default: 'REBUILD_PRESERVE_EPHEMERAL'
97     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
98     type: string
99   InstanceNameTemplate:
100     default: 'instance-%08x'
101     description: Template string to be used to generate instance names
102     type: string
103   KeyName:
104     default: default
105     description: Name of an existing Nova key pair to enable SSH access to the instances
106     type: string
107     constraints:
108       - custom_constraint: nova.keypair
109   ManageFirewall:
110     default: false
111     description: Whether to manage IPtables rules.
112     type: boolean
113   MemcachedIPv6:
114     default: false
115     description: Enable IPv6 features in Memcached.
116     type: boolean
117   PurgeFirewallRules:
118     default: false
119     description: Whether IPtables rules should be purged before setting up the new ones.
120     type: boolean
121   NeutronMetadataProxySharedSecret:
122     description: Shared secret to prevent spoofing
123     type: string
124     hidden: true
125   NeutronPassword:
126     description: The password for the neutron service and db account, used by neutron agents.
127     type: string
128     hidden: true
129   NeutronPublicInterface:
130     default: nic1
131     description: What interface to bridge onto br-ex for network nodes.
132     type: string
133   NovaEnableDBPurge:
134     default: true
135     description: |
136         Whether to create cron job for purging soft deleted rows in Nova database.
137     type: boolean
138   NovaIPv6:
139     default: false
140     description: Enable IPv6 features in Nova
141     type: boolean
142   NovaPassword:
143     description: The password for the nova service and db account, used by nova-api.
144     type: string
145     hidden: true
146   PcsdPassword:
147     type: string
148     description: The password for the 'pcsd' user.
149     hidden: true
150   RedisPassword:
151     description: The password for Redis
152     type: string
153     hidden: true
154   RedisVirtualIP:
155     type: string
156     default: ''  # Has to be here because of the ignored empty value bug
157   RedisVirtualIPUri:
158     type: string
159     default: ''  # Has to be here because of the ignored empty value bug
160     description: An IP address which is wrapped in brackets in case of IPv6
161   SwiftRawDisks:
162     default: {}
163     description: 'A hash of additional raw devices to use as Swift backend (eg. {sdb: {}})'
164     type: json
165   UpgradeLevelNovaCompute:
166     type: string
167     description: Nova Compute upgrade level
168     default: ''
169   ServiceNetMap:
170     default: {}
171     description: Mapping of service_name -> network name. Typically set
172                  via parameter_defaults in the resource registry.
173     type: json
174   EndpointMap:
175     default: {}
176     description: Mapping of service endpoint -> protocol. Typically set
177                  via parameter_defaults in the resource registry.
178     type: json
179   UpdateIdentifier:
180     default: ''
181     type: string
182     description: >
183       Setting to a previously unused value during stack-update will trigger
184       package update on all nodes
185   Hostname:
186     type: string
187     default: '' # Defaults to Heat created hostname
188   HostnameMap:
189     type: json
190     default: {}
191     description: Optional mapping to override hostnames
192   NetworkDeploymentActions:
193     type: comma_delimited_list
194     description: >
195       Heat action when to apply network configuration changes
196     default: ['CREATE']
197   NodeIndex:
198     type: number
199     default: 0
200   SoftwareConfigTransport:
201     default: POLL_SERVER_CFN
202     description: |
203       How the server should receive the metadata required for software configuration.
204     type: string
205     constraints:
206     - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
207   CloudDomain:
208     type: string
209     description: >
210       The DNS domain used for the hosts. This should match the dhcp_domain
211       configured in the Undercloud neutron. Defaults to localdomain.
212   ServerMetadata:
213     default: {}
214     description: >
215       Extra properties or metadata passed to Nova for the created nodes in
216       the overcloud. It's accessible via the Nova metadata API.
217     type: json
218   ControllerSchedulerHints:
219     type: json
220     description: Optional scheduler hints to pass to nova
221     default: {}
222   ServiceConfigSettings:
223     type: json
224     default: {}
225   ServiceNames:
226     type: comma_delimited_list
227     default: []
228   ConfigCommand:
229     type: string
230     description: Command which will be run whenever configuration data changes
231     default: os-refresh-config --timeout 14400
232
233 parameter_groups:
234 - label: deprecated
235   description: Do not use deprecated params, they will be removed.
236   parameters:
237   - controllerExtraConfig
238
239 resources:
240
241   Controller:
242     type: OS::TripleO::Server
243     metadata:
244       os-collect-config:
245         command: {get_param: ConfigCommand}
246     properties:
247       image: {get_param: controllerImage}
248       image_update_policy: {get_param: ImageUpdatePolicy}
249       flavor: {get_param: OvercloudControlFlavor}
250       key_name: {get_param: KeyName}
251       networks:
252         - network: ctlplane
253       user_data_format: SOFTWARE_CONFIG
254       user_data: {get_resource: UserData}
255       name:
256         str_replace:
257             template: {get_param: Hostname}
258             params: {get_param: HostnameMap}
259       software_config_transport: {get_param: SoftwareConfigTransport}
260       metadata: {get_param: ServerMetadata}
261       scheduler_hints: {get_param: ControllerSchedulerHints}
262
263   # Combine the NodeAdminUserData and NodeUserData mime archives
264   UserData:
265     type: OS::Heat::MultipartMime
266     properties:
267       parts:
268       - config: {get_resource: NodeAdminUserData}
269         type: multipart
270       - config: {get_resource: NodeUserData}
271         type: multipart
272
273   # Creates the "heat-admin" user if configured via the environment
274   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
275   NodeAdminUserData:
276     type: OS::TripleO::NodeAdminUserData
277
278   # For optional operator additional userdata
279   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
280   NodeUserData:
281     type: OS::TripleO::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   NetworkConfig:
349     type: OS::TripleO::Controller::Net::SoftwareConfig
350     properties:
351       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
352       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
353       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
354       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
355       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
356       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
357       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
358
359   NetworkDeployment:
360     type: OS::TripleO::SoftwareDeployment
361     properties:
362       name: NetworkDeployment
363       config: {get_resource: NetworkConfig}
364       server: {get_resource: Controller}
365       actions: {get_param: NetworkDeploymentActions}
366       input_values:
367         bridge_name: br-ex
368         interface_name: {get_param: NeutronPublicInterface}
369
370   # Resource for site-specific injection of root certificate
371   NodeTLSCAData:
372     depends_on: NetworkDeployment
373     type: OS::TripleO::NodeTLSCAData
374     properties:
375       server: {get_resource: Controller}
376
377   # Resource for site-specific passing of private keys/certificates
378   NodeTLSData:
379     depends_on: NodeTLSCAData
380     type: OS::TripleO::NodeTLSData
381     properties:
382       server: {get_resource: Controller}
383       NodeIndex: {get_param: NodeIndex}
384
385
386   ControllerDeployment:
387     type: OS::TripleO::SoftwareDeployment
388     depends_on: NetworkDeployment
389     properties:
390       name: ControllerDeployment
391       config: {get_resource: ControllerConfig}
392       server: {get_resource: Controller}
393       input_values:
394         bootstack_nodeid: {get_attr: [Controller, name]}
395         horizon_secret: {get_param: HorizonSecret}
396         debug: {get_param: Debug}
397         keystone_identity_uri: { get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix] }
398         keystone_auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri] }
399         keystone_ec2_uri: { get_param: [EndpointMap, KeystoneEC2, uri] }
400         enable_fencing: {get_param: EnableFencing}
401         enable_load_balancer: {get_param: EnableLoadBalancer}
402         manage_firewall: {get_param: ManageFirewall}
403         purge_firewall_rules: {get_param: PurgeFirewallRules}
404         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
405         nova_enable_db_purge: {get_param: NovaEnableDBPurge}
406         nova_ipv6: {get_param: NovaIPv6}
407         corosync_ipv6: {get_param: CorosyncIPv6}
408         memcached_ipv6: {get_param: MemcachedIPv6}
409         nova_password: {get_param: NovaPassword}
410         upgrade_level_nova_compute: {get_param: UpgradeLevelNovaCompute}
411         instance_name_template: {get_param: InstanceNameTemplate}
412         fencing_config: {get_param: FencingConfig}
413         pcsd_password: {get_param: PcsdPassword}
414         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
415         glance_api_servers: { get_param: [EndpointMap, GlanceInternal, uri]}
416         neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
417         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
418         nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
419         nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
420         horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
421         horizon_subnet:
422           str_replace:
423             template: "['SUBNET']"
424             params:
425               SUBNET:
426                 get_attr:
427                   - NetIpMap
428                   - net_ip_map
429                   - str_replace:
430                       template: "NETWORK_subnet"
431                       params:
432                         NETWORK: {get_param: [ServiceNetMap, HorizonNetwork]}
433         redis_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
434         redis_vip: {get_param: RedisVirtualIP}
435         sahara_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
436         memcached_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
437         ironic_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
438
439   # Map heat metadata into hiera datafiles
440   ControllerConfig:
441     type: OS::Heat::StructuredConfig
442     properties:
443       group: os-apply-config
444       config:
445         hiera:
446           hierarchy:
447             - '"%{::uuid}"'
448             - heat_config_%{::deploy_config_name}
449             - controller_extraconfig
450             - extraconfig
451             - service_configs
452             - service_names
453             - controller
454             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
455             - bootstrap_node # provided by BootstrapNodeConfig
456             - all_nodes # provided by allNodesConfig
457             - vip_data # provided by vip-config
458             - '"%{::osfamily}"'
459             - cinder_dellsc_data # Optionally provided by ControllerExtraConfigPre
460             - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
461             - cinder_eqlx_data # Optionally provided by ControllerExtraConfigPre
462             - neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
463             - neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
464             - cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
465             - midonet_data #Optionally provided by AllNodesExtraConfig
466             - cisco_aci_data # Optionally provided by ControllerExtraConfigPre
467           merge_behavior: deeper
468           datafiles:
469             service_names:
470               mapped_data:
471                 service_names: {get_param: ServiceNames}
472             service_configs:
473               mapped_data:
474                 map_replace:
475                   - {get_param: ServiceConfigSettings}
476                   - values: {get_attr: [NetIpMap, net_ip_map]}
477             controller_extraconfig:
478               mapped_data:
479                 map_merge:
480                   - {get_param: controllerExtraConfig}
481                   - {get_param: ControllerExtraConfig}
482             extraconfig:
483               mapped_data: {get_param: ExtraConfig}
484             controller:
485               mapped_data: # data supplied directly to this deployment configuration, etc
486                 bootstack_nodeid: {get_input: bootstack_nodeid}
487
488                 # Pacemaker
489                 enable_fencing: {get_input: enable_fencing}
490                 enable_load_balancer: {get_input: enable_load_balancer}
491                 hacluster_pwd: {get_input: pcsd_password}
492                 corosync_ipv6: {get_input: corosync_ipv6}
493                 tripleo::fencing::config: {get_input: fencing_config}
494
495                 # Neutron
496                 neutron::bind_host: {get_input: neutron_api_network}
497                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
498                 neutron::agents::metadata::metadata_ip: {get_input: neutron_api_network}
499                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
500                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
501
502                 # Nova
503                 nova::upgrade_level_compute: {get_input: upgrade_level_nova_compute}
504                 nova::use_ipv6: {get_input: nova_ipv6}
505                 nova::api::api_bind_address: {get_input: nova_api_network}
506                 nova::api::metadata_listen: {get_input: nova_metadata_network}
507                 nova::glance_api_servers: {get_input: glance_api_servers}
508                 nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
509                 nova::api::instance_name_template: {get_input: instance_name_template}
510                 nova::vncproxy::host: {get_input: nova_api_network}
511                 nova_enable_db_purge: {get_input: nova_enable_db_purge}
512
513                 # Horizon
514                 apache::mod::remoteip::proxy_ips: {get_input: horizon_subnet}
515                 apache::ip: {get_input: horizon_network}
516                 horizon::django_debug: {get_input: debug}
517                 horizon::secret_key: {get_input: horizon_secret}
518                 horizon::bind_address: {get_input: horizon_network}
519                 horizon::keystone_url: {get_input: keystone_auth_uri}
520
521                 # Sahara
522                 sahara::host: {get_input: sahara_api_network}
523
524                 # Redis
525                 redis::bind: {get_input: redis_network}
526                 redis_vip: {get_input: redis_vip}
527                 # Firewall
528                 tripleo::firewall::manage_firewall: {get_input: manage_firewall}
529                 tripleo::firewall::purge_firewall_rules: {get_input: purge_firewall_rules}
530                 # Misc
531                 memcached_ipv6: {get_input: memcached_ipv6}
532                 memcached::listen_ip: {get_input: memcached_network}
533                 tripleo::haproxy::service_certificate: {get_attr: [NodeTLSData, deployed_ssl_certificate_path]}
534                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
535
536   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
537   ControllerExtraConfigPre:
538     depends_on: ControllerDeployment
539     type: OS::TripleO::ControllerExtraConfigPre
540     properties:
541         server: {get_resource: Controller}
542
543   # Hook for site-specific additional pre-deployment config,
544   # applying to all nodes, e.g node registration/unregistration
545   NodeExtraConfig:
546     depends_on: [ControllerExtraConfigPre, NodeTLSData]
547     type: OS::TripleO::NodeExtraConfig
548     properties:
549         server: {get_resource: Controller}
550
551   UpdateConfig:
552     type: OS::TripleO::Tasks::PackageUpdate
553
554   UpdateDeployment:
555     type: OS::Heat::SoftwareDeployment
556     properties:
557       name: UpdateDeployment
558       config: {get_resource: UpdateConfig}
559       server: {get_resource: Controller}
560       input_values:
561         update_identifier:
562           get_param: UpdateIdentifier
563
564 outputs:
565   ip_address:
566     description: IP address of the server in the ctlplane network
567     value: {get_attr: [Controller, networks, ctlplane, 0]}
568   external_ip_address:
569     description: IP address of the server in the external network
570     value: {get_attr: [ExternalPort, ip_address]}
571   internal_api_ip_address:
572     description: IP address of the server in the internal_api network
573     value: {get_attr: [InternalApiPort, ip_address]}
574   storage_ip_address:
575     description: IP address of the server in the storage network
576     value: {get_attr: [StoragePort, ip_address]}
577   storage_mgmt_ip_address:
578     description: IP address of the server in the storage_mgmt network
579     value: {get_attr: [StorageMgmtPort, ip_address]}
580   tenant_ip_address:
581     description: IP address of the server in the tenant network
582     value: {get_attr: [TenantPort, ip_address]}
583   management_ip_address:
584     description: IP address of the server in the management network
585     value: {get_attr: [ManagementPort, ip_address]}
586   hostname:
587     description: Hostname of the server
588     value: {get_attr: [Controller, name]}
589   hosts_entry:
590     description: >
591       Server's IP address and hostname in the /etc/hosts format
592     value:
593       str_replace:
594         template: |
595           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
596           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
597           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
598           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
599           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
600           TENANTIP TENANTHOST.DOMAIN TENANTHOST
601           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
602         params:
603           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ControllerHostnameResolveNetwork]}]}
604           DOMAIN: {get_param: CloudDomain}
605           PRIMARYHOST: {get_attr: [Controller, name]}
606           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
607           EXTERNALHOST:
608             list_join:
609             - '.'
610             - - {get_attr: [Controller, name]}
611               - external
612           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
613           INTERNAL_APIHOST:
614             list_join:
615             - '.'
616             - - {get_attr: [Controller, name]}
617               - internalapi
618           STORAGEIP: {get_attr: [StoragePort, ip_address]}
619           STORAGEHOST:
620             list_join:
621             - '.'
622             - - {get_attr: [Controller, name]}
623               - storage
624           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
625           STORAGE_MGMTHOST:
626             list_join:
627             - '.'
628             - - {get_attr: [Controller, name]}
629               - storagemgmt
630           TENANTIP: {get_attr: [TenantPort, ip_address]}
631           TENANTHOST:
632             list_join:
633             - '.'
634             - - {get_attr: [Controller, name]}
635               - tenant
636           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
637           MANAGEMENTHOST:
638             list_join:
639             - '.'
640             - - {get_attr: [Controller, name]}
641               - management
642   nova_server_resource:
643     description: Heat resource handle for the Nova compute server
644     value:
645       {get_resource: Controller}
646   swift_device:
647     description: Swift device formatted for swift-ring-builder
648     value:
649       str_replace:
650         template:
651           list_join:
652             - ','
653             - ['r1z1-IP:%PORT%/d1']
654             - repeat:
655                 template: 'r1z1-IP:%PORT%/DEVICE'
656                 for_each:
657                   DEVICE: {get_param: SwiftRawDisks}
658         params:
659           IP:
660             get_attr:
661               - NetIpMap
662               - net_ip_map
663               - str_replace:
664                   template: "NETWORK_uri"
665                   params:
666                     NETWORK: {get_param: [ServiceNetMap, SwiftMgmtNetwork]}
667   swift_proxy_memcache:
668     description: Swift proxy-memcache value
669     value:
670       str_replace:
671         template: "IP:11211"
672         params:
673           IP:
674             get_attr:
675               - NetIpMap
676               - net_ip_map
677               - str_replace:
678                   template: "NETWORK_uri"
679                   params:
680                     NETWORK: {get_param: [ServiceNetMap, MemcachedNetwork]}
681   tls_key_modulus_md5:
682     description: MD5 checksum of the TLS Key Modulus
683     value: {get_attr: [NodeTLSData, key_modulus_md5]}
684   tls_cert_modulus_md5:
685     description: MD5 checksum of the TLS Certificate Modulus
686     value: {get_attr: [NodeTLSData, cert_modulus_md5]}