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