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