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