Wire ServiceNetMap as a top level 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   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   ServiceNetMap:
422     default: {}
423     description: Mapping of service_name -> network name. Typically set
424                  via parameter_defaults in the resource registry.
425     type: json
426
427 resources:
428
429   Controller:
430     type: OS::Nova::Server
431     properties:
432       image: {get_param: Image}
433       image_update_policy: {get_param: ImageUpdatePolicy}
434       flavor: {get_param: Flavor}
435       key_name: {get_param: KeyName}
436       networks:
437         - network: ctlplane
438       user_data_format: SOFTWARE_CONFIG
439       user_data: {get_resource: NodeUserData}
440
441   NodeUserData:
442     type: OS::TripleO::NodeUserData
443
444   ExternalPort:
445     type: OS::TripleO::Controller::Ports::ExternalPort
446     properties:
447       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
448
449   InternalApiPort:
450     type: OS::TripleO::Controller::Ports::InternalApiPort
451     properties:
452       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
453
454   StoragePort:
455     type: OS::TripleO::Controller::Ports::StoragePort
456     properties:
457       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
458
459   StorageMgmtPort:
460     type: OS::TripleO::Controller::Ports::StorageMgmtPort
461     properties:
462       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
463
464   TenantPort:
465     type: OS::TripleO::Controller::Ports::TenantPort
466     properties:
467       ControlPlaneIP: {get_attr: [Controller, networks, ctlplane, 0]}
468
469   NetworkConfig:
470     type: OS::TripleO::Controller::Net::SoftwareConfig
471     properties:
472       ExternalIpSubnet: {get_attr: [ExternalPort, ip_subnet]}
473       InternalApiIpSubnet: {get_attr: [InternalApiPort, ip_subnet]}
474       StorageIpSubnet: {get_attr: [StoragePort, ip_subnet]}
475       StorageMgmtIpSubnet: {get_attr: [StorageMgmtPort, ip_subnet]}
476       TenantIpSubnet: {get_attr: [TenantPort, ip_subnet]}
477
478   NetworkDeployment:
479     type: OS::TripleO::SoftwareDeployment
480     properties:
481       signal_transport: NO_SIGNAL
482       config: {get_resource: NetworkConfig}
483       server: {get_resource: Controller}
484       input_values:
485         bridge_name: br-ex
486         interface_name: {get_param: NeutronPublicInterface}
487
488   ControllerPassthroughConfig:
489     type: OS::Heat::StructuredConfig
490     properties:
491       group: os-apply-config
492       config: {get_input: passthrough_config}
493
494   ControllerPassthroughConfigSpecific:
495     type: OS::Heat::StructuredConfig
496     properties:
497       group: os-apply-config
498       config: {get_input: passthrough_config_specific}
499
500   ControllerConfig:
501     type: OS::Heat::StructuredConfig
502     properties:
503       group: os-apply-config
504       config:
505         admin-password: {get_input: admin_password}
506         admin-token: {get_input: admin_token}
507         bootstack:
508           public_interface_ip: {get_input: neutron_public_interface_ip}
509         bootstrap_host:
510           nodeid: {get_input: bootstack_nodeid}
511         cinder:
512           db: {get_input: cinder_dsn}
513           debug: {get_input: debug}
514           volume_size_mb: {get_input: cinder_lvm_loop_device_size}
515           service-password: {get_input: cinder_password}
516           iscsi-helper: {get_input: CinderISCSIHelper}
517         controller-address: {get_input: controller_host}
518         corosync:
519           bindnetaddr: {get_input: controller_host}
520           mcastport: 5577
521         pacemaker:
522           stonith_enabled : false
523           recheck_interval : 5
524           quorum_policy : ignore
525         db-password: unset
526         glance:
527           registry:
528             host: {get_input: controller_virtual_ip}
529           backend: swift
530           db: {get_input: glance_dsn}
531           debug: {get_input: debug}
532           host: {get_input: controller_virtual_ip}
533           port: {get_input: glance_port}
534           protocol: {get_input: glance_protocol}
535           service-password: {get_input: glance_password}
536           swift-store-user: service:glance
537           swift-store-key: {get_input: glance_password}
538           notifier-strategy: {get_input: glance_notifier_strategy}
539           log-file: {get_input: glance_log_file}
540         heat:
541           admin_password: {get_input: heat_password}
542           admin_tenant_name: service
543           admin_user: heat
544           auth_encryption_key: {get_input: heat_auth_encryption_key}
545           db: {get_input: heat_dsn}
546           debug: {get_input: debug}
547           stack_domain_admin_password: {get_input: heat_stack_domain_admin_password}
548           watch_server_url: {get_input: heat.watch_server_url}
549           metadata_server_url: {get_input: heat.metadata_server_url}
550           waitcondition_server_url: {get_input: heat.waitcondition_server_url}
551         keystone:
552           db: {get_input: keystone_dsn}
553           debug: {get_input: debug}
554           host: {get_input: controller_virtual_ip}
555           ca_certificate: {get_input: keystone_ca_certificate}
556           signing_key: {get_input: keystone_signing_key}
557           signing_certificate: {get_input: keystone_signing_certificate}
558           ssl:
559               certificate: {get_input: keystone_ssl_certificate}
560               certificate_key: {get_input: keystone_ssl_certificate_key}
561         mysql:
562           innodb_buffer_pool_size: {get_input: mysql_innodb_buffer_pool_size}
563           local_bind: true
564           root-password: {get_input: mysql_root_password}
565           cluster_name: {get_input: mysql_cluster_name}
566         neutron:
567           debug: {get_input: debug}
568           flat-networks: {get_input: neutron_flat_networks}
569           host: {get_input: controller_virtual_ip}
570           metadata_proxy_shared_secret: {get_input: neutron_metadata_proxy_shared_secret}
571           agent_mode: {get_input: neutron_agent_mode}
572           router_distributed: {get_input: neutron_router_distributed}
573           mechanism_drivers: {get_input: neutron_mechanism_drivers}
574           allow_automatic_l3agent_failover: {get_input: neutron_allow_l3agent_failover}
575           l3_ha: {get_input: neutron_l3_ha}
576           ovs:
577             enable_tunneling: {get_input: neutron_enable_tunneling}
578             local_ip: {get_input: controller_host}
579             network_vlan_ranges: {get_input: neutron_network_vlan_ranges}
580             bridge_mappings: {get_input: neutron_bridge_mappings}
581             public_interface: {get_input: neutron_public_interface}
582             public_interface_raw_device: {get_input: neutron_public_interface_raw_device}
583             public_interface_route: {get_input: neutron_public_interface_default_route}
584             public_interface_tag: {get_input: neutron_public_interface_tag}
585             physical_bridge: br-ex
586             tenant_network_type: {get_input: neutron_tenant_network_type}
587             tunnel_types: {get_input: neutron_tunnel_types}
588           ovs_db: {get_input: neutron_dsn}
589           service-password: {get_input: neutron_password}
590           dnsmasq-options: {get_input: neutron_dnsmasq_options}
591         ceilometer:
592           db: {get_input: ceilometer_dsn}
593           debug: {get_input: debug}
594           metering_secret: {get_input: ceilometer_metering_secret}
595           service-password: {get_input: ceilometer_password}
596         snmpd:
597           export_MIB: UCD-SNMP-MIB
598           readonly_user_name: {get_input: snmpd_readonly_user_name}
599           readonly_user_password: {get_input: snmpd_readonly_user_password}
600         nova:
601           compute_driver: libvirt.LibvirtDriver
602           db: {get_input: nova_dsn}
603           default_floating_pool:
604             ext-net
605           host: {get_input: controller_virtual_ip}
606           metadata-proxy: true
607           service-password: {get_input: nova_password}
608         rabbit:
609           host: {get_input: controller_virtual_ip}
610           username: {get_input: rabbit_username}
611           password: {get_input: rabbit_password}
612           cookie: {get_input: rabbit_cookie}
613           rabbit_client_use_ssl: {get_input: rabbit_client_use_ssl}
614           rabbit_port: {get_input: rabbit_client_port}
615         ntp:
616           servers:
617               - {server: {get_input: ntp_server}}
618         virtual_interfaces:
619           instances:
620             - vrrp_instance_name: VI_CONTROL
621               virtual_router_id: 51
622               keepalive_interface: {get_input: control_virtual_interface}
623               priority: 101
624               virtual_ips:
625               - ip: {get_input: controller_virtual_ip}
626                 interface: {get_input: control_virtual_interface}
627             - vrrp_instance_name: VI_PUBLIC
628               virtual_router_id: 52
629               keepalive_interface: {get_input: public_virtual_interface}
630               priority: 101
631               virtual_ips:
632               - ip: {get_input: public_virtual_ip}
633                 interface: {get_input: public_virtual_interface}
634           vrrp_sync_groups:
635             - name: VG1
636               members:
637                 - VI_CONTROL
638                 - VI_PUBLIC
639         keepalived:
640           keepalive_interface: {get_input: public_virtual_interface}
641           priority: 101
642         virtual_ips:
643             -
644               ip: {get_input: controller_virtual_ip}
645               interface: {get_input: control_virtual_interface}
646             -
647               ip: {get_input: public_virtual_ip}
648               interface: {get_input: public_virtual_interface}
649         haproxy:
650           net_binds:
651             - ip: {get_input: controller_virtual_ip}
652           options:
653             - option httpchk GET /
654           services:
655             - name: keystone_admin
656               port: 35357
657               net_binds: &public_binds
658                 - ip: {get_input: controller_virtual_ip}
659                 - ip: {get_input: public_virtual_ip}
660             - name: keystone_public
661               port: 5000
662               net_binds: *public_binds
663             - name: horizon
664               port: 80
665               net_binds: *public_binds
666             - name: neutron
667               port: 9696
668               net_binds: *public_binds
669             - name: cinder
670               port: 8776
671               net_binds: *public_binds
672             - name: glance_api
673               port: 9292
674               net_binds: *public_binds
675             - name: glance_registry
676               port: 9191
677               net_binds: *public_binds
678               options: # overwrite options as glace_reg needs auth for http req
679             - name: heat_api
680               port: 8004
681               net_binds: *public_binds
682             - name: heat_cloudwatch
683               port: 8003
684               net_binds: *public_binds
685             - name: heat_cfn
686               port: 8000
687               net_binds: *public_binds
688             - name: mysql
689               port: 3306
690               extra_server_params:
691                 - backup
692               options:
693                 - timeout client 0
694                 - timeout server 0
695             - name: nova_ec2
696               port: 8773
697             - name: nova_osapi
698               port: 8774
699               net_binds: *public_binds
700             - name: nova_metadata
701               port: 8775
702               net_binds: *public_binds
703             - name: nova_novncproxy
704               port: 6080
705               net_binds: *public_binds
706             - name: ceilometer
707               port: 8777
708               net_binds: *public_binds
709               options: # overwrite options as ceil needs auth for http req
710             - name: swift_proxy_server
711               port: 8080
712               net_binds: *public_binds
713               options:
714                 - option httpchk GET /info
715             - name: rabbitmq
716               port: 5672
717               options:
718                 - timeout client 0
719                 - timeout server 0
720                 - maxconn 1500
721
722   ControllerDeployment:
723     type: OS::TripleO::SoftwareDeployment
724     properties:
725       signal_transport: NO_SIGNAL
726       config: {get_resource: ControllerConfig}
727       server: {get_resource: Controller}
728       input_values:
729         bootstack_nodeid: {get_attr: [Controller, name]}
730         controller_host: {get_attr: [Controller, networks, ctlplane, 0]}
731         controller_virtual_ip: {get_param: VirtualIP}
732         neutron_enable_tunneling: {get_param: NeutronEnableTunnelling}
733         heat.watch_server_url:
734           list_join:
735             - ''
736             - - 'http://'
737               - {get_param: VirtualIP}
738               - ':8003'
739         heat.metadata_server_url:
740           list_join:
741             - ''
742             - - 'http://'
743               - {get_param: VirtualIP}
744               - ':8000'
745         heat.waitcondition_server_url:
746           list_join:
747             - ''
748             - - 'http://'
749               - {get_param: VirtualIP}
750               - ':8000/v1/waitcondition'
751         admin_password: {get_param: AdminPassword}
752         admin_token: {get_param: AdminToken}
753         neutron_public_interface_ip: {get_param: NeutronPublicInterfaceIP}
754         debug: {get_param: Debug}
755         cinder_lvm_loop_device_size: {get_param: CinderLVMLoopDeviceSize}
756         cinder_password: {get_param: CinderPassword}
757         cinder_iscsi_helper: {get_param: CinderISCSIHelper}
758         cinder_dsn:
759           list_join:
760             - ''
761             - - 'mysql://cinder:'
762               - {get_param: CinderPassword}
763               - '@'
764               - {get_param: VirtualIP}
765               - '/cinder'
766         glance_port: {get_param: GlancePort}
767         glance_protocol: {get_param: GlanceProtocol}
768         glance_password: {get_param: GlancePassword}
769         glance_notifier_strategy: {get_param: GlanceNotifierStrategy}
770         glance_log_file: {get_param: GlanceLogFile}
771         glance_dsn:
772           list_join:
773             - ''
774             - - 'mysql://glance:'
775               - {get_param: GlancePassword}
776               - '@'
777               - {get_param: VirtualIP}
778               - '/glance'
779         heat_password: {get_param: HeatPassword}
780         heat_stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
781         heat_auth_encryption_key: {get_param: HeatAuthEncryptionKey}
782         heat_dsn:
783           list_join:
784             - ''
785             - - 'mysql://heat:'
786               - {get_param: HeatPassword}
787               - '@'
788               - {get_param: VirtualIP}
789               - '/heat'
790         keystone_ca_certificate: {get_param: KeystoneCACertificate}
791         keystone_signing_key: {get_param: KeystoneSigningKey}
792         keystone_signing_certificate: {get_param: KeystoneSigningCertificate}
793         keystone_ssl_certificate: {get_param: KeystoneSSLCertificate}
794         keystone_ssl_certificate_key: {get_param: KeystoneSSLCertificateKey}
795         keystone_dsn:
796           list_join:
797             - ''
798             - - 'mysql://keystone:'
799               - {get_param: AdminToken}
800               - '@'
801               - {get_param: VirtualIP}
802               - '/keystone'
803         mysql_innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
804         mysql_root_password: {get_param: MysqlRootPassword}
805         mysql_cluster_name:
806           str_replace:
807             template: tripleo-CLUSTER
808             params:
809               CLUSTER: {get_param: MysqlClusterUniquePart}
810         neutron_flat_networks: {get_param: NeutronFlatNetworks}
811         neutron_metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
812         neutron_agent_mode: {get_param: NeutronAgentMode}
813         neutron_router_distributed: {get_param: NeutronDVR}
814         neutron_mechanism_drivers: {get_param: NeutronMechanismDrivers}
815         neutron_allow_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
816         neutron_l3_ha: {get_param: NeutronL3HA}
817         neutron_network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
818         neutron_bridge_mappings: {get_param: NeutronBridgeMappings}
819         neutron_public_interface: {get_param: NeutronPublicInterface}
820         neutron_public_interface_raw_device: {get_param: NeutronPublicInterfaceRawDevice}
821         neutron_public_interface_default_route: {get_param: NeutronPublicInterfaceDefaultRoute}
822         neutron_public_interface_tag: {get_param: NeutronPublicInterfaceTag}
823         neutron_tenant_network_type: {get_param: NeutronNetworkType}
824         neutron_tunnel_types: {get_param: NeutronTunnelTypes}
825         neutron_password: {get_param: NeutronPassword}
826         neutron_dnsmasq_options: {get_param: NeutronDnsmasqOptions}
827         neutron_dsn:
828           list_join:
829             - ''
830             - - 'mysql://neutron:'
831               - {get_param: NeutronPassword}
832               - '@'
833               - {get_param: VirtualIP}
834               - '/ovs_neutron?charset=utf8'
835         ceilometer_metering_secret: {get_param: CeilometerMeteringSecret}
836         ceilometer_password: {get_param: CeilometerPassword}
837         ceilometer_dsn:
838           list_join:
839             - ''
840             - - 'mysql://ceilometer:'
841               - {get_param: CeilometerPassword}
842               - '@'
843               - {get_param: VirtualIP}
844               - '/ceilometer'
845         snmpd_readonly_user_name: {get_param: SnmpdReadonlyUserName}
846         snmpd_readonly_user_password: {get_param: SnmpdReadonlyUserPassword}
847         nova_password: {get_param: NovaPassword}
848         nova_dsn:
849           list_join:
850             - ''
851             - - 'mysql://nova:'
852               - {get_param: NovaPassword}
853               - '@'
854               - {get_param: VirtualIP}
855               - '/nova'
856         rabbit_username: {get_param: RabbitUserName}
857         rabbit_password: {get_param: RabbitPassword}
858         rabbit_cookie: {get_param: RabbitCookie}
859         rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
860         rabbit_client_port: {get_param: RabbitClientPort}
861         ntp_server: {get_param: NtpServer}
862         control_virtual_interface: {get_param: ControlVirtualInterface}
863         public_virtual_interface: {get_param: PublicVirtualInterface}
864         public_virtual_ip: {get_param: PublicVirtualIP}
865
866   SSLConfig:
867     type: OS::Heat::StructuredConfig
868     properties:
869       group: os-apply-config
870       config:
871         ssl:
872           ca_certificate: {get_input: ssl_ca_certificate}
873         stunnel:
874           cert: {get_input: ssl_certificate}
875           key: {get_input: ssl_key}
876           cacert: {get_input: ssl_ca_certificate}
877           ports:
878            - name: 'ec2'
879              accept: 13773
880              connect: 8773
881              connect_host: {get_input: controller_host}
882            - name: 'image'
883              accept: 13292
884              connect: 9292
885              connect_host: {get_input: controller_host}
886            - name: 'identity'
887              accept: 13000
888              connect: 5000
889              connect_host: {get_input: controller_host}
890            - name: 'network'
891              accept: 13696
892              connect: 9696
893              connect_host: {get_input: controller_host}
894            - name: 'compute'
895              accept: 13774
896              connect: 8774
897              connect_host: {get_input: controller_host}
898            - name: 'swift-proxy'
899              accept: 13080
900              connect: 8080
901              connect_host: {get_input: controller_host}
902            - name: 'cinder'
903              accept: 13776
904              connect: 8776
905              connect_host: {get_input: controller_host}
906            - name: 'ceilometer'
907              accept: 13777
908              connect: 8777
909              connect_host: {get_input: controller_host}
910
911   ControllerSSLDeployment:
912     type: OS::Heat::StructuredDeployment
913     properties:
914       config: {get_resource: SSLConfig}
915       server: {get_resource: Controller}
916       signal_transport: NO_SIGNAL
917       input_values:
918         controller_host: {get_attr: [Controller, networks, ctlplane, 0]}
919         ssl_certificate: {get_param: SSLCertificate}
920         ssl_key: {get_param: SSLKey}
921         ssl_ca_certificate: {get_param: SSLCACertificate}
922
923   ControllerPassthroughDeployment:
924     type: OS::Heat::StructuredDeployment
925     properties:
926       config: {get_resource: ControllerPassthroughConfig}
927       server: {get_resource: Controller}
928       signal_transport: NO_SIGNAL
929       input_values:
930         passthrough_config: {get_param: ExtraConfig}
931
932   ControllerPassthroughSpecificDeployment:
933     depends_on: [ControllerPassthroughDeployment]
934     type: OS::Heat::StructuredDeployment
935     properties:
936       config: {get_resource: ControllerPassthroughConfigSpecific}
937       server: {get_resource: Controller}
938       signal_transport: NO_SIGNAL
939       input_values:
940         passthrough_config_specific: {get_param: ControllerExtraConfig}
941
942   SwiftConfig:
943     type: OS::Heat::StructuredConfig
944     properties:
945       group: os-apply-config
946       config:
947         swift:
948           hash: { get_input: swift_hash_suffix }
949           part-power: { get_input: swift_part_power }
950           mount-check: { get_input: swift_mount_check }
951           min-part-hours: { get_input: swift_min_part_hours }
952           replicas: {get_input: swift_replicas }
953           service-password: { get_input: swift_password }
954
955   SwiftStorageDeploy:
956     type: OS::Heat::StructuredDeployment
957     properties:
958       server: {get_resource: Controller}
959       config: {get_resource: SwiftConfig}
960       signal_transport: NO_SIGNAL
961       input_values:
962         swift_hash_suffix: {get_param: SwiftHashSuffix}
963         swift_mount_check: {get_param: SwiftMountCheck}
964         swift_password: {get_param: SwiftPassword}
965         swift_min_part_hours: {get_param: SwiftMinPartHours}
966         swift_part_power: {get_param: SwiftPartPower}
967         swift_replicas: { get_param: SwiftReplicas}
968
969 outputs:
970   ip_address:
971     description: IP address of the server in the ctlplane network
972     value: {get_attr: [Controller, networks, ctlplane, 0]}
973   external_ip_address:
974     description: IP address of the server in the external network
975     value: {get_attr: [ExternalPort, ip_address]}
976   internal_api_ip_address:
977     description: IP address of the server in the internal_api network
978     value: {get_attr: [InternalApiPort, ip_address]}
979   storage_ip_address:
980     description: IP address of the server in the storage network
981     value: {get_attr: [StoragePort, ip_address]}
982   storage_mgmt_ip_address:
983     description: IP address of the server in the storage_mgmt network
984     value: {get_attr: [StorageMgmtPort, ip_address]}
985   tenant_ip_address:
986     description: IP address of the server in the tenant network
987     value: {get_attr: [TenantPort, ip_address]}
988   hostname:
989     description: Hostname of the server
990     value: {get_attr: [Controller, name]}
991   corosync_node:
992     description: >
993       Node object in the format {ip: ..., name: ...} format that the corosync
994       element expects
995     value:
996       ip: {get_attr: [Controller, networks, ctlplane, 0]}
997       name: {get_attr: [Controller, name]}
998   hosts_entry:
999     description: >
1000       Server's IP address and hostname in the /etc/hosts format
1001     value:
1002       str_replace:
1003         template: IP HOST CLOUDNAME
1004         params:
1005           IP: {get_attr: [Controller, networks, ctlplane, 0]}
1006           HOST: {get_attr: [Controller, name]}
1007           CLOUDNAME: {get_param: CloudName}
1008   nova_server_resource:
1009     description: Heat resource handle for the Nova compute server
1010     value:
1011       {get_resource: Controller}
1012   swift_device:
1013     description: Swift device formatted for swift-ring-builder
1014     value:
1015       str_replace:
1016         template: 'r1z1-IP:%PORT%/d1'
1017         params:
1018           IP: {get_attr: [Controller, networks, ctlplane, 0]}
1019   swift_proxy_memcache:
1020     description: Swift proxy-memcache value
1021     value:
1022       str_replace:
1023         template: "IP:11211"
1024         params:
1025           IP: {get_attr: [Controller, networks, ctlplane, 0]}