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