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