05661e70f500d5430e591a98cd9009c108d04e38
[apex-tripleo-heat-templates.git] / puppet / controller.yaml
1 heat_template_version: 2015-04-30
2
3 description: >
4   OpenStack controller node configured by Puppet.
5
6 parameters:
7   AdminEmail:
8     default: 'admin@example.com'
9     description: The email for the keystone admin account.
10     type: string
11     hidden: true
12   AdminPassword:
13     default: unset
14     description: The password for the keystone admin account, used for monitoring, querying neutron etc.
15     type: string
16     hidden: true
17   AdminToken:
18     default: unset
19     description: The keystone auth secret and db password.
20     type: string
21     hidden: true
22   CeilometerApiVirtualIP:
23     type: string
24     default: ''
25   CeilometerBackend:
26     default: 'mongodb'
27     description: The ceilometer backend type.
28     type: string
29   CeilometerMeteringSecret:
30     default: unset
31     description: Secret shared by the ceilometer services.
32     type: string
33     hidden: true
34   CeilometerPassword:
35     default: unset
36     description: The password for the ceilometer service  and db account.
37     type: string
38     hidden: true
39   CinderApiVirtualIP:
40     type: string
41     default: ''
42   CinderEnableNfsBackend:
43     default: false
44     description: Whether to enable or not the NFS backend for Cinder
45     type: boolean
46   CinderEnableIscsiBackend:
47     default: true
48     description: Whether to enable or not the Iscsi backend for Cinder
49     type: boolean
50   CinderEnableRbdBackend:
51     default: false
52     description: Whether to enable or not the Rbd backend for Cinder
53     type: boolean
54   CinderISCSIHelper:
55     default: tgtadm
56     description: The iSCSI helper to use with cinder.
57     type: string
58   CinderLVMLoopDeviceSize:
59     default: 5000
60     description: The size of the loopback file used by the cinder LVM driver.
61     type: number
62   CinderNfsMountOptions:
63     default: ''
64     description: >
65       Mount options for NFS mounts used by Cinder NFS backend. Effective
66       when CinderEnableNfsBackend is true.
67     type: string
68   CinderNfsServers:
69     default: ''
70     description: >
71       NFS servers used by Cinder NFS backend. Effective when
72       CinderEnableNfsBackend is true.
73     type: comma_delimited_list
74   CinderPassword:
75     default: unset
76     description: The password for the cinder service and db account, used by cinder-api.
77     type: string
78     hidden: true
79   CinderBackendConfig:
80     default: {}
81     description: Contains parameters to configure Cinder backends. Typically
82                  set via parameter_defaults in the resource registry.
83     type: json
84   CloudName:
85     default: ''
86     description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
87     type: string
88   ControllerExtraConfig:
89     default: {}
90     description: |
91       Controller specific hiera configuration data to inject into the cluster.
92     type: json
93   ControlVirtualInterface:
94     default: 'br-ex'
95     description: Interface where virtual ip will be assigned.
96     type: string
97   Debug:
98     default: ''
99     description: Set to True to enable debugging on all services.
100     type: string
101   EnableFencing:
102     default: false
103     description: Whether to enable fencing in Pacemaker or not.
104     type: boolean
105   EnableGalera:
106     default: true
107     description: Whether to use Galera instead of regular MariaDB.
108     type: boolean
109   EnableCephStorage:
110     default: false
111     description: Whether to deploy Ceph Storage (OSD) on the Controller
112     type: boolean
113   EnableSwiftStorage:
114     default: true
115     description: Whether to enable Swift Storage on the Controller
116     type: boolean
117   ExtraConfig:
118     default: {}
119     description: |
120       Additional hieradata to inject into the cluster, note that
121       ControllerExtraConfig takes precedence over ExtraConfig.
122     type: json
123   FencingConfig:
124     default: {}
125     description: |
126       Pacemaker fencing configuration. The JSON should have
127       the following structure:
128         {
129           "devices": [
130             {
131               "agent": "AGENT_NAME",
132               "host_mac": "HOST_MAC_ADDRESS",
133               "params": {"PARAM_NAME": "PARAM_VALUE"}
134             }
135           ]
136         }
137       For instance:
138         {
139           "devices": [
140             {
141               "agent": "fence_xvm",
142               "host_mac": "52:54:00:aa:bb:cc",
143               "params": {
144                 "multicast_address": "225.0.0.12",
145                 "port": "baremetal_0",
146                 "manage_fw": true,
147                 "manage_key_file": true,
148                 "key_file": "/etc/fence_xvm.key",
149                 "key_file_password": "abcdef"
150               }
151             }
152           ]
153         }
154     type: json
155   Flavor:
156     description: Flavor for control nodes to request when deploying.
157     type: string
158     constraints:
159       - custom_constraint: nova.flavor
160   GlanceNotifierStrategy:
161     description: Strategy to use for Glance notification queue
162     type: string
163     default: noop
164   GlanceLogFile:
165     description: The filepath of the file to use for logging messages from Glance.
166     type: string
167     default: ''
168   GlancePassword:
169     default: unset
170     description: The password for the glance service and db account, used by the glance services.
171     type: string
172     hidden: true
173   GlanceBackend:
174     default: swift
175     description: The short name of the Glance backend to use. Should be one
176       of swift, rbd, or file
177     type: string
178     constraints:
179     - allowed_values: ['swift', 'file', 'rbd']
180   GlanceFilePcmkDevice:
181     default: ''
182     description: >
183       An exported storage device that should be mounted by Pacemaker
184       as Glance storage. Effective when GlanceFilePcmkManage is true.
185     type: string
186   GlanceFilePcmkFstype:
187     default: 'nfs'
188     description: >
189       Filesystem type for Pacemaker mount used as Glance storage.
190       Effective when GlanceFilePcmkManage is true.
191     type: string
192   GlanceFilePcmkManage:
193     default: false
194     description: >
195       Whether to make Glance file backend a mount managed by Pacemaker.
196       Effective when GlanceBackend is 'file'.
197     type: boolean
198   GlanceFilePcmkOptions:
199     default: ''
200     description: >
201       Mount options for Pacemaker mount used as Glance storage.
202       Effective when GlanceFilePcmkManage is true.
203     type: string
204   HAProxySyslogAddress:
205     default: /dev/log
206     description: Syslog address where HAproxy will send its log
207     type: string
208   HeatPassword:
209     default: unset
210     description: The password for the Heat service and db account, used by the Heat services.
211     type: string
212     hidden: true
213   HeatStackDomainAdminPassword:
214     description: Password for heat_domain_admin user.
215     type: string
216     default: ''
217     hidden: true
218   HeatAuthEncryptionKey:
219     description: Auth encryption key for heat-engine
220     type: string
221     hidden: true
222   HorizonAllowedHosts:
223     default: '*'
224     description: A list of IP/Hostname allowed to connect to horizon
225     type: comma_delimited_list
226   HorizonSecret:
227     description: Secret key for Django
228     type: string
229     hidden: true
230   Image:
231     type: string
232     default: overcloud-control
233     constraints:
234       - custom_constraint: glance.image
235   ImageUpdatePolicy:
236     default: 'REBUILD_PRESERVE_EPHEMERAL'
237     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
238     type: string
239   KeyName:
240     default: default
241     description: Name of an existing EC2 KeyPair to enable SSH access to the instances
242     type: string
243     constraints:
244       - custom_constraint: nova.keypair
245   KeystoneCACertificate:
246     default: ''
247     description: Keystone self-signed certificate authority certificate.
248     type: string
249   KeystoneSigningCertificate:
250     default: ''
251     description: Keystone certificate for verifying token validity.
252     type: string
253   KeystoneSigningKey:
254     default: ''
255     description: Keystone key for signing tokens.
256     type: string
257     hidden: true
258   KeystoneSSLCertificate:
259     default: ''
260     description: Keystone certificate for verifying token validity.
261     type: string
262   KeystoneSSLCertificateKey:
263     default: ''
264     description: Keystone key for signing tokens.
265     type: string
266     hidden: true
267   KeystoneNotificationDriver:
268     description: Comma-separated list of Oslo notification drivers used by Keystone
269     default: ['messaging']
270     type: comma_delimited_list
271   KeystoneNotificationFormat:
272     description: The Keystone notification format
273     default: 'basic'
274     type: string
275     constraints:
276       - allowed_values: [ 'basic', 'cadf' ]
277   KeystoneRegion:
278     type: string
279     default: 'regionOne'
280     description: Keystone region for endpoint
281   MysqlClusterUniquePart:
282     description: A unique identifier of the MySQL cluster the controller is in.
283     type: string
284     default: 'unset'  # Has to be here because of the ignored empty value bug
285     # Drop the validation: https://bugs.launchpad.net/tripleo/+bug/1405446
286     # constraints:
287     # - length: {min: 4, max: 10}
288   MysqlInnodbBufferPoolSize:
289     description: >
290         Specifies the size of the buffer pool in megabytes. Setting to
291         zero should be interpreted as "no value" and will defer to the
292         lower level default.
293     type: number
294     default: 0
295   MysqlMaxConnections:
296     description: Configures MySQL max_connections config setting
297     type: number
298     default: 4096
299   MysqlRootPassword:
300     type: string
301     hidden: true
302     default: ''  # Has to be here because of the ignored empty value bug
303   NeutronExternalNetworkBridge:
304     description: Name of bridge used for external network traffic.
305     type: string
306     default: 'br-ex'
307   NeutronBridgeMappings:
308     description: >
309       The OVS logical->physical bridge mappings to use. See the Neutron
310       documentation for details. Defaults to mapping br-ex - the external
311       bridge on hosts - to a physical name 'datacentre' which can be used
312       to create provider networks (and we use this for the default floating
313       network) - if changing this either use different post-install network
314       scripts or be sure to keep 'datacentre' as a mapping network name.
315     type: string
316     default: "datacentre:br-ex"
317   NeutronDnsmasqOptions:
318     default: 'dhcp-option-force=26,1400'
319     description: Dnsmasq options for neutron-dhcp-agent. The default value here forces MTU to be set to 1400 to account for the gre tunnel overhead.
320     type: string
321   NeutronAgentMode:
322     default: 'dvr_snat'
323     description: Agent mode for the neutron-l3-agent on the controller hosts
324     type: string
325   NeutronL3HA:
326     default: 'False'
327     description: Whether to enable l3-agent HA
328     type: string
329   NeutronDhcpAgentsPerNetwork:
330     type: number
331     default: 3
332     description: The number of neutron dhcp agents to schedule per network
333   NeutronDVR:
334     default: 'False'
335     description: Whether to configure Neutron Distributed Virtual Routers
336     type: string
337   NeutronMetadataProxySharedSecret:
338     default: 'unset'
339     description: Shared secret to prevent spoofing
340     type: string
341     hidden: true
342   NeutronCorePlugin:
343     default: 'ml2'
344     description: |
345         The core plugin for Neutron. The value should be the entrypoint to be loaded
346         from neutron.core_plugins namespace.
347     type: string
348   NeutronServicePlugins:
349     default: "router"
350     description: |
351         Comma-separated list of service plugin entrypoints to be loaded from the
352         neutron.service_plugins namespace.
353     type: comma_delimited_list
354   NeutronTypeDrivers:
355     default: "vxlan,vlan,flat,gre"
356     description: |
357         Comma-separated list of network type driver entrypoints to be loaded.
358     type: comma_delimited_list
359   NeutronMechanismDrivers:
360     default: 'openvswitch'
361     description: |
362         The mechanism drivers for the Neutron tenant network. To specify multiple
363         values, use a comma separated string, like so: 'openvswitch,l2_population'
364     type: string
365   NeutronAllowL3AgentFailover:
366     default: 'True'
367     description: Allow automatic l3-agent failover
368     type: string
369   NeutronEnableIsolatedMetadata:
370     default: 'False'
371     description: If True, DHCP provide metadata route to VM.
372     type: string
373   NeutronEnableTunnelling:
374     type: string
375     default: "True"
376   NeutronEnableL2Pop:
377     type: string
378     description: >
379         Enable/disable the L2 population feature in the Neutron agents.
380     default: "False"
381   NeutronFlatNetworks:
382     type: string
383     default: 'datacentre'
384     description: If set, flat networks to configure in neutron plugins.
385   NeutronL3HA:
386     default: 'False'
387     description: Whether to enable l3-agent HA
388     type: string
389   NeutronNetworkType:
390     default: 'vxlan'
391     description: The tenant network type for Neutron, either gre or vxlan.
392     type: string
393   NeutronNetworkVLANRanges:
394     default: 'datacentre'
395     description: >
396       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
397       Neutron documentation for permitted values. Defaults to permitting any
398       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
399     type: comma_delimited_list
400   NeutronPassword:
401     default: unset
402     description: The password for the neutron service and db account, used by neutron agents.
403     type: string
404     hidden: true
405   NeutronPublicInterface:
406     default: nic1
407     description: What interface to bridge onto br-ex for network nodes.
408     type: string
409   NeutronPublicInterfaceTag:
410     default: ''
411     description: >
412       VLAN tag for creating a public VLAN. The tag will be used to
413       create an access port on the exterior bridge for each control plane node,
414       and that port will be given the IP address returned by neutron from the
415       public network. Set CONTROLEXTRA=overcloud-vlan-port.yaml when compiling
416       overcloud.yaml to include the deployment of VLAN ports to the control
417       plane.
418     type: string
419   NeutronPublicInterfaceDefaultRoute:
420     default: ''
421     description: A custom default route for the NeutronPublicInterface.
422     type: string
423   NeutronPublicInterfaceIP:
424     default: ''
425     description: A custom IP address to put onto the NeutronPublicInterface.
426     type: string
427   NeutronPublicInterfaceRawDevice:
428     default: ''
429     description: If set, the public interface is a vlan with this device as the raw device.
430     type: string
431   NeutronTunnelTypes:
432     default: 'vxlan'
433     description: |
434         The tunnel types for the Neutron tenant network. To specify multiple
435         values, use a comma separated string, like so: 'gre,vxlan'
436     type: string
437   NeutronTunnelIdRanges:
438     description: |
439         Comma-separated list of <tun_min>:<tun_max> tuples enumerating ranges
440         of GRE tunnel IDs that are available for tenant network allocation
441     default: ["1:1000", ]
442     type: comma_delimited_list
443   NeutronVniRanges:
444     description: |
445         Comma-separated list of <vni_min>:<vni_max> tuples enumerating ranges
446         of VXLAN VNI IDs that are available for tenant network allocation
447     default: ["1:1000", ]
448     type: comma_delimited_list
449   NovaApiVirtualIP:
450     type: string
451     default: ''
452   NovaPassword:
453     default: unset
454     description: The password for the nova service and db account, used by nova-api.
455     type: string
456     hidden: true
457   MongoDbNoJournal:
458     default: false
459     description: Should MongoDb journaling be disabled
460     type: boolean
461   NtpServer:
462     default: ''
463     description: Comma-separated list of ntp servers
464     type: comma_delimited_list
465   PcsdPassword:
466     type: string
467     description: The password for the 'pcsd' user.
468     hidden: true
469   PublicVirtualInterface:
470     default: 'br-ex'
471     description: >
472         Specifies the interface where the public-facing virtual ip will be assigned.
473         This should be int_public when a VLAN is being used.
474     type: string
475   PublicVirtualIP:
476     type: string
477     default: ''  # Has to be here because of the ignored empty value bug
478   RabbitCookie:
479     type: string
480     default: ''  # Has to be here because of the ignored empty value bug
481     hidden: true
482   RabbitPassword:
483     default: guest
484     description: The password for RabbitMQ
485     type: string
486     hidden: true
487   RabbitUserName:
488     default: guest
489     description: The username for RabbitMQ
490     type: string
491   RabbitClientUseSSL:
492     default: false
493     description: >
494         Rabbit client subscriber parameter to specify
495         an SSL connection to the RabbitMQ host.
496     type: string
497   RabbitClientPort:
498     default: 5672
499     description: Set rabbit subscriber port, change this if using SSL
500     type: number
501   RabbitFDLimit:
502     default: 16384
503     description: Configures RabbitMQ FD limit
504     type: string
505   RedisVirtualIP:
506     type: string
507     default: ''  # Has to be here because of the ignored empty value bug
508   SnmpdReadonlyUserName:
509     default: ro_snmp_user
510     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
511     type: string
512   SnmpdReadonlyUserPassword:
513     default: unset
514     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
515     type: string
516     hidden: true
517   SwiftHashSuffix:
518     default: unset
519     description: A random string to be used as a salt when hashing to determine mappings
520       in the ring.
521     hidden: true
522     type: string
523   SwiftMountCheck:
524     default: 'false'
525     description: Value of mount_check in Swift account/container/object -server.conf
526     type: boolean
527   SwiftMinPartHours:
528     type: number
529     default: 1
530     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
531   SwiftPartPower:
532     default: 10
533     description: Partition Power to use when building Swift rings
534     type: number
535   SwiftPassword:
536     default: unset
537     description: The password for the swift service account, used by the swift proxy
538       services.
539     hidden: true
540     type: string
541   SwiftProxyVirtualIP:
542     type: string
543     default: ''
544   SwiftReplicas:
545     type: number
546     default: 3
547     description: How many replicas to use in the swift rings.
548   VirtualIP: # DEPRECATED: use per service settings instead
549     type: string
550     default: ''  # Has to be here because of the ignored empty value bug
551   HeatApiVirtualIP:
552     type: string
553     default: ''
554   GlanceApiVirtualIP:
555     type: string
556     default: ''
557   GlanceRegistryVirtualIP:
558     type: string
559     default: ''
560   MysqlVirtualIP:
561     type: string
562     default: ''
563   KeystoneAdminApiVirtualIP:
564     type: string
565     default: ''
566   KeystonePublicApiVirtualIP:
567     type: string
568     default: ''
569   NeutronApiVirtualIP:
570     type: string
571     default: ''
572   EnablePackageInstall:
573     default: 'false'
574     description: Set to true to enable package installation via Puppet
575     type: boolean
576   ServiceNetMap:
577     default: {}
578     description: Mapping of service_name -> network name. Typically set
579                  via parameter_defaults in the resource registry.
580     type: json
581   EndpointMap:
582     default: {}
583     description: Mapping of service endpoint -> protocol. Typically set
584                  via parameter_defaults in the resource registry.
585     type: json
586   UpdateIdentifier:
587     default: ''
588     type: string
589     description: >
590       Setting to a previously unused value during stack-update will trigger
591       package update on all nodes
592   Hostname:
593     type: string
594     default: '' # Defaults to Heat created hostname
595   NetworkDeploymentActions:
596     type: comma_delimited_list
597     description: >
598       Heat action when to apply network configuration changes
599     default: ['CREATE']
600   NodeIndex:
601     type: number
602     default: 0
603
604 resources:
605
606   Controller:
607     type: OS::Nova::Server
608     properties:
609       image: {get_param: Image}
610       image_update_policy: {get_param: ImageUpdatePolicy}
611       flavor: {get_param: Flavor}
612       key_name: {get_param: KeyName}
613       networks:
614         - network: ctlplane
615       user_data_format: SOFTWARE_CONFIG
616       user_data: {get_resource: UserData}
617       name: {get_param: Hostname}
618
619   # Combine the NodeAdminUserData and NodeUserData mime archives
620   UserData:
621     type: OS::Heat::MultipartMime
622     properties:
623       parts:
624       - config: {get_resource: NodeAdminUserData}
625         type: multipart
626       - config: {get_resource: NodeUserData}
627         type: multipart
628
629   # Creates the "heat-admin" user if configured via the environment
630   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
631   NodeAdminUserData:
632     type: OS::TripleO::NodeAdminUserData
633
634   # For optional operator additional userdata
635   # Should return a OS::Heat::MultipartMime reference via OS::stack_id
636   NodeUserData:
637     type: OS::TripleO::NodeUserData
638
639   ExternalPort:
640     type: OS::TripleO::Controller::Ports::ExternalPort
641     properties:
642       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
643
644   InternalApiPort:
645     type: OS::TripleO::Controller::Ports::InternalApiPort
646     properties:
647       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
648
649   StoragePort:
650     type: OS::TripleO::Controller::Ports::StoragePort
651     properties:
652       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
653
654   StorageMgmtPort:
655     type: OS::TripleO::Controller::Ports::StorageMgmtPort
656     properties:
657       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
658
659   TenantPort:
660     type: OS::TripleO::Controller::Ports::TenantPort
661     properties:
662       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
663
664   NetIpMap:
665     type: OS::TripleO::Network::Ports::NetIpMap
666     properties:
667       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
668       ExternalIp: {get_attr: [ExternalPort, ip_address]}
669       InternalApiIp: {get_attr: [InternalApiPort, ip_address]}
670       StorageIp: {get_attr: [StoragePort, ip_address]}
671       StorageMgmtIp: {get_attr: [StorageMgmtPort, ip_address]}
672       TenantIp: {get_attr: [TenantPort, ip_address]}
673
674   NetIpSubnetMap:
675     type: OS::TripleO::Network::Ports::NetIpSubnetMap
676     properties:
677       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
678       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
679       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
680       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
681       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
682       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
683
684   NetworkConfig:
685     type: OS::TripleO::Controller::Net::SoftwareConfig
686     properties:
687       ControlPlaneIp: {get_attr: [Controller, networks, ctlplane, 0]}
688       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
689       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
690       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
691       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
692       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
693
694   NetworkDeployment:
695     type: OS::TripleO::SoftwareDeployment
696     properties:
697       config: {get_resource: NetworkConfig}
698       server: {get_resource: Controller}
699       actions: {get_param: NetworkDeploymentActions}
700       input_values:
701         bridge_name: br-ex
702         interface_name: {get_param: NeutronPublicInterface}
703
704   # Resource for site-specific injection of root certificate
705   NodeTLSCAData:
706     depends_on: NetworkDeployment
707     type: OS::TripleO::NodeTLSCAData
708     properties:
709       server: {get_resource: Controller}
710
711   # Hook for site-specific passing of private keys/certificates
712   NodeTLSData:
713     depends_on: NodeTLSCAData
714     type: OS::TripleO::NodeTLSData
715     properties:
716       server: {get_resource: Controller}
717       NodeIndex: {get_param: NodeIndex}
718
719   ControllerDeployment:
720     type: OS::TripleO::SoftwareDeployment
721     depends_on: NetworkDeployment
722     properties:
723       config: {get_resource: ControllerConfig}
724       server: {get_resource: Controller}
725       input_values:
726         bootstack_nodeid: {get_attr: [Controller, name]}
727         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
728         neutron_enable_l2pop: {get_param: NeutronEnableL2Pop}
729         neutron_enable_isolated_metadata: {get_param: NeutronEnableIsolatedMetadata}
730         haproxy_log_address: {get_param: HAProxySyslogAddress}
731         heat.watch_server_url:
732           list_join:
733             - ''
734             - - 'http://'
735               - {get_param: HeatApiVirtualIP}
736               - ':8003'
737         heat.metadata_server_url:
738           list_join:
739             - ''
740             - - 'http://'
741               - {get_param: HeatApiVirtualIP}
742               - ':8000'
743         heat.waitcondition_server_url:
744           list_join:
745             - ''
746             - - 'http://'
747               - {get_param: HeatApiVirtualIP}
748               - ':8000/v1/waitcondition'
749         heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
750         horizon_allowed_hosts: {get_param: HorizonAllowedHosts}
751         horizon_secret: {get_param: HorizonSecret}
752         admin_email: {get_param: AdminEmail}
753         admin_password: {get_param: AdminPassword}
754         admin_token: {get_param: AdminToken}
755         neutron_public_interface_ip: {get_param: NeutronPublicInterfaceIP}
756         debug: {get_param: Debug}
757         cinder_enable_nfs_backend: {get_param: CinderEnableNfsBackend}
758         cinder_enable_rbd_backend: {get_param: CinderEnableRbdBackend}
759         cinder_nfs_mount_options: {get_param: CinderNfsMountOptions}
760         cinder_nfs_servers:
761           str_replace:
762             template: "['SERVERS']"
763             params:
764               SERVERS:
765                 list_join:
766                 - "','"
767                 - {get_param: CinderNfsServers}
768         cinder_lvm_loop_device_size: {get_param: CinderLVMLoopDeviceSize}
769         cinder_password: {get_param: CinderPassword}
770         cinder_enable_iscsi_backend: {get_param: CinderEnableIscsiBackend}
771         cinder_iscsi_helper: {get_param: CinderISCSIHelper}
772         cinder_backend_config: {get_param: CinderBackendConfig}
773         cinder_dsn:
774           list_join:
775             - ''
776             - - 'mysql://cinder:'
777               - {get_param: CinderPassword}
778               - '@'
779               - {get_param: MysqlVirtualIP}
780               - '/cinder'
781         glance_port: {get_param: [EndpointMap, GlanceInternal, port]}
782         glance_password: {get_param: GlancePassword}
783         glance_backend: {get_param: GlanceBackend}
784         glance_file_pcmk_device: {get_param: GlanceFilePcmkDevice}
785         glance_file_pcmk_fstype: {get_param: GlanceFilePcmkFstype}
786         glance_file_pcmk_manage: {get_param: GlanceFilePcmkManage}
787         glance_file_pcmk_options: {get_param: GlanceFilePcmkOptions}
788         glance_notifier_strategy: {get_param: GlanceNotifierStrategy}
789         glance_log_file: {get_param: GlanceLogFile}
790         glance_dsn:
791           list_join:
792             - ''
793             - - 'mysql://glance:'
794               - {get_param: GlancePassword}
795               - '@'
796               - {get_param: MysqlVirtualIP}
797               - '/glance'
798         heat_password: {get_param: HeatPassword}
799         heat_stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
800         heat_dsn:
801           list_join:
802             - ''
803             - - 'mysql://heat:'
804               - {get_param: HeatPassword}
805               - '@'
806               - {get_param: MysqlVirtualIP}
807               - '/heat'
808         keystone_ca_certificate: {get_param: KeystoneCACertificate}
809         keystone_signing_key: {get_param: KeystoneSigningKey}
810         keystone_signing_certificate: {get_param: KeystoneSigningCertificate}
811         keystone_ssl_certificate: {get_param: KeystoneSSLCertificate}
812         keystone_ssl_certificate_key: {get_param: KeystoneSSLCertificateKey}
813         keystone_notification_driver: {get_param: KeystoneNotificationDriver}
814         keystone_notification_format: {get_param: KeystoneNotificationFormat}
815         keystone_dsn:
816           list_join:
817             - ''
818             - - 'mysql://keystone:'
819               - {get_param: AdminToken}
820               - '@'
821               - {get_param: MysqlVirtualIP}
822               - '/keystone'
823         keystone_identity_uri: { get_param: [EndpointMap, KeystoneAdmin, uri_no_suffix] }
824         keystone_auth_uri: {get_param: [EndpointMap, KeystoneInternal, uri] }
825         keystone_public_url: { get_param: [EndpointMap, KeystonePublic, uri_no_suffix] }
826         keystone_internal_url: { get_param: [EndpointMap, KeystoneInternal, uri_no_suffix] }
827         keystone_ec2_uri: { get_param: [EndpointMap, KeystoneEC2, uri] }
828         enable_fencing: {get_param: EnableFencing}
829         enable_galera: {get_param: EnableGalera}
830         enable_ceph_storage: {get_param: EnableCephStorage}
831         enable_swift_storage: {get_param: EnableSwiftStorage}
832         mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
833         mysql_max_connections: {get_param: MysqlMaxConnections}
834         mysql_root_password: {get_param: MysqlRootPassword}
835         mysql_cluster_name:
836           str_replace:
837             template: tripleo-CLUSTER
838             params:
839               CLUSTER: {get_param: MysqlClusterUniquePart}
840         neutron_flat_networks: {get_param: NeutronFlatNetworks}
841         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
842         neutron_agent_mode: {get_param: NeutronAgentMode}
843         neutron_router_distributed: {get_param: NeutronDVR}
844         neutron_core_plugin: {get_param: NeutronCorePlugin}
845         neutron_service_plugins:
846           str_replace:
847             template: "['PLUGINS']"
848             params:
849               PLUGINS:
850                 list_join:
851                 - "','"
852                 - {get_param: NeutronServicePlugins}
853         neutron_type_drivers:
854           str_replace:
855             template: "['DRIVERS']"
856             params:
857               DRIVERS:
858                 list_join:
859                 - "','"
860                 - {get_param: NeutronTypeDrivers}
861         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
862         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
863         neutron_l3_ha: {get_param: NeutronL3HA}
864         neutron_dhcp_agents_per_network: {get_param: NeutronDhcpAgentsPerNetwork}
865         neutron_network_vlan_ranges:
866           str_replace:
867             template: "['RANGES']"
868             params:
869               RANGES:
870                 list_join:
871                 - "','"
872                 - {get_param: NeutronNetworkVLANRanges}
873         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
874         neutron_external_network_bridge: {get_param: NeutronExternalNetworkBridge}
875         neutron_public_interface: {get_param: NeutronPublicInterface}
876         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
877         neutron_public_interface_default_route: {get_param: NeutronPublicInterfaceDefaultRoute}
878         neutron_public_interface_tag: {get_param: NeutronPublicInterfaceTag}
879         neutron_tenant_network_type: {get_param: NeutronNetworkType}
880         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
881         neutron_tunnel_id_ranges:
882           str_replace:
883             template: "['RANGES']"
884             params:
885               RANGES:
886                 list_join:
887                 - "','"
888                 - {get_param: NeutronTunnelIdRanges}
889         neutron_vni_ranges:
890           str_replace:
891             template: "['RANGES']"
892             params:
893               RANGES:
894                 list_join:
895                 - "','"
896                 - {get_param: NeutronVniRanges}
897         neutron_password: {get_param: NeutronPassword}
898         neutron_dnsmasq_options: {get_param: NeutronDnsmasqOptions}
899         neutron_dsn:
900           list_join:
901             - ''
902             - - 'mysql://neutron:'
903               - {get_param: NeutronPassword}
904               - '@'
905               - {get_param: MysqlVirtualIP}
906               - '/ovs_neutron?charset=utf8'
907         neutron_internal_url: { get_param: [ EndpointMap, NeutronInternal, uri ] }
908         neutron_public_url: { get_param: [ EndpointMap, NeutronPublic, uri ] }
909         neutron_admin_url: { get_param: [ EndpointMap, NeutronAdmin, uri ] }
910         neutron_admin_auth_url: { get_param: [ EndpointMap, KeystoneAdmin, uri ] }
911         nova_internal_url: { get_param: [ EndpointMap, NovaInternal, uri ] }
912         ceilometer_backend: {get_param: CeilometerBackend}
913         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
914         ceilometer_password: {get_param: CeilometerPassword}
915         ceilometer_coordination_url:
916           list_join:
917             - ''
918             - - 'redis://'
919               - {get_param: RedisVirtualIP}
920               - ':6379'
921         ceilometer_dsn:
922           list_join:
923             - ''
924             - - 'mysql://ceilometer:'
925               - {get_param: CeilometerPassword}
926               - '@'
927               - {get_param: MysqlVirtualIP}
928               - '/ceilometer'
929         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
930         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
931         nova_password: {get_param: NovaPassword}
932         nova_dsn:
933           list_join:
934             - ''
935             - - 'mysql://nova:'
936               - {get_param: NovaPassword}
937               - '@'
938               - {get_param: MysqlVirtualIP}
939               - '/nova'
940         fencing_config: {get_param: FencingConfig}
941         pcsd_password: {get_param: PcsdPassword}
942         rabbit_username: {get_param: RabbitUserName}
943         rabbit_password: {get_param: RabbitPassword}
944         rabbit_cookie: {get_param: RabbitCookie}
945         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
946         rabbit_client_port: {get_param: RabbitClientPort}
947         mongodb_no_journal: {get_param: MongoDbNoJournal}
948         # We need to force this into quotes or hiera will return integer causing
949         # the puppet module validation regexp to fail.
950         # Remove when: https://github.com/puppetlabs/puppetlabs-rabbitmq/pull/401
951         rabbit_fd_limit:
952           str_replace:
953             template: "'LIMIT'"
954             params:
955               LIMIT: {get_param: RabbitFDLimit}
956         ntp_servers: {get_param: NtpServer}
957         control_virtual_interface: {get_param: ControlVirtualInterface}
958         public_virtual_interface: {get_param: PublicVirtualInterface}
959         swift_hash_suffix: {get_param: SwiftHashSuffix}
960         swift_password: {get_param: SwiftPassword}
961         swift_part_power: {get_param: SwiftPartPower}
962         swift_replicas: {get_param: SwiftReplicas}
963         swift_min_part_hours: {get_param: SwiftMinPartHours}
964         swift_mount_check: {get_param: SwiftMountCheck}
965         enable_package_install: {get_param: EnablePackageInstall}
966         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
967         swift_proxy_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
968         swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
969         cinder_iscsi_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderIscsiNetwork]}]}
970         cinder_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
971         glance_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
972         glance_registry_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
973         glance_api_servers: { get_param: [EndpointMap, GlanceInternal, uri]}
974         glance_registry_host: {get_param: GlanceRegistryVirtualIP}
975         heat_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
976         keystone_public_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
977         keystone_admin_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
978         keystone_region: {get_param: KeystoneRegion}
979         mongo_db_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
980         neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
981         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
982         ceilometer_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
983         nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
984         nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
985         horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
986         rabbitmq_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
987         redis_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
988         redis_vip: {get_param: RedisVirtualIP}
989         memcached_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
990         mysql_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
991         mysql_virtual_ip: {get_param: MysqlVirtualIP}
992         ceph_cluster_network: {get_attr: [NetIpSubnetMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephClusterNetwork]}]}
993         ceph_public_network: {get_attr: [NetIpSubnetMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
994         ceph_public_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
995
996   # Map heat metadata into hiera datafiles
997   ControllerConfig:
998     type: OS::Heat::StructuredConfig
999     properties:
1000       group: os-apply-config
1001       config:
1002         hiera:
1003           hierarchy:
1004             - '"%{::uuid}"'
1005             - heat_config_%{::deploy_config_name}
1006             - controller_extraconfig
1007             - extraconfig
1008             - controller
1009             - database
1010             - object
1011             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
1012             - ceph_cluster # provided by CephClusterConfig
1013             - ceph
1014             - bootstrap_node # provided by BootstrapNodeConfig
1015             - all_nodes # provided by allNodesConfig
1016             - vip_data # provided by vip-config
1017             - '"%{::osfamily}"'
1018             - common
1019             - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
1020             - neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
1021             - neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
1022             - cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
1023           datafiles:
1024             controller_extraconfig:
1025               mapped_data: {get_param: ControllerExtraConfig}
1026             extraconfig:
1027               mapped_data: {get_param: ExtraConfig}
1028             common:
1029               raw_data: {get_file: hieradata/common.yaml}
1030             ceph:
1031               raw_data: {get_file: hieradata/ceph.yaml}
1032               mapped_data:
1033                 ceph::profile::params::cluster_network: {get_input: ceph_cluster_network}
1034                 ceph::profile::params::public_network: {get_input: ceph_public_network}
1035                 ceph::mon::public_addr: {get_input: ceph_public_ip}
1036             database:
1037               raw_data: {get_file: hieradata/database.yaml}
1038             object:
1039               raw_data: {get_file: hieradata/object.yaml}
1040             controller:
1041               raw_data: {get_file: hieradata/controller.yaml}
1042               mapped_data: # data supplied directly to this deployment configuration, etc
1043                 bootstack_nodeid: {get_input: bootstack_nodeid}
1044
1045                 # Pacemaker
1046                 enable_fencing: {get_input: enable_fencing}
1047                 hacluster_pwd: {get_input: pcsd_password}
1048                 tripleo::fencing::config: {get_input: fencing_config}
1049
1050                 # Swift
1051                 swift::proxy::proxy_local_net_ip: {get_input: swift_proxy_network}
1052                 swift::proxy::authtoken::auth_uri: {get_input: keystone_auth_uri}
1053                 swift::proxy::authtoken::identity_uri: {get_input: keystone_identity_uri}
1054                 swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
1055                 swift::swift_hash_suffix: {get_input: swift_hash_suffix}
1056                 swift::proxy::authtoken::admin_password: {get_input: swift_password}
1057                 tripleo::ringbuilder::part_power: {get_input: swift_part_power}
1058                 tripleo::ringbuilder::replicas: {get_input: swift_replicas}
1059                 tripleo::ringbuilder::min_part_hours: {get_input: swift_min_part_hours}
1060                 swift_mount_check: {get_input: swift_mount_check}
1061
1062                 # NOTE(dprince): build_ring support is currently not wired in.
1063                 # See: https://review.openstack.org/#/c/109225/
1064                 tripleo::ringbuilder::build_ring: True
1065
1066                 # Cinder
1067                 cinder_enable_nfs_backend: {get_input: cinder_enable_nfs_backend}
1068                 cinder_enable_rbd_backend: {get_input: cinder_enable_rbd_backend}
1069                 cinder_nfs_mount_options: {get_input: cinder_nfs_mount_options}
1070                 cinder_nfs_servers: {get_input: cinder_nfs_servers}
1071                 cinder_lvm_loop_device_size: {get_input: cinder_lvm_loop_device_size}
1072                 cinder_iscsi_helper: {get_input: cinder_iscsi_helper}
1073                 cinder_iscsi_ip_address: {get_input: cinder_iscsi_network}
1074                 cinder::database_connection: {get_input: cinder_dsn}
1075                 cinder::api::keystone_password: {get_input: cinder_password}
1076                 cinder::api::auth_uri: {get_input: keystone_auth_uri}
1077                 cinder::api::identity_uri: {get_input: keystone_identity_uri}
1078                 cinder::api::bind_host: {get_input: cinder_api_network}
1079                 cinder::rabbit_userid: {get_input: rabbit_username}
1080                 cinder::rabbit_password: {get_input: rabbit_password}
1081                 cinder::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1082                 cinder::rabbit_port: {get_input: rabbit_client_port}
1083                 cinder::debug: {get_input: debug}
1084                 cinder_enable_iscsi_backend: {get_input: cinder_enable_iscsi_backend}
1085                 cinder::glance::glance_api_servers: {get_input: glance_api_servers}
1086                 cinder_backend_config: {get_input: CinderBackendConfig}
1087                 cinder::db::mysql::password: {get_input: cinder_password}
1088
1089                 # Glance
1090                 glance::api::bind_port: {get_input: glance_port}
1091                 glance::api::bind_host: {get_input: glance_api_network}
1092                 glance::api::auth_uri: {get_input: keystone_auth_uri}
1093                 glance::api::identity_uri: {get_input: keystone_identity_uri}
1094                 glance::api::registry_host: {get_input: glance_registry_host}
1095                 glance::api::keystone_password: {get_input: glance_password}
1096                 glance::api::debug: {get_input: debug}
1097                 glance_notifier_strategy: {get_input: glance_notifier_strategy}
1098                 glance_log_file: {get_input: glance_log_file}
1099                 glance_log_file: {get_input: glance_log_file}
1100                 glance::api::database_connection: {get_input: glance_dsn}
1101                 glance::registry::keystone_password: {get_input: glance_password}
1102                 glance::registry::database_connection: {get_input: glance_dsn}
1103                 glance::registry::bind_host: {get_input: glance_registry_network}
1104                 glance::registry::auth_uri: {get_input: keystone_auth_uri}
1105                 glance::registry::identity_uri: {get_input: keystone_identity_uri}
1106                 glance::registry::debug: {get_input: debug}
1107                 glance::backend::swift::swift_store_auth_address: {get_input: keystone_auth_uri}
1108                 glance::backend::swift::swift_store_user: service:glance
1109                 glance::backend::swift::swift_store_key: {get_input: glance_password}
1110                 glance_backend: {get_input: glance_backend}
1111                 glance::db::mysql::password: {get_input: glance_password}
1112                 glance_file_pcmk_device: {get_input: glance_file_pcmk_device}
1113                 glance_file_pcmk_fstype: {get_input: glance_file_pcmk_fstype}
1114                 glance_file_pcmk_manage: {get_input: glance_file_pcmk_manage}
1115                 glance_file_pcmk_options: {get_input: glance_file_pcmk_options}
1116
1117                 # Heat
1118                 heat_stack_domain_admin_password: {get_input: heat_stack_domain_admin_password}
1119                 heat::engine::heat_watch_server_url: {get_input: heat.watch_server_url}
1120                 heat::engine::heat_metadata_server_url: {get_input: heat.metadata_server_url}
1121                 heat::engine::heat_waitcondition_server_url: {get_input: heat.waitcondition_server_url}
1122                 heat::engine::auth_encryption_key: {get_input: heat_auth_encryption_key}
1123                 heat::rabbit_userid: {get_input: rabbit_username}
1124                 heat::rabbit_password: {get_input: rabbit_password}
1125                 heat::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1126                 heat::rabbit_port: {get_input: rabbit_client_port}
1127                 heat::auth_uri: {get_input: keystone_auth_uri}
1128                 heat::keystone_ec2_uri: {get_input: keystone_ec2_uri}
1129                 heat::identity_uri: {get_input: keystone_identity_uri}
1130                 heat::keystone_password: {get_input: heat_password}
1131                 heat::api::bind_host: {get_input: heat_api_network}
1132                 heat::api_cloudwatch::bind_host: {get_input: heat_api_network}
1133                 heat::api_cfn::bind_host: {get_input: heat_api_network}
1134                 heat::database_connection: {get_input: heat_dsn}
1135                 heat::debug: {get_input: debug}
1136                 heat::db::mysql::password: {get_input: heat_password}
1137
1138                 # Keystone
1139                 keystone::admin_token: {get_input: admin_token}
1140                 keystone_ca_certificate: {get_input: keystone_ca_certificate}
1141                 keystone_signing_key: {get_input: keystone_signing_key}
1142                 keystone_signing_certificate: {get_input: keystone_signing_certificate}
1143                 keystone_ssl_certificate: {get_input: keystone_ssl_certificate}
1144                 keystone_ssl_certificate_key: {get_input: keystone_ssl_certificate_key}
1145                 keystone::database_connection: {get_input: keystone_dsn}
1146                 keystone::public_bind_host: {get_input: keystone_public_api_network}
1147                 keystone::admin_bind_host: {get_input: keystone_admin_api_network}
1148                 keystone::debug: {get_input: debug}
1149                 keystone::db::mysql::password: {get_input: admin_token}
1150                 keystone::rabbit_userid: {get_input: rabbit_username}
1151                 keystone::rabbit_password: {get_input: rabbit_password}
1152                 keystone::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1153                 keystone::rabbit_port: {get_input: rabbit_client_port}
1154                 keystone::notification_driver: {get_input: keystone_notification_driver}
1155                 keystone::notification_format: {get_input: keystone_notification_format}
1156                 keystone::roles::admin::email: {get_input: admin_email}
1157                 keystone::roles::admin::password: {get_input: admin_password}
1158                 keystone::endpoint::public_url: {get_input: keystone_public_url}
1159                 keystone::endpoint::internal_url: {get_input: keystone_internal_url}
1160                 keystone::endpoint::admin_url: {get_input: keystone_identity_uri}
1161                 keystone::endpoint::region: {get_input: keystone_region}
1162                 # MongoDB
1163                 mongodb::server::bind_ip: {get_input: mongo_db_network}
1164                 mongodb::server::nojournal: {get_input: mongodb_no_journal}
1165                 # MySQL
1166                 admin_password: {get_input: admin_password}
1167                 enable_galera: {get_input: enable_galera}
1168                 enable_ceph_storage: {get_input: enable_ceph_storage}
1169                 enable_swift_storage: {get_input: enable_swift_storage}
1170                 mysql_innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
1171                 mysql_max_connections: {get_input: mysql_max_connections}
1172                 mysql::server::root_password: {get_input: mysql_root_password}
1173                 mysql_cluster_name: {get_input: mysql_cluster_name}
1174                 mysql_bind_host: {get_input: mysql_network}
1175                 mysql_virtual_ip: {get_input: mysql_virtual_ip}
1176
1177                 # Neutron
1178                 neutron::bind_host: {get_input: neutron_api_network}
1179                 neutron::rabbit_password: {get_input: rabbit_password}
1180                 neutron::rabbit_user: {get_input: rabbit_username}
1181                 neutron::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1182                 neutron::rabbit_port: {get_input: rabbit_client_port}
1183                 neutron::debug: {get_input: debug}
1184                 neutron::server::auth_uri: {get_input: keystone_auth_uri}
1185                 neutron::server::identity_uri: {get_input: keystone_identity_uri}
1186                 neutron::server::database_connection: {get_input: neutron_dsn}
1187                 neutron::agents::l3::external_network_bridge: {get_input: neutron_external_network_bridge}
1188                 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
1189                 neutron::agents::ml2::ovs::l2_population: {get_input: neutron_enable_l2pop}
1190                 neutron::agents::dhcp::enable_isolated_metadata: {get_input: neutron_enable_isolated_metadata}
1191                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
1192                 neutron_flat_networks: {get_input: neutron_flat_networks}
1193                 neutron::agents::metadata::shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
1194                 neutron::agents::metadata::metadata_ip: {get_input: neutron_api_network}
1195                 neutron_agent_mode: {get_input: neutron_agent_mode}
1196                 neutron_router_distributed: {get_input: neutron_router_distributed}
1197                 neutron::core_plugin: {get_input: neutron_core_plugin}
1198                 neutron::service_plugins: {get_input: neutron_service_plugins}
1199                 neutron::plugins::ml2::type_drivers: {get_input: neutron_type_drivers}
1200                 neutron_mechanism_drivers: {get_input: neutron_mechanism_drivers}
1201                 neutron::server::allow_automatic_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
1202                 neutron::server::l3_ha: {get_input: neutron_l3_ha}
1203                 neutron::dhcp_agents_per_network: {get_input: neutron_dhcp_agents_per_network}
1204                 neutron::plugins::ml2::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
1205                 neutron::plugins::ml2::tunnel_id_ranges: {get_input: neutron_tunnel_id_ranges}
1206                 neutron::plugins::ml2::vni_ranges: {get_input: neutron_vni_ranges}
1207                 neutron_bridge_mappings: {get_input: neutron_bridge_mappings}
1208                 neutron_public_interface: {get_input: neutron_public_interface}
1209                 neutron_public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
1210                 neutron_public_interface_default_route: {get_input: neutron_public_interface_default_route}
1211                 neutron_public_interface_tag: {get_input: neutron_public_interface_tag}
1212                 neutron_tenant_network_type: {get_input: neutron_tenant_network_type}
1213                 neutron_tunnel_types: {get_input: neutron_tunnel_types}
1214                 neutron::server::auth_password: {get_input: neutron_password}
1215                 neutron::agents::metadata::auth_password: {get_input: neutron_password}
1216                 neutron_dnsmasq_options: {get_input: neutron_dnsmasq_options}
1217                 neutron_dsn: {get_input: neutron_dsn}
1218                 neutron::agents::metadata::auth_url: {get_input: keystone_identity_uri}
1219                 neutron::db::mysql::password: {get_input: neutron_password}
1220                 neutron::keystone::auth::public_url: {get_input: neutron_public_url }
1221                 neutron::keystone::auth::internal_url: {get_input: neutron_internal_url }
1222                 neutron::keystone::auth::admin_url: {get_input: neutron_admin_url }
1223                 neutron::keystone::auth::password: {get_input: neutron_password }
1224                 neutron::keystone::auth::region: {get_input: keystone_region}
1225                 neutron::server::notifications::nova_url: {get_input: nova_internal_url}
1226                 neutron::server::notifications::auth_url: {get_input: neutron_admin_auth_url}
1227                 neutron::server::notifications::tenant_name: 'service'
1228                 neutron::server::notifications::password: {get_input: nova_password}
1229
1230                 # Ceilometer
1231                 ceilometer_backend: {get_input: ceilometer_backend}
1232                 ceilometer_mysql_conn_string: {get_input: ceilometer_dsn}
1233                 ceilometer::metering_secret: {get_input: ceilometer_metering_secret}
1234                 ceilometer::rabbit_userid: {get_input: rabbit_username}
1235                 ceilometer::rabbit_password: {get_input: rabbit_password}
1236                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1237                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
1238                 ceilometer::debug: {get_input: debug}
1239                 ceilometer::api::host: {get_input: ceilometer_api_network}
1240                 ceilometer::api::keystone_password: {get_input: ceilometer_password}
1241                 ceilometer::api::keystone_auth_uri: {get_input: keystone_auth_uri}
1242                 ceilometer::api::keystone_identity_uri: {get_input: keystone_identity_uri}
1243                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
1244                 ceilometer::agent::auth::auth_url: {get_input: keystone_auth_uri}
1245                 ceilometer::agent::central::coordination_url: {get_input: ceilometer_coordination_url}
1246                 ceilometer::db::mysql::password: {get_input: ceilometer_password}
1247                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
1248                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
1249
1250                 # Nova
1251                 nova::rabbit_userid: {get_input: rabbit_username}
1252                 nova::rabbit_password: {get_input: rabbit_password}
1253                 nova::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1254                 nova::rabbit_port: {get_input: rabbit_client_port}
1255                 nova::debug: {get_input: debug}
1256                 nova::api::auth_uri: {get_input: keystone_auth_uri}
1257                 nova::api::identity_uri: {get_input: keystone_identity_uri}
1258                 nova::api::api_bind_address: {get_input: nova_api_network}
1259                 nova::api::metadata_listen: {get_input: nova_metadata_network}
1260                 nova::api::admin_password: {get_input: nova_password}
1261                 nova::database_connection: {get_input: nova_dsn}
1262                 nova::glance_api_servers: {get_input: glance_api_servers}
1263                 nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
1264                 nova::network::neutron::neutron_admin_password: {get_input: neutron_password}
1265                 nova::network::neutron::neutron_url: {get_input: neutron_internal_url}
1266                 nova::network::neutron::neutron_admin_auth_url: {get_input: neutron_admin_auth_url}
1267                 nova::vncproxy::host: {get_input: nova_api_network}
1268                 nova::db::mysql::password: {get_input: nova_password}
1269
1270                 # Horizon
1271                 apache::ip: {get_input: horizon_network}
1272                 horizon::allowed_hosts: {get_input: horizon_allowed_hosts}
1273                 horizon::django_debug: {get_input: debug}
1274                 horizon::secret_key: {get_input: horizon_secret}
1275                 horizon::bind_address: {get_input: horizon_network}
1276                 horizon::keystone_url: {get_input: keystone_auth_uri}
1277
1278                 # Rabbit
1279                 rabbitmq::node_ip_address: {get_input: rabbitmq_network}
1280                 rabbitmq::erlang_cookie: {get_input: rabbit_cookie}
1281                 rabbitmq::file_limit: {get_input: rabbit_fd_limit}
1282                 rabbitmq::default_user: {get_input: rabbit_username}
1283                 rabbitmq::default_pass: {get_input: rabbit_password}
1284                 # Redis
1285                 redis::bind: {get_input: redis_network}
1286                 redis_vip: {get_input: redis_vip}
1287                 # Misc
1288                 memcached::listen_ip: {get_input: memcached_network}
1289                 neutron_public_interface_ip: {get_input: neutron_public_interface_ip}
1290                 ntp::servers: {get_input: ntp_servers}
1291                 control_virtual_interface: {get_input: control_virtual_interface}
1292                 public_virtual_interface: {get_input: public_virtual_interface}
1293                 tripleo::loadbalancer::control_virtual_interface: {get_input: control_virtual_interface}
1294                 tripleo::loadbalancer::public_virtual_interface: {get_input: public_virtual_interface}
1295                 tripleo::loadbalancer::haproxy_log_address: {get_input: haproxy_log_address}
1296                 # NOTE(jaosorior): The service certificate configuration for
1297                 # HAProxy was left commented because to properly use this, we
1298                 # need to be able to set up the keystone endpoints. And
1299                 # currently that is not possible, but is being addressed by
1300                 # other commits.  A subsequent commit will uncomment this.
1301                 #tripleo::loadbalancer::service_certificate: {get_attr: [NodeTLSData, deployed_ssl_certificate_path]}
1302                 tripleo::packages::enable_install: {get_input: enable_package_install}
1303                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
1304
1305   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
1306   ControllerExtraConfigPre:
1307     depends_on: ControllerDeployment
1308     type: OS::TripleO::ControllerExtraConfigPre
1309     properties:
1310         server: {get_resource: Controller}
1311
1312   # Hook for site-specific additional pre-deployment config,
1313   # applying to all nodes, e.g node registration/unregistration
1314   NodeExtraConfig:
1315     depends_on: [ControllerExtraConfigPre, NodeTLSData]
1316     type: OS::TripleO::NodeExtraConfig
1317     properties:
1318         server: {get_resource: Controller}
1319
1320   UpdateConfig:
1321     type: OS::TripleO::Tasks::PackageUpdate
1322
1323   UpdateDeployment:
1324     type: OS::Heat::SoftwareDeployment
1325     properties:
1326       config: {get_resource: UpdateConfig}
1327       server: {get_resource: Controller}
1328       input_values:
1329         update_identifier:
1330           get_param: UpdateIdentifier
1331
1332 outputs:
1333   ip_address:
1334     description: IP address of the server in the ctlplane network
1335     value: {get_attr: [Controller, networks, ctlplane, 0]}
1336   external_ip_address:
1337     description: IP address of the server in the external network
1338     value: {get_attr: [ExternalPort, ip_address]}
1339   internal_api_ip_address:
1340     description: IP address of the server in the internal_api network
1341     value: {get_attr: [InternalApiPort, ip_address]}
1342   storage_ip_address:
1343     description: IP address of the server in the storage network
1344     value: {get_attr: [StoragePort, ip_address]}
1345   storage_mgmt_ip_address:
1346     description: IP address of the server in the storage_mgmt network
1347     value: {get_attr: [StorageMgmtPort, ip_address]}
1348   tenant_ip_address:
1349     description: IP address of the server in the tenant network
1350     value: {get_attr: [TenantPort, ip_address]}
1351   hostname:
1352     description: Hostname of the server
1353     value: {get_attr: [Controller, name]}
1354   corosync_node:
1355     description: >
1356       Node object in the format {ip: ..., name: ...} format that the corosync
1357       element expects
1358     value:
1359       ip: {get_attr: [Controller, networks, ctlplane, 0]}
1360       name: {get_attr: [Controller, name]}
1361   hosts_entry:
1362     description: >
1363       Server's IP address and hostname in the /etc/hosts format
1364     value:
1365       str_replace:
1366         template: IP HOST.localdomain HOST CLOUDNAME
1367         params:
1368           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ControllerHostnameResolveNetwork]}]}
1369           HOST: {get_attr: [Controller, name]}
1370           CLOUDNAME: {get_param: CloudName}
1371   nova_server_resource:
1372     description: Heat resource handle for the Nova compute server
1373     value:
1374       {get_resource: Controller}
1375   swift_device:
1376     description: Swift device formatted for swift-ring-builder
1377     value:
1378       str_replace:
1379         template: 'r1z1-IP:%PORT%/d1'
1380         params:
1381           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
1382   swift_proxy_memcache:
1383     description: Swift proxy-memcache value
1384     value:
1385       str_replace:
1386         template: "IP:11211"
1387         params:
1388           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1389   config_identifier:
1390     description: identifier which changes if the controller configuration may need re-applying
1391     value:
1392       list_join:
1393         - ','
1394         - - {get_attr: [ControllerDeployment, deploy_stdout]}
1395           - {get_attr: [NodeTLSCAData, deploy_stdout]}
1396           - {get_attr: [NodeTLSData, deploy_stdout]}
1397           - {get_attr: [ControllerExtraConfigPre, deploy_stdout]}
1398           - {get_param: UpdateIdentifier}
1399   tls_key_modulus_md5:
1400     description: MD5 checksum of the TLS Key Modulus
1401     value: {get_attr: [NodeTLSData, key_modulus_md5]}
1402   tls_cert_modulus_md5:
1403     description: MD5 checksum of the TLS Certificate Modulus
1404     value: {get_attr: [NodeTLSData, cert_modulus_md5]}