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