Pass Horizon port through to controller nodes
[apex-tripleo-heat-templates.git] / overcloud-source.yaml
1 description: Nova API,Keystone,Heat Engine and API,Glance,Neutron,Dedicated MySQL
2   server,Dedicated RabbitMQ Server,Group of Nova Computes
3 heat_template_version: 2013-05-23
4 parameters:
5   AdminPassword:
6     default: unset
7     description: The password for the keystone admin account, used for monitoring, querying neutron etc.
8     type: string
9     hidden: true
10   AdminToken:
11     default: unset
12     description: The keystone auth secret.
13     type: string
14     hidden: true
15   CeilometerComputeAgent:
16     description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
17     type: string
18     default: ''
19     constraints:
20     - allowed_values: ['', Present]
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 account.
29     type: string
30     hidden: true
31   CinderISCSIHelper:
32     default: tgtadm
33     description: The iSCSI helper to use with cinder.
34     type: string
35   CinderLVMLoopDeviceSize:
36     default: 5000
37     description: The size of the loopback file used by the cinder LVM driver.
38     type: number
39   CinderPassword:
40     default: unset
41     description: The password for the cinder service account, used by cinder-api.
42     type: string
43     hidden: true
44   CloudName:
45     default: ''
46     description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
47     type: string
48   ControlFixedIPs:
49     default: []
50     description: Should be used for arbitrary ips.
51     type: json
52   controllerExtraConfig:
53     default: {}
54     description: |
55       Controller specific configuration to inject into the cluster. Same
56       structure as ExtraConfig.
57     type: json
58   controllerImage:
59     type: string
60     default: overcloud-control
61     constraints:
62       - custom_constraint: glance.image
63   ControlVirtualInterface:
64     default: 'br-ex'
65     description: Interface where virtual ip will be assigned.
66     type: string
67   Debug:
68     default: ''
69     description: Set to True to enable debugging on all services.
70     type: string
71   DefaultSignalTransport:
72     default: CFN_SIGNAL
73     description: Transport to use for software-config signals.
74     type: string
75     constraints:
76       - allowed_values: [ CFN_SIGNAL, HEAT_SIGNAL, NO_SIGNAL ]
77   ExtraConfig:
78     default: {}
79     description: |
80       Additional configuration to inject into the cluster. The JSON should have
81       the following structure:
82         {"FILEKEY":
83           {"config":
84             [{"section": "SECTIONNAME",
85               "values":
86                 [{"option": "OPTIONNAME",
87                   "value": "VALUENAME"
88                  }
89                 ]
90              }
91             ]
92           }
93         }
94       For instance:
95         {"nova":
96           {"config":
97             [{"section": "default",
98               "values":
99                 [{"option": "force_config_drive",
100                   "value": "always"
101                  }
102                 ]
103              },
104              {"section": "cells",
105               "values":
106                 [{"option": "driver",
107                   "value": "nova.cells.rpc_driver.CellsRPCDriver"
108                  }
109                 ]
110              }
111             ]
112           }
113         }
114     type: json
115   GlanceLogFile:
116     description: The filepath of the file to use for logging messages from Glance.
117     type: string
118     default: ''
119   HorizonPort:
120     type: number
121     default: 80
122     description: Horizon web server port.
123   GlancePassword:
124     default: unset
125     description: The password for the glance service account, used by the glance services.
126     type: string
127     hidden: true
128   GlancePort:
129     default: 9292
130     description: Glance port.
131     type: string
132   GlanceProtocol:
133     default: http
134     description: Protocol to use when connecting to glance, set to https for SSL.
135     type: string
136   GlanceNotifierStrategy:
137     description: Strategy to use for Glance notification queue
138     type: string
139     default: noop
140   HeatPassword:
141     default: unset
142     description: The password for the Heat service account, used by the Heat services.
143     type: string
144     hidden: true
145   HeatStackDomainAdminPassword:
146     description: Password for heat_domain_admin user.
147     type: string
148     default: ''
149     hidden: true
150   HypervisorNeutronPhysicalBridge:
151     default: 'br-ex'
152     description: >
153       An OVS bridge to create on each hypervisor. This defaults to br-ex the
154       same as the control plane nodes, as we have a uniform configuration of
155       the openvswitch agent. Typically should not need to be changed.
156     type: string
157   HypervisorNeutronPublicInterface:
158     default: nic1
159     description: What interface to add to the HypervisorNeutronPhysicalBridge.
160     type: string
161   ImageUpdatePolicy:
162     default: 'REBUILD_PRESERVE_EPHEMERAL'
163     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
164     type: string
165   KeyName:
166     default: default
167     description: Name of an existing EC2 KeyPair to enable SSH access to the instances
168     type: string
169     constraints:
170       - custom_constraint: nova.keypair
171   KeystoneCACertificate:
172     default: ''
173     description: Keystone self-signed certificate authority certificate.
174     type: string
175   KeystoneSigningCertificate:
176     default: ''
177     description: Keystone certificate for verifying token validity.
178     type: string
179   KeystoneSigningKey:
180     default: ''
181     description: Keystone key for signing tokens.
182     type: string
183     hidden: true
184   KeystoneSSLCertificate:
185     default: ''
186     description: Keystone certificate for verifying token validity.
187     type: string
188   KeystoneSSLCertificateKey:
189     default: ''
190     description: Keystone key for signing tokens.
191     type: string
192     hidden: true
193   MysqlInnodbBufferPoolSize:
194     description: >
195         Specifies the size of the buffer pool in megabytes. Setting to
196         zero should be interpreted as "no value" and will defer to the
197         lower level default.
198     type: number
199     default: 0
200   NeutronBridgeMappings:
201     description: >
202       The OVS logical->physical bridge mappings to use. See the Neutron
203       documentation for details. Defaults to mapping br-ex - the external
204       bridge on hosts - to a physical name 'datacentre' which can be used
205       to create provider networks (and we use this for the default floating
206       network) - if changing this either use different post-install network
207       scripts or be sure to keep 'datacentre' as a mapping network name.
208     type: string
209     default: "datacentre:br-ex"
210   NeutronControlPlaneID:
211     default: ''
212     type: string
213     description: Neutron ID for ctlplane network.
214   NeutronDnsmasqOptions:
215     default: 'dhcp-option-force=26,1400'
216     description: Dnsmasq options for neutron-dhcp-agent. The default value here forces MTU to be set to 1400 to account for the tunnel overhead.
217     type: string
218   NeutronFlatNetworks:
219     type: string
220     default: 'datacentre'
221     description: >
222       If set, flat networks to configure in neutron plugins. Defaults to
223       'datacentre' to permit external network creation.
224   NeutronNetworkType:
225     default: 'gre'
226     description: The tenant network type for Neutron, either gre or vxlan.
227     type: string
228   NeutronNetworkVLANRanges:
229     default: 'datacentre'
230     description: >
231       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
232       Neutron documentation for permitted values. Defaults to permitting any
233       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
234     type: string
235   NeutronPassword:
236     default: unset
237     description: The password for the neutron service account, used by neutron agents.
238     type: string
239     hidden: true
240   NeutronPublicInterface:
241     default: nic1
242     description: What interface to bridge onto br-ex for network nodes.
243     type: string
244   NeutronPublicInterfaceDefaultRoute:
245     default: ''
246     description: A custom default route for the NeutronPublicInterface.
247     type: string
248   NeutronPublicInterfaceIP:
249     default: ''
250     description: A custom IP address to put onto the NeutronPublicInterface.
251     type: string
252   NeutronPublicInterfaceRawDevice:
253     default: ''
254     description: If set, the public interface is a vlan with this device as the raw device.
255     type: string
256   NeutronPublicInterfaceTag:
257     default: ''
258     description: >
259       VLAN tag for creating a public VLAN. The tag will be used to
260       create an access port on the exterior bridge for each control plane node,
261       and that port will be given the IP address returned by neutron from the
262       public network. Set CONTROLEXTRA=overcloud-vlan-port.yaml when compiling
263       overcloud.yaml to include the deployment of VLAN ports to the control
264       plane.
265     type: string
266   NeutronComputeAgentMode:
267     default: 'dvr'
268     description: Agent mode for the neutron-l3-agent on the compute hosts
269     type: string
270   NeutronAgentMode:
271     default: 'dvr_snat'
272     description: Agent mode for the neutron-l3-agent on the controller hosts
273     type: string
274   NeutronDVR:
275     default: 'False'
276     description: Whether to configure Neutron Distributed Virtual Routers
277     type: string
278   NeutronMetadataProxySharedSecret:
279     default: 'unset'
280     description: Shared secret to prevent spoofing
281     type: string
282   NeutronTunnelTypes:
283     default: 'gre'
284     description: |
285         The tunnel types for the Neutron tenant network. To specify multiple
286         values, use a comma separated string, like so: 'gre,vxlan'
287     type: string
288   NeutronMechanismDrivers:
289     default: 'openvswitch'
290     description: |
291         The mechanism drivers for the Neutron tenant network. To specify multiple
292         values, use a comma separated string, like so: 'openvswitch,l2_population'
293     type: string
294   NeutronAllowL3AgentFailover:
295     default: 'True'
296     description: Allow automatic l3-agent failover
297     type: string
298   NovaComputeDriver:
299     default: libvirt.LibvirtDriver
300     type: string
301   NovaComputeExtraConfig:
302     default: {}
303     description: |
304       NovaCompute specific configuration to inject into the cluster. Same
305       structure as ExtraConfig.
306     type: json
307   NovaComputeLibvirtType:
308     default: ''
309     type: string
310   NovaImage:
311     type: string
312     default: overcloud-compute
313     constraints:
314       - custom_constraint: glance.image
315   NovaPassword:
316     default: unset
317     description: The password for the nova service account, used by nova-api.
318     type: string
319     hidden: true
320   NtpServer:
321     type: string
322     default: ''
323   OvercloudComputeFlavor:
324     description: Flavor for compute nodes to request when deploying.
325     type: string
326     constraints:
327       - custom_constraint: nova.flavor
328   OvercloudControlFlavor:
329     description: Flavor for control nodes to request when deploying.
330     type: string
331     constraints:
332       - custom_constraint: nova.flavor
333   PublicVirtualFixedIPs:
334     default: []
335     description: >
336         Control the IP allocation for the PublicVirtualInterface port. E.g.
337         [{'ip_address':'1.2.3.4'}]
338     type: json
339   PublicVirtualInterface:
340     default: 'br-ex'
341     description: >
342         Specifies the interface where the public-facing virtual ip will be assigned.
343         This should be int_public when a VLAN is being used.
344     type: string
345   PublicVirtualNetwork:
346     default: 'ctlplane'
347     type: string
348     description: >
349         Neutron network to allocate public virtual IP port on.
350   RabbitCookieSalt:
351     type: string
352     default: unset
353     description: Salt for the rabbit cookie, change this to force the randomly generated rabbit cookie to change.
354   RabbitPassword:
355     default: guest
356     description: The password for RabbitMQ
357     type: string
358     hidden: true
359   RabbitUserName:
360     default: guest
361     description: The username for RabbitMQ
362     type: string
363   RabbitClientUseSSL:
364     default: false
365     description: >
366         Rabbit client subscriber parameter to specify
367         an SSL connection to the RabbitMQ host.
368     type: string
369   RabbitClientPort:
370     default: 5672
371     description: Set rabbit subscriber port, change this if using SSL
372     type: number
373   SnmpdReadonlyUserName:
374     default: ro_snmp_user
375     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
376     type: string
377   SnmpdReadonlyUserPassword:
378     default: unset
379     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
380     type: string
381     hidden: true
382 resources:
383   ControlVirtualIP:
384     type: OS::Neutron::Port
385     properties:
386       name: control_virtual_ip
387       network_id: {get_param: NeutronControlPlaneID}
388       fixed_ips:
389         get_param: ControlFixedIPs
390       replacement_policy: AUTO
391   MysqlClusterUniquePart:
392     type: OS::Heat::RandomString
393     properties:
394       length: 10
395   MysqlRootPassword:
396     type: OS::Heat::RandomString
397     properties:
398       length: 10
399   PublicVirtualIP:
400     type: OS::Neutron::Port
401     properties:
402       name: public_virtual_ip
403       network: {get_param: PublicVirtualNetwork}
404       fixed_ips:
405         get_param: PublicVirtualFixedIPs
406       replacement_policy: AUTO
407   RabbitCookie:
408     type: OS::Heat::RandomString
409     properties:
410       length: 20
411       salt:
412         get_param: RabbitCookieSalt
413   NovaCompute0Deployment:
414     type: FileInclude
415     Path: nova-compute-instance.yaml
416     SubKey: resources.NovaCompute0Deployment
417     parameters:
418         DefaultSignalTransport:
419             get_param: DefaultSignalTransport
420         NovaApiHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
421         KeystoneHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
422         NeutronHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
423         GlanceHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
424         RabbitHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
425         NovaDSN:
426           Fn::Join:
427             - ''
428             - - mysql://nova:unset@
429               - &compute_database_host {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
430               - /nova
431         NovaPublicIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
432         CeilometerDSN:
433           Fn::Join:
434             - ''
435             - - mysql://ceilometer:unset@
436               - *compute_database_host
437               - /ceilometer
438         NeutronDSN:
439           Fn::Join:
440             - ''
441             - - mysql://neutron:unset@
442               - *compute_database_host
443               - /ovs_neutron
444         NeutronNetworkType:
445             get_param: NeutronNetworkType
446         NeutronTunnelTypes:
447             get_param: NeutronTunnelTypes
448         NeutronEnableTunnelling: "True"
449         NeutronFlatNetworks:
450             get_param: NeutronFlatNetworks
451         NeutronNetworkVLANRanges:
452             get_param: NeutronNetworkVLANRanges
453         NeutronPhysicalBridge:
454             get_param: HypervisorNeutronPhysicalBridge
455         NeutronPublicInterface:
456             get_param: HypervisorNeutronPublicInterface
457         NeutronBridgeMappings:
458             get_param: NeutronBridgeMappings
459         NeutronDVR:
460             get_param: NeutronDVR
461         NeutronAgentMode:
462             get_param: NeutronComputeAgentMode
463         NeutronPublicInterfaceRawDevice:
464             get_param: NeutronPublicInterfaceRawDevice
465         NeutronMechanismDrivers:
466             get_param: NeutronMechanismDrivers
467         NeutronAllowL3AgentFailover:
468             get_param: NeutronAllowL3AgentFailover
469   NovaCompute0AllNodesDeployment:
470     type: FileInclude
471     Path: nova-compute-instance.yaml
472     SubKey: resources.NovaCompute0AllNodesDeployment
473     parameters:
474         AllNodesConfig: {get_resource: allNodesConfig}
475   NovaCompute0:
476     type: FileInclude
477     Path: nova-compute-instance.yaml
478     SubKey: resources.NovaCompute0
479   NovaCompute0Passthrough:
480     type: FileInclude
481     Path: nova-compute-instance.yaml
482     SubKey: resources.NovaCompute0Passthrough
483     parameters:
484         passthrough_config: {get_param: ExtraConfig}
485   NovaCompute0PassthroughSpecific:
486     type: FileInclude
487     Path: nova-compute-instance.yaml
488     SubKey: resources.NovaCompute0PassthroughSpecific
489     parameters:
490         passthrough_config_specific: {get_param: NovaComputeExtraConfig}
491   controllerConfig:
492     type: OS::Heat::StructuredConfig
493     properties:
494       group: os-apply-config
495       config:
496         admin-password:
497           get_param: AdminPassword
498         admin-token:
499           get_param: AdminToken
500         bootstack:
501           public_interface_ip:
502             get_param: NeutronPublicInterfaceIP
503         bootstrap_host:
504           bootstrap_nodeid:
505             Fn::Select:
506             - 0
507             - Fn::Select:
508               - 0
509               - Merge::Map:
510                   controller0:
511                   - get_attr:
512                     - controller0
513                     - name
514           nodeid: {get_input: bootstack_nodeid}
515         database:
516           host: &database_host
517             {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
518         cinder:
519           db:
520             Fn::Join:
521               - ''
522               - - mysql://cinder:unset@
523                 - *database_host
524                 - /cinder
525           debug: {get_param: Debug}
526           volume_size_mb:
527             get_param: CinderLVMLoopDeviceSize
528           service-password:
529             get_param: CinderPassword
530           iscsi-helper:
531             get_param: CinderISCSIHelper
532         controller-address:
533           get_input: controller_host
534         corosync:
535           bindnetaddr: {get_input: controller_host}
536           mcastport: 5577
537           nodes:
538             Merge::Map:
539               controller0:
540                 ip: {get_attr: [controller0, networks, ctlplane, 0]}
541         pacemaker:
542           stonith_enabled : false
543           recheck_interval : 5
544           quorum_policy : ignore
545         db-password: unset
546         glance:
547           registry:
548             host: {get_input: controller_virtual_ip}
549           backend: swift
550           db:
551             Fn::Join:
552               - ''
553               - - mysql://glance:unset@
554                 - *database_host
555                 - /glance
556           debug: {get_param: Debug}
557           host:
558             get_input: controller_virtual_ip
559           port:
560             get_param: GlancePort
561           protocol:
562             get_param: GlanceProtocol
563           service-password:
564             get_param: GlancePassword
565           swift-store-user: service:glance
566           swift-store-key:
567             get_param: GlancePassword
568           notifier-strategy:
569             get_param: GlanceNotifierStrategy
570           log-file:
571             get_param: GlanceLogFile
572         heat:
573           admin_password:
574             get_param: HeatPassword
575           admin_tenant_name: service
576           admin_user: heat
577           auth_encryption_key: unset___________
578           db:
579             Fn::Join:
580               - ''
581               - - mysql://heat:unset@
582                 - *database_host
583                 - /heat
584           debug: {get_param: Debug}
585           stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
586           watch_server_url: {get_input: heat.watch_server_url}
587           metadata_server_url: {get_input: heat.metadata_server_url}
588           waitcondition_server_url: {get_input: heat.waitcondition_server_url}
589         horizon:
590           port: {get_param: HorizonPort}
591           caches:
592             memcached:
593               nodes:
594                 Merge::Map:
595                   controller0:
596                     {get_attr: [controller0, name]}
597         keystone:
598           db:
599             Fn::Join:
600               - ''
601               - - mysql://keystone:unset@
602                 - *database_host
603                 - /keystone
604           debug: {get_param: Debug}
605           host:
606             get_input: controller_virtual_ip
607           ca_certificate: {get_param: KeystoneCACertificate}
608           signing_key: {get_param: KeystoneSigningKey}
609           signing_certificate: {get_param: KeystoneSigningCertificate}
610           ssl:
611               certificate: {get_param: KeystoneSSLCertificate}
612               certificate_key: {get_param: KeystoneSSLCertificateKey}
613         mysql:
614           innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
615           local_bind: true
616           root-password: {get_resource: MysqlRootPassword}
617           nodes:
618             Merge::Map:
619               controller0:
620                 ip: {get_attr: [controller0, networks, ctlplane, 0]}
621           cluster_name:
622             Fn::Join:
623               - '-'
624               - - 'tripleo'
625                 - {get_resource: MysqlClusterUniquePart}
626         neutron:
627           debug: {get_param: Debug}
628           flat-networks: {get_param: NeutronFlatNetworks}
629           host: {get_input: controller_virtual_ip}
630           metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
631           agent_mode: {get_param: NeutronAgentMode}
632           router_distributed: {get_param: NeutronDVR}
633           mechanism_drivers: {get_param: NeutronMechanismDrivers}
634           allow_automatic_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
635           ovs:
636             enable_tunneling: 'True'
637             local_ip:
638               get_input: controller_host
639             network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
640             bridge_mappings: {get_param: NeutronBridgeMappings}
641             public_interface:
642               get_param: NeutronPublicInterface
643             public_interface_raw_device:
644               get_param: NeutronPublicInterfaceRawDevice
645             public_interface_route:
646               get_param: NeutronPublicInterfaceDefaultRoute
647             public_interface_tag:
648               get_param: NeutronPublicInterfaceTag
649             physical_bridge: br-ex
650             tenant_network_type:
651               get_param: NeutronNetworkType
652             tunnel_types:
653               get_param: NeutronTunnelTypes
654           ovs_db:
655             Fn::Join:
656               - ''
657               - - mysql://neutron:unset@
658                 - *database_host
659                 - /ovs_neutron?charset=utf8
660           service-password:
661             get_param: NeutronPassword
662           dnsmasq-options:
663             get_param: NeutronDnsmasqOptions
664         ceilometer:
665           db:
666             Fn::Join:
667               - ''
668               - - mysql://ceilometer:unset@
669                 - *database_host
670                 - /ceilometer
671           debug: {get_param: Debug}
672           metering_secret: {get_param: CeilometerMeteringSecret}
673           service-password:
674             get_param: CeilometerPassword
675         snmpd:
676           export_MIB: UCD-SNMP-MIB
677           readonly_user_name:
678             get_param: SnmpdReadonlyUserName
679           readonly_user_password:
680             get_param: SnmpdReadonlyUserPassword
681         nova:
682           compute_driver: libvirt.LibvirtDriver
683           db:
684             Fn::Join:
685               - ''
686               - - mysql://nova:unset@
687                 - *database_host
688                 - /nova
689           default_floating_pool:
690             ext-net
691           host: {get_input: controller_virtual_ip}
692           metadata-proxy: true
693           service-password:
694             get_param: NovaPassword
695         rabbit:
696           host: {get_input: controller_virtual_ip}
697           username:
698             get_param: RabbitUserName
699           password:
700             get_param: RabbitPassword
701           cookie:
702             get_attr:
703             - RabbitCookie
704             - value
705           rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
706           rabbit_port: {get_param: RabbitClientPort}
707         ntp:
708           servers:
709               - {server: {get_param: NtpServer}, fudge: "stratum 0"}
710         virtual_interfaces:
711           instances:
712             - vrrp_instance_name: VI_CONTROL
713               virtual_router_id: 51
714               keepalive_interface:
715                 get_param: ControlVirtualInterface
716               priority: 101
717               virtual_ips:
718               - ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
719                 interface:
720                   get_param: ControlVirtualInterface
721             - vrrp_instance_name: VI_PUBLIC
722               virtual_router_id: 52
723               keepalive_interface:
724                 get_param: PublicVirtualInterface
725               priority: 101
726               virtual_ips:
727               - ip: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
728                 interface:
729                   get_param: PublicVirtualInterface
730           vrrp_sync_groups:
731             - name: VG1
732               members:
733                 - VI_CONTROL
734                 - VI_PUBLIC
735         keepalived:
736           keepalive_interface:
737             get_param: PublicVirtualInterface
738           priority: 101
739         virtual_ips:
740             -
741               ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
742               interface:
743                 get_param: ControlVirtualInterface
744             -
745               ip: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
746               interface:
747                 get_param: PublicVirtualInterface
748         haproxy:
749           nodes:
750             Merge::Map:
751               controller0:
752                 ip: {get_attr: [controller0, networks, ctlplane, 0]}
753                 name: {get_attr: [controller0, name]}
754           net_binds:
755             - &control_vip {ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}}
756             - &public_vip {ip: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}}
757           options:
758             - option httpchk GET /
759           services:
760             - name: keystone_admin
761               port: 35357
762             - name: keystone_public
763               port: 5000
764             - name: horizon
765               port: 80
766             - name: neutron
767               port: 9696
768             - name: cinder
769               port: 8776
770             - name: glance_api
771               port: 9292
772             - name: glance_registry
773               port: 9191
774               options: # overwrite options as glace_reg needs auth for http req
775             - name: heat_api
776               port: 8004
777             - name: heat_cloudwatch
778               port: 8003
779             - name: heat_cfn
780               port: 8000
781             - name: mysql
782               port: 3306
783               net_binds:
784                 - *control_vip
785               extra_server_params:
786                 - backup
787               options:
788                 - timeout client 0
789                 - timeout server 0
790             - name: nova_ec2
791               port: 8773
792             - name: nova_osapi
793               port: 8774
794             - name: nova_metadata
795               port: 8775
796             - name: nova_novncproxy
797               port: 6080
798             - name: ceilometer
799               port: 8777
800               options: # overwrite options as ceil needs auth for http req
801             - name: swift_proxy_server
802               port: 8080
803               options:
804                 - option httpchk GET /info
805             - name: rabbitmq
806               port: 5672
807               net_binds:
808                 - *control_vip
809               options:
810                 - timeout client 0
811                 - timeout server 0
812                 - maxconn 1500
813   controllerPassthrough:
814     type: OS::Heat::StructuredConfig
815     properties:
816       group: os-apply-config
817       config: {get_input: passthrough_config}
818   controllerPassthroughSpecific:
819     type: OS::Heat::StructuredConfig
820     properties:
821       group: os-apply-config
822       config: {get_input: passthrough_config_specific}
823   controller0:
824     type: OS::Nova::Server
825     properties:
826       image:
827         get_param: controllerImage
828       image_update_policy:
829         get_param: ImageUpdatePolicy
830       flavor:
831         get_param: OvercloudControlFlavor
832       key_name:
833         get_param: KeyName
834       networks:
835         - network: ctlplane
836       user_data_format: SOFTWARE_CONFIG
837   controller0AllNodesDeployment:
838     depends_on: [controller0Deployment,controller0SSLDeployment,controller0Swift,controller0PassthroughSpecific]
839     type: OS::Heat::StructuredDeployment
840     properties:
841       signal_transport: {get_param: DefaultSignalTransport}
842       config: {get_resource: allNodesConfig}
843       server: {get_resource: controller0}
844   controller0Deployment:
845     type: OS::Heat::StructuredDeployment
846     properties:
847       signal_transport: NO_SIGNAL
848       config: {get_resource: controllerConfig}
849       server: {get_resource: controller0}
850       input_values:
851         bootstack_nodeid: {get_attr: [controller0, name]}
852         controller_host: {get_attr: [controller0, networks, ctlplane, 0]}
853         controller_virtual_ip:
854           {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
855         heat.watch_server_url:
856           Fn::Join:
857             - ''
858             - - 'http://'
859               - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
860               - ':8003'
861         heat.metadata_server_url:
862           Fn::Join:
863             - ''
864             - - 'http://'
865               - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
866               - ':8000'
867         heat.waitcondition_server_url:
868           Fn::Join:
869             - ''
870             - - 'http://'
871               - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
872               - ':8000/v1/waitcondition'
873   allNodesConfig:
874     type: OS::Heat::StructuredConfig
875     properties:
876       config:
877         completion-signal: {get_input: deploy_signal_id}
878         hosts:
879           Fn::Join:
880           - "\n"
881           - - Fn::Join:
882               - "\n"
883               - Merge::Map:
884                   NovaCompute0:
885                     Fn::Join:
886                     - ' '
887                     - - {get_attr: [NovaCompute0, networks, ctlplane, 0]}
888                       - {get_attr: [NovaCompute0, name]}
889                       - Fn::Join:
890                         - '.'
891                         - - {get_attr: [NovaCompute0, name]}
892                           - 'novalocal'
893             - Fn::Join:
894               - "\n"
895               - Merge::Map:
896                   BlockStorage0:
897                     Fn::Join:
898                     - ' '
899                     - - {get_attr: [BlockStorage0, networks, ctlplane, 0]}
900                       - {get_attr: [BlockStorage0, name]}
901                       - Fn::Join:
902                         - '.'
903                         - - {get_attr: [BlockStorage0, name]}
904                           - 'novalocal'
905             - Fn::Join:
906               - "\n"
907               - Merge::Map:
908                   SwiftStorage0:
909                     Fn::Join:
910                     - ' '
911                     - - {get_attr: [SwiftStorage0, networks, ctlplane, 0]}
912                       - {get_attr: [SwiftStorage0, name]}
913                       - Fn::Join:
914                         - '.'
915                         - - {get_attr: [SwiftStorage0, name]}
916                           - 'novalocal'
917             - Fn::Join:
918               - "\n"
919               - Merge::Map:
920                   controller0:
921                     Fn::Join:
922                     - ' '
923                     - - {get_attr: [controller0, networks, ctlplane, 0]}
924                       - {get_attr: [controller0, name]}
925                       - Fn::Join:
926                         - '.'
927                         - - {get_attr: [controller0, name]}
928                           - 'novalocal'
929                       - {get_param: CloudName}
930         rabbit:
931           nodes:
932             Fn::Join:
933               - ','
934               - Merge::Map:
935                   controller0:
936                     {get_attr: [controller0, name]}
937         sysctl:
938           net.ipv4.tcp_keepalive_time: 5
939           net.ipv4.tcp_keepalive_probes: 5
940           net.ipv4.tcp_keepalive_intvl: 1
941   controller0SSLDeployment:
942     type: OS::Heat::StructuredDeployment
943     properties:
944       config: {get_resource: SSLConfig}
945       server: {get_resource: controller0}
946       signal_transport: NO_SIGNAL
947       input_values:
948         controller_host: {get_attr: [controller0, networks, ctlplane, 0]}
949         ssl_certificate: {get_param: SSLCertificate}
950         ssl_key: {get_param: SSLKey}
951         ssl_ca_certificate: {get_param: SSLCACertificate}
952   controller0Passthrough:
953     type: OS::Heat::StructuredDeployment
954     properties:
955       config: {get_resource: controllerPassthrough}
956       server: {get_resource: controller0}
957       signal_transport: NO_SIGNAL
958       input_values:
959         passthrough_config: {get_param: ExtraConfig}
960   controller0PassthroughSpecific:
961     depends_on: [controller0Passthrough]
962     type: OS::Heat::StructuredDeployment
963     properties:
964       config: {get_resource: controllerPassthroughSpecific}
965       server: {get_resource: controller0}
966       signal_transport: NO_SIGNAL
967       input_values:
968         passthrough_config_specific: {get_param: controllerExtraConfig}
969 outputs:
970   KeystoneURL:
971     description: URL for the Overcloud Keystone service
972     value:
973       Fn::Join:
974       - ''
975       - - http://
976         - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
977         - :5000/v2.0/