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