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