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