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