Drop extraconfig for neutron-nuage.yaml
[apex-tripleo-heat-templates.git] / puppet / controller.yaml
1 heat_template_version: 2016-04-08
2
3 description: >
4   OpenStack controller node configured by Puppet.
5
6 parameters:
7   AdminPassword:
8     description: The password for the keystone admin account, used for monitoring, querying neutron etc.
9     type: string
10     hidden: true
11   AodhApiVirtualIP:
12     type: string
13     default: ''
14   AodhPassword:
15     description: The password for the aodh services.
16     type: string
17     hidden: true
18   #TODO(composable Redis): Remove the Redis password param
19   #As is used by ceilometer
20   CeilometerApiVirtualIP:
21     type: string
22     default: ''
23   CeilometerBackend:
24     default: 'mongodb'
25     description: The ceilometer backend type.
26     type: string
27   CeilometerMeteringSecret:
28     description: Secret shared by the ceilometer services.
29     type: string
30     hidden: true
31   CeilometerPassword:
32     description: The password for the ceilometer service  and db account.
33     type: string
34     hidden: true
35   CeilometerStoreEvents:
36     default: false
37     description: Whether to store events in ceilometer.
38     type: boolean
39   CeilometerMeterDispatcher:
40     default: 'database'
41     description: Dispatcher to process meter data
42     type: string
43     constraints:
44     - allowed_values: ['gnocchi', 'database']
45   CinderApiVirtualIP:
46     type: string
47     default: ''
48   CeilometerWorkers:
49     default: 0
50     description: Number of workers for Ceilometer service.
51     type: number
52   controllerExtraConfig:
53     default: {}
54     description: |
55       Deprecated. Use ControllerExtraConfig via parameter_defaults instead.
56     type: json
57   ControllerExtraConfig:
58     default: {}
59     description: |
60       Controller specific hiera configuration data to inject into the cluster.
61     type: json
62   ControllerIPs:
63     default: {}
64     description: >
65       A network mapped list of IPs to assign to Controllers in the following form:
66       {
67         "internal_api": ["a.b.c.d", "e.f.g.h"],
68         ...
69       }
70     type: json
71   ControlVirtualInterface:
72     default: 'br-ex'
73     description: Interface where virtual ip will be assigned.
74     type: string
75   CorosyncIPv6:
76     default: false
77     description: Enable IPv6 in Corosync
78     type: boolean
79   Debug:
80     default: ''
81     description: Set to True to enable debugging on all services.
82     type: string
83   EnableFencing:
84     default: false
85     description: Whether to enable fencing in Pacemaker or not.
86     type: boolean
87   EnableGalera:
88     default: true
89     description: Whether to use Galera instead of regular MariaDB.
90     type: boolean
91   EnableLoadBalancer:
92     default: true
93     description: Whether to deploy a LoadBalancer on the Controller
94     type: boolean
95   EnableCephStorage:
96     default: false
97     description: Whether to deploy Ceph Storage (OSD) on the Controller
98     type: boolean
99   EnableSwiftStorage:
100     default: true
101     description: Whether to enable Swift Storage on the Controller
102     type: boolean
103   ExtraConfig:
104     default: {}
105     description: |
106       Additional hieradata to inject into the cluster, note that
107       ControllerExtraConfig takes precedence over ExtraConfig.
108     type: json
109   FencingConfig:
110     default: {}
111     description: |
112       Pacemaker fencing configuration. The JSON should have
113       the following structure:
114         {
115           "devices": [
116             {
117               "agent": "AGENT_NAME",
118               "host_mac": "HOST_MAC_ADDRESS",
119               "params": {"PARAM_NAME": "PARAM_VALUE"}
120             }
121           ]
122         }
123       For instance:
124         {
125           "devices": [
126             {
127               "agent": "fence_xvm",
128               "host_mac": "52:54:00:aa:bb:cc",
129               "params": {
130                 "multicast_address": "225.0.0.12",
131                 "port": "baremetal_0",
132                 "manage_fw": true,
133                 "manage_key_file": true,
134                 "key_file": "/etc/fence_xvm.key",
135                 "key_file_password": "abcdef"
136               }
137             }
138           ]
139         }
140     type: json
141   Flavor:
142     description: Flavor for control nodes to request when deploying.
143     type: string
144     constraints:
145       - custom_constraint: nova.flavor
146   GnocchiBackend:
147     default: file
148     description: The short name of the Gnocchi backend to use. Should be one
149       of swift, rbd, or file
150     type: string
151     constraints:
152     - allowed_values: ['swift', 'file', 'rbd']
153   GnocchiIndexerBackend:
154     default: 'mysql'
155     description: The short name of the Gnocchi indexer backend to use.
156     type: string
157   GnocchiApiVirtualIP:
158     type: string
159     default: ''
160   GnocchiPassword:
161     description: The password for the gnocchi service and db account.
162     type: string
163     hidden: true
164   HAProxyStatsPassword:
165     description: Password for HAProxy stats endpoint
166     type: string
167   HAProxyStatsUser:
168     description: User for HAProxy stats endpoint
169     default: admin
170     type: string
171   HAProxySyslogAddress:
172     default: /dev/log
173     description: Syslog address where HAproxy will send its log
174     type: string
175   HeatAuthEncryptionKey:
176     description: Auth encryption key for heat-engine
177     type: string
178     hidden: true
179   HorizonAllowedHosts:
180     default: '*'
181     description: A list of IP/Hostname allowed to connect to horizon
182     type: comma_delimited_list
183   HorizonSecret:
184     description: Secret key for Django
185     type: string
186     hidden: true
187   Image:
188     type: string
189     default: overcloud-control
190     constraints:
191       - custom_constraint: glance.image
192   ImageUpdatePolicy:
193     default: 'REBUILD_PRESERVE_EPHEMERAL'
194     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
195     type: string
196   InstanceNameTemplate:
197     default: 'instance-%08x'
198     description: Template string to be used to generate instance names
199     type: string
200   KeyName:
201     default: default
202     description: Name of an existing Nova key pair to enable SSH access to the instances
203     type: string
204     constraints:
205       - custom_constraint: nova.keypair
206   KeystoneRegion:
207     type: string
208     default: 'regionOne'
209     description: Keystone region for endpoint
210   ManageFirewall:
211     default: false
212     description: Whether to manage IPtables rules.
213     type: boolean
214   MemcachedIPv6:
215     default: false
216     description: Enable IPv6 features in Memcached.
217     type: boolean
218   PurgeFirewallRules:
219     default: false
220     description: Whether IPtables rules should be purged before setting up the new ones.
221     type: boolean
222   SaharaApiVirtualIP:
223     type: string
224     default: ''
225   MysqlClusterUniquePart:
226     description: A unique identifier of the MySQL cluster the controller is in.
227     type: string
228     default: 'unset'  # Has to be here because of the ignored empty value bug
229     # Drop the validation: https://bugs.launchpad.net/tripleo/+bug/1405446
230     # constraints:
231     # - length: {min: 4, max: 10}
232   MysqlInnodbBufferPoolSize:
233     description: >
234         Specifies the size of the buffer pool in megabytes. Setting to
235         zero should be interpreted as "no value" and will defer to the
236         lower level default.
237     type: number
238     default: 0
239   MysqlMaxConnections:
240     description: Configures MySQL max_connections config setting
241     type: number
242     default: 4096
243   MysqlClustercheckPassword:
244     type: string
245     hidden: true
246   MysqlRootPassword:
247     type: string
248     hidden: true
249     default: ''  # Has to be here because of the ignored empty value bug
250   NeutronMetadataProxySharedSecret:
251     description: Shared secret to prevent spoofing
252     type: string
253     hidden: true
254   NeutronPassword:
255     description: The password for the neutron service and db account, used by neutron agents.
256     type: string
257     hidden: true
258   NeutronPublicInterface:
259     default: nic1
260     description: What interface to bridge onto br-ex for network nodes.
261     type: string
262   NeutronTenantMtu:
263     description: >
264       The default MTU for tenant networks. For VXLAN/GRE tunneling, this should
265       be at least 50 bytes smaller than the MTU on the physical network. This
266       value will be used to set the MTU on the virtual Ethernet device.
267       This number is related to the value of NeutronDnsmasqOptions, since that
268       will determine the MTU that is assigned to the VM host through DHCP.
269     default: 1400
270     type: number
271   NovaApiVirtualIP:
272     type: string
273     default: ''
274   NovaEnableDBPurge:
275     default: true
276     description: |
277         Whether to create cron job for purging soft deleted rows in Nova database.
278     type: boolean
279   NovaIPv6:
280     default: false
281     description: Enable IPv6 features in Nova
282     type: boolean
283   NovaPassword:
284     description: The password for the nova service and db account, used by nova-api.
285     type: string
286     hidden: true
287   NtpServer:
288     default: ''
289     description: Comma-separated list of ntp servers
290     type: comma_delimited_list
291   PcsdPassword:
292     type: string
293     description: The password for the 'pcsd' user.
294     hidden: true
295   PublicVirtualInterface:
296     default: 'br-ex'
297     description: >
298         Specifies the interface where the public-facing virtual ip will be assigned.
299         This should be int_public when a VLAN is being used.
300     type: string
301   PublicVirtualIP:
302     type: string
303     default: ''  # Has to be here because of the ignored empty value bug
304   RabbitCookie:
305     type: string
306     default: ''  # Has to be here because of the ignored empty value bug
307     hidden: true
308   RabbitPassword:
309     description: The password for RabbitMQ
310     type: string
311     hidden: true
312   RabbitUserName:
313     default: guest
314     description: The username for RabbitMQ
315     type: string
316   RabbitClientUseSSL:
317     default: false
318     description: >
319         Rabbit client subscriber parameter to specify
320         an SSL connection to the RabbitMQ host.
321     type: string
322   RabbitClientPort:
323     default: 5672
324     description: Set rabbit subscriber port, change this if using SSL
325     type: number
326   RedisPassword:
327     description: The password for Redis
328     type: string
329     hidden: true
330   RedisVirtualIP:
331     type: string
332     default: ''  # Has to be here because of the ignored empty value bug
333   RedisVirtualIPUri:
334     type: string
335     default: ''  # Has to be here because of the ignored empty value bug
336     description: An IP address which is wrapped in brackets in case of IPv6
337   SnmpdReadonlyUserName:
338     default: ro_snmp_user
339     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
340     type: string
341   SnmpdReadonlyUserPassword:
342     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
343     type: string
344     hidden: true
345   SwiftHashSuffix:
346     description: A random string to be used as a salt when hashing to determine mappings
347       in the ring.
348     hidden: true
349     type: string
350   SwiftMountCheck:
351     default: 'false'
352     description: Value of mount_check in Swift account/container/object -server.conf
353     type: boolean
354   SwiftMinPartHours:
355     type: number
356     default: 1
357     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
358   SwiftPartPower:
359     default: 10
360     description: Partition Power to use when building Swift rings
361     type: number
362   SwiftRingBuild:
363     default: true
364     description: Whether to manage Swift rings or not
365     type: boolean
366   SwiftProxyVirtualIP:
367     type: string
368     default: ''
369   SwiftReplicas:
370     type: number
371     default: 3
372     description: How many replicas to use in the swift rings.
373   TimeZone:
374     default: 'UTC'
375     description: The timezone to be set on controller nodes.
376     type: string
377   UpgradeLevelNovaCompute:
378     type: string
379     description: Nova Compute upgrade level
380     default: ''
381   VirtualIP: # DEPRECATED: use per service settings instead
382     type: string
383     default: ''  # Has to be here because of the ignored empty value bug
384   HeatApiVirtualIP:
385     type: string
386     default: ''
387   HeatApiVirtualIPUri:
388     type: string
389     default: ''
390   MysqlVirtualIP:
391     type: string
392     default: ''
393   NeutronApiVirtualIP:
394     type: string
395     default: ''
396   EnablePackageInstall:
397     default: 'false'
398     description: Set to true to enable package installation via Puppet
399     type: boolean
400   ServiceNetMap:
401     default: {}
402     description: Mapping of service_name -> network name. Typically set
403                  via parameter_defaults in the resource registry.
404     type: json
405   EndpointMap:
406     default: {}
407     description: Mapping of service endpoint -> protocol. Typically set
408                  via parameter_defaults in the resource registry.
409     type: json
410   UpdateIdentifier:
411     default: ''
412     type: string
413     description: >
414       Setting to a previously unused value during stack-update will trigger
415       package update on all nodes
416   Hostname:
417     type: string
418     default: '' # Defaults to Heat created hostname
419   HostnameMap:
420     type: json
421     default: {}
422     description: Optional mapping to override hostnames
423   NetworkDeploymentActions:
424     type: comma_delimited_list
425     description: >
426       Heat action when to apply network configuration changes
427     default: ['CREATE']
428   NodeIndex:
429     type: number
430     default: 0
431   SoftwareConfigTransport:
432     default: POLL_SERVER_CFN
433     description: |
434       How the server should receive the metadata required for software configuration.
435     type: string
436     constraints:
437     - allowed_values: [POLL_SERVER_CFN, POLL_SERVER_HEAT, POLL_TEMP_URL, ZAQAR_MESSAGE]
438   CloudDomain:
439     default: ''
440     type: string
441     description: >
442       The DNS domain used for the hosts. This should match the dhcp_domain
443       configured in the Undercloud neutron. Defaults to localdomain.
444   ServerMetadata:
445     default: {}
446     description: >
447       Extra properties or metadata passed to Nova for the created nodes in
448       the overcloud. It's accessible via the Nova metadata API.
449     type: json
450   SchedulerHints:
451     type: json
452     description: Optional scheduler hints to pass to nova
453     default: {}
454   ServiceConfigSettings:
455     type: json
456     default: {}
457
458 parameter_groups:
459 - label: deprecated
460   description: Do not use deprecated params, they will be removed.
461   parameters:
462   - controllerExtraConfig
463
464 resources:
465
466   Controller:
467     type: OS::Nova::Server
468     properties:
469       image: {get_param: Image}
470       image_update_policy: {get_param: ImageUpdatePolicy}
471       flavor: {get_param: Flavor}
472       key_name: {get_param: KeyName}
473       networks:
474         - network: ctlplane
475       user_data_format: SOFTWARE_CONFIG
476       user_data: {get_resource: UserData}
477       name:
478         str_replace:
479             template: {get_param: Hostname}
480             params: {get_param: HostnameMap}
481       software_config_transport: {get_param: SoftwareConfigTransport}
482       metadata: {get_param: ServerMetadata}
483       scheduler_hints: {get_param: SchedulerHints}
484
485   # Combine the NodeAdminUserData and NodeUserData mime archives
486   UserData:
487     type: OS::Heat::MultipartMime
488     properties:
489       parts:
490       - config: {get_resource: NodeAdminUserData}
491         type: multipart
492       - config: {get_resource: NodeUserData}
493         type: multipart
494
495   # Creates the "heat-admin" user if configured via the environment
496   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
497   NodeAdminUserData:
498     type: OS::TripleO::NodeAdminUserData
499
500   # For optional operator additional userdata
501   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
502   NodeUserData:
503     type: OS::TripleO::NodeUserData
504
505   ExternalPort:
506     type: OS::TripleO::Controller::Ports::ExternalPort
507     properties:
508       IPPool: {get_param: ControllerIPs}
509       NodeIndex: {get_param: NodeIndex}
510       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
511
512   InternalApiPort:
513     type: OS::TripleO::Controller::Ports::InternalApiPort
514     properties:
515       IPPool: {get_param: ControllerIPs}
516       NodeIndex: {get_param: NodeIndex}
517       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
518
519   StoragePort:
520     type: OS::TripleO::Controller::Ports::StoragePort
521     properties:
522       IPPool: {get_param: ControllerIPs}
523       NodeIndex: {get_param: NodeIndex}
524       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
525
526   StorageMgmtPort:
527     type: OS::TripleO::Controller::Ports::StorageMgmtPort
528     properties:
529       IPPool: {get_param: ControllerIPs}
530       NodeIndex: {get_param: NodeIndex}
531       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
532
533   TenantPort:
534     type: OS::TripleO::Controller::Ports::TenantPort
535     properties:
536       IPPool: {get_param: ControllerIPs}
537       NodeIndex: {get_param: NodeIndex}
538       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
539
540   ManagementPort:
541     type: OS::TripleO::Controller::Ports::ManagementPort
542     properties:
543       IPPool: {get_param: ControllerIPs}
544       NodeIndex: {get_param: NodeIndex}
545       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
546
547   NetIpMap:
548     type: OS::TripleO::Network::Ports::NetIpMap
549     properties:
550       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
551       ExternalIp: {get_attr: [ExternalPort, ip_address]}
552       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
553       ExternalIpUri: {get_attr: [ExternalPort, ip_address_uri]}
554       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
555       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
556       InternalApiIpUri: {get_attr: [InternalApiPort, ip_address_uri]}
557       StorageIp: {get_attr: [StoragePort, ip_address]}
558       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
559       StorageIpUri: {get_attr: [StoragePort, ip_address_uri]}
560       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
561       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
562       StorageMgmtIpUri: {get_attr: [StorageMgmtPort, ip_address_uri]}
563       TenantIp: {get_attr: [TenantPort, ip_address]}
564       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
565       TenantIpUri: {get_attr: [TenantPort, ip_address_uri]}
566       ManagementIp: {get_attr: [ManagementPort, ip_address]}
567       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
568       ManagementIpUri: {get_attr: [ManagementPort, ip_address_uri]}
569
570   NetworkConfig:
571     type: OS::TripleO::Controller::Net::SoftwareConfig
572     properties:
573       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
574       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
575       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
576       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
577       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
578       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
579       ManagementIpSubnet: {get_attr: [ManagementPort, ip_subnet]}
580
581   NetworkDeployment:
582     type: OS::TripleO::SoftwareDeployment
583     properties:
584       name: NetworkDeployment
585       config: {get_resource: NetworkConfig}
586       server: {get_resource: Controller}
587       actions: {get_param: NetworkDeploymentActions}
588       input_values:
589         bridge_name: br-ex
590         interface_name: {get_param: NeutronPublicInterface}
591
592   # Resource for site-specific injection of root certificate
593   NodeTLSCAData:
594     depends_on: NetworkDeployment
595     type: OS::TripleO::NodeTLSCAData
596     properties:
597       server: {get_resource: Controller}
598
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: Controller}
605       NodeIndex: {get_param: NodeIndex}
606
607
608   ControllerDeployment:
609     type: OS::TripleO::SoftwareDeployment
610     depends_on: NetworkDeployment
611     properties:
612       name: ControllerDeployment
613       config: {get_resource: ControllerConfig}
614       server: {get_resource: Controller}
615       input_values:
616         bootstack_nodeid: {get_attr: [Controller, name]}
617         ceilometer_workers: {get_param: CeilometerWorkers}
618         haproxy_log_address: {get_param: HAProxySyslogAddress}
619         haproxy_stats_password: {get_param: HAProxyStatsPassword}
620         haproxy_stats_user: {get_param: HAProxyStatsUser}
621         heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
622         horizon_allowed_hosts: {get_param: HorizonAllowedHosts}
623         horizon_secret: {get_param: HorizonSecret}
624         admin_password: {get_param: AdminPassword}
625         debug: {get_param: Debug}
626         cinder_public_url: {get_param: [EndpointMap, CinderPublic, uri]}
627         cinder_internal_url: {get_param: [EndpointMap, CinderInternal, uri]}
628         cinder_admin_url: {get_param: [EndpointMap, CinderAdmin, uri]}
629         cinder_public_url_v2: {get_param: [EndpointMap, CinderV2Public, uri]}
630         cinder_internal_url_v2: {get_param: [EndpointMap, CinderV2Internal, uri]}
631         cinder_admin_url_v2: {get_param: [EndpointMap, CinderV2Admin, uri]}
632         keystone_identity_uri: { get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix] }
633         keystone_auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri] }
634         keystone_ec2_uri: { get_param: [EndpointMap, KeystoneEC2, uri] }
635         enable_fencing: {get_param: EnableFencing}
636         enable_galera: {get_param: EnableGalera}
637         enable_load_balancer: {get_param: EnableLoadBalancer}
638         enable_ceph_storage: {get_param: EnableCephStorage}
639         enable_swift_storage: {get_param: EnableSwiftStorage}
640         manage_firewall: {get_param: ManageFirewall}
641         purge_firewall_rules: {get_param: PurgeFirewallRules}
642         mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
643         mysql_max_connections: {get_param: MysqlMaxConnections}
644         mysql_root_password: {get_param: MysqlRootPassword}
645         mysql_clustercheck_password: {get_param: MysqlClustercheckPassword}
646         mysql_cluster_name:
647           str_replace:
648             template: tripleo-CLUSTER
649             params:
650               CLUSTER: {get_param: MysqlClusterUniquePart}
651         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
652         neutron_password: {get_param: NeutronPassword}
653         neutron_tenant_mtu: {get_param: NeutronTenantMtu}
654         neutron_internal_url: { get_param: [ EndpointMap, NeutronInternal, uri ] }
655         neutron_public_url: { get_param: [ EndpointMap, NeutronPublic, uri ] }
656         neutron_admin_url: { get_param: [ EndpointMap, NeutronAdmin, uri ] }
657         neutron_auth_url: { get_param: [ EndpointMap, KeystoneV3Admin, uri ] }
658         nova_internal_url: { get_param: [ EndpointMap, NovaInternal, uri ] }
659         ceilometer_backend: {get_param: CeilometerBackend}
660         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
661         ceilometer_password: {get_param: CeilometerPassword}
662         ceilometer_store_events: {get_param: CeilometerStoreEvents}
663         aodh_password: {get_param: AodhPassword}
664         aodh_internal_url: { get_param: [ EndpointMap, AodhInternal, uri ] }
665         aodh_public_url: { get_param: [ EndpointMap, AodhPublic, uri ] }
666         aodh_admin_url: { get_param: [ EndpointMap, AodhAdmin, uri ] }
667         ceilometer_meter_dispatcher: {get_param: CeilometerMeterDispatcher}
668         gnocchi_password: {get_param: GnocchiPassword}
669         gnocchi_backend: {get_param: GnocchiBackend}
670         gnocchi_indexer_backend: {get_param: GnocchiIndexerBackend}
671         ceilometer_coordination_url:
672           list_join:
673             - ''
674             - - 'redis://:'
675               - {get_param: RedisPassword}
676               - '@'
677               - {get_param: RedisVirtualIPUri}
678               - ':6379/'
679         ceilometer_dsn:
680           list_join:
681             - ''
682             - - {get_param: [EndpointMap, MysqlInternal, protocol]}
683               - '://ceilometer:'
684               - {get_param: CeilometerPassword}
685               - '@'
686               - {get_param: [EndpointMap, MysqlInternal, host]}
687               - '/ceilometer'
688         gnocchi_dsn:
689           list_join:
690             - ''
691             - - {get_param: [EndpointMap, MysqlInternal, protocol]}
692               - '://gnocchi:'
693               - {get_param: GnocchiPassword}
694               - '@'
695               - {get_param: [EndpointMap, MysqlInternal, host]}
696               - '/gnocchi'
697         gnocchi_internal_url: {get_param: [EndpointMap, GnocchiInternal, uri]}
698         gnocchi_public_url: { get_param: [ EndpointMap, GnocchiPublic, uri ] }
699         gnocchi_admin_url: { get_param: [ EndpointMap, GnocchiAdmin, uri ] }
700         ceilometer_public_url: {get_param: [EndpointMap, CeilometerPublic, uri]}
701         ceilometer_internal_url: {get_param: [EndpointMap, CeilometerInternal, uri]}
702         ceilometer_admin_url: {get_param: [EndpointMap, CeilometerAdmin, uri]}
703         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
704         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
705         nova_enable_db_purge: {get_param: NovaEnableDBPurge}
706         nova_ipv6: {get_param: NovaIPv6}
707         corosync_ipv6: {get_param: CorosyncIPv6}
708         memcached_ipv6: {get_param: MemcachedIPv6}
709         nova_password: {get_param: NovaPassword}
710         nova_dsn:
711           list_join:
712             - ''
713             - - {get_param: [EndpointMap, MysqlInternal, protocol]}
714               - '://nova:'
715               - {get_param: NovaPassword}
716               - '@'
717               - {get_param: [EndpointMap, MysqlInternal, host]}
718               - '/nova'
719         nova_api_dsn:
720           list_join:
721             - ''
722             - - {get_param: [EndpointMap, MysqlInternal, protocol]}
723               - '://nova_api:'
724               - {get_param: NovaPassword}
725               - '@'
726               - {get_param: [EndpointMap, MysqlInternal, host]}
727               - '/nova_api'
728         upgrade_level_nova_compute: {get_param: UpgradeLevelNovaCompute}
729         instance_name_template: {get_param: InstanceNameTemplate}
730         nova_public_url: {get_param: [EndpointMap, NovaPublic, uri]}
731         nova_internal_url: {get_param: [EndpointMap, NovaInternal, uri]}
732         nova_admin_url: {get_param: [EndpointMap, NovaAdmin, uri]}
733         fencing_config: {get_param: FencingConfig}
734         pcsd_password: {get_param: PcsdPassword}
735         rabbit_username: {get_param: RabbitUserName}
736         rabbit_password: {get_param: RabbitPassword}
737         rabbit_cookie: {get_param: RabbitCookie}
738         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
739         rabbit_client_port: {get_param: RabbitClientPort}
740         ntp_servers: {get_param: NtpServer}
741         timezone: {get_param: TimeZone}
742         control_virtual_interface: {get_param: ControlVirtualInterface}
743         public_virtual_interface: {get_param: PublicVirtualInterface}
744         swift_hash_suffix: {get_param: SwiftHashSuffix}
745         swift_part_power: {get_param: SwiftPartPower}
746         swift_ring_build: {get_param: SwiftRingBuild}
747         swift_replicas: {get_param: SwiftReplicas}
748         swift_min_part_hours: {get_param: SwiftMinPartHours}
749         swift_mount_check: {get_param: SwiftMountCheck}
750         enable_package_install: {get_param: EnablePackageInstall}
751         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
752         swift_proxy_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
753         swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
754         cinder_iscsi_network:
755           str_replace:
756             template: "'IP'"
757             params:
758               IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, CinderIscsiNetwork]}]}
759         cinder_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
760         glance_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
761         glance_registry_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
762         glance_api_servers: { get_param: [EndpointMap, GlanceInternal, uri]}
763         heat_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
764         keystone_public_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
765         keystone_admin_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
766         keystone_region: {get_param: KeystoneRegion}
767         mongo_db_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
768         neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
769         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
770         ceilometer_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
771         aodh_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
772         gnocchi_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
773         nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
774         nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
775         horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
776         horizon_subnet:
777           str_replace:
778             template: "['SUBNET']"
779             params:
780               SUBNET: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
781         rabbitmq_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
782         redis_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
783         redis_vip: {get_param: RedisVirtualIP}
784         sahara_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
785         memcached_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
786         mysql_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
787         mysql_virtual_ip: {get_param: MysqlVirtualIP}
788         ceph_cluster_network: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephClusterNetwork]}]}
789         ceph_public_network: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
790         ceph_public_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
791
792   # Map heat metadata into hiera datafiles
793   ControllerConfig:
794     type: OS::Heat::StructuredConfig
795     properties:
796       group: os-apply-config
797       config:
798         hiera:
799           hierarchy:
800             - '"%{::uuid}"'
801             - heat_config_%{::deploy_config_name}
802             - controller_extraconfig
803             - extraconfig
804             - service_configs
805             - controller
806             - database
807             - object
808             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
809             - ceph_cluster # provided by CephClusterConfig
810             - ceph
811             - bootstrap_node # provided by BootstrapNodeConfig
812             - all_nodes # provided by allNodesConfig
813             - vip_data # provided by vip-config
814             - '"%{::osfamily}"'
815             - common
816             - network
817             - cinder_dellsc_data # Optionally provided by ControllerExtraConfigPre
818             - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
819             - cinder_eqlx_data # Optionally provided by ControllerExtraConfigPre
820             - neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
821             - neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
822             - cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
823             - midonet_data #Optionally provided by AllNodesExtraConfig
824             - neutron_opencontrail_data # Optionally provided by ControllerExtraConfigPre
825           merge_behavior: deeper
826           datafiles:
827             service_configs:
828               mapped_data: {get_param: ServiceConfigSettings}
829             controller_extraconfig:
830               mapped_data:
831                 map_merge:
832                   - {get_param: controllerExtraConfig}
833                   - {get_param: ControllerExtraConfig}
834             extraconfig:
835               mapped_data: {get_param: ExtraConfig}
836             common:
837               raw_data: {get_file: hieradata/common.yaml}
838             network:
839               mapped_data:
840                 net_ip_map: {get_attr: [NetIpMap, net_ip_map]}
841                 net_ip_subnet_map: {get_attr: [NetIpMap, net_ip_subnet_map]}
842                 net_ip_uri_map: {get_attr: [NetIpMap, net_ip_uri_map]}
843             ceph:
844               raw_data: {get_file: hieradata/ceph.yaml}
845               mapped_data:
846                 ceph::profile::params::cluster_network: {get_input: ceph_cluster_network}
847                 ceph::profile::params::public_network: {get_input: ceph_public_network}
848                 ceph::profile::params::public_addr: {get_input: ceph_public_ip}
849             database:
850               raw_data: {get_file: hieradata/database.yaml}
851             object:
852               raw_data: {get_file: hieradata/object.yaml}
853             controller:
854               raw_data: {get_file: hieradata/controller.yaml}
855               mapped_data: # data supplied directly to this deployment configuration, etc
856                 bootstack_nodeid: {get_input: bootstack_nodeid}
857
858                 # Pacemaker
859                 enable_fencing: {get_input: enable_fencing}
860                 enable_load_balancer: {get_input: enable_load_balancer}
861                 hacluster_pwd: {get_input: pcsd_password}
862                 corosync_ipv6: {get_input: corosync_ipv6}
863                 tripleo::fencing::config: {get_input: fencing_config}
864
865                 # Swift
866                 # FIXME: need to move proxy_local_net_ip into swift-proxy.yaml
867                 swift::proxy::proxy_local_net_ip: {get_input: swift_proxy_network}
868                 swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
869                 swift::swift_hash_path_suffix: {get_input: swift_hash_suffix}
870                 tripleo::ringbuilder::build_ring: { get_input: swift_ring_build }
871                 tripleo::ringbuilder::part_power: {get_input: swift_part_power}
872                 tripleo::ringbuilder::replicas: {get_input: swift_replicas}
873                 tripleo::ringbuilder::min_part_hours: {get_input: swift_min_part_hours}
874                 swift_mount_check: {get_input: swift_mount_check}
875
876                 # Cinder
877                 tripleo::profile::base::cinder::volume::iscsi::cinder_iscsi_address: {get_input: cinder_iscsi_network}
878                 cinder::api::bind_host: {get_input: cinder_api_network}
879                 cinder::keystone::auth::public_url: {get_input: cinder_public_url }
880                 cinder::keystone::auth::internal_url: {get_input: cinder_internal_url }
881                 cinder::keystone::auth::admin_url: {get_input: cinder_admin_url }
882                 cinder::keystone::auth::public_url_v2: {get_input: cinder_public_url_v2 }
883                 cinder::keystone::auth::internal_url_v2: {get_input: cinder_internal_url_v2 }
884                 cinder::keystone::auth::admin_url_v2: {get_input: cinder_admin_url_v2 }
885                 cinder::keystone::auth::password: {get_input: cinder_password }
886                 cinder::keystone::auth::region: {get_input: keystone_region}
887
888                 # Glance
889                 glance::api::bind_host: {get_input: glance_api_network}
890                 glance::registry::bind_host: {get_input: glance_registry_network}
891                 glance::keystone::auth::region: {get_input: keystone_region}
892
893                 # Heat
894                 heat::api::bind_host: {get_input: heat_api_network}
895                 heat::api_cloudwatch::bind_host: {get_input: heat_api_network}
896                 heat::api_cfn::bind_host: {get_input: heat_api_network}
897                 heat::engine::auth_encryption_key: {get_input: heat_auth_encryption_key}
898
899                 # Keystone
900                 keystone::admin_bind_host: {get_input: keystone_admin_api_network}
901                 keystone::public_bind_host: {get_input: keystone_public_api_network}
902                 keystone::wsgi::apache::bind_host: {get_input: keystone_public_api_network}
903                 keystone::wsgi::apache::admin_bind_host: {get_input: keystone_admin_api_network}
904
905                 # MongoDB
906                 mongodb::server::bind_ip: {get_input: mongo_db_network}
907
908                 # MySQL
909                 admin_password: {get_input: admin_password}
910                 enable_galera: {get_input: enable_galera}
911                 enable_ceph_storage: {get_input: enable_ceph_storage}
912                 enable_swift_storage: {get_input: enable_swift_storage}
913                 mysql_innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
914                 mysql_max_connections: {get_input: mysql_max_connections}
915                 mysql::server::root_password: {get_input: mysql_root_password}
916                 mysql_clustercheck_password: {get_input: mysql_clustercheck_password}
917                 mysql_cluster_name: {get_input: mysql_cluster_name}
918                 mysql_bind_host: {get_input: mysql_network}
919                 mysql_virtual_ip: {get_input: mysql_virtual_ip}
920
921                 # Neutron
922                 neutron::bind_host: {get_input: neutron_api_network}
923                 neutron::network_device_mtu: {get_input: neutron_tenant_mtu}
924                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
925                 neutron::agents::metadata::metadata_ip: {get_input: neutron_api_network}
926                 neutron::keystone::auth::public_url: {get_input: neutron_public_url }
927                 neutron::keystone::auth::internal_url: {get_input: neutron_internal_url }
928                 neutron::keystone::auth::admin_url: {get_input: neutron_admin_url }
929                 neutron::keystone::auth::password: {get_input: neutron_password }
930                 neutron::keystone::auth::region: {get_input: keystone_region}
931
932                 # Ceilometer
933                 ceilometer_backend: {get_input: ceilometer_backend}
934                 ceilometer_mysql_conn_string: {get_input: ceilometer_dsn}
935                 ceilometer::telemetry_secret: {get_input: ceilometer_metering_secret}
936                 ceilometer::rabbit_userid: {get_input: rabbit_username}
937                 ceilometer::rabbit_password: {get_input: rabbit_password}
938                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
939                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
940                 ceilometer::debug: {get_input: debug}
941                 ceilometer::api::host: {get_input: ceilometer_api_network}
942                 ceilometer::api::keystone_password: {get_input: ceilometer_password}
943                 ceilometer::api::auth_uri: {get_input: keystone_auth_uri}
944                 ceilometer::api::identity_uri: {get_input: keystone_identity_uri}
945                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
946                 ceilometer::agent::auth::auth_url: {get_input: keystone_auth_uri}
947                 ceilometer::agent::central::coordination_url: {get_input: ceilometer_coordination_url}
948                 ceilometer::agent::notification::store_events: {get_input: ceilometer_store_events}
949                 ceilometer::db::mysql::password: {get_input: ceilometer_password}
950                 ceilometer::collector::meter_dispatcher: {get_input: ceilometer_meter_dispatcher}
951                 ceilometer::dispatcher::gnocchi::url: {get_input: gnocchi_internal_url }
952                 ceilometer::dispatcher::gnocchi::filter_project: 'service'
953                 ceilometer::dispatcher::gnocchi::archive_policy: 'low'
954                 ceilometer::dispatcher::gnocchi::resources_definition_file: 'gnocchi_resources.yaml'
955                 ceilometer::keystone::auth::public_url: {get_input: ceilometer_public_url }
956                 ceilometer::keystone::auth::internal_url: {get_input: ceilometer_internal_url }
957                 ceilometer::keystone::auth::admin_url: {get_input: ceilometer_admin_url }
958                 ceilometer::keystone::auth::password: {get_input: ceilometer_password }
959                 ceilometer::keystone::auth::region: {get_input: keystone_region}
960                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
961                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
962
963                 # Aodh
964                 aodh::rabbit_userid: {get_input: rabbit_username}
965                 aodh::rabbit_password: {get_input: rabbit_password}
966                 aodh::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
967                 aodh::rabbit_port: {get_input: rabbit_client_port}
968                 aodh::debug: {get_input: debug}
969                 aodh::wsgi::apache::ssl: false
970                 aodh::wsgi::apache::bind_host: {get_input: aodh_api_network}
971                 aodh::api::service_name: 'httpd'
972                 aodh::api::host: {get_input: aodh_api_network}
973                 aodh::api::keystone_password: {get_input: aodh_password}
974                 aodh::api::keystone_auth_uri: {get_input: keystone_auth_uri}
975                 aodh::api::keystone_identity_uri: {get_input: keystone_identity_uri}
976                 aodh::auth::auth_password: {get_input: aodh_password}
977                 aodh::db::mysql::password: {get_input: aodh_password}
978                 # for a migration path from ceilometer-alarm to aodh, we use the same database & coordination
979                 aodh::evaluator::coordination_url: {get_input: ceilometer_coordination_url}
980                 aodh::keystone::auth::public_url: {get_input: aodh_public_url }
981                 aodh::keystone::auth::internal_url: {get_input: aodh_internal_url }
982                 aodh::keystone::auth::admin_url: {get_input: aodh_admin_url }
983                 aodh::keystone::auth::password: {get_input: aodh_password }
984                 aodh::keystone::auth::region: {get_input: keystone_region}
985
986                 # Gnocchi
987                 gnocchi_backend: {get_input: gnocchi_backend}
988                 gnocchi_indexer_backend: {get_input: gnocchi_indexer_backend}
989                 gnocchi_mysql_conn_string: {get_input: gnocchi_dsn}
990                 gnocchi::debug: {get_input: debug}
991                 gnocchi::wsgi::apache::ssl: false
992                 gnocchi::wsgi::apache::bind_host: {get_input: gnocchi_api_network}
993                 gnocchi::api::service_name: 'httpd'
994                 gnocchi::api::host: {get_input: gnocchi_api_network}
995                 gnocchi::api::keystone_password: {get_input: gnocchi_password}
996                 gnocchi::api::keystone_auth_uri: {get_input: keystone_auth_uri}
997                 gnocchi::api::keystone_identity_uri: {get_input: keystone_identity_uri}
998                 gnocchi::db::mysql::password: {get_input: gnocchi_password}
999                 gnocchi::storage::swift::swift_authurl: {get_input: keystone_auth_uri}
1000                 gnocchi::storage::swift::swift_key: {get_input: gnocchi_password}
1001                 gnocchi::keystone::auth::public_url: {get_input: gnocchi_public_url }
1002                 gnocchi::keystone::auth::internal_url: {get_input: gnocchi_internal_url }
1003                 gnocchi::keystone::auth::admin_url: {get_input: gnocchi_admin_url }
1004                 gnocchi::keystone::auth::password: {get_input: gnocchi_password }
1005                 gnocchi::keystone::auth::region: {get_input: keystone_region}
1006
1007                 # Nova
1008                 nova::upgrade_level_compute: {get_input: upgrade_level_nova_compute}
1009                 nova::use_ipv6: {get_input: nova_ipv6}
1010                 nova::api::auth_uri: {get_input: keystone_auth_uri}
1011                 nova::api::identity_uri: {get_input: keystone_identity_uri}
1012                 nova::api::api_bind_address: {get_input: nova_api_network}
1013                 nova::api::metadata_listen: {get_input: nova_metadata_network}
1014                 nova::api::admin_password: {get_input: nova_password}
1015                 nova::compute::network_device_mtu: {get_input: neutron_tenant_mtu}
1016                 nova::database_connection: {get_input: nova_dsn}
1017                 nova::api_database_connection: {get_input: nova_api_dsn}
1018                 nova::glance_api_servers: {get_input: glance_api_servers}
1019                 nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
1020                 nova::api::instance_name_template: {get_input: instance_name_template}
1021                 nova::network::neutron::neutron_password: {get_input: neutron_password}
1022                 nova::network::neutron::neutron_url: {get_input: neutron_internal_url}
1023                 nova::network::neutron::neutron_auth_url: {get_input: neutron_auth_url}
1024                 nova::vncproxy::host: {get_input: nova_api_network}
1025                 nova::db::mysql::password: {get_input: nova_password}
1026                 nova::db::mysql_api::password: {get_input: nova_password}
1027                 nova_enable_db_purge: {get_input: nova_enable_db_purge}
1028                 nova::keystone::auth::public_url: {get_input: nova_public_url}
1029                 nova::keystone::auth::internal_url: {get_input: nova_internal_url}
1030                 nova::keystone::auth::admin_url: {get_input: nova_admin_url}
1031                 nova::keystone::auth::password: {get_input: nova_password }
1032                 nova::keystone::auth::region: {get_input: keystone_region}
1033
1034                 # Horizon
1035                 apache::mod::remoteip::proxy_ips: {get_input: horizon_subnet}
1036                 apache::ip: {get_input: horizon_network}
1037                 horizon::allowed_hosts: {get_input: horizon_allowed_hosts}
1038                 horizon::django_debug: {get_input: debug}
1039                 horizon::secret_key: {get_input: horizon_secret}
1040                 horizon::bind_address: {get_input: horizon_network}
1041                 horizon::keystone_url: {get_input: keystone_auth_uri}
1042
1043                 # RabbitMQ
1044                 rabbitmq::node_ip_address: {get_input: rabbitmq_network}
1045                 rabbitmq::erlang_cookie: {get_input: rabbit_cookie}
1046                 # Redis
1047                 redis::bind: {get_input: redis_network}
1048                 redis_vip: {get_input: redis_vip}
1049                 # Firewall
1050                 tripleo::firewall::manage_firewall: {get_input: manage_firewall}
1051                 tripleo::firewall::purge_firewall_rules: {get_input: purge_firewall_rules}
1052                 # Misc
1053                 memcached_ipv6: {get_input: memcached_ipv6}
1054                 memcached::listen_ip: {get_input: memcached_network}
1055                 ntp::servers: {get_input: ntp_servers}
1056                 timezone::timezone: {get_input: timezone}
1057                 control_virtual_interface: {get_input: control_virtual_interface}
1058                 public_virtual_interface: {get_input: public_virtual_interface}
1059                 tripleo::keepalived::control_virtual_interface: {get_input: control_virtual_interface}
1060                 tripleo::keepalived::public_virtual_interface: {get_input: public_virtual_interface}
1061                 tripleo::haproxy::control_virtual_interface: {get_input: control_virtual_interface}
1062                 tripleo::haproxy::public_virtual_interface: {get_input: public_virtual_interface}
1063                 tripleo::haproxy::haproxy_log_address: {get_input: haproxy_log_address}
1064                 tripleo::haproxy::service_certificate: {get_attr: [NodeTLSData, deployed_ssl_certificate_path]}
1065                 tripleo::haproxy::haproxy_stats_user: {get_input: haproxy_stats_user}
1066                 tripleo::haproxy::haproxy_stats_password: {get_input: haproxy_stats_password}
1067                 tripleo::haproxy::redis_password: {get_input: redis_password}
1068                 tripleo::packages::enable_install: {get_input: enable_package_install}
1069                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
1070
1071   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
1072   ControllerExtraConfigPre:
1073     depends_on: ControllerDeployment
1074     type: OS::TripleO::ControllerExtraConfigPre
1075     properties:
1076         server: {get_resource: Controller}
1077
1078   # Hook for site-specific additional pre-deployment config,
1079   # applying to all nodes, e.g node registration/unregistration
1080   NodeExtraConfig:
1081     depends_on: [ControllerExtraConfigPre, NodeTLSData]
1082     type: OS::TripleO::NodeExtraConfig
1083     properties:
1084         server: {get_resource: Controller}
1085
1086   UpdateConfig:
1087     type: OS::TripleO::Tasks::PackageUpdate
1088
1089   UpdateDeployment:
1090     type: OS::Heat::SoftwareDeployment
1091     properties:
1092       name: UpdateDeployment
1093       config: {get_resource: UpdateConfig}
1094       server: {get_resource: Controller}
1095       input_values:
1096         update_identifier:
1097           get_param: UpdateIdentifier
1098
1099 outputs:
1100   ip_address:
1101     description: IP address of the server in the ctlplane network
1102     value: {get_attr: [Controller, networks, ctlplane, 0]}
1103   external_ip_address:
1104     description: IP address of the server in the external network
1105     value: {get_attr: [ExternalPort, ip_address]}
1106   internal_api_ip_address:
1107     description: IP address of the server in the internal_api network
1108     value: {get_attr: [InternalApiPort, ip_address]}
1109   storage_ip_address:
1110     description: IP address of the server in the storage network
1111     value: {get_attr: [StoragePort, ip_address]}
1112   storage_mgmt_ip_address:
1113     description: IP address of the server in the storage_mgmt network
1114     value: {get_attr: [StorageMgmtPort, ip_address]}
1115   tenant_ip_address:
1116     description: IP address of the server in the tenant network
1117     value: {get_attr: [TenantPort, ip_address]}
1118   management_ip_address:
1119     description: IP address of the server in the management network
1120     value: {get_attr: [ManagementPort, ip_address]}
1121   hostname:
1122     description: Hostname of the server
1123     value: {get_attr: [Controller, name]}
1124   hosts_entry:
1125     description: >
1126       Server's IP address and hostname in the /etc/hosts format
1127     value:
1128       str_replace:
1129         template: |
1130           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
1131           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
1132           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
1133           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
1134           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
1135           TENANTIP TENANTHOST.DOMAIN TENANTHOST
1136           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
1137         params:
1138           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ControllerHostnameResolveNetwork]}]}
1139           DOMAIN: {get_param: CloudDomain}
1140           PRIMARYHOST: {get_attr: [Controller, name]}
1141           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
1142           EXTERNALHOST:
1143             list_join:
1144             - '.'
1145             - - {get_attr: [Controller, name]}
1146               - external
1147           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
1148           INTERNAL_APIHOST:
1149             list_join:
1150             - '.'
1151             - - {get_attr: [Controller, name]}
1152               - internalapi
1153           STORAGEIP: {get_attr: [StoragePort, ip_address]}
1154           STORAGEHOST:
1155             list_join:
1156             - '.'
1157             - - {get_attr: [Controller, name]}
1158               - storage
1159           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
1160           STORAGE_MGMTHOST:
1161             list_join:
1162             - '.'
1163             - - {get_attr: [Controller, name]}
1164               - storagemgmt
1165           TENANTIP: {get_attr: [TenantPort, ip_address]}
1166           TENANTHOST:
1167             list_join:
1168             - '.'
1169             - - {get_attr: [Controller, name]}
1170               - tenant
1171           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
1172           MANAGEMENTHOST:
1173             list_join:
1174             - '.'
1175             - - {get_attr: [Controller, name]}
1176               - management
1177   nova_server_resource:
1178     description: Heat resource handle for the Nova compute server
1179     value:
1180       {get_resource: Controller}
1181   swift_device:
1182     description: Swift device formatted for swift-ring-builder
1183     value:
1184       str_replace:
1185         template: 'r1z1-IP:%PORT%/d1'
1186         params:
1187           IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
1188   swift_proxy_memcache:
1189     description: Swift proxy-memcache value
1190     value:
1191       str_replace:
1192         template: "IP:11211"
1193         params:
1194           IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1195   config_identifier:
1196     description: identifier which changes if the controller configuration may need re-applying
1197     value:
1198       list_join:
1199         - ','
1200         - - {get_attr: [ControllerDeployment, deploy_stdout]}
1201           - {get_attr: [NodeTLSCAData, deploy_stdout]}
1202           - {get_attr: [NodeTLSData, deploy_stdout]}
1203           - {get_attr: [ControllerExtraConfigPre, deploy_stdout]}
1204           - {get_param: UpdateIdentifier}
1205   tls_key_modulus_md5:
1206     description: MD5 checksum of the TLS Key Modulus
1207     value: {get_attr: [NodeTLSData, key_modulus_md5]}
1208   tls_cert_modulus_md5:
1209     description: MD5 checksum of the TLS Certificate Modulus
1210     value: {get_attr: [NodeTLSData, cert_modulus_md5]}