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