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