Merge "Remove nova::db classes, moved to puppet-tripleo"
[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         aodh_dsn:
698           list_join:
699             - ''
700             - - {get_param: [EndpointMap, MysqlInternal, protocol]}
701               - '://aodh:'
702               - {get_param: AodhPassword}
703               - '@'
704               - {get_param: [EndpointMap, MysqlInternal, host]}
705               - '/aodh'
706         gnocchi_internal_url: {get_param: [EndpointMap, GnocchiInternal, uri]}
707         gnocchi_public_url: { get_param: [ EndpointMap, GnocchiPublic, uri ] }
708         gnocchi_admin_url: { get_param: [ EndpointMap, GnocchiAdmin, uri ] }
709         ceilometer_public_url: {get_param: [EndpointMap, CeilometerPublic, uri]}
710         ceilometer_internal_url: {get_param: [EndpointMap, CeilometerInternal, uri]}
711         ceilometer_admin_url: {get_param: [EndpointMap, CeilometerAdmin, uri]}
712         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
713         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
714         nova_enable_db_purge: {get_param: NovaEnableDBPurge}
715         nova_ipv6: {get_param: NovaIPv6}
716         corosync_ipv6: {get_param: CorosyncIPv6}
717         memcached_ipv6: {get_param: MemcachedIPv6}
718         nova_password: {get_param: NovaPassword}
719         nova_dsn:
720           list_join:
721             - ''
722             - - {get_param: [EndpointMap, MysqlInternal, protocol]}
723               - '://nova:'
724               - {get_param: NovaPassword}
725               - '@'
726               - {get_param: [EndpointMap, MysqlInternal, host]}
727               - '/nova'
728         nova_api_dsn:
729           list_join:
730             - ''
731             - - {get_param: [EndpointMap, MysqlInternal, protocol]}
732               - '://nova_api:'
733               - {get_param: NovaPassword}
734               - '@'
735               - {get_param: [EndpointMap, MysqlInternal, host]}
736               - '/nova_api'
737         upgrade_level_nova_compute: {get_param: UpgradeLevelNovaCompute}
738         instance_name_template: {get_param: InstanceNameTemplate}
739         nova_public_url: {get_param: [EndpointMap, NovaPublic, uri]}
740         nova_internal_url: {get_param: [EndpointMap, NovaInternal, uri]}
741         nova_admin_url: {get_param: [EndpointMap, NovaAdmin, uri]}
742         fencing_config: {get_param: FencingConfig}
743         pcsd_password: {get_param: PcsdPassword}
744         rabbit_username: {get_param: RabbitUserName}
745         rabbit_password: {get_param: RabbitPassword}
746         rabbit_cookie: {get_param: RabbitCookie}
747         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
748         rabbit_client_port: {get_param: RabbitClientPort}
749         ntp_servers: {get_param: NtpServer}
750         timezone: {get_param: TimeZone}
751         control_virtual_interface: {get_param: ControlVirtualInterface}
752         public_virtual_interface: {get_param: PublicVirtualInterface}
753         swift_hash_suffix: {get_param: SwiftHashSuffix}
754         swift_part_power: {get_param: SwiftPartPower}
755         swift_ring_build: {get_param: SwiftRingBuild}
756         swift_replicas: {get_param: SwiftReplicas}
757         swift_min_part_hours: {get_param: SwiftMinPartHours}
758         swift_mount_check: {get_param: SwiftMountCheck}
759         enable_package_install: {get_param: EnablePackageInstall}
760         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
761         swift_proxy_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
762         swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
763         cinder_iscsi_network:
764           str_replace:
765             template: "'IP'"
766             params:
767               IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, CinderIscsiNetwork]}]}
768         cinder_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
769         glance_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
770         glance_registry_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
771         glance_api_servers: { get_param: [EndpointMap, GlanceInternal, uri]}
772         heat_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
773         keystone_public_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
774         keystone_admin_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
775         keystone_region: {get_param: KeystoneRegion}
776         mongo_db_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
777         neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
778         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
779         ceilometer_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
780         aodh_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
781         gnocchi_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
782         nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
783         nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
784         horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
785         horizon_subnet:
786           str_replace:
787             template: "['SUBNET']"
788             params:
789               SUBNET: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
790         rabbitmq_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
791         redis_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
792         redis_vip: {get_param: RedisVirtualIP}
793         sahara_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
794         memcached_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
795         mysql_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
796         mysql_virtual_ip: {get_param: MysqlVirtualIP}
797         ceph_cluster_network: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephClusterNetwork]}]}
798         ceph_public_network: {get_attr: [NetIpMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
799         ceph_public_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
800
801   # Map heat metadata into hiera datafiles
802   ControllerConfig:
803     type: OS::Heat::StructuredConfig
804     properties:
805       group: os-apply-config
806       config:
807         hiera:
808           hierarchy:
809             - '"%{::uuid}"'
810             - heat_config_%{::deploy_config_name}
811             - controller_extraconfig
812             - extraconfig
813             - service_configs
814             - controller
815             - database
816             - object
817             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
818             - ceph_cluster # provided by CephClusterConfig
819             - ceph
820             - bootstrap_node # provided by BootstrapNodeConfig
821             - all_nodes # provided by allNodesConfig
822             - vip_data # provided by vip-config
823             - '"%{::osfamily}"'
824             - common
825             - network
826             - cinder_dellsc_data # Optionally provided by ControllerExtraConfigPre
827             - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
828             - cinder_eqlx_data # Optionally provided by ControllerExtraConfigPre
829             - neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
830             - neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
831             - cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
832             - neutron_nuage_data # Optionally provided by ControllerExtraConfigPre
833             - midonet_data #Optionally provided by AllNodesExtraConfig
834             - neutron_opencontrail_data # Optionally provided by ControllerExtraConfigPre
835           merge_behavior: deeper
836           datafiles:
837             service_configs:
838               mapped_data: {get_param: ServiceConfigSettings}
839             controller_extraconfig:
840               mapped_data:
841                 map_merge:
842                   - {get_param: controllerExtraConfig}
843                   - {get_param: ControllerExtraConfig}
844             extraconfig:
845               mapped_data: {get_param: ExtraConfig}
846             common:
847               raw_data: {get_file: hieradata/common.yaml}
848             network:
849               mapped_data:
850                 net_ip_map: {get_attr: [NetIpMap, net_ip_map]}
851                 net_ip_subnet_map: {get_attr: [NetIpMap, net_ip_subnet_map]}
852                 net_ip_uri_map: {get_attr: [NetIpMap, net_ip_uri_map]}
853             ceph:
854               raw_data: {get_file: hieradata/ceph.yaml}
855               mapped_data:
856                 ceph::profile::params::cluster_network: {get_input: ceph_cluster_network}
857                 ceph::profile::params::public_network: {get_input: ceph_public_network}
858                 ceph::profile::params::public_addr: {get_input: ceph_public_ip}
859             database:
860               raw_data: {get_file: hieradata/database.yaml}
861             object:
862               raw_data: {get_file: hieradata/object.yaml}
863             controller:
864               raw_data: {get_file: hieradata/controller.yaml}
865               mapped_data: # data supplied directly to this deployment configuration, etc
866                 bootstack_nodeid: {get_input: bootstack_nodeid}
867
868                 # Pacemaker
869                 enable_fencing: {get_input: enable_fencing}
870                 enable_load_balancer: {get_input: enable_load_balancer}
871                 hacluster_pwd: {get_input: pcsd_password}
872                 corosync_ipv6: {get_input: corosync_ipv6}
873                 tripleo::fencing::config: {get_input: fencing_config}
874
875                 # Swift
876                 # FIXME: need to move proxy_local_net_ip into swift-proxy.yaml
877                 swift::proxy::proxy_local_net_ip: {get_input: swift_proxy_network}
878                 swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
879                 swift::swift_hash_path_suffix: {get_input: swift_hash_suffix}
880                 tripleo::ringbuilder::build_ring: { get_input: swift_ring_build }
881                 tripleo::ringbuilder::part_power: {get_input: swift_part_power}
882                 tripleo::ringbuilder::replicas: {get_input: swift_replicas}
883                 tripleo::ringbuilder::min_part_hours: {get_input: swift_min_part_hours}
884                 swift_mount_check: {get_input: swift_mount_check}
885
886                 # Cinder
887                 tripleo::profile::base::cinder::volume::iscsi::cinder_iscsi_address: {get_input: cinder_iscsi_network}
888                 cinder::api::bind_host: {get_input: cinder_api_network}
889                 cinder::keystone::auth::public_url: {get_input: cinder_public_url }
890                 cinder::keystone::auth::internal_url: {get_input: cinder_internal_url }
891                 cinder::keystone::auth::admin_url: {get_input: cinder_admin_url }
892                 cinder::keystone::auth::public_url_v2: {get_input: cinder_public_url_v2 }
893                 cinder::keystone::auth::internal_url_v2: {get_input: cinder_internal_url_v2 }
894                 cinder::keystone::auth::admin_url_v2: {get_input: cinder_admin_url_v2 }
895                 cinder::keystone::auth::password: {get_input: cinder_password }
896                 cinder::keystone::auth::region: {get_input: keystone_region}
897
898                 # Glance
899                 glance::api::bind_host: {get_input: glance_api_network}
900                 glance::registry::bind_host: {get_input: glance_registry_network}
901                 glance::keystone::auth::region: {get_input: keystone_region}
902
903                 # Heat
904                 heat::api::bind_host: {get_input: heat_api_network}
905                 heat::api_cloudwatch::bind_host: {get_input: heat_api_network}
906                 heat::api_cfn::bind_host: {get_input: heat_api_network}
907                 heat::engine::auth_encryption_key: {get_input: heat_auth_encryption_key}
908
909                 # Keystone
910                 keystone::admin_bind_host: {get_input: keystone_admin_api_network}
911                 keystone::public_bind_host: {get_input: keystone_public_api_network}
912                 keystone::wsgi::apache::bind_host: {get_input: keystone_public_api_network}
913                 keystone::wsgi::apache::admin_bind_host: {get_input: keystone_admin_api_network}
914
915                 # MongoDB
916                 mongodb::server::bind_ip: {get_input: mongo_db_network}
917
918                 # MySQL
919                 admin_password: {get_input: admin_password}
920                 enable_galera: {get_input: enable_galera}
921                 enable_ceph_storage: {get_input: enable_ceph_storage}
922                 enable_swift_storage: {get_input: enable_swift_storage}
923                 mysql_innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
924                 mysql_max_connections: {get_input: mysql_max_connections}
925                 mysql::server::root_password: {get_input: mysql_root_password}
926                 mysql_clustercheck_password: {get_input: mysql_clustercheck_password}
927                 mysql_cluster_name: {get_input: mysql_cluster_name}
928                 mysql_bind_host: {get_input: mysql_network}
929                 mysql_virtual_ip: {get_input: mysql_virtual_ip}
930
931                 # Neutron
932                 neutron::bind_host: {get_input: neutron_api_network}
933                 neutron::network_device_mtu: {get_input: neutron_tenant_mtu}
934                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
935                 neutron::agents::metadata::metadata_ip: {get_input: neutron_api_network}
936                 neutron::keystone::auth::public_url: {get_input: neutron_public_url }
937                 neutron::keystone::auth::internal_url: {get_input: neutron_internal_url }
938                 neutron::keystone::auth::admin_url: {get_input: neutron_admin_url }
939                 neutron::keystone::auth::password: {get_input: neutron_password }
940                 neutron::keystone::auth::region: {get_input: keystone_region}
941
942                 # Ceilometer
943                 ceilometer_backend: {get_input: ceilometer_backend}
944                 ceilometer_mysql_conn_string: {get_input: ceilometer_dsn}
945                 ceilometer::telemetry_secret: {get_input: ceilometer_metering_secret}
946                 ceilometer::rabbit_userid: {get_input: rabbit_username}
947                 ceilometer::rabbit_password: {get_input: rabbit_password}
948                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
949                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
950                 ceilometer::debug: {get_input: debug}
951                 ceilometer::api::host: {get_input: ceilometer_api_network}
952                 ceilometer::api::keystone_password: {get_input: ceilometer_password}
953                 ceilometer::api::auth_uri: {get_input: keystone_auth_uri}
954                 ceilometer::api::identity_uri: {get_input: keystone_identity_uri}
955                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
956                 ceilometer::agent::auth::auth_url: {get_input: keystone_auth_uri}
957                 ceilometer::agent::central::coordination_url: {get_input: ceilometer_coordination_url}
958                 ceilometer::agent::notification::store_events: {get_input: ceilometer_store_events}
959                 ceilometer::db::mysql::password: {get_input: ceilometer_password}
960                 ceilometer::collector::meter_dispatcher: {get_input: ceilometer_meter_dispatcher}
961                 ceilometer::dispatcher::gnocchi::url: {get_input: gnocchi_internal_url }
962                 ceilometer::dispatcher::gnocchi::filter_project: 'service'
963                 ceilometer::dispatcher::gnocchi::archive_policy: 'low'
964                 ceilometer::dispatcher::gnocchi::resources_definition_file: 'gnocchi_resources.yaml'
965                 ceilometer::keystone::auth::public_url: {get_input: ceilometer_public_url }
966                 ceilometer::keystone::auth::internal_url: {get_input: ceilometer_internal_url }
967                 ceilometer::keystone::auth::admin_url: {get_input: ceilometer_admin_url }
968                 ceilometer::keystone::auth::password: {get_input: ceilometer_password }
969                 ceilometer::keystone::auth::region: {get_input: keystone_region}
970                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
971                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
972
973                 # Aodh
974                 aodh_mysql_conn_string: {get_input: aodh_dsn}
975                 aodh::rabbit_userid: {get_input: rabbit_username}
976                 aodh::rabbit_password: {get_input: rabbit_password}
977                 aodh::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
978                 aodh::rabbit_port: {get_input: rabbit_client_port}
979                 aodh::debug: {get_input: debug}
980                 aodh::wsgi::apache::ssl: false
981                 aodh::wsgi::apache::bind_host: {get_input: aodh_api_network}
982                 aodh::api::service_name: 'httpd'
983                 aodh::api::host: {get_input: aodh_api_network}
984                 aodh::api::keystone_password: {get_input: aodh_password}
985                 aodh::api::keystone_auth_uri: {get_input: keystone_auth_uri}
986                 aodh::api::keystone_identity_uri: {get_input: keystone_identity_uri}
987                 aodh::auth::auth_url: {get_input: keystone_auth_uri}
988                 aodh::auth::auth_password: {get_input: aodh_password}
989                 aodh::db::mysql::password: {get_input: aodh_password}
990                 # for a migration path from ceilometer-alarm to aodh, we use the same database & coordination
991                 aodh::evaluator::coordination_url: {get_input: ceilometer_coordination_url}
992                 aodh::keystone::auth::public_url: {get_input: aodh_public_url }
993                 aodh::keystone::auth::internal_url: {get_input: aodh_internal_url }
994                 aodh::keystone::auth::admin_url: {get_input: aodh_admin_url }
995                 aodh::keystone::auth::password: {get_input: aodh_password }
996                 aodh::keystone::auth::region: {get_input: keystone_region}
997
998                 # Gnocchi
999                 gnocchi_backend: {get_input: gnocchi_backend}
1000                 gnocchi_indexer_backend: {get_input: gnocchi_indexer_backend}
1001                 gnocchi_mysql_conn_string: {get_input: gnocchi_dsn}
1002                 gnocchi::debug: {get_input: debug}
1003                 gnocchi::wsgi::apache::ssl: false
1004                 gnocchi::wsgi::apache::bind_host: {get_input: gnocchi_api_network}
1005                 gnocchi::api::service_name: 'httpd'
1006                 gnocchi::api::host: {get_input: gnocchi_api_network}
1007                 gnocchi::api::keystone_password: {get_input: gnocchi_password}
1008                 gnocchi::api::keystone_auth_uri: {get_input: keystone_auth_uri}
1009                 gnocchi::api::keystone_identity_uri: {get_input: keystone_identity_uri}
1010                 gnocchi::db::mysql::password: {get_input: gnocchi_password}
1011                 gnocchi::storage::swift::swift_authurl: {get_input: keystone_auth_uri}
1012                 gnocchi::storage::swift::swift_key: {get_input: gnocchi_password}
1013                 gnocchi::keystone::auth::public_url: {get_input: gnocchi_public_url }
1014                 gnocchi::keystone::auth::internal_url: {get_input: gnocchi_internal_url }
1015                 gnocchi::keystone::auth::admin_url: {get_input: gnocchi_admin_url }
1016                 gnocchi::keystone::auth::password: {get_input: gnocchi_password }
1017                 gnocchi::keystone::auth::region: {get_input: keystone_region}
1018
1019                 # Nova
1020                 nova::upgrade_level_compute: {get_input: upgrade_level_nova_compute}
1021                 nova::use_ipv6: {get_input: nova_ipv6}
1022                 nova::api::auth_uri: {get_input: keystone_auth_uri}
1023                 nova::api::identity_uri: {get_input: keystone_identity_uri}
1024                 nova::api::api_bind_address: {get_input: nova_api_network}
1025                 nova::api::metadata_listen: {get_input: nova_metadata_network}
1026                 nova::api::admin_password: {get_input: nova_password}
1027                 nova::compute::network_device_mtu: {get_input: neutron_tenant_mtu}
1028                 nova::database_connection: {get_input: nova_dsn}
1029                 nova::api_database_connection: {get_input: nova_api_dsn}
1030                 nova::glance_api_servers: {get_input: glance_api_servers}
1031                 nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
1032                 nova::api::instance_name_template: {get_input: instance_name_template}
1033                 nova::network::neutron::neutron_password: {get_input: neutron_password}
1034                 nova::network::neutron::neutron_url: {get_input: neutron_internal_url}
1035                 nova::network::neutron::neutron_auth_url: {get_input: neutron_auth_url}
1036                 nova::vncproxy::host: {get_input: nova_api_network}
1037                 nova::db::mysql::password: {get_input: nova_password}
1038                 nova::db::mysql_api::password: {get_input: nova_password}
1039                 nova_enable_db_purge: {get_input: nova_enable_db_purge}
1040                 nova::keystone::auth::public_url: {get_input: nova_public_url}
1041                 nova::keystone::auth::internal_url: {get_input: nova_internal_url}
1042                 nova::keystone::auth::admin_url: {get_input: nova_admin_url}
1043                 nova::keystone::auth::password: {get_input: nova_password }
1044                 nova::keystone::auth::region: {get_input: keystone_region}
1045
1046                 # Horizon
1047                 apache::mod::remoteip::proxy_ips: {get_input: horizon_subnet}
1048                 apache::ip: {get_input: horizon_network}
1049                 horizon::allowed_hosts: {get_input: horizon_allowed_hosts}
1050                 horizon::django_debug: {get_input: debug}
1051                 horizon::secret_key: {get_input: horizon_secret}
1052                 horizon::bind_address: {get_input: horizon_network}
1053                 horizon::keystone_url: {get_input: keystone_auth_uri}
1054
1055                 # RabbitMQ
1056                 rabbitmq::node_ip_address: {get_input: rabbitmq_network}
1057                 rabbitmq::erlang_cookie: {get_input: rabbit_cookie}
1058                 # Redis
1059                 redis::bind: {get_input: redis_network}
1060                 redis_vip: {get_input: redis_vip}
1061                 # Firewall
1062                 tripleo::firewall::manage_firewall: {get_input: manage_firewall}
1063                 tripleo::firewall::purge_firewall_rules: {get_input: purge_firewall_rules}
1064                 # Misc
1065                 memcached_ipv6: {get_input: memcached_ipv6}
1066                 memcached::listen_ip: {get_input: memcached_network}
1067                 ntp::servers: {get_input: ntp_servers}
1068                 timezone::timezone: {get_input: timezone}
1069                 control_virtual_interface: {get_input: control_virtual_interface}
1070                 public_virtual_interface: {get_input: public_virtual_interface}
1071                 tripleo::keepalived::control_virtual_interface: {get_input: control_virtual_interface}
1072                 tripleo::keepalived::public_virtual_interface: {get_input: public_virtual_interface}
1073                 tripleo::haproxy::control_virtual_interface: {get_input: control_virtual_interface}
1074                 tripleo::haproxy::public_virtual_interface: {get_input: public_virtual_interface}
1075                 tripleo::haproxy::haproxy_log_address: {get_input: haproxy_log_address}
1076                 tripleo::haproxy::service_certificate: {get_attr: [NodeTLSData, deployed_ssl_certificate_path]}
1077                 tripleo::haproxy::haproxy_stats_user: {get_input: haproxy_stats_user}
1078                 tripleo::haproxy::haproxy_stats_password: {get_input: haproxy_stats_password}
1079                 tripleo::haproxy::redis_password: {get_input: redis_password}
1080                 tripleo::packages::enable_install: {get_input: enable_package_install}
1081                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
1082
1083   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
1084   ControllerExtraConfigPre:
1085     depends_on: ControllerDeployment
1086     type: OS::TripleO::ControllerExtraConfigPre
1087     properties:
1088         server: {get_resource: Controller}
1089
1090   # Hook for site-specific additional pre-deployment config,
1091   # applying to all nodes, e.g node registration/unregistration
1092   NodeExtraConfig:
1093     depends_on: [ControllerExtraConfigPre, NodeTLSData]
1094     type: OS::TripleO::NodeExtraConfig
1095     properties:
1096         server: {get_resource: Controller}
1097
1098   UpdateConfig:
1099     type: OS::TripleO::Tasks::PackageUpdate
1100
1101   UpdateDeployment:
1102     type: OS::Heat::SoftwareDeployment
1103     properties:
1104       name: UpdateDeployment
1105       config: {get_resource: UpdateConfig}
1106       server: {get_resource: Controller}
1107       input_values:
1108         update_identifier:
1109           get_param: UpdateIdentifier
1110
1111 outputs:
1112   ip_address:
1113     description: IP address of the server in the ctlplane network
1114     value: {get_attr: [Controller, networks, ctlplane, 0]}
1115   external_ip_address:
1116     description: IP address of the server in the external network
1117     value: {get_attr: [ExternalPort, ip_address]}
1118   internal_api_ip_address:
1119     description: IP address of the server in the internal_api network
1120     value: {get_attr: [InternalApiPort, ip_address]}
1121   storage_ip_address:
1122     description: IP address of the server in the storage network
1123     value: {get_attr: [StoragePort, ip_address]}
1124   storage_mgmt_ip_address:
1125     description: IP address of the server in the storage_mgmt network
1126     value: {get_attr: [StorageMgmtPort, ip_address]}
1127   tenant_ip_address:
1128     description: IP address of the server in the tenant network
1129     value: {get_attr: [TenantPort, ip_address]}
1130   management_ip_address:
1131     description: IP address of the server in the management network
1132     value: {get_attr: [ManagementPort, ip_address]}
1133   hostname:
1134     description: Hostname of the server
1135     value: {get_attr: [Controller, name]}
1136   hosts_entry:
1137     description: >
1138       Server's IP address and hostname in the /etc/hosts format
1139     value:
1140       str_replace:
1141         template: |
1142           PRIMARYIP PRIMARYHOST.DOMAIN PRIMARYHOST
1143           EXTERNALIP EXTERNALHOST.DOMAIN EXTERNALHOST
1144           INTERNAL_APIIP INTERNAL_APIHOST.DOMAIN INTERNAL_APIHOST
1145           STORAGEIP STORAGEHOST.DOMAIN STORAGEHOST
1146           STORAGE_MGMTIP STORAGE_MGMTHOST.DOMAIN STORAGE_MGMTHOST
1147           TENANTIP TENANTHOST.DOMAIN TENANTHOST
1148           MANAGEMENTIP MANAGEMENTHOST.DOMAIN MANAGEMENTHOST
1149         params:
1150           PRIMARYIP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ControllerHostnameResolveNetwork]}]}
1151           DOMAIN: {get_param: CloudDomain}
1152           PRIMARYHOST: {get_attr: [Controller, name]}
1153           EXTERNALIP: {get_attr: [ExternalPort, ip_address]}
1154           EXTERNALHOST:
1155             list_join:
1156             - '.'
1157             - - {get_attr: [Controller, name]}
1158               - external
1159           INTERNAL_APIIP: {get_attr: [InternalApiPort, ip_address]}
1160           INTERNAL_APIHOST:
1161             list_join:
1162             - '.'
1163             - - {get_attr: [Controller, name]}
1164               - internalapi
1165           STORAGEIP: {get_attr: [StoragePort, ip_address]}
1166           STORAGEHOST:
1167             list_join:
1168             - '.'
1169             - - {get_attr: [Controller, name]}
1170               - storage
1171           STORAGE_MGMTIP: {get_attr: [StorageMgmtPort, ip_address]}
1172           STORAGE_MGMTHOST:
1173             list_join:
1174             - '.'
1175             - - {get_attr: [Controller, name]}
1176               - storagemgmt
1177           TENANTIP: {get_attr: [TenantPort, ip_address]}
1178           TENANTHOST:
1179             list_join:
1180             - '.'
1181             - - {get_attr: [Controller, name]}
1182               - tenant
1183           MANAGEMENTIP: {get_attr: [ManagementPort, ip_address]}
1184           MANAGEMENTHOST:
1185             list_join:
1186             - '.'
1187             - - {get_attr: [Controller, name]}
1188               - management
1189   nova_server_resource:
1190     description: Heat resource handle for the Nova compute server
1191     value:
1192       {get_resource: Controller}
1193   swift_device:
1194     description: Swift device formatted for swift-ring-builder
1195     value:
1196       str_replace:
1197         template: 'r1z1-IP:%PORT%/d1'
1198         params:
1199           IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
1200   swift_proxy_memcache:
1201     description: Swift proxy-memcache value
1202     value:
1203       str_replace:
1204         template: "IP:11211"
1205         params:
1206           IP: {get_attr: [NetIpMap, net_ip_uri_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1207   config_identifier:
1208     description: identifier which changes if the controller configuration may need re-applying
1209     value:
1210       list_join:
1211         - ','
1212         - - {get_attr: [ControllerDeployment, deploy_stdout]}
1213           - {get_attr: [NodeTLSCAData, deploy_stdout]}
1214           - {get_attr: [NodeTLSData, deploy_stdout]}
1215           - {get_attr: [ControllerExtraConfigPre, deploy_stdout]}
1216           - {get_param: UpdateIdentifier}
1217   tls_key_modulus_md5:
1218     description: MD5 checksum of the TLS Key Modulus
1219     value: {get_attr: [NodeTLSData, key_modulus_md5]}
1220   tls_cert_modulus_md5:
1221     description: MD5 checksum of the TLS Certificate Modulus
1222     value: {get_attr: [NodeTLSData, cert_modulus_md5]}