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