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