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