Merge "Remove default flavor from every template"
[apex-tripleo-heat-templates.git] / overcloud-without-mergepy.yaml
1 heat_template_version: 2014-10-16
2
3 description: >
4   Nova API,Keystone,Heat Engine and API,Glance,Neutron,Dedicated MySQL
5   server,Dedicated RabbitMQ Server,Group of Nova Computes
6
7
8 # TODO(shadower): we should probably use the parameter groups to put
9 # some order in here.
10 parameters:
11
12   # Common parameters (not specific to a role)
13   AdminPassword:
14     default: unset
15     description: The password for the keystone admin account, used for monitoring, querying neutron etc.
16     type: string
17     hidden: true
18   CeilometerMeteringSecret:
19     default: unset
20     description: Secret shared by the ceilometer services.
21     type: string
22     hidden: true
23   CeilometerPassword:
24     default: unset
25     description: The password for the ceilometer service account.
26     type: string
27     hidden: true
28   CloudName:
29     default: ''
30     description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
31     type: string
32   ControlFixedIPs:
33     default: []
34     description: Should be used for arbitrary ips.
35     type: json
36   Debug:
37     default: ''
38     description: Set to True to enable debugging on all services.
39     type: string
40   DefaultSignalTransport:
41     default: CFN_SIGNAL
42     description: Transport to use for software-config signals.
43     type: string
44     constraints:
45       - allowed_values: [ CFN_SIGNAL, HEAT_SIGNAL, NO_SIGNAL ]
46   GlancePort:
47     default: "9292"
48     description: Glance port.
49     type: string
50   GlanceProtocol:
51     default: http
52     description: Protocol to use when connecting to glance, set to https for SSL.
53     type: string
54   ImageUpdatePolicy:
55     default: 'REBUILD_PRESERVE_EPHEMERAL'
56     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
57     type: string
58   KeyName:
59     default: default
60     description: Name of an existing EC2 KeyPair to enable SSH access to the instances
61     type: string
62     constraints:
63       - custom_constraint: nova.keypair
64   NeutronBridgeMappings:
65     description: >
66       The OVS logical->physical bridge mappings to use. See the Neutron
67       documentation for details. Defaults to mapping br-ex - the external
68       bridge on hosts - to a physical name 'datacentre' which can be used
69       to create provider networks (and we use this for the default floating
70       network) - if changing this either use different post-install network
71       scripts or be sure to keep 'datacentre' as a mapping network name.
72     type: string
73     default: "datacentre:br-ex"
74   NeutronControlPlaneID:
75     default: ''
76     type: string
77     description: Neutron ID for ctlplane network.
78   NeutronEnableTunnelling:
79     type: string
80     default: "True"
81   NeutronFlatNetworks:
82     type: string
83     default: 'datacentre'
84     description: >
85       If set, flat networks to configure in neutron plugins. Defaults to
86       'datacentre' to permit external network creation.
87   NeutronNetworkType:
88     default: 'gre'
89     description: The tenant network type for Neutron, either gre or vxlan.
90     type: string
91   NeutronPassword:
92     default: unset
93     description: The password for the neutron service account, used by neutron agents.
94     type: string
95     hidden: true
96   NeutronPublicInterface:
97     default: eth0
98     description: What interface to bridge onto br-ex for network nodes.
99     type: string
100   NeutronPublicInterfaceTag:
101     default: ''
102     description: >
103       VLAN tag for creating a public VLAN. The tag will be used to
104       create an access port on the exterior bridge for each control plane node,
105       and that port will be given the IP address returned by neutron from the
106       public network. Set CONTROLEXTRA=overcloud-vlan-port.yaml when compiling
107       overcloud.yaml to include the deployment of VLAN ports to the control
108       plane.
109     type: string
110   NeutronComputeAgentMode:
111     default: 'dvr'
112     description: Agent mode for the neutron-l3-agent on the compute hosts
113     type: string
114   NeutronAgentMode:
115     default: 'dvr_snat'
116     description: Agent mode for the neutron-l3-agent on the controller hosts
117     type: string
118   NeutronDVR:
119     default: 'False'
120     description: Whether to configure Neutron Distributed Virtual Routers
121     type: string
122   NeutronMetadataProxySharedSecret:
123     default: 'unset'
124     description: Shared secret to prevent spoofing
125     type: string
126   NeutronTunnelTypes:
127     default: 'gre'
128     description: |
129         The tunnel types for the Neutron tenant network. To specify multiple
130         values, use a comma separated string, like so: 'gre,vxlan'
131     type: string
132   NeutronMechanismDrivers:
133     default: 'openvswitch'
134     description: |
135         The mechanism drivers for the Neutron tenant network. To specify multiple
136         values, use a comma separated string, like so: 'openvswitch,l2_population'
137     type: string
138   NeutronAllowL3AgentFailover:
139     default: 'True'
140     description: Allow automatic l3-agent failover
141     type: string
142   NovaPassword:
143     default: unset
144     description: The password for the nova service account, used by nova-api.
145     type: string
146     hidden: true
147   NtpServer:
148     type: string
149     default: ''
150   PublicVirtualFixedIPs:
151     default: []
152     description: >
153         Control the IP allocation for the PublicVirtualInterface port. E.g.
154         [{'ip_address':'1.2.3.4'}]
155     type: json
156   PublicVirtualNetwork:
157     default: 'ctlplane'
158     type: string
159     description: >
160         Neutron network to allocate public virtual IP port on.
161   RabbitCookieSalt:
162     type: string
163     default: unset
164     description: Salt for the rabbit cookie, change this to force the randomly generated rabbit cookie to change.
165   RabbitUserName:
166     default: guest
167     description: The username for RabbitMQ
168     type: string
169   RabbitPassword:
170     default: guest
171     description: The password for RabbitMQ
172     type: string
173     hidden: true
174   RabbitClientUseSSL:
175     default: false
176     description: >
177         Rabbit client subscriber parameter to specify
178         an SSL connection to the RabbitMQ host.
179     type: string
180   RabbitClientPort:
181     default: 5672
182     description: Set rabbit subscriber port, change this if using SSL
183     type: number
184   SnmpdReadonlyUserName:
185     default: ro_snmp_user
186     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
187     type: string
188   SnmpdReadonlyUserPassword:
189     default: unset
190     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
191     type: string
192     hidden: true
193
194
195   # Controller-specific params
196   AdminToken:
197     default: unset
198     description: The keystone auth secret.
199     type: string
200     hidden: true
201   CinderLVMLoopDeviceSize:
202     default: 5000
203     description: The size of the loopback file used by the cinder LVM driver.
204     type: number
205   CinderPassword:
206     default: unset
207     description: The password for the cinder service account, used by cinder-api.
208     type: string
209     hidden: true
210   CinderISCSIHelper:
211     default: tgtadm
212     description: The iSCSI helper to use with cinder.
213     type: string
214   ControllerCount:
215     type: number
216     default: 1
217   controllerExtraConfig:
218     default: {}
219     description: |
220       Controller specific configuration to inject into the cluster. Same
221       structure as ExtraConfig.
222     type: json
223   controllerImage:
224     type: string
225     default: overcloud-control
226     constraints:
227       - custom_constraint: glance.image
228   OvercloudControlFlavor:
229     description: Flavor for control nodes to request when deploying.
230     type: string
231     constraints:
232       - custom_constraint: nova.flavor
233   ControlVirtualInterface:
234     default: 'br-ex'
235     description: Interface where virtual ip will be assigned.
236     type: string
237   ExtraConfig:
238     default: {}
239     description: |
240       Additional configuration to inject into the cluster. The JSON should have
241       the following structure:
242         {"FILEKEY":
243           {"config":
244             [{"section": "SECTIONNAME",
245               "values":
246                 [{"option": "OPTIONNAME",
247                   "value": "VALUENAME"
248                  }
249                 ]
250              }
251             ]
252           }
253         }
254       For instance:
255         {"nova":
256           {"config":
257             [{"section": "default",
258               "values":
259                 [{"option": "force_config_drive",
260                   "value": "always"
261                  }
262                 ]
263              },
264              {"section": "cells",
265               "values":
266                 [{"option": "driver",
267                   "value": "nova.cells.rpc_driver.CellsRPCDriver"
268                  }
269                 ]
270              }
271             ]
272           }
273         }
274     type: json
275   GlanceLogFile:
276     description: The filepath of the file to use for logging messages from Glance.
277     type: string
278     default: ''
279   GlanceNotifierStrategy:
280     description: Strategy to use for Glance notification queue
281     type: string
282     default: noop
283   GlancePassword:
284     default: unset
285     description: The password for the glance service account, used by the glance services.
286     type: string
287     hidden: true
288   HeatPassword:
289     default: unset
290     description: The password for the Heat service account, used by the Heat services.
291     type: string
292     hidden: true
293   HeatStackDomainAdminPassword:
294     description: Password for heat_domain_admin user.
295     type: string
296     default: ''
297     hidden: true
298   KeystoneCACertificate:
299     default: ''
300     description: Keystone self-signed certificate authority certificate.
301     type: string
302   KeystoneSigningCertificate:
303     default: ''
304     description: Keystone certificate for verifying token validity.
305     type: string
306   KeystoneSigningKey:
307     default: ''
308     description: Keystone key for signing tokens.
309     type: string
310     hidden: true
311   KeystoneSSLCertificate:
312     default: ''
313     description: Keystone certificate for verifying token validity.
314     type: string
315   KeystoneSSLCertificateKey:
316     default: ''
317     description: Keystone key for signing tokens.
318     type: string
319     hidden: true
320   MysqlInnodbBufferPoolSize:
321     description: >
322         Specifies the size of the buffer pool in megabytes. Setting to
323         zero should be interpreted as "no value" and will defer to the
324         lower level default.
325     type: number
326     default: 0
327   NeutronDnsmasqOptions:
328     default: 'dhcp-option-force=26,1400'
329     description: Dnsmasq options for neutron-dhcp-agent. The default value here forces MTU to be set to 1400 to account for the tunnel overhead.
330     type: string
331   NeutronPublicInterfaceDefaultRoute:
332     default: ''
333     description: A custom default route for the NeutronPublicInterface.
334     type: string
335   NeutronPublicInterfaceIP:
336     default: ''
337     description: A custom IP address to put onto the NeutronPublicInterface.
338     type: string
339   NeutronPublicInterfaceRawDevice:
340     default: ''
341     description: If set, the public interface is a vlan with this device as the raw device.
342     type: string
343   PublicVirtualInterface:
344     default: 'br-ex'
345     description: >
346         Specifies the interface where the public-facing virtual ip will be assigned.
347         This should be int_public when a VLAN is being used.
348     type: string
349   SSLCertificate:
350     default: ''
351     description: If set, the contents of an SSL certificate .crt file for encrypting SSL endpoints.
352     type: string
353     hidden: true
354   SSLKey:
355     default: ''
356     description: If set, the contents of an SSL certificate .key file for encrypting SSL endpoints.
357     type: string
358     hidden: true
359   SSLCACertificate:
360     default: ''
361     description: If set, the contents of an SSL certificate authority file.
362     type: string
363   SwiftHashSuffix:
364     default: unset
365     description: A random string to be used as a salt when hashing to determine mappings in the ring.
366     type: string
367     hidden: true
368   SwiftPassword:
369     default: unset
370     description: The password for the swift service account, used by the swift proxy services.
371     type: string
372     hidden: true
373   SwiftPartPower:
374     default: 10
375     description: Partition Power to use when building Swift rings
376     type: number
377   SwiftReplicas:
378     type: number
379     default: 1
380     description: How many replicas to use in the swift rings.
381
382 # Compute-specific params
383   CeilometerComputeAgent:
384     description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
385     type: string
386     default: ''
387     constraints:
388     - allowed_values: ['', Present]
389   ComputeCount:
390     type: number
391     default: 1
392   HypervisorNeutronPhysicalBridge:
393     default: 'br-ex'
394     description: >
395       An OVS bridge to create on each hypervisor. This defaults to br-ex the
396       same as the control plane nodes, as we have a uniform configuration of
397       the openvswitch agent. Typically should not need to be changed.
398     type: string
399   HypervisorNeutronPublicInterface:
400     default: 'eth0'
401     description: What interface to add to the HypervisorNeutronPhysicalBridge.
402     type: string
403   NeutronNetworkVLANRanges:
404     default: 'datacentre'
405     description: >
406       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
407       Neutron documentation for permitted values. Defaults to permitting any
408       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
409     type: string
410   NovaComputeDriver:
411     type: string
412     default: libvirt.LibvirtDriver
413   NovaComputeExtraConfig:
414     default: {}
415     description: |
416       NovaCompute specific configuration to inject into the cluster. Same
417       structure as ExtraConfig.
418     type: json
419   NovaComputeLibvirtType:
420     default: ''
421     type: string
422   NovaImage:
423     type: string
424     default: overcloud-compute
425     constraints:
426       - custom_constraint: glance.image
427   OvercloudComputeFlavor:
428     description: Use this flavor
429     type: string
430     constraints:
431       - custom_constraint: nova.flavor
432
433 # Block storage specific parameters
434   BlockStorageCount:
435     type: number
436     default: 1
437   BlockStorageImage:
438     default: overcloud-cinder-volume
439     type: string
440   OvercloudBlockStorageFlavor:
441     description: Flavor for block storage nodes to request when deploying.
442     type: string
443     constraints:
444       - custom_constraint: nova.flavor
445
446 # Object storage specific parameters
447   ObjectStorageCount:
448     type: number
449     default: 0
450   OvercloudSwiftStorageFlavor:
451     description: Flavor for Swift storage nodes to request when deploying.
452     type: string
453     constraints:
454       - custom_constraint: nova.flavor
455   SwiftStorageImage:
456     default: overcloud-swift-storage
457     type: string
458
459 resources:
460
461   Controller:
462     type: OS::Heat::ResourceGroup
463     properties:
464       count: {get_param: ControllerCount}
465       resource_def:
466         type: OS::TripleO::Controller
467         properties:
468           AdminPassword: {get_param: AdminPassword}
469           AdminToken: {get_param: AdminToken}
470           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
471           CeilometerPassword: {get_param: CeilometerPassword}
472           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
473           CinderPassword: {get_param: CinderPassword}
474           CinderISCSIHelper: {get_param: CinderISCSIHelper}
475           CloudName: {get_param: CloudName}
476           ControlVirtualInterface: {get_param: ControlVirtualInterface}
477           ControllerExtraConfig: {get_param: controllerExtraConfig}
478           ExtraConfig: {get_param: ExtraConfig}
479           Flavor: {get_param: OvercloudControlFlavor}
480           GlancePort: {get_param: GlancePort}
481           GlanceProtocol: {get_param: GlanceProtocol}
482           GlancePassword: {get_param: GlancePassword}
483           GlanceNotifierStrategy: {get_param: GlanceNotifierStrategy}
484           GlanceLogFile: {get_param: GlanceLogFile}
485           HeatPassword: {get_param: HeatPassword}
486           HeatStackDomainAdminPassword: {get_param: HeatStackDomainAdminPassword}
487           Image: {get_param: controllerImage}
488           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
489           KeyName: {get_param: KeyName}
490           KeystoneCACertificate: {get_param: KeystoneCACertificate}
491           KeystoneSigningCertificate: {get_param: KeystoneSigningCertificate}
492           KeystoneSigningKey: {get_param: KeystoneSigningKey}
493           KeystoneSSLCertificate: {get_param: KeystoneSSLCertificate}
494           KeystoneSSLCertificateKey: {get_param: KeystoneSSLCertificateKey}
495           MysqlClusterUniquePart: {get_attr: [MysqlClusterUniquePart, value]}
496           MysqlInnodbBufferPoolSize: {get_param: MysqlInnodbBufferPoolSize}
497           MysqlRootPassword: {get_attr: [MysqlRootPassword, value]}
498           NeutronPublicInterfaceIP: {get_param: NeutronPublicInterfaceIP}
499           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
500           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
501           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
502           NeutronPublicInterface: {get_param: NeutronPublicInterface}
503           NeutronPublicInterfaceDefaultRoute: {get_param: NeutronPublicInterfaceDefaultRoute}
504           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
505           NeutronPassword: {get_param: NeutronPassword}
506           NeutronDnsmasqOptions: {get_param: NeutronDnsmasqOptions}
507           NeutronDVR: {get_param: NeutronDVR}
508           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
509           NeutronAgentMode: {get_param: NeutronAgentMode}
510           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
511           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
512           NovaPassword: {get_param: NovaPassword}
513           NtpServer: {get_param: NtpServer}
514           PublicVirtualInterface: {get_param: PublicVirtualInterface}
515           RabbitUserName: {get_param: RabbitUserName}
516           RabbitPassword: {get_param: RabbitPassword}
517           RabbitCookie: {get_attr: [RabbitCookie, value]}
518           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
519           RabbitClientPort: {get_param: RabbitClientPort}
520           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
521           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
522           SSLCertificate: {get_param: SSLCertificate}
523           SSLKey: {get_param: SSLKey}
524           SSLCACertificate: {get_param: SSLCACertificate}
525           SwiftHashSuffix: {get_param: SwiftHashSuffix}
526           SwiftPartPower: {get_param: SwiftPartPower}
527           SwiftPassword: {get_param: SwiftPassword}
528           SwiftReplicas: { get_param: SwiftReplicas}
529           VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
530           PublicVirtualIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
531
532   Compute:
533     type: OS::Heat::ResourceGroup
534     properties:
535       count: {get_param: ComputeCount}
536       resource_def:
537         type: OS::TripleO::Compute
538         properties:
539           AdminPassword: {get_param: AdminPassword}
540           CeilometerComputeAgent: {get_param: CeilometerComputeAgent}
541           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
542           CeilometerPassword: {get_param: CeilometerPassword}
543           ExtraConfig: {get_param: ExtraConfig}
544           Flavor: {get_param: OvercloudComputeFlavor}
545           GlanceHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
546           GlancePort: {get_param: GlancePort}
547           GlanceProtocol: {get_param: GlanceProtocol}
548           Image: {get_param: NovaImage}
549           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
550           KeyName: {get_param: KeyName}
551           KeystoneHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
552           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
553           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
554           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
555           NeutronHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
556           NeutronNetworkType: {get_param: NeutronNetworkType}
557           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
558           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
559           NeutronPassword: {get_param: NeutronPassword}
560           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
561           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
562           NeutronDVR: {get_param: NeutronDVR}
563           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
564           NeutronAgentMode: {get_param: NeutronComputeAgentMode}
565           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
566           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
567           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
568           NovaApiHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
569           NovaComputeDriver: {get_param: NovaComputeDriver}
570           NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
571           NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
572           NovaPublicIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
573           NovaPassword: {get_param: NovaPassword}
574           NtpServer: {get_param: NtpServer}
575           RabbitHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
576           RabbitPassword: {get_param: RabbitPassword}
577           RabbitUserName: {get_param: RabbitUserName}
578           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
579           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
580           NovaDSN:
581             list_join:
582               - ''
583               - - mysql://nova:unset@
584                 - &compute_database_host {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
585                 - /nova
586           CeilometerDSN:
587             list_join:
588               - ''
589               - - mysql://ceilometer:unset@
590                 - *compute_database_host
591                 - /ceilometer
592           NeutronDSN:
593             list_join:
594               - ''
595               - - mysql://neutron:unset@
596                 - *compute_database_host
597                 - /ovs_neutron
598
599   BlockStorage:
600     type: OS::Heat::ResourceGroup
601     properties:
602       count: {get_param: BlockStorageCount}
603       resource_def:
604         type: OS::TripleO::BlockStorage
605         properties:
606           AdminPassword: {get_param: AdminPassword}
607           Image: {get_param: BlockStorageImage}
608           CinderISCSIHelper: {get_param: CinderISCSIHelper}
609           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
610           CinderPassword: {get_param: CinderPassword}
611           VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
612           KeyName: {get_param: KeyName}
613           Flavor: {get_param: OvercloudBlockStorageFlavor}
614           RabbitPassword: {get_param: RabbitPassword}
615           RabbitUserName: {get_param: RabbitUserName}
616
617   ObjectStorage:
618     type: OS::Heat::ResourceGroup
619     properties:
620       count: {get_param: ObjectStorageCount}
621       resource_def:
622         type: OS::TripleO::ObjectStorage
623         properties:
624           ControllerIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
625           KeyName: {get_param: KeyName}
626           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
627           NeutronNetworkType: {get_param: NeutronNetworkType}
628           Flavor: {get_param: OvercloudSwiftStorageFlavor}
629           HashSuffix: {get_param: SwiftHashSuffix}
630           PartPower: {get_param: SwiftPartPower}
631           Password: {get_param: SwiftPassword}
632           Image: {get_param: SwiftStorageImage}
633           Replicas: { get_param: SwiftReplicas}
634
635
636   allNodesConfig:
637     type: OS::Heat::StructuredConfig
638     properties:
639       config:
640         completion-signal: {get_input: deploy_signal_id}
641         hosts:
642           list_join:
643           - "\n"
644           - - list_join:
645               - "\n"
646               - {get_attr: [Compute, hosts_entry]}
647             - list_join:
648               - "\n"
649               - {get_attr: [Controller, hosts_entry]}
650             - list_join:
651               - "\n"
652               - {get_attr: [BlockStorage, hosts_entry]}
653             - list_join:
654               - "\n"
655               - {get_attr: [ObjectStorage, hosts_entry]}
656         rabbit:
657           nodes:
658             list_join:
659             - ','
660             - {get_attr: [Controller, hostname]}
661
662   MysqlRootPassword:
663     type: OS::Heat::RandomString
664     properties:
665       length: 10
666
667   MysqlClusterUniquePart:
668     type: OS::Heat::RandomString
669     properties:
670       length: 10
671
672   RabbitCookie:
673     type: OS::Heat::RandomString
674     properties:
675       length: 20
676       salt: {get_param: RabbitCookieSalt}
677
678   ControlVirtualIP:
679     type: OS::Neutron::Port
680     properties:
681       name: control_virtual_ip
682       network_id: {get_param: NeutronControlPlaneID}
683       fixed_ips: {get_param: ControlFixedIPs}
684       replacement_policy: AUTO
685
686   PublicVirtualIP:
687     type: OS::Neutron::Port
688     properties:
689       name: public_virtual_ip
690       network: {get_param: PublicVirtualNetwork}
691       fixed_ips: {get_param: PublicVirtualFixedIPs}
692       replacement_policy: AUTO
693
694   ControllerBootstrapNodeConfig:
695     type: OS::Heat::StructuredConfig
696     properties:
697       group: os-apply-config
698       config:
699         bootstrap_host:
700           bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
701
702   ControllerBootstrapNodeDeployment:
703     type: OS::Heat::StructuredDeployments
704     properties:
705       config: {get_resource: ControllerBootstrapNodeConfig}
706       servers: {get_attr: [Controller, attributes, nova_server_resource]}
707       signal_transport: NO_SIGNAL
708
709   ControllerSwiftDeployment:
710     type: OS::Heat::StructuredDeployments
711     properties:
712       config: {get_resource: SwiftDevicesAndProxyConfig}
713       servers: {get_attr: [Controller, attributes, nova_server_resource]}
714       signal_transport: NO_SIGNAL
715
716   ObjectStorageSwiftDeployment:
717     type: OS::Heat::StructuredDeployments
718     properties:
719       config: {get_resource: SwiftDevicesAndProxyConfig}
720       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
721       signal_transport: NO_SIGNAL
722
723   SwiftDevicesAndProxyConfig:
724     type: OS::Heat::StructuredConfig
725     properties:
726       group: os-apply-config
727       config:
728         swift:
729           devices:
730             list_join:
731             - ", "
732             - - list_join:
733                 - ", "
734                 - {get_attr: [Controller, swift_device]}
735               - list_join:
736                 - ", "
737                 - {get_attr: [ObjectStorage, swift_device]}
738           proxy-memcache:
739             list_join:
740             - ","
741             - {get_attr: [Controller, swift_proxy_memcache]}
742
743   ControllerClusterConfig:
744     type: OS::Heat::StructuredConfig
745     properties:
746       config:
747         corosync:
748           nodes: {get_attr: [Controller, corosync_node]}
749         horizon:
750           caches:
751             memcached:
752               nodes: {get_attr: [Controller, hostname]}
753         mysql:
754           nodes: {get_attr: [Controller, corosync_node]}
755         haproxy:
756           nodes: {get_attr: [Controller, corosync_node]}
757
758   ControllerClusterDeployment:
759     type: OS::Heat::StructuredDeployments
760     properties:
761       config: {get_resource: ControllerClusterConfig}
762       servers: {get_attr: [Controller, attributes, nova_server_resource]}
763       signal_transport: NO_SIGNAL
764
765   ControllerAllNodesDeployment:
766     type: OS::Heat::StructuredDeployments
767     properties:
768       config: {get_resource: allNodesConfig}
769       servers: {get_attr: [Controller, attributes, nova_server_resource]}
770
771   ComputeAllNodesDeployment:
772     type: OS::Heat::StructuredDeployments
773     properties:
774       config: {get_resource: allNodesConfig}
775       servers: {get_attr: [Compute, attributes, nova_server_resource]}
776
777
778 outputs:
779   KeystoneURL:
780     description: URL for the Overcloud Keystone service
781     value:
782       list_join:
783       - ''
784       - - http://
785         - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
786         - :5000/v2.0/