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