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