Merge "Bring back (abandoned) support for Cinder/NFS"
[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         NovaPublicIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
426         NeutronNetworkType:
427             get_param: NeutronNetworkType
428         NeutronTunnelTypes:
429             get_param: NeutronTunnelTypes
430         NeutronEnableTunnelling: "True"
431         NeutronFlatNetworks:
432             get_param: NeutronFlatNetworks
433         NeutronNetworkVLANRanges:
434             get_param: NeutronNetworkVLANRanges
435         NeutronPhysicalBridge:
436             get_param: HypervisorNeutronPhysicalBridge
437         NeutronPublicInterface:
438             get_param: HypervisorNeutronPublicInterface
439         NeutronBridgeMappings:
440             get_param: NeutronBridgeMappings
441         NeutronDVR:
442             get_param: NeutronDVR
443         NeutronAgentMode:
444             get_param: NeutronComputeAgentMode
445         NeutronPublicInterfaceRawDevice:
446             get_param: NeutronPublicInterfaceRawDevice
447         NeutronMechanismDrivers:
448             get_param: NeutronMechanismDrivers
449         NeutronAllowL3AgentFailover:
450             get_param: NeutronAllowL3AgentFailover
451   NovaCompute0AllNodesDeployment:
452     type: FileInclude
453     Path: nova-compute-instance.yaml
454     SubKey: resources.NovaCompute0AllNodesDeployment
455     parameters:
456         AllNodesConfig: {get_resource: allNodesConfig}
457   NovaCompute0:
458     type: FileInclude
459     Path: nova-compute-instance.yaml
460     SubKey: resources.NovaCompute0
461   NovaCompute0Passthrough:
462     type: FileInclude
463     Path: nova-compute-instance.yaml
464     SubKey: resources.NovaCompute0Passthrough
465     parameters:
466         passthrough_config: {get_param: ExtraConfig}
467   NovaCompute0PassthroughSpecific:
468     type: FileInclude
469     Path: nova-compute-instance.yaml
470     SubKey: resources.NovaCompute0PassthroughSpecific
471     parameters:
472         passthrough_config_specific: {get_param: NovaComputeExtraConfig}
473   controllerConfig:
474     type: OS::Heat::StructuredConfig
475     properties:
476       group: os-apply-config
477       config:
478         admin-password:
479           get_param: AdminPassword
480         admin-token:
481           get_param: AdminToken
482         bootstack:
483           public_interface_ip:
484             get_param: NeutronPublicInterfaceIP
485         bootstrap_host:
486           bootstrap_nodeid:
487             Fn::Select:
488             - 0
489             - Fn::Select:
490               - 0
491               - Merge::Map:
492                   controller0:
493                   - get_attr:
494                     - controller0
495                     - name
496           nodeid: {get_input: bootstack_nodeid}
497         database:
498           host: &database_host
499             {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
500         cinder:
501           db:
502             Fn::Join:
503               - ''
504               - - mysql://cinder:unset@
505                 - *database_host
506                 - /cinder
507           debug: {get_param: Debug}
508           volume_size_mb:
509             get_param: CinderLVMLoopDeviceSize
510           service-password:
511             get_param: CinderPassword
512           iscsi-helper:
513             get_param: CinderISCSIHelper
514         controller-address:
515           get_input: controller_host
516         corosync:
517           bindnetaddr: {get_input: controller_host}
518           mcastport: 5577
519           nodes:
520             Merge::Map:
521               controller0:
522                 ip: {get_attr: [controller0, networks, ctlplane, 0]}
523         pacemaker:
524           stonith_enabled : false
525           recheck_interval : 5
526           quorum_policy : ignore
527         db-password: unset
528         glance:
529           registry:
530             host: {get_input: controller_virtual_ip}
531           backend: swift
532           db:
533             Fn::Join:
534               - ''
535               - - mysql://glance:unset@
536                 - *database_host
537                 - /glance
538           debug: {get_param: Debug}
539           host:
540             get_input: controller_virtual_ip
541           port:
542             get_param: GlancePort
543           protocol:
544             get_param: GlanceProtocol
545           service-password:
546             get_param: GlancePassword
547           swift-store-user: service:glance
548           swift-store-key:
549             get_param: GlancePassword
550           notifier-strategy:
551             get_param: GlanceNotifierStrategy
552           log-file:
553             get_param: GlanceLogFile
554         heat:
555           admin_password:
556             get_param: HeatPassword
557           admin_tenant_name: service
558           admin_user: heat
559           auth_encryption_key: unset___________
560           db:
561             Fn::Join:
562               - ''
563               - - mysql://heat:unset@
564                 - *database_host
565                 - /heat
566           debug: {get_param: Debug}
567           stack_domain_admin_password: {get_param: HeatStackDomainAdminPassword}
568           watch_server_url: {get_input: heat.watch_server_url}
569           metadata_server_url: {get_input: heat.metadata_server_url}
570           waitcondition_server_url: {get_input: heat.waitcondition_server_url}
571         horizon:
572           port: {get_param: HorizonPort}
573           caches:
574             memcached:
575               nodes:
576                 Merge::Map:
577                   controller0:
578                     {get_attr: [controller0, name]}
579         keystone:
580           db:
581             Fn::Join:
582               - ''
583               - - mysql://keystone:unset@
584                 - *database_host
585                 - /keystone
586           debug: {get_param: Debug}
587           host:
588             get_input: controller_virtual_ip
589           ca_certificate: {get_param: KeystoneCACertificate}
590           signing_key: {get_param: KeystoneSigningKey}
591           signing_certificate: {get_param: KeystoneSigningCertificate}
592           ssl:
593               certificate: {get_param: KeystoneSSLCertificate}
594               certificate_key: {get_param: KeystoneSSLCertificateKey}
595         mysql:
596           innodb_buffer_pool_size: {get_param: MysqlInnodbBufferPoolSize}
597           local_bind: true
598           root-password: {get_resource: MysqlRootPassword}
599           nodes:
600             Merge::Map:
601               controller0:
602                 ip: {get_attr: [controller0, networks, ctlplane, 0]}
603           cluster_name:
604             Fn::Join:
605               - '-'
606               - - 'tripleo'
607                 - {get_resource: MysqlClusterUniquePart}
608         neutron:
609           debug: {get_param: Debug}
610           flat-networks: {get_param: NeutronFlatNetworks}
611           host: {get_input: controller_virtual_ip}
612           metadata_proxy_shared_secret: {get_param: NeutronMetadataProxySharedSecret}
613           agent_mode: {get_param: NeutronAgentMode}
614           router_distributed: {get_param: NeutronDVR}
615           mechanism_drivers: {get_param: NeutronMechanismDrivers}
616           allow_automatic_l3agent_failover: {get_param: NeutronAllowL3AgentFailover}
617           ovs:
618             enable_tunneling: 'True'
619             local_ip:
620               get_input: controller_host
621             network_vlan_ranges: {get_param: NeutronNetworkVLANRanges}
622             bridge_mappings: {get_param: NeutronBridgeMappings}
623             public_interface:
624               get_param: NeutronPublicInterface
625             public_interface_raw_device:
626               get_param: NeutronPublicInterfaceRawDevice
627             public_interface_route:
628               get_param: NeutronPublicInterfaceDefaultRoute
629             public_interface_tag:
630               get_param: NeutronPublicInterfaceTag
631             physical_bridge: br-ex
632             tenant_network_type:
633               get_param: NeutronNetworkType
634             tunnel_types:
635               get_param: NeutronTunnelTypes
636           ovs_db:
637             Fn::Join:
638               - ''
639               - - mysql://neutron:unset@
640                 - *database_host
641                 - /ovs_neutron?charset=utf8
642           service-password:
643             get_param: NeutronPassword
644           dnsmasq-options:
645             get_param: NeutronDnsmasqOptions
646         ceilometer:
647           db:
648             Fn::Join:
649               - ''
650               - - mysql://ceilometer:unset@
651                 - *database_host
652                 - /ceilometer
653           debug: {get_param: Debug}
654           metering_secret: {get_param: CeilometerMeteringSecret}
655           service-password:
656             get_param: CeilometerPassword
657         snmpd:
658           export_MIB: UCD-SNMP-MIB
659           readonly_user_name:
660             get_param: SnmpdReadonlyUserName
661           readonly_user_password:
662             get_param: SnmpdReadonlyUserPassword
663         nova:
664           compute_driver: libvirt.LibvirtDriver
665           db:
666             Fn::Join:
667               - ''
668               - - mysql://nova:unset@
669                 - *database_host
670                 - /nova
671           default_floating_pool:
672             ext-net
673           host: {get_input: controller_virtual_ip}
674           metadata-proxy: true
675           service-password:
676             get_param: NovaPassword
677         rabbit:
678           host: {get_input: controller_virtual_ip}
679           username:
680             get_param: RabbitUserName
681           password:
682             get_param: RabbitPassword
683           cookie:
684             get_attr:
685             - RabbitCookie
686             - value
687           rabbit_client_use_ssl: {get_param: RabbitClientUseSSL}
688           rabbit_port: {get_param: RabbitClientPort}
689         ntp:
690           servers:
691               - {server: {get_param: NtpServer}, fudge: "stratum 0"}
692         virtual_interfaces:
693           instances:
694             - vrrp_instance_name: VI_CONTROL
695               virtual_router_id: 51
696               keepalive_interface:
697                 get_param: ControlVirtualInterface
698               priority: 101
699               virtual_ips:
700               - ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
701                 interface:
702                   get_param: ControlVirtualInterface
703             - vrrp_instance_name: VI_PUBLIC
704               virtual_router_id: 52
705               keepalive_interface:
706                 get_param: PublicVirtualInterface
707               priority: 101
708               virtual_ips:
709               - ip: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
710                 interface:
711                   get_param: PublicVirtualInterface
712           vrrp_sync_groups:
713             - name: VG1
714               members:
715                 - VI_CONTROL
716                 - VI_PUBLIC
717         keepalived:
718           keepalive_interface:
719             get_param: PublicVirtualInterface
720           priority: 101
721         virtual_ips:
722             -
723               ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
724               interface:
725                 get_param: ControlVirtualInterface
726             -
727               ip: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
728               interface:
729                 get_param: PublicVirtualInterface
730         haproxy:
731           nodes:
732             Merge::Map:
733               controller0:
734                 ip: {get_attr: [controller0, networks, ctlplane, 0]}
735                 name: {get_attr: [controller0, name]}
736           net_binds:
737             - &control_vip {ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}}
738             - &public_vip {ip: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}}
739           options:
740             - option httpchk GET /
741           services:
742             - name: keystone_admin
743               port: 35357
744             - name: keystone_public
745               port: 5000
746             - name: horizon
747               port: 80
748             - name: neutron
749               port: 9696
750             - name: cinder
751               port: 8776
752             - name: glance_api
753               port: 9292
754             - name: glance_registry
755               port: 9191
756               options: # overwrite options as glace_reg needs auth for http req
757             - name: heat_api
758               port: 8004
759             - name: heat_cloudwatch
760               port: 8003
761             - name: heat_cfn
762               port: 8000
763             - name: mysql
764               port: 3306
765               net_binds:
766                 - *control_vip
767               extra_server_params:
768                 - backup
769               options:
770                 - timeout client 0
771                 - timeout server 0
772             - name: nova_ec2
773               port: 8773
774             - name: nova_osapi
775               port: 8774
776             - name: nova_metadata
777               port: 8775
778             - name: nova_novncproxy
779               port: 6080
780             - name: ceilometer
781               port: 8777
782               options: # overwrite options as ceil needs auth for http req
783             - name: swift_proxy_server
784               port: 8080
785               options:
786                 - option httpchk GET /info
787             - name: rabbitmq
788               port: 5672
789               net_binds:
790                 - *control_vip
791               options:
792                 - timeout client 0
793                 - timeout server 0
794                 - maxconn 1500
795   controllerPassthrough:
796     type: OS::Heat::StructuredConfig
797     properties:
798       group: os-apply-config
799       config: {get_input: passthrough_config}
800   controllerPassthroughSpecific:
801     type: OS::Heat::StructuredConfig
802     properties:
803       group: os-apply-config
804       config: {get_input: passthrough_config_specific}
805   controller0:
806     type: OS::Nova::Server
807     properties:
808       image:
809         get_param: controllerImage
810       image_update_policy:
811         get_param: ImageUpdatePolicy
812       flavor:
813         get_param: OvercloudControlFlavor
814       key_name:
815         get_param: KeyName
816       networks:
817         - network: ctlplane
818       user_data_format: SOFTWARE_CONFIG
819   controller0AllNodesDeployment:
820     depends_on: [controller0Deployment,controller0SSLDeployment,controller0Swift,controller0PassthroughSpecific]
821     type: OS::Heat::StructuredDeployment
822     properties:
823       signal_transport: {get_param: DefaultSignalTransport}
824       config: {get_resource: allNodesConfig}
825       server: {get_resource: controller0}
826   controller0Deployment:
827     type: OS::Heat::StructuredDeployment
828     properties:
829       signal_transport: NO_SIGNAL
830       config: {get_resource: controllerConfig}
831       server: {get_resource: controller0}
832       input_values:
833         bootstack_nodeid: {get_attr: [controller0, name]}
834         controller_host: {get_attr: [controller0, networks, ctlplane, 0]}
835         controller_virtual_ip:
836           {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
837         heat.watch_server_url:
838           Fn::Join:
839             - ''
840             - - 'http://'
841               - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
842               - ':8003'
843         heat.metadata_server_url:
844           Fn::Join:
845             - ''
846             - - 'http://'
847               - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
848               - ':8000'
849         heat.waitcondition_server_url:
850           Fn::Join:
851             - ''
852             - - 'http://'
853               - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
854               - ':8000/v1/waitcondition'
855   allNodesConfig:
856     type: OS::Heat::StructuredConfig
857     properties:
858       config:
859         completion-signal: {get_input: deploy_signal_id}
860         hosts:
861           Fn::Join:
862           - "\n"
863           - - Fn::Join:
864               - "\n"
865               - Merge::Map:
866                   NovaCompute0:
867                     Fn::Join:
868                     - ' '
869                     - - {get_attr: [NovaCompute0, networks, ctlplane, 0]}
870                       - {get_attr: [NovaCompute0, name]}
871                       - Fn::Join:
872                         - '.'
873                         - - {get_attr: [NovaCompute0, name]}
874                           - 'novalocal'
875             - Fn::Join:
876               - "\n"
877               - Merge::Map:
878                   BlockStorage0:
879                     Fn::Join:
880                     - ' '
881                     - - {get_attr: [BlockStorage0, networks, ctlplane, 0]}
882                       - {get_attr: [BlockStorage0, name]}
883                       - Fn::Join:
884                         - '.'
885                         - - {get_attr: [BlockStorage0, name]}
886                           - 'novalocal'
887             - Fn::Join:
888               - "\n"
889               - Merge::Map:
890                   SwiftStorage0:
891                     Fn::Join:
892                     - ' '
893                     - - {get_attr: [SwiftStorage0, networks, ctlplane, 0]}
894                       - {get_attr: [SwiftStorage0, name]}
895                       - Fn::Join:
896                         - '.'
897                         - - {get_attr: [SwiftStorage0, name]}
898                           - 'novalocal'
899             - Fn::Join:
900               - "\n"
901               - Merge::Map:
902                   controller0:
903                     Fn::Join:
904                     - ' '
905                     - - {get_attr: [controller0, networks, ctlplane, 0]}
906                       - {get_attr: [controller0, name]}
907                       - Fn::Join:
908                         - '.'
909                         - - {get_attr: [controller0, name]}
910                           - 'novalocal'
911                       - {get_param: CloudName}
912         rabbit:
913           nodes:
914             Fn::Join:
915               - ','
916               - Merge::Map:
917                   controller0:
918                     {get_attr: [controller0, name]}
919         sysctl:
920           net.ipv4.tcp_keepalive_time: 5
921           net.ipv4.tcp_keepalive_probes: 5
922           net.ipv4.tcp_keepalive_intvl: 1
923   controller0SSLDeployment:
924     type: OS::Heat::StructuredDeployment
925     properties:
926       config: {get_resource: SSLConfig}
927       server: {get_resource: controller0}
928       signal_transport: NO_SIGNAL
929       input_values:
930         controller_host: {get_attr: [controller0, networks, ctlplane, 0]}
931         ssl_certificate: {get_param: SSLCertificate}
932         ssl_key: {get_param: SSLKey}
933         ssl_ca_certificate: {get_param: SSLCACertificate}
934   controller0Passthrough:
935     type: OS::Heat::StructuredDeployment
936     properties:
937       config: {get_resource: controllerPassthrough}
938       server: {get_resource: controller0}
939       signal_transport: NO_SIGNAL
940       input_values:
941         passthrough_config: {get_param: ExtraConfig}
942   controller0PassthroughSpecific:
943     depends_on: [controller0Passthrough]
944     type: OS::Heat::StructuredDeployment
945     properties:
946       config: {get_resource: controllerPassthroughSpecific}
947       server: {get_resource: controller0}
948       signal_transport: NO_SIGNAL
949       input_values:
950         passthrough_config_specific: {get_param: controllerExtraConfig}
951 outputs:
952   KeystoneURL:
953     description: URL for the Overcloud Keystone service
954     value:
955       Fn::Join:
956       - ''
957       - - http://
958         - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
959         - :5000/v2.0/