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