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