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