Merge "Make memcached bind on ctlplane instead of 0.0.0.0"
[apex-tripleo-heat-templates.git] / controller.yaml
1 heat_template_version: 2014-10-16
2
3 description: >
4   OpenStack control plane node. Can be wrapped in a ResourceGroup for scaling.
5
6 parameters:
7   AdminPassword:
8     default: unset
9     description: The password for the keystone admin account, used for monitoring, querying neutron etc.
10     type: string
11     hidden: true
12   AdminToken:
13     default: unset
14     description: The keystone auth secret.
15     type: string
16     hidden: true
17   CeilometerMeteringSecret:
18     default: unset
19     description: Secret shared by the ceilometer services.
20     type: string
21     hidden: true
22   CeilometerPassword:
23     default: unset
24     description: The password for the ceilometer service account.
25     type: string
26     hidden: true
27   CinderEnableIscsiBackend:
28     default: true
29     description: Whether to enable or not the Iscsi backend for Cinder
30     type: boolean
31   CinderEnableRbdBackend:
32     default: false
33     description: Whether to enable or not the Rbd backend for Cinder
34     type: boolean
35   CinderISCSIHelper:
36     default: tgtadm
37     description: The iSCSI helper to use with cinder.
38     type: string
39   CinderLVMLoopDeviceSize:
40     default: 5000
41     description: The size of the loopback file used by the cinder LVM driver.
42     type: number
43   CinderPassword:
44     default: unset
45     description: The password for the cinder service account, used by cinder-api.
46     type: string
47     hidden: true
48   CloudName:
49     default: ''
50     description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
51     type: string
52   ControllerExtraConfig:
53     default: {}
54     description: |
55       Controller specific configuration to inject into the cluster. Same
56       structure as ExtraConfig.
57     type: json
58   ControlVirtualInterface:
59     default: 'br-ex'
60     description: Interface where virtual ip will be assigned.
61     type: string
62   Debug:
63     default: ''
64     description: Set to True to enable debugging on all services.
65     type: string
66   EnableGalera:
67     default: true
68     description: Whether to use Galera instead of regular MariaDB.
69     type: boolean
70   ExtraConfig:
71     default: {}
72     description: |
73       Additional configuration to inject into the cluster. The JSON should have
74       the following structure:
75         {"FILEKEY":
76           {"config":
77             [{"section": "SECTIONNAME",
78               "values":
79                 [{"option": "OPTIONNAME",
80                   "value": "VALUENAME"
81                  }
82                 ]
83              }
84             ]
85           }
86         }
87       For instance:
88         {"nova":
89           {"config":
90             [{"section": "default",
91               "values":
92                 [{"option": "compute_manager",
93                   "value": "ironic.nova.compute.manager.ClusterComputeManager"
94                  }
95                 ]
96              },
97              {"section": "cells",
98               "values":
99                 [{"option": "driver",
100                   "value": "nova.cells.rpc_driver.CellsRPCDriver"
101                  }
102                 ]
103              }
104             ]
105           }
106         }
107     type: json
108   Flavor:
109     description: Flavor for control nodes to request when deploying.
110     type: string
111     constraints:
112       - custom_constraint: nova.flavor
113   GlanceNotifierStrategy:
114     description: Strategy to use for Glance notification queue
115     type: string
116     default: noop
117   GlanceLogFile:
118     description: The filepath of the file to use for logging messages from Glance.
119     type: string
120     default: ''
121   GlancePassword:
122     default: unset
123     description: The password for the glance service account, used by the glance services.
124     type: string
125     hidden: true
126   GlancePort:
127     default: "9292"
128     description: Glance port.
129     type: string
130   GlanceProtocol:
131     default: http
132     description: Protocol to use when connecting to glance, set to https for SSL.
133     type: string
134   HeatPassword:
135     default: unset
136     description: The password for the Heat service account, used by the Heat services.
137     type: string
138     hidden: true
139   HeatStackDomainAdminPassword:
140     description: Password for heat_domain_admin user.
141     type: string
142     default: ''
143     hidden: true
144   HeatAuthEncryptionKey:
145     description: Auth encryption key for heat-engine
146     type: string
147   Image:
148     type: string
149     default: overcloud-control
150     constraints:
151       - custom_constraint: glance.image
152   ImageUpdatePolicy:
153     default: 'REBUILD_PRESERVE_EPHEMERAL'
154     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
155     type: string
156   KeyName:
157     default: default
158     description: Name of an existing EC2 KeyPair to enable SSH access to the instances
159     type: string
160     constraints:
161       - custom_constraint: nova.keypair
162   KeystoneCACertificate:
163     default: ''
164     description: Keystone self-signed certificate authority certificate.
165     type: string
166   KeystoneSigningCertificate:
167     default: ''
168     description: Keystone certificate for verifying token validity.
169     type: string
170   KeystoneSigningKey:
171     default: ''
172     description: Keystone key for signing tokens.
173     type: string
174     hidden: true
175   KeystoneSSLCertificate:
176     default: ''
177     description: Keystone certificate for verifying token validity.
178     type: string
179   KeystoneSSLCertificateKey:
180     default: ''
181     description: Keystone key for signing tokens.
182     type: string
183     hidden: true
184   MysqlClusterUniquePart:
185     description: A unique identifier of the MySQL cluster the controller is in.
186     type: string
187     default: 'unset'  # Has to be here because of the ignored empty value bug
188     # Drop the validation: https://bugs.launchpad.net/tripleo/+bug/1405446
189     # constraints:
190     # - length: {min: 4, max: 10}
191   MysqlInnodbBufferPoolSize:
192     description: >
193         Specifies the size of the buffer pool in megabytes. Setting to
194         zero should be interpreted as "no value" and will defer to the
195         lower level default.
196     type: number
197     default: 0
198   MysqlRootPassword:
199     type: string
200     hidden: true
201     default: ''  # Has to be here because of the ignored empty value bug
202   NeutronBridgeMappings:
203     description: >
204       The OVS logical->physical bridge mappings to use. See the Neutron
205       documentation for details. Defaults to mapping br-ex - the external
206       bridge on hosts - to a physical name 'datacentre' which can be used
207       to create provider networks (and we use this for the default floating
208       network) - if changing this either use different post-install network
209       scripts or be sure to keep 'datacentre' as a mapping network name.
210     type: string
211     default: ""
212   NeutronDnsmasqOptions:
213     default: 'dhcp-option-force=26,1400'
214     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.
215     type: string
216   NeutronAgentMode:
217     default: 'dvr_snat'
218     description: Agent mode for the neutron-l3-agent on the controller hosts
219     type: string
220   NeutronDVR:
221     default: 'False'
222     description: Whether to configure Neutron Distributed Virtual Routers
223     type: string
224   NeutronMetadataProxySharedSecret:
225     default: 'unset'
226     description: Shared secret to prevent spoofing
227     type: string
228   NeutronMechanismDrivers:
229     default: 'openvswitch'
230     description: |
231         The mechanism drivers for the Neutron tenant network. To specify multiple
232         values, use a comma separated string, like so: 'openvswitch,l2_population'
233     type: string
234   NeutronAllowL3AgentFailover:
235     default: 'True'
236     description: Allow automatic l3-agent failover
237     type: string
238   NeutronL3HA:
239     default: 'False'
240     description: Whether to enable l3-agent HA
241     type: string
242   NeutronEnableTunnelling:
243     type: string
244     default: "True"
245   NeutronFlatNetworks:
246     type: string
247     default: ''
248     description: If set, flat networks to configure in neutron plugins.
249   NeutronNetworkType:
250     default: 'gre'
251     description: The tenant network type for Neutron, either gre or vxlan.
252     type: string
253   NeutronNetworkVLANRanges:
254     default: 'datacentre'
255     description: >
256       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
257       Neutron documentation for permitted values. Defaults to permitting any
258       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
259     type: string
260   NeutronPassword:
261     default: unset
262     description: The password for the neutron service account, used by neutron agents.
263     type: string
264     hidden: true
265   NeutronPublicInterface:
266     default: nic1
267     description: What interface to bridge onto br-ex for network nodes.
268     type: string
269   NeutronPublicInterfaceTag:
270     default: ''
271     description: >
272       VLAN tag for creating a public VLAN. The tag will be used to
273       create an access port on the exterior bridge for each control plane node,
274       and that port will be given the IP address returned by neutron from the
275       public network. Set CONTROLEXTRA=overcloud-vlan-port.yaml when compiling
276       overcloud.yaml to include the deployment of VLAN ports to the control
277       plane.
278     type: string
279   NeutronPublicInterfaceDefaultRoute:
280     default: ''
281     description: A custom default route for the NeutronPublicInterface.
282     type: string
283   NeutronPublicInterfaceIP:
284     default: ''
285     description: A custom IP address to put onto the NeutronPublicInterface.
286     type: string
287   NeutronPublicInterfaceRawDevice:
288     default: ''
289     description: If set, the public interface is a vlan with this device as the raw device.
290     type: string
291   NeutronTunnelTypes:
292     default: 'gre'
293     description: |
294         The tunnel types for the Neutron tenant network. To specify multiple
295         values, use a comma separated string, like so: 'gre,vxlan'
296     type: string
297   NovaPassword:
298     default: unset
299     description: The password for the nova service account, used by nova-api.
300     type: string
301     hidden: true
302   NtpServer:
303     type: string
304     default: ''
305   PublicVirtualInterface:
306     default: 'br-ex'
307     description: >
308         Specifies the interface where the public-facing virtual ip will be assigned.
309         This should be int_public when a VLAN is being used.
310     type: string
311   PublicVirtualIP:
312     type: string
313     default: ''  # Has to be here because of the ignored empty value bug
314   RabbitCookie:
315     type: string
316     default: ''  # Has to be here because of the ignored empty value bug
317     hidden: true
318   RabbitPassword:
319     default: guest
320     description: The password for RabbitMQ
321     type: string
322     hidden: true
323   RabbitUserName:
324     default: guest
325     description: The username for RabbitMQ
326     type: string
327   RabbitClientUseSSL:
328     default: false
329     description: >
330         Rabbit client subscriber parameter to specify
331         an SSL connection to the RabbitMQ host.
332     type: string
333   RabbitClientPort:
334     default: 5672
335     description: Set rabbit subscriber port, change this if using SSL
336     type: number
337   SnmpdReadonlyUserName:
338     default: ro_snmp_user
339     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
340     type: string
341   SnmpdReadonlyUserPassword:
342     default: unset
343     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
344     type: string
345     hidden: true
346   SSLCACertificate:
347     default: ''
348     description: If set, the contents of an SSL certificate authority file.
349     type: string
350   SSLCertificate:
351     default: ''
352     description: If set, the contents of an SSL certificate .crt file for encrypting SSL endpoints.
353     type: string
354     hidden: true
355   SSLKey:
356     default: ''
357     description: If set, the contents of an SSL certificate .key file for encrypting SSL endpoints.
358     type: string
359     hidden: true
360   SwiftHashSuffix:
361     default: unset
362     description: A random string to be used as a salt when hashing to determine mappings
363       in the ring.
364     hidden: true
365     type: string
366   SwiftMountCheck:
367     default: 'false'
368     description: Value of mount_check in Swift account/container/object -server.conf
369     type: boolean
370   SwiftMinPartHours:
371     type: number
372     default: 1
373     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
374   SwiftPartPower:
375     default: 10
376     description: Partition Power to use when building Swift rings
377     type: number
378   SwiftPassword:
379     default: unset
380     description: The password for the swift service account, used by the swift proxy
381       services.
382     hidden: true
383     type: string
384   SwiftReplicas:
385     type: number
386     default: 3
387     description: How many replicas to use in the swift rings.
388   VirtualIP:
389     type: string
390     default: ''  # Has to be here because of the ignored empty value bug
391
392
393 resources:
394
395   Controller:
396     type: OS::Nova::Server
397     properties:
398       image: {get_param: Image}
399       image_update_policy: {get_param: ImageUpdatePolicy}
400       flavor: {get_param: Flavor}
401       key_name: {get_param: KeyName}
402       networks:
403         - network: ctlplane
404       user_data_format: SOFTWARE_CONFIG
405
406   NetworkConfig:
407     type: OS::TripleO::Net::SoftwareConfig
408
409   NetworkDeployment:
410     type: OS::TripleO::SoftwareDeployment
411     properties:
412       signal_transport: NO_SIGNAL
413       config: {get_attr: [NetworkConfig, config_id]}
414       server: {get_resource: Controller}
415       input_values:
416         bridge_name: br-ex
417         interface_name: {get_param: NeutronPublicInterface}
418
419   ControllerPassthroughConfig:
420     type: OS::Heat::StructuredConfig
421     properties:
422       group: os-apply-config
423       config: {get_input: passthrough_config}
424
425   ControllerPassthroughConfigSpecific:
426     type: OS::Heat::StructuredConfig
427     properties:
428       group: os-apply-config
429       config: {get_input: passthrough_config_specific}
430
431   ControllerConfig:
432     type: OS::Heat::StructuredConfig
433     properties:
434       group: os-apply-config
435       config:
436         admin-password: {get_input: admin_password}
437         admin-token: {get_input: admin_token}
438         bootstack:
439           public_interface_ip: {get_input: neutron_public_interface_ip}
440         bootstrap_host:
441           nodeid: {get_input: bootstack_nodeid}
442         cinder:
443           db: {get_input: cinder_dsn}
444           debug: {get_input: debug}
445           volume_size_mb: {get_input: cinder_lvm_loop_device_size}
446           service-password: {get_input: cinder_password}
447           iscsi-helper: {get_input: CinderISCSIHelper}
448         controller-address: {get_input: controller_host}
449         corosync:
450           bindnetaddr: {get_input: controller_host}
451           mcastport: 5577
452         pacemaker:
453           stonith_enabled : false
454           recheck_interval : 5
455           quorum_policy : ignore
456         db-password: unset
457         glance:
458           registry:
459             host: {get_input: controller_virtual_ip}
460           backend: swift
461           db: {get_input: glance_dsn}
462           debug: {get_input: debug}
463           host: {get_input: controller_virtual_ip}
464           port: {get_input: glance_port}
465           protocol: {get_input: glance_protocol}
466           service-password: {get_input: glance_password}
467           swift-store-user: service:glance
468           swift-store-key: {get_input: glance_password}
469           notifier-strategy: {get_input: glance_notifier_strategy}
470           log-file: {get_input: glance_log_file}
471         heat:
472           admin_password: {get_input: heat_password}
473           admin_tenant_name: service
474           admin_user: heat
475           auth_encryption_key: {get_input: heat_auth_encryption_key}
476           db: {get_input: heat_dsn}
477           debug: {get_input: debug}
478           stack_domain_admin_password: {get_input: heat_stack_domain_admin_password}
479           watch_server_url: {get_input: heat.watch_server_url}
480           metadata_server_url: {get_input: heat.metadata_server_url}
481           waitcondition_server_url: {get_input: heat.waitcondition_server_url}
482         keystone:
483           db: {get_input: keystone_dsn}
484           debug: {get_input: debug}
485           host: {get_input: controller_virtual_ip}
486           ca_certificate: {get_input: keystone_ca_certificate}
487           signing_key: {get_input: keystone_signing_key}
488           signing_certificate: {get_input: keystone_signing_certificate}
489           ssl:
490               certificate: {get_input: keystone_ssl_certificate}
491               certificate_key: {get_input: keystone_ssl_certificate_key}
492         mysql:
493           innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
494           local_bind: true
495           root-password: {get_input: mysql_root_password}
496           cluster_name: {get_input: mysql_cluster_name}
497         neutron:
498           debug: {get_input: debug}
499           flat-networks: {get_input: neutron_flat_networks}
500           host: {get_input: controller_virtual_ip}
501           metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
502           agent_mode: {get_input: neutron_agent_mode}
503           router_distributed: {get_input: neutron_router_distributed}
504           mechanism_drivers: {get_input: neutron_mechanism_drivers}
505           allow_automatic_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
506           l3_ha: {get_input: neutron_l3_ha}
507           ovs:
508             enable_tunneling: {get_input: neutron_enable_tunneling}
509             local_ip: {get_input: controller_host}
510             network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
511             bridge_mappings: {get_input: neutron_bridge_mappings}
512             public_interface: {get_input: neutron_public_interface}
513             public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
514             public_interface_route: {get_input: neutron_public_interface_default_route}
515             public_interface_tag: {get_input: neutron_public_interface_tag}
516             physical_bridge: br-ex
517             tenant_network_type: {get_input: neutron_tenant_network_type}
518             tunnel_types: {get_input: neutron_tunnel_types}
519           ovs_db: {get_input: neutron_dsn}
520           service-password: {get_input: neutron_password}
521           dnsmasq-options: {get_input: neutron_dnsmasq_options}
522         ceilometer:
523           db: {get_input: ceilometer_dsn}
524           debug: {get_input: debug}
525           metering_secret: {get_input: ceilometer_metering_secret}
526           service-password: {get_input: ceilometer_password}
527         snmpd:
528           export_MIB: UCD-SNMP-MIB
529           readonly_user_name: {get_input: snmpd_readonly_user_name}
530           readonly_user_password: {get_input: snmpd_readonly_user_password}
531         nova:
532           compute_driver: libvirt.LibvirtDriver
533           db: {get_input: nova_dsn}
534           default_floating_pool:
535             ext-net
536           host: {get_input: controller_virtual_ip}
537           metadata-proxy: true
538           service-password: {get_input: nova_password}
539         rabbit:
540           host: {get_input: controller_virtual_ip}
541           username: {get_input: rabbit_username}
542           password: {get_input: rabbit_password}
543           cookie: {get_input: rabbit_cookie}
544           rabbit_client_use_ssl: {get_input: rabbit_client_use_ssl}
545           rabbit_port: {get_input: rabbit_client_port}
546         ntp:
547           servers:
548               - {server: {get_input: ntp_server}}
549         virtual_interfaces:
550           instances:
551             - vrrp_instance_name: VI_CONTROL
552               virtual_router_id: 51
553               keepalive_interface: {get_input: control_virtual_interface}
554               priority: 101
555               virtual_ips:
556               - ip: {get_input: controller_virtual_ip}
557                 interface: {get_input: control_virtual_interface}
558             - vrrp_instance_name: VI_PUBLIC
559               virtual_router_id: 52
560               keepalive_interface: {get_input: public_virtual_interface}
561               priority: 101
562               virtual_ips:
563               - ip: {get_input: public_virtual_ip}
564                 interface: {get_input: public_virtual_interface}
565           vrrp_sync_groups:
566             - name: VG1
567               members:
568                 - VI_CONTROL
569                 - VI_PUBLIC
570         keepalived:
571           keepalive_interface: {get_input: public_virtual_interface}
572           priority: 101
573         virtual_ips:
574             -
575               ip: {get_input: controller_virtual_ip}
576               interface: {get_input: control_virtual_interface}
577             -
578               ip: {get_input: public_virtual_ip}
579               interface: {get_input: public_virtual_interface}
580         haproxy:
581           net_binds:
582             - ip: {get_input: controller_virtual_ip}
583           options:
584             - option httpchk GET /
585           services:
586             - name: keystone_admin
587               port: 35357
588               net_binds: &public_binds
589                 - ip: {get_input: controller_virtual_ip}
590                 - ip: {get_input: public_virtual_ip}
591             - name: keystone_public
592               port: 5000
593               net_binds: *public_binds
594             - name: horizon
595               port: 80
596               net_binds: *public_binds
597             - name: neutron
598               port: 9696
599               net_binds: *public_binds
600             - name: cinder
601               port: 8776
602               net_binds: *public_binds
603             - name: glance_api
604               port: 9292
605               net_binds: *public_binds
606             - name: glance_registry
607               port: 9191
608               net_binds: *public_binds
609               options: # overwrite options as glace_reg needs auth for http req
610             - name: heat_api
611               port: 8004
612               net_binds: *public_binds
613             - name: heat_cloudwatch
614               port: 8003
615               net_binds: *public_binds
616             - name: heat_cfn
617               port: 8000
618               net_binds: *public_binds
619             - name: mysql
620               port: 3306
621               extra_server_params:
622                 - backup
623               options:
624                 - timeout client 0
625                 - timeout server 0
626             - name: nova_ec2
627               port: 8773
628             - name: nova_osapi
629               port: 8774
630               net_binds: *public_binds
631             - name: nova_metadata
632               port: 8775
633               net_binds: *public_binds
634             - name: nova_novncproxy
635               port: 6080
636               net_binds: *public_binds
637             - name: ceilometer
638               port: 8777
639               net_binds: *public_binds
640               options: # overwrite options as ceil needs auth for http req
641             - name: swift_proxy_server
642               port: 8080
643               net_binds: *public_binds
644               options:
645                 - option httpchk GET /info
646             - name: rabbitmq
647               port: 5672
648               options:
649                 - timeout client 0
650                 - timeout server 0
651                 - maxconn 1500
652
653   ControllerDeployment:
654     type: OS::TripleO::SoftwareDeployment
655     properties:
656       signal_transport: NO_SIGNAL
657       config: {get_resource: ControllerConfig}
658       server: {get_resource: Controller}
659       input_values:
660         bootstack_nodeid: {get_attr: [Controller, name]}
661         controller_host: {get_attr: [Controller, networks, ctlplane, 0]}
662         controller_virtual_ip: {get_param: VirtualIP}
663         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
664         heat.watch_server_url:
665           list_join:
666             - ''
667             - - 'http://'
668               - {get_param: VirtualIP}
669               - ':8003'
670         heat.metadata_server_url:
671           list_join:
672             - ''
673             - - 'http://'
674               - {get_param: VirtualIP}
675               - ':8000'
676         heat.waitcondition_server_url:
677           list_join:
678             - ''
679             - - 'http://'
680               - {get_param: VirtualIP}
681               - ':8000/v1/waitcondition'
682         admin_password: {get_param: AdminPassword}
683         admin_token: {get_param: AdminToken}
684         neutron_public_interface_ip: {get_param: NeutronPublicInterfaceIP}
685         debug: {get_param: Debug}
686         cinder_lvm_loop_device_size: {get_param: CinderLVMLoopDeviceSize}
687         cinder_password: {get_param: CinderPassword}
688         cinder_iscsi_helper: {get_param: CinderISCSIHelper}
689         cinder_dsn:
690           list_join:
691             - ''
692             - - 'mysql://cinder:unset@'
693               - {get_param: VirtualIP}
694               - '/cinder'
695         glance_port: {get_param: GlancePort}
696         glance_protocol: {get_param: GlanceProtocol}
697         glance_password: {get_param: GlancePassword}
698         glance_notifier_strategy: {get_param: GlanceNotifierStrategy}
699         glance_log_file: {get_param: GlanceLogFile}
700         glance_dsn:
701           list_join:
702             - ''
703             - - 'mysql://glance:unset@'
704               - {get_param: VirtualIP}
705               - '/glance'
706         heat_password: {get_param: HeatPassword}
707         heat_stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
708         heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
709         heat_dsn:
710           list_join:
711             - ''
712             - - 'mysql://heat:unset@'
713               - {get_param: VirtualIP}
714               - '/heat'
715         keystone_ca_certificate: {get_param: KeystoneCACertificate}
716         keystone_signing_key: {get_param: KeystoneSigningKey}
717         keystone_signing_certificate: {get_param: KeystoneSigningCertificate}
718         keystone_ssl_certificate: {get_param: KeystoneSSLCertificate}
719         keystone_ssl_certificate_key: {get_param: KeystoneSSLCertificateKey}
720         keystone_dsn:
721           list_join:
722             - ''
723             - - 'mysql://keystone:unset@'
724               - {get_param: VirtualIP}
725               - '/keystone'
726         mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
727         mysql_root_password: {get_param: MysqlRootPassword}
728         mysql_cluster_name:
729           str_replace:
730             template: tripleo-CLUSTER
731             params:
732               CLUSTER: {get_param: MysqlClusterUniquePart}
733         neutron_flat_networks: {get_param: NeutronFlatNetworks}
734         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
735         neutron_agent_mode: {get_param: NeutronAgentMode}
736         neutron_router_distributed: {get_param: NeutronDVR}
737         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
738         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
739         neutron_l3_ha: {get_param: NeutronL3HA}
740         neutron_network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
741         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
742         neutron_public_interface: {get_param: NeutronPublicInterface}
743         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
744         neutron_public_interface_default_route: {get_param: NeutronPublicInterfaceDefaultRoute}
745         neutron_public_interface_tag: {get_param: NeutronPublicInterfaceTag}
746         neutron_tenant_network_type: {get_param: NeutronNetworkType}
747         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
748         neutron_password: {get_param: NeutronPassword}
749         neutron_dnsmasq_options: {get_param: NeutronDnsmasqOptions}
750         neutron_dsn:
751           list_join:
752             - ''
753             - - 'mysql://neutron:unset@'
754               - {get_param: VirtualIP}
755               - '/ovs_neutron?charset=utf8'
756         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
757         ceilometer_password: {get_param: CeilometerPassword}
758         ceilometer_dsn:
759           list_join:
760             - ''
761             - - 'mysql://ceilometer:unset@'
762               - {get_param: VirtualIP}
763               - '/ceilometer'
764         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
765         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
766         nova_password: {get_param: NovaPassword}
767         nova_dsn:
768           list_join:
769             - ''
770             - - 'mysql://nova:unset@'
771               - {get_param: VirtualIP}
772               - '/nova'
773         rabbit_username: {get_param: RabbitUserName}
774         rabbit_password: {get_param: RabbitPassword}
775         rabbit_cookie: {get_param: RabbitCookie}
776         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
777         rabbit_client_port: {get_param: RabbitClientPort}
778         ntp_server: {get_param: NtpServer}
779         control_virtual_interface: {get_param: ControlVirtualInterface}
780         public_virtual_interface: {get_param: PublicVirtualInterface}
781         public_virtual_ip: {get_param: PublicVirtualIP}
782
783   SSLConfig:
784     type: OS::Heat::StructuredConfig
785     properties:
786       group: os-apply-config
787       config:
788         ssl:
789           ca_certificate: {get_input: ssl_ca_certificate}
790         stunnel:
791           cert: {get_input: ssl_certificate}
792           key: {get_input: ssl_key}
793           cacert: {get_input: ssl_ca_certificate}
794           ports:
795            - name: 'ec2'
796              accept: 13773
797              connect: 8773
798              connect_host: {get_input: controller_host}
799            - name: 'image'
800              accept: 13292
801              connect: 9292
802              connect_host: {get_input: controller_host}
803            - name: 'identity'
804              accept: 13000
805              connect: 5000
806              connect_host: {get_input: controller_host}
807            - name: 'network'
808              accept: 13696
809              connect: 9696
810              connect_host: {get_input: controller_host}
811            - name: 'compute'
812              accept: 13774
813              connect: 8774
814              connect_host: {get_input: controller_host}
815            - name: 'swift-proxy'
816              accept: 13080
817              connect: 8080
818              connect_host: {get_input: controller_host}
819            - name: 'cinder'
820              accept: 13776
821              connect: 8776
822              connect_host: {get_input: controller_host}
823            - name: 'ceilometer'
824              accept: 13777
825              connect: 8777
826              connect_host: {get_input: controller_host}
827
828   ControllerSSLDeployment:
829     type: OS::Heat::StructuredDeployment
830     properties:
831       config: {get_resource: SSLConfig}
832       server: {get_resource: Controller}
833       signal_transport: NO_SIGNAL
834       input_values:
835         controller_host: {get_attr: [Controller, networks, ctlplane, 0]}
836         ssl_certificate: {get_param: SSLCertificate}
837         ssl_key: {get_param: SSLKey}
838         ssl_ca_certificate: {get_param: SSLCACertificate}
839
840   ControllerPassthroughDeployment:
841     type: OS::Heat::StructuredDeployment
842     properties:
843       config: {get_resource: ControllerPassthroughConfig}
844       server: {get_resource: Controller}
845       signal_transport: NO_SIGNAL
846       input_values:
847         passthrough_config: {get_param: ExtraConfig}
848
849   ControllerPassthroughSpecificDeployment:
850     depends_on: [ControllerPassthroughDeployment]
851     type: OS::Heat::StructuredDeployment
852     properties:
853       config: {get_resource: ControllerPassthroughConfigSpecific}
854       server: {get_resource: Controller}
855       signal_transport: NO_SIGNAL
856       input_values:
857         passthrough_config_specific: {get_param: ControllerExtraConfig}
858
859   SwiftConfig:
860     type: OS::Heat::StructuredConfig
861     properties:
862       group: os-apply-config
863       config:
864         swift:
865           hash: { get_input: swift_hash_suffix }
866           part-power: { get_input: swift_part_power }
867           mount-check: { get_input: swift_mount_check }
868           min-part-hours: { get_input: swift_min_part_hours }
869           replicas: {get_input: swift_replicas }
870           service-password: { get_input: swift_password }
871
872   SwiftStorageDeploy:
873     type: OS::Heat::StructuredDeployment
874     properties:
875       server: {get_resource: Controller}
876       config: {get_resource: SwiftConfig}
877       signal_transport: NO_SIGNAL
878       input_values:
879         swift_hash_suffix: {get_param: SwiftHashSuffix}
880         swift_mount_check: {get_param: SwiftMountCheck}
881         swift_password: {get_param: SwiftPassword}
882         swift_min_part_hours: {get_param: SwiftMinPartHours}
883         swift_part_power: {get_param: SwiftPartPower}
884         swift_replicas: { get_param: SwiftReplicas}
885
886 outputs:
887   ip_address:
888     description: IP address of the server in the ctlplane network
889     value: {get_attr: [Controller, networks, ctlplane, 0]}
890   hostname:
891     description: Hostname of the server
892     value: {get_attr: [Controller, name]}
893   corosync_node:
894     description: >
895       Node object in the format {ip: ..., name: ...} format that the corosync
896       element expects
897     value:
898       ip: {get_attr: [Controller, networks, ctlplane, 0]}
899       name: {get_attr: [Controller, name]}
900   hosts_entry:
901     description: >
902       Server's IP address and hostname in the /etc/hosts format
903     value:
904       str_replace:
905         template: IP HOST HOST.novalocal CLOUDNAME
906         params:
907           IP: {get_attr: [Controller, networks, ctlplane, 0]}
908           HOST: {get_attr: [Controller, name]}
909           CLOUDNAME: {get_param: CloudName}
910   nova_server_resource:
911     description: Heat resource handle for the Nova compute server
912     value:
913       {get_resource: Controller}
914   swift_device:
915     description: Swift device formatted for swift-ring-builder
916     value:
917       str_replace:
918         template: 'r1z1-IP:%PORT%/d1'
919         params:
920           IP: {get_attr: [Controller, networks, ctlplane, 0]}
921   swift_proxy_memcache:
922     description: Swift proxy-memcache value
923     value:
924       str_replace:
925         template: "IP:11211"
926         params:
927           IP: {get_attr: [Controller, networks, ctlplane, 0]}