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