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