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