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