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