honor the rabbit user and password provided
[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_public_url:
731           list_join:
732             - ''
733             - - 'http://'
734               - {get_param: PublicVirtualIP}
735               - ':8004/v1/%(tenant_id)s'
736         heat_internal_url:
737           list_join:
738             - ''
739             - - 'http://'
740               - {get_param: HeatApiVirtualIP}
741               - ':8004/v1/%(tenant_id)s'
742         heat_admin_url:
743           list_join:
744             - ''
745             - - 'http://'
746               - {get_param: HeatApiVirtualIP}
747               - ':8004/v1/%(tenant_id)s'
748         heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
749         horizon_allowed_hosts: {get_param: HorizonAllowedHosts}
750         horizon_secret: {get_param: HorizonSecret}
751         admin_email: {get_param: AdminEmail}
752         admin_password: {get_param: AdminPassword}
753         admin_token: {get_param: AdminToken}
754         neutron_public_interface_ip: {get_param: NeutronPublicInterfaceIP}
755         debug: {get_param: Debug}
756         cinder_enable_nfs_backend: {get_param: CinderEnableNfsBackend}
757         cinder_enable_rbd_backend: {get_param: CinderEnableRbdBackend}
758         cinder_nfs_mount_options: {get_param: CinderNfsMountOptions}
759         cinder_nfs_servers:
760           str_replace:
761             template: "['SERVERS']"
762             params:
763               SERVERS:
764                 list_join:
765                 - "','"
766                 - {get_param: CinderNfsServers}
767         cinder_lvm_loop_device_size: {get_param: CinderLVMLoopDeviceSize}
768         cinder_password: {get_param: CinderPassword}
769         cinder_enable_iscsi_backend: {get_param: CinderEnableIscsiBackend}
770         cinder_iscsi_helper: {get_param: CinderISCSIHelper}
771         cinder_backend_config: {get_param: CinderBackendConfig}
772         cinder_dsn:
773           list_join:
774             - ''
775             - - 'mysql://cinder:'
776               - {get_param: CinderPassword}
777               - '@'
778               - {get_param: MysqlVirtualIP}
779               - '/cinder'
780         cinder_public_url:
781           list_join:
782             - ''
783             - - 'http://'
784               - {get_param: PublicVirtualIP}
785               - ':8776/v1/%(tenant_id)s'
786         cinder_internal_url:
787           list_join:
788             - ''
789             - - 'http://'
790               - {get_param: CinderApiVirtualIP}
791               - ':8776/v1/%(tenant_id)s'
792         cinder_admin_url:
793           list_join:
794             - ''
795             - - 'http://'
796               - {get_param: CinderApiVirtualIP}
797               - ':8776/v1/%(tenant_id)s'
798         cinder_public_url_v2:
799           list_join:
800             - ''
801             - - 'http://'
802               - {get_param: PublicVirtualIP}
803               - ':8776/v2/%(tenant_id)s'
804         cinder_internal_url_v2:
805           list_join:
806             - ''
807             - - 'http://'
808               - {get_param: CinderApiVirtualIP}
809               - ':8776/v2/%(tenant_id)s'
810         cinder_admin_url_v2:
811           list_join:
812             - ''
813             - - 'http://'
814               - {get_param: CinderApiVirtualIP}
815               - ':8776/v2/%(tenant_id)s'
816         glance_port: {get_param: GlancePort}
817         glance_password: {get_param: GlancePassword}
818         glance_backend: {get_param: GlanceBackend}
819         glance_file_pcmk_device: {get_param: GlanceFilePcmkDevice}
820         glance_file_pcmk_fstype: {get_param: GlanceFilePcmkFstype}
821         glance_file_pcmk_manage: {get_param: GlanceFilePcmkManage}
822         glance_file_pcmk_options: {get_param: GlanceFilePcmkOptions}
823         glance_notifier_strategy: {get_param: GlanceNotifierStrategy}
824         glance_log_file: {get_param: GlanceLogFile}
825         glance_dsn:
826           list_join:
827             - ''
828             - - 'mysql://glance:'
829               - {get_param: GlancePassword}
830               - '@'
831               - {get_param: MysqlVirtualIP}
832               - '/glance'
833         heat_password: {get_param: HeatPassword}
834         heat_stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
835         heat_dsn:
836           list_join:
837             - ''
838             - - 'mysql://heat:'
839               - {get_param: HeatPassword}
840               - '@'
841               - {get_param: MysqlVirtualIP}
842               - '/heat'
843         keystone_auth_address: {list_join: ['', ['http://', {get_param: KeystonePublicApiVirtualIP} , ':5000/v2.0']]}
844         keystone_ca_certificate: {get_param: KeystoneCACertificate}
845         keystone_signing_key: {get_param: KeystoneSigningKey}
846         keystone_signing_certificate: {get_param: KeystoneSigningCertificate}
847         keystone_ssl_certificate: {get_param: KeystoneSSLCertificate}
848         keystone_ssl_certificate_key: {get_param: KeystoneSSLCertificateKey}
849         keystone_notification_driver: {get_param: KeystoneNotificationDriver}
850         keystone_notification_format: {get_param: KeystoneNotificationFormat}
851         keystone_dsn:
852           list_join:
853             - ''
854             - - 'mysql://keystone:'
855               - {get_param: AdminToken}
856               - '@'
857               - {get_param: MysqlVirtualIP}
858               - '/keystone'
859         keystone_identity_uri:
860           list_join:
861             - ''
862             - - 'http://'
863               - {get_param: KeystoneAdminApiVirtualIP}
864               - ':35357'
865         keystone_auth_uri:
866           list_join:
867             - ''
868             - - 'http://'
869               - {get_param: KeystonePublicApiVirtualIP}
870               - ':5000/v2.0/'
871         keystone_public_url:
872           list_join:
873             - ''
874             - - 'http://'
875               - {get_param: PublicVirtualIP}
876               - ':5000'
877         keystone_internal_url:
878           list_join:
879             - ''
880             - - 'http://'
881               - {get_param: KeystonePublicApiVirtualIP}
882               - ':5000'
883         keystone_ec2_uri:
884           list_join:
885             - ''
886             - - 'http://'
887               - {get_param: KeystonePublicApiVirtualIP}
888               - ':5000/v2.0/ec2tokens'
889         enable_fencing: {get_param: EnableFencing}
890         enable_galera: {get_param: EnableGalera}
891         enable_ceph_storage: {get_param: EnableCephStorage}
892         enable_swift_storage: {get_param: EnableSwiftStorage}
893         mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
894         mysql_max_connections: {get_param: MysqlMaxConnections}
895         mysql_root_password: {get_param: MysqlRootPassword}
896         mysql_cluster_name:
897           str_replace:
898             template: tripleo-CLUSTER
899             params:
900               CLUSTER: {get_param: MysqlClusterUniquePart}
901         neutron_flat_networks: {get_param: NeutronFlatNetworks}
902         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
903         neutron_agent_mode: {get_param: NeutronAgentMode}
904         neutron_router_distributed: {get_param: NeutronDVR}
905         neutron_core_plugin: {get_param: NeutronCorePlugin}
906         neutron_service_plugins:
907           str_replace:
908             template: "['PLUGINS']"
909             params:
910               PLUGINS:
911                 list_join:
912                 - "','"
913                 - {get_param: NeutronServicePlugins}
914         neutron_type_drivers:
915           str_replace:
916             template: "['DRIVERS']"
917             params:
918               DRIVERS:
919                 list_join:
920                 - "','"
921                 - {get_param: NeutronTypeDrivers}
922         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
923         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
924         neutron_l3_ha: {get_param: NeutronL3HA}
925         neutron_dhcp_agents_per_network: {get_param: NeutronDhcpAgentsPerNetwork}
926         neutron_network_vlan_ranges:
927           str_replace:
928             template: "['RANGES']"
929             params:
930               RANGES:
931                 list_join:
932                 - "','"
933                 - {get_param: NeutronNetworkVLANRanges}
934         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
935         neutron_external_network_bridge: {get_param: NeutronExternalNetworkBridge}
936         neutron_public_interface: {get_param: NeutronPublicInterface}
937         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
938         neutron_public_interface_default_route: {get_param: NeutronPublicInterfaceDefaultRoute}
939         neutron_public_interface_tag: {get_param: NeutronPublicInterfaceTag}
940         neutron_tenant_network_type: {get_param: NeutronNetworkType}
941         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
942         neutron_tunnel_id_ranges:
943           str_replace:
944             template: "['RANGES']"
945             params:
946               RANGES:
947                 list_join:
948                 - "','"
949                 - {get_param: NeutronTunnelIdRanges}
950         neutron_vni_ranges:
951           str_replace:
952             template: "['RANGES']"
953             params:
954               RANGES:
955                 list_join:
956                 - "','"
957                 - {get_param: NeutronVniRanges}
958         neutron_password: {get_param: NeutronPassword}
959         neutron_dnsmasq_options: {get_param: NeutronDnsmasqOptions}
960         neutron_dsn:
961           list_join:
962             - ''
963             - - 'mysql://neutron:'
964               - {get_param: NeutronPassword}
965               - '@'
966               - {get_param: MysqlVirtualIP}
967               - '/ovs_neutron?charset=utf8'
968         neutron_internal_url:
969           list_join:
970             - ''
971             - - 'http://'
972               - {get_param: NeutronApiVirtualIP}
973               - ':9696'
974         neutron_public_url:
975           list_join:
976             - ''
977             - - 'http://'
978               - {get_param: PublicVirtualIP}
979               - ':9696'
980         neutron_admin_url:
981           list_join:
982             - ''
983             - - 'http://'
984               - {get_param: NeutronApiVirtualIP}
985               - ':9696'
986         neutron_admin_auth_url:
987           list_join:
988             - ''
989             - - 'http://'
990               - {get_param: KeystoneAdminApiVirtualIP}
991               - ':35357/v2.0'
992         ceilometer_backend: {get_param: CeilometerBackend}
993         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
994         ceilometer_password: {get_param: CeilometerPassword}
995         ceilometer_coordination_url:
996           list_join:
997             - ''
998             - - 'redis://'
999               - {get_param: RedisVirtualIP}
1000               - ':6379'
1001         ceilometer_dsn:
1002           list_join:
1003             - ''
1004             - - 'mysql://ceilometer:'
1005               - {get_param: CeilometerPassword}
1006               - '@'
1007               - {get_param: MysqlVirtualIP}
1008               - '/ceilometer'
1009         ceilometer_public_url:
1010           list_join:
1011             - ''
1012             - - 'http://'
1013               - {get_param: PublicVirtualIP}
1014               - ':8777'
1015         ceilometer_internal_url:
1016           list_join:
1017             - ''
1018             - - 'http://'
1019               - {get_param: CeilometerApiVirtualIP}
1020               - ':8777'
1021         ceilometer_admin_url:
1022           list_join:
1023             - ''
1024             - - 'http://'
1025               - {get_param: CeilometerApiVirtualIP}
1026               - ':8777'
1027         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
1028         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
1029         nova_password: {get_param: NovaPassword}
1030         nova_dsn:
1031           list_join:
1032             - ''
1033             - - 'mysql://nova:'
1034               - {get_param: NovaPassword}
1035               - '@'
1036               - {get_param: MysqlVirtualIP}
1037               - '/nova'
1038         nova_public_url:
1039           list_join:
1040             - ''
1041             - - 'http://'
1042               - {get_param: PublicVirtualIP}
1043               - ':8774/v2/%(tenant_id)s'
1044         nova_internal_url:
1045           list_join:
1046             - ''
1047             - - 'http://'
1048               - {get_param: NovaApiVirtualIP}
1049               - ':8774/v2/%(tenant_id)s'
1050         nova_admin_url:
1051           list_join:
1052             - ''
1053             - - 'http://'
1054               - {get_param: NovaApiVirtualIP}
1055               - ':8774/v2/%(tenant_id)s'
1056         nova_v3_public_url:
1057           list_join:
1058             - ''
1059             - - 'http://'
1060               - {get_param: PublicVirtualIP}
1061               - ':8774/v3'
1062         nova_v3_internal_url:
1063           list_join:
1064             - ''
1065             - - 'http://'
1066               - {get_param: NovaApiVirtualIP}
1067               - ':8774/v3'
1068         nova_v3_admin_url:
1069           list_join:
1070             - ''
1071             - - 'http://'
1072               - {get_param: NovaApiVirtualIP}
1073               - ':8774/v3'
1074         nova_ec2_public_url:
1075           list_join:
1076             - ''
1077             - - 'http://'
1078               - {get_param: PublicVirtualIP}
1079               - ':8773/services/Cloud'
1080         nova_ec2_internal_url:
1081           list_join:
1082             - ''
1083             - - 'http://'
1084               - {get_param: NovaApiVirtualIP}
1085               - ':8773/services/Cloud'
1086         nova_ec2_admin_url:
1087           list_join:
1088             - ''
1089             - - 'http://'
1090               - {get_param: NovaApiVirtualIP}
1091               - ':8773/services/Admin'
1092         fencing_config: {get_param: FencingConfig}
1093         pcsd_password: {get_param: PcsdPassword}
1094         rabbit_username: {get_param: RabbitUserName}
1095         rabbit_password: {get_param: RabbitPassword}
1096         rabbit_cookie: {get_param: RabbitCookie}
1097         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
1098         rabbit_client_port: {get_param: RabbitClientPort}
1099         mongodb_no_journal: {get_param: MongoDbNoJournal}
1100         # We need to force this into quotes or hiera will return integer causing
1101         # the puppet module validation regexp to fail.
1102         # Remove when: https://github.com/puppetlabs/puppetlabs-rabbitmq/pull/401
1103         rabbit_fd_limit:
1104           str_replace:
1105             template: "'LIMIT'"
1106             params:
1107               LIMIT: {get_param: RabbitFDLimit}
1108         ntp_servers:
1109           str_replace:
1110             template: '["server"]'
1111             params:
1112               server: {get_param: NtpServer}
1113         control_virtual_interface: {get_param: ControlVirtualInterface}
1114         public_virtual_interface: {get_param: PublicVirtualInterface}
1115         swift_hash_suffix: {get_param: SwiftHashSuffix}
1116         swift_password: {get_param: SwiftPassword}
1117         swift_part_power: {get_param: SwiftPartPower}
1118         swift_replicas: {get_param: SwiftReplicas}
1119         swift_min_part_hours: {get_param: SwiftMinPartHours}
1120         swift_mount_check: {get_param: SwiftMountCheck}
1121         swift_public_url:
1122           list_join:
1123             - ''
1124             - - 'http://'
1125               - {get_param: PublicVirtualIP}
1126               - ':8080/v1/AUTH_%(tenant_id)s'
1127         swift_internal_url:
1128           list_join:
1129             - ''
1130             - - 'http://'
1131               - {get_param: SwiftProxyVirtualIP}
1132               - ':8080/v1/AUTH_%(tenant_id)s'
1133         swift_admin_url:
1134           list_join:
1135             - ''
1136             - - 'http://'
1137               - {get_param: SwiftProxyVirtualIP}
1138               - ':8080'
1139         swift_public_url_s3:
1140           list_join:
1141             - ''
1142             - - 'http://'
1143               - {get_param: PublicVirtualIP}
1144               - ':8080'
1145         swift_internal_url_s3:
1146           list_join:
1147             - ''
1148             - - 'http://'
1149               - {get_param: SwiftProxyVirtualIP}
1150               - ':8080'
1151         swift_admin_url_s3:
1152           list_join:
1153             - ''
1154             - - 'http://'
1155               - {get_param: SwiftProxyVirtualIP}
1156               - ':8080'
1157         enable_package_install: {get_param: EnablePackageInstall}
1158         enable_package_upgrade: {get_attr: [UpdateDeployment, update_managed_packages]}
1159         swift_proxy_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1160         swift_management_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
1161         cinder_iscsi_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderIscsiNetwork]}]}
1162         cinder_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1163         glance_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1164         glance_registry_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1165         glance_api_servers:
1166           list_join:
1167             - ''
1168             - - {get_param: GlanceProtocol}
1169               - '://'
1170               - {get_param: GlanceApiVirtualIP}
1171               - ':'
1172               - {get_param: GlancePort}
1173         glance_registry_host: {get_param: GlanceRegistryVirtualIP}
1174         glance_public_url:
1175           list_join:
1176             - ''
1177             - - {get_param: GlanceProtocol}
1178               - '://'
1179               - {get_param: PublicVirtualIP}
1180               - ':'
1181               - {get_param: GlancePort}
1182         glance_internal_url:
1183           list_join:
1184             - ''
1185             - - {get_param: GlanceProtocol}
1186               - '://'
1187               - {get_param: GlanceApiVirtualIP}
1188               - ':'
1189               - {get_param: GlancePort}
1190         glance_admin_url:
1191           list_join:
1192             - ''
1193             - - {get_param: GlanceProtocol}
1194               - '://'
1195               - {get_param: GlanceApiVirtualIP}
1196               - ':'
1197               - {get_param: GlancePort}
1198         heat_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1199         keystone_public_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1200         keystone_admin_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1201         keystone_region: {get_param: KeystoneRegion}
1202         mongo_db_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
1203         neutron_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1204         neutron_local_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NeutronTenantNetwork]}]}
1205         ceilometer_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1206         nova_api_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1207         nova_metadata_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1208         horizon_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1209         rabbitmq_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1210         redis_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
1211         redis_vip: {get_param: RedisVirtualIP}
1212         memcached_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1213         mysql_network: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1214         mysql_virtual_ip: {get_param: MysqlVirtualIP}
1215         ceph_cluster_network: {get_attr: [NetIpSubnetMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephClusterNetwork]}]}
1216         ceph_public_network: {get_attr: [NetIpSubnetMap, net_ip_subnet_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
1217         ceph_public_ip: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
1218
1219   # Map heat metadata into hiera datafiles
1220   ControllerConfig:
1221     type: OS::Heat::StructuredConfig
1222     properties:
1223       group: os-apply-config
1224       config:
1225         hiera:
1226           hierarchy:
1227             - '"%{::uuid}"'
1228             - heat_config_%{::deploy_config_name}
1229             - controller_extraconfig
1230             - extraconfig
1231             - controller
1232             - database
1233             - object
1234             - swift_devices_and_proxy # provided by SwiftDevicesAndProxyConfig
1235             - ceph_cluster # provided by CephClusterConfig
1236             - ceph
1237             - bootstrap_node # provided by BootstrapNodeConfig
1238             - all_nodes # provided by allNodesConfig
1239             - vip_data # provided by vip-config
1240             - '"%{::osfamily}"'
1241             - common
1242             - cinder_netapp_data # Optionally provided by ControllerExtraConfigPre
1243             - neutron_bigswitch_data # Optionally provided by ControllerExtraConfigPre
1244             - neutron_cisco_data # Optionally provided by ControllerExtraConfigPre
1245             - cisco_n1kv_data # Optionally provided by ControllerExtraConfigPre
1246           datafiles:
1247             controller_extraconfig:
1248               mapped_data: {get_param: ControllerExtraConfig}
1249             extraconfig:
1250               mapped_data: {get_param: ExtraConfig}
1251             common:
1252               raw_data: {get_file: hieradata/common.yaml}
1253             ceph:
1254               raw_data: {get_file: hieradata/ceph.yaml}
1255               mapped_data:
1256                 ceph::profile::params::cluster_network: {get_input: ceph_cluster_network}
1257                 ceph::profile::params::public_network: {get_input: ceph_public_network}
1258                 ceph::mon::public_addr: {get_input: ceph_public_ip}
1259             database:
1260               raw_data: {get_file: hieradata/database.yaml}
1261             object:
1262               raw_data: {get_file: hieradata/object.yaml}
1263             controller:
1264               raw_data: {get_file: hieradata/controller.yaml}
1265               mapped_data: # data supplied directly to this deployment configuration, etc
1266                 bootstack_nodeid: {get_input: bootstack_nodeid}
1267
1268                 # Pacemaker
1269                 enable_fencing: {get_input: enable_fencing}
1270                 hacluster_pwd: {get_input: pcsd_password}
1271                 tripleo::fencing::config: {get_input: fencing_config}
1272
1273                 # Swift
1274                 swift::proxy::proxy_local_net_ip: {get_input: swift_proxy_network}
1275                 swift::proxy::authtoken::auth_uri: {get_input: keystone_auth_uri}
1276                 swift::proxy::authtoken::identity_uri: {get_input: keystone_identity_uri}
1277                 swift::storage::all::storage_local_net_ip: {get_input: swift_management_network}
1278                 swift::swift_hash_suffix: {get_input: swift_hash_suffix}
1279                 swift::proxy::authtoken::admin_password: {get_input: swift_password}
1280                 tripleo::ringbuilder::part_power: {get_input: swift_part_power}
1281                 tripleo::ringbuilder::replicas: {get_input: swift_replicas}
1282                 tripleo::ringbuilder::min_part_hours: {get_input: swift_min_part_hours}
1283                 swift_mount_check: {get_input: swift_mount_check}
1284                 swift::keystone::auth::public_url: {get_input: swift_public_url }
1285                 swift::keystone::auth::internal_url: {get_input: swift_internal_url }
1286                 swift::keystone::auth::admin_url: {get_input: swift_admin_url }
1287                 swift::keystone::auth::public_url_s3: {get_input: swift_public_url_v3 }
1288                 swift::keystone::auth::internal_url_s3: {get_input: swift_internal_url_v3 }
1289                 swift::keystone::auth::admin_url_s3: {get_input: swift_admin_url_v3 }
1290                 swift::keystone::auth::password: {get_input: swift_password }
1291                 swift::keystone::auth::region: {get_input: keystone_region}
1292
1293                 # NOTE(dprince): build_ring support is currently not wired in.
1294                 # See: https://review.openstack.org/#/c/109225/
1295                 tripleo::ringbuilder::build_ring: True
1296
1297                 # Cinder
1298                 cinder_enable_nfs_backend: {get_input: cinder_enable_nfs_backend}
1299                 cinder_enable_rbd_backend: {get_input: cinder_enable_rbd_backend}
1300                 cinder_nfs_mount_options: {get_input: cinder_nfs_mount_options}
1301                 cinder_nfs_servers: {get_input: cinder_nfs_servers}
1302                 cinder_lvm_loop_device_size: {get_input: cinder_lvm_loop_device_size}
1303                 cinder_iscsi_helper: {get_input: cinder_iscsi_helper}
1304                 cinder_iscsi_ip_address: {get_input: cinder_iscsi_network}
1305                 cinder::database_connection: {get_input: cinder_dsn}
1306                 cinder::api::keystone_password: {get_input: cinder_password}
1307                 cinder::api::auth_uri: {get_input: keystone_auth_uri}
1308                 cinder::api::identity_uri: {get_input: keystone_identity_uri}
1309                 cinder::api::bind_host: {get_input: cinder_api_network}
1310                 cinder::rabbit_userid: {get_input: rabbit_username}
1311                 cinder::rabbit_password: {get_input: rabbit_password}
1312                 cinder::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1313                 cinder::rabbit_port: {get_input: rabbit_client_port}
1314                 cinder::debug: {get_input: debug}
1315                 cinder_enable_iscsi_backend: {get_input: cinder_enable_iscsi_backend}
1316                 cinder::glance::glance_api_servers: {get_input: glance_api_servers}
1317                 cinder_backend_config: {get_input: CinderBackendConfig}
1318                 cinder::db::mysql::password: {get_input: cinder_password}
1319                 cinder::keystone::auth::public_url: {get_input: cinder_public_url }
1320                 cinder::keystone::auth::internal_url: {get_input: cinder_internal_url }
1321                 cinder::keystone::auth::admin_url: {get_input: cinder_admin_url }
1322                 cinder::keystone::auth::public_url_v2: {get_input: cinder_public_url_v2 }
1323                 cinder::keystone::auth::internal_url_v2: {get_input: cinder_internal_url_v2 }
1324                 cinder::keystone::auth::admin_url_v2: {get_input: cinder_admin_url_v2 }
1325                 cinder::keystone::auth::password: {get_input: cinder_password }
1326                 cinder::keystone::auth::region: {get_input: keystone_region}
1327
1328                 # Glance
1329                 glance::api::bind_port: {get_input: glance_port}
1330                 glance::api::bind_host: {get_input: glance_api_network}
1331                 glance::api::auth_uri: {get_input: keystone_auth_uri}
1332                 glance::api::identity_uri: {get_input: keystone_identity_uri}
1333                 glance::api::registry_host: {get_input: glance_registry_host}
1334                 glance::api::keystone_password: {get_input: glance_password}
1335                 glance::api::debug: {get_input: debug}
1336                 glance_notifier_strategy: {get_input: glance_notifier_strategy}
1337                 glance_log_file: {get_input: glance_log_file}
1338                 glance_log_file: {get_input: glance_log_file}
1339                 glance::api::database_connection: {get_input: glance_dsn}
1340                 glance::registry::keystone_password: {get_input: glance_password}
1341                 glance::registry::database_connection: {get_input: glance_dsn}
1342                 glance::registry::bind_host: {get_input: glance_registry_network}
1343                 glance::registry::auth_uri: {get_input: keystone_auth_uri}
1344                 glance::registry::identity_uri: {get_input: keystone_identity_uri}
1345                 glance::registry::debug: {get_input: debug}
1346                 glance::backend::swift::swift_store_auth_address: {get_input: keystone_auth_address}
1347                 glance::backend::swift::swift_store_user: service:glance
1348                 glance::backend::swift::swift_store_key: {get_input: glance_password}
1349                 glance_backend: {get_input: glance_backend}
1350                 glance::db::mysql::password: {get_input: glance_password}
1351                 glance::keystone::auth::public_url: {get_input: glance_public_url }
1352                 glance::keystone::auth::internal_url: {get_input: glance_internal_url }
1353                 glance::keystone::auth::admin_url: {get_input: glance_admin_url }
1354                 glance::keystone::auth::password: {get_input: glance_password }
1355                 glance::keystone::auth::region: {get_input: keystone_region}
1356                 glance_file_pcmk_device: {get_input: glance_file_pcmk_device}
1357                 glance_file_pcmk_fstype: {get_input: glance_file_pcmk_fstype}
1358                 glance_file_pcmk_manage: {get_input: glance_file_pcmk_manage}
1359                 glance_file_pcmk_options: {get_input: glance_file_pcmk_options}
1360
1361                 # Heat
1362                 heat_stack_domain_admin_password: {get_input: heat_stack_domain_admin_password}
1363                 heat::engine::heat_watch_server_url: {get_input: heat.watch_server_url}
1364                 heat::engine::heat_metadata_server_url: {get_input: heat.metadata_server_url}
1365                 heat::engine::heat_waitcondition_server_url: {get_input: heat.waitcondition_server_url}
1366                 heat::engine::auth_encryption_key: {get_input: heat_auth_encryption_key}
1367                 heat::rabbit_userid: {get_input: rabbit_username}
1368                 heat::rabbit_password: {get_input: rabbit_password}
1369                 heat::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1370                 heat::rabbit_port: {get_input: rabbit_client_port}
1371                 heat::auth_uri: {get_input: keystone_auth_uri}
1372                 heat::keystone_ec2_uri: {get_input: keystone_ec2_uri}
1373                 heat::identity_uri: {get_input: keystone_identity_uri}
1374                 heat::keystone_password: {get_input: heat_password}
1375                 heat::api::bind_host: {get_input: heat_api_network}
1376                 heat::api_cloudwatch::bind_host: {get_input: heat_api_network}
1377                 heat::api_cfn::bind_host: {get_input: heat_api_network}
1378                 heat::database_connection: {get_input: heat_dsn}
1379                 heat::debug: {get_input: debug}
1380                 heat::db::mysql::password: {get_input: heat_password}
1381                 heat::keystone::auth::public_url: {get_input: heat_public_url }
1382                 heat::keystone::auth::internal_url: {get_input: heat_internal_url }
1383                 heat::keystone::auth::admin_url: {get_input: heat_admin_url }
1384                 heat::keystone::auth::password: {get_input: heat_password }
1385                 heat::keystone::auth::region: {get_input: keystone_region}
1386
1387                 # Keystone
1388                 keystone::admin_token: {get_input: admin_token}
1389                 keystone_ca_certificate: {get_input: keystone_ca_certificate}
1390                 keystone_signing_key: {get_input: keystone_signing_key}
1391                 keystone_signing_certificate: {get_input: keystone_signing_certificate}
1392                 keystone_ssl_certificate: {get_input: keystone_ssl_certificate}
1393                 keystone_ssl_certificate_key: {get_input: keystone_ssl_certificate_key}
1394                 keystone::database_connection: {get_input: keystone_dsn}
1395                 keystone::public_bind_host: {get_input: keystone_public_api_network}
1396                 keystone::admin_bind_host: {get_input: keystone_admin_api_network}
1397                 keystone::debug: {get_input: debug}
1398                 keystone::db::mysql::password: {get_input: admin_token}
1399                 keystone::rabbit_userid: {get_input: rabbit_username}
1400                 keystone::rabbit_password: {get_input: rabbit_password}
1401                 keystone::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1402                 keystone::rabbit_port: {get_input: rabbit_client_port}
1403                 keystone::notification_driver: {get_input: keystone_notification_driver}
1404                 keystone::notification_format: {get_input: keystone_notification_format}
1405                 keystone::roles::admin::email: {get_input: admin_email}
1406                 keystone::roles::admin::password: {get_input: admin_password}
1407                 keystone::endpoint::public_url: {get_input: keystone_public_url}
1408                 keystone::endpoint::internal_url: {get_input: keystone_internal_url}
1409                 keystone::endpoint::admin_url: {get_input: keystone_identity_uri}
1410                 keystone::endpoint::region: {get_input: keystone_region}
1411                 # MongoDB
1412                 mongodb::server::bind_ip: {get_input: mongo_db_network}
1413                 mongodb::server::nojournal: {get_input: mongodb_no_journal}
1414                 # MySQL
1415                 admin_password: {get_input: admin_password}
1416                 enable_galera: {get_input: enable_galera}
1417                 enable_ceph_storage: {get_input: enable_ceph_storage}
1418                 enable_swift_storage: {get_input: enable_swift_storage}
1419                 mysql_innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
1420                 mysql_max_connections: {get_input: mysql_max_connections}
1421                 mysql::server::root_password: {get_input: mysql_root_password}
1422                 mysql_cluster_name: {get_input: mysql_cluster_name}
1423                 mysql_bind_host: {get_input: mysql_network}
1424                 mysql_virtual_ip: {get_input: mysql_virtual_ip}
1425
1426                 # Neutron
1427                 neutron::bind_host: {get_input: neutron_api_network}
1428                 neutron::rabbit_password: {get_input: rabbit_password}
1429                 neutron::rabbit_user: {get_input: rabbit_username}
1430                 neutron::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1431                 neutron::rabbit_port: {get_input: rabbit_client_port}
1432                 neutron::debug: {get_input: debug}
1433                 neutron::server::auth_uri: {get_input: keystone_auth_uri}
1434                 neutron::server::identity_uri: {get_input: keystone_identity_uri}
1435                 neutron::server::database_connection: {get_input: neutron_dsn}
1436                 neutron::agents::l3::external_network_bridge: {get_input: neutron_external_network_bridge}
1437                 neutron::agents::ml2::ovs::enable_tunneling: {get_input: neutron_enable_tunneling}
1438                 neutron::agents::ml2::ovs::local_ip: {get_input: neutron_local_ip}
1439                 neutron_flat_networks: {get_input: neutron_flat_networks}
1440                 neutron::agents::metadata::shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
1441                 neutron::agents::metadata::metadata_ip: {get_input: neutron_api_network}
1442                 neutron_agent_mode: {get_input: neutron_agent_mode}
1443                 neutron_router_distributed: {get_input: neutron_router_distributed}
1444                 neutron::core_plugin: {get_input: neutron_core_plugin}
1445                 neutron::service_plugins: {get_input: neutron_service_plugins}
1446                 neutron::plugins::ml2::type_drivers: {get_input: neutron_type_drivers}
1447                 neutron_mechanism_drivers: {get_input: neutron_mechanism_drivers}
1448                 neutron::server::allow_automatic_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
1449                 neutron::server::l3_ha: {get_input: neutron_l3_ha}
1450                 neutron::dhcp_agents_per_network: {get_input: neutron_dhcp_agents_per_network}
1451                 neutron::plugins::ml2::network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
1452                 neutron::plugins::ml2::tunnel_id_ranges: {get_input: neutron_tunnel_id_ranges}
1453                 neutron::plugins::ml2::vni_ranges: {get_input: neutron_vni_ranges}
1454                 neutron_bridge_mappings: {get_input: neutron_bridge_mappings}
1455                 neutron_public_interface: {get_input: neutron_public_interface}
1456                 neutron_public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
1457                 neutron_public_interface_default_route: {get_input: neutron_public_interface_default_route}
1458                 neutron_public_interface_tag: {get_input: neutron_public_interface_tag}
1459                 neutron_tenant_network_type: {get_input: neutron_tenant_network_type}
1460                 neutron_tunnel_types: {get_input: neutron_tunnel_types}
1461                 neutron::server::auth_password: {get_input: neutron_password}
1462                 neutron::agents::metadata::auth_password: {get_input: neutron_password}
1463                 neutron_dnsmasq_options: {get_input: neutron_dnsmasq_options}
1464                 neutron_dsn: {get_input: neutron_dsn}
1465                 neutron::agents::metadata::auth_url: {get_input: keystone_identity_uri}
1466                 neutron::db::mysql::password: {get_input: neutron_password}
1467                 neutron::keystone::auth::public_url: {get_input: neutron_public_url }
1468                 neutron::keystone::auth::internal_url: {get_input: neutron_internal_url }
1469                 neutron::keystone::auth::admin_url: {get_input: neutron_admin_url }
1470                 neutron::keystone::auth::password: {get_input: neutron_password }
1471                 neutron::keystone::auth::region: {get_input: keystone_region}
1472
1473                 # Ceilometer
1474                 ceilometer_backend: {get_input: ceilometer_backend}
1475                 ceilometer_mysql_conn_string: {get_input: ceilometer_dsn}
1476                 ceilometer::metering_secret: {get_input: ceilometer_metering_secret}
1477                 ceilometer::rabbit_userid: {get_input: rabbit_username}
1478                 ceilometer::rabbit_password: {get_input: rabbit_password}
1479                 ceilometer::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1480                 ceilometer::rabbit_port: {get_input: rabbit_client_port}
1481                 ceilometer::debug: {get_input: debug}
1482                 ceilometer::api::host: {get_input: ceilometer_api_network}
1483                 ceilometer::api::keystone_password: {get_input: ceilometer_password}
1484                 ceilometer::api::keystone_auth_uri: {get_input: keystone_auth_uri}
1485                 ceilometer::api::keystone_identity_uri: {get_input: keystone_identity_uri}
1486                 ceilometer::agent::auth::auth_password: {get_input: ceilometer_password}
1487                 ceilometer::agent::auth::auth_url: {get_input: keystone_auth_address}
1488                 ceilometer::agent::central::coordination_url: {get_input: ceilometer_coordination_url}
1489                 ceilometer::db::mysql::password: {get_input: ceilometer_password}
1490                 ceilometer::keystone::auth::public_url: {get_input: ceilometer_public_url }
1491                 ceilometer::keystone::auth::internal_url: {get_input: ceilometer_internal_url }
1492                 ceilometer::keystone::auth::admin_url: {get_input: ceilometer_admin_url }
1493                 ceilometer::keystone::auth::password: {get_input: ceilometer_password }
1494                 ceilometer::keystone::auth::region: {get_input: keystone_region}
1495                 snmpd_readonly_user_name: {get_input: snmpd_readonly_user_name}
1496                 snmpd_readonly_user_password: {get_input: snmpd_readonly_user_password}
1497
1498                 # Nova
1499                 nova::rabbit_userid: {get_input: rabbit_username}
1500                 nova::rabbit_password: {get_input: rabbit_password}
1501                 nova::rabbit_use_ssl: {get_input: rabbit_client_use_ssl}
1502                 nova::rabbit_port: {get_input: rabbit_client_port}
1503                 nova::debug: {get_input: debug}
1504                 nova::api::auth_uri: {get_input: keystone_auth_uri}
1505                 nova::api::identity_uri: {get_input: keystone_identity_uri}
1506                 nova::api::api_bind_address: {get_input: nova_api_network}
1507                 nova::api::metadata_listen: {get_input: nova_metadata_network}
1508                 nova::api::admin_password: {get_input: nova_password}
1509                 nova::database_connection: {get_input: nova_dsn}
1510                 nova::glance_api_servers: {get_input: glance_api_servers}
1511                 nova::api::neutron_metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
1512                 nova::network::neutron::neutron_admin_password: {get_input: neutron_password}
1513                 nova::network::neutron::neutron_url: {get_input: neutron_internal_url}
1514                 nova::network::neutron::neutron_admin_auth_url: {get_input: neutron_admin_auth_url}
1515                 nova::vncproxy::host: {get_input: nova_api_network}
1516                 nova::db::mysql::password: {get_input: nova_password}
1517                 nova::keystone::auth::public_url: {get_input: nova_public_url}
1518                 nova::keystone::auth::internal_url: {get_input: nova_internal_url}
1519                 nova::keystone::auth::admin_url: {get_input: nova_admin_url}
1520                 nova::keystone::auth::public_url_v3: {get_input: nova_v3_public_url}
1521                 nova::keystone::auth::internal_url_v3: {get_input: nova_v3_internal_url}
1522                 nova::keystone::auth::admin_url_v3: {get_input: nova_v3_admin_url}
1523                 nova::keystone::auth::ec2_public_url: {get_input: nova_ec2_public_url}
1524                 nova::keystone::auth::ec2_internal_url: {get_input: nova_ec2_internal_url}
1525                 nova::keystone::auth::ec2_admin_url:  {get_input: nova_ec2_admin_url}
1526                 nova::keystone::auth::password: {get_input: nova_password }
1527                 nova::keystone::auth::region: {get_input: keystone_region}
1528
1529                 # Horizon
1530                 apache::ip: {get_input: horizon_network}
1531                 horizon::allowed_hosts: {get_input: horizon_allowed_hosts}
1532                 horizon::django_debug: {get_input: debug}
1533                 horizon::secret_key: {get_input: horizon_secret}
1534                 horizon::bind_address: {get_input: horizon_network}
1535                 horizon::keystone_url: {get_input: keystone_auth_uri}
1536
1537                 # Rabbit
1538                 rabbitmq::node_ip_address: {get_input: rabbitmq_network}
1539                 rabbitmq::erlang_cookie: {get_input: rabbit_cookie}
1540                 rabbitmq::file_limit: {get_input: rabbit_fd_limit}
1541                 rabbitmq::default_user: {get_input: rabbit_username}
1542                 rabbitmq::default_pass: {get_input: rabbit_password}
1543                 # Redis
1544                 redis::bind: {get_input: redis_network}
1545                 redis_vip: {get_input: redis_vip}
1546                 # Misc
1547                 memcached::listen_ip: {get_input: memcached_network}
1548                 neutron_public_interface_ip: {get_input: neutron_public_interface_ip}
1549                 ntp::servers: {get_input: ntp_servers}
1550                 control_virtual_interface: {get_input: control_virtual_interface}
1551                 public_virtual_interface: {get_input: public_virtual_interface}
1552                 tripleo::loadbalancer::control_virtual_interface: {get_input: control_virtual_interface}
1553                 tripleo::loadbalancer::public_virtual_interface: {get_input: public_virtual_interface}
1554                 tripleo::loadbalancer::haproxy_log_address: {get_input: haproxy_log_address}
1555                 tripleo::packages::enable_install: {get_input: enable_package_install}
1556                 tripleo::packages::enable_upgrade: {get_input: enable_package_upgrade}
1557
1558   # Hook for site-specific additional pre-deployment config, e.g extra hieradata
1559   ControllerExtraConfigPre:
1560     depends_on: ControllerDeployment
1561     type: OS::TripleO::ControllerExtraConfigPre
1562     properties:
1563         server: {get_resource: Controller}
1564
1565   # Hook for site-specific additional pre-deployment config,
1566   # applying to all nodes, e.g node registration/unregistration
1567   NodeExtraConfig:
1568     depends_on: ControllerExtraConfigPre
1569     type: OS::TripleO::NodeExtraConfig
1570     properties:
1571         server: {get_resource: Controller}
1572
1573   UpdateConfig:
1574     type: OS::TripleO::Tasks::PackageUpdate
1575
1576   UpdateDeployment:
1577     type: OS::Heat::SoftwareDeployment
1578     properties:
1579       config: {get_resource: UpdateConfig}
1580       server: {get_resource: Controller}
1581       input_values:
1582         update_identifier:
1583           get_param: UpdateIdentifier
1584
1585 outputs:
1586   ip_address:
1587     description: IP address of the server in the ctlplane network
1588     value: {get_attr: [Controller, networks, ctlplane, 0]}
1589   external_ip_address:
1590     description: IP address of the server in the external network
1591     value: {get_attr: [ExternalPort, ip_address]}
1592   internal_api_ip_address:
1593     description: IP address of the server in the internal_api network
1594     value: {get_attr: [InternalApiPort, ip_address]}
1595   storage_ip_address:
1596     description: IP address of the server in the storage network
1597     value: {get_attr: [StoragePort, ip_address]}
1598   storage_mgmt_ip_address:
1599     description: IP address of the server in the storage_mgmt network
1600     value: {get_attr: [StorageMgmtPort, ip_address]}
1601   tenant_ip_address:
1602     description: IP address of the server in the tenant network
1603     value: {get_attr: [TenantPort, ip_address]}
1604   hostname:
1605     description: Hostname of the server
1606     value: {get_attr: [Controller, name]}
1607   corosync_node:
1608     description: >
1609       Node object in the format {ip: ..., name: ...} format that the corosync
1610       element expects
1611     value:
1612       ip: {get_attr: [Controller, networks, ctlplane, 0]}
1613       name: {get_attr: [Controller, name]}
1614   hosts_entry:
1615     description: >
1616       Server's IP address and hostname in the /etc/hosts format
1617     value:
1618       str_replace:
1619         template: IP HOST.localdomain HOST CLOUDNAME
1620         params:
1621           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, ControllerHostnameResolveNetwork]}]}
1622           HOST: {get_attr: [Controller, name]}
1623           CLOUDNAME: {get_param: CloudName}
1624   nova_server_resource:
1625     description: Heat resource handle for the Nova compute server
1626     value:
1627       {get_resource: Controller}
1628   swift_device:
1629     description: Swift device formatted for swift-ring-builder
1630     value:
1631       str_replace:
1632         template: 'r1z1-IP:%PORT%/d1'
1633         params:
1634           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, SwiftMgmtNetwork]}]}
1635   swift_proxy_memcache:
1636     description: Swift proxy-memcache value
1637     value:
1638       str_replace:
1639         template: "IP:11211"
1640         params:
1641           IP: {get_attr: [NetIpMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1642   config_identifier:
1643     description: identifier which changes if the controller configuration may need re-applying
1644     value:
1645       list_join:
1646         - ','
1647         - - {get_attr: [ControllerDeployment, deploy_stdout]}
1648           - {get_attr: [ControllerExtraConfigPre, deploy_stdout]}
1649           - {get_param: UpdateIdentifier}