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