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