Swift: set default replicas to 3
[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: nic1
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   NeutronL3HA:
143     default: 'False'
144     description: Whether to enable l3-agent HA
145     type: string
146   NovaPassword:
147     default: unset
148     description: The password for the nova service account, used by nova-api.
149     type: string
150     hidden: true
151   NtpServer:
152     type: string
153     default: ''
154   PublicVirtualFixedIPs:
155     default: []
156     description: >
157         Control the IP allocation for the PublicVirtualInterface port. E.g.
158         [{'ip_address':'1.2.3.4'}]
159     type: json
160   PublicVirtualNetwork:
161     default: 'ctlplane'
162     type: string
163     description: >
164         Neutron network to allocate public virtual IP port on.
165   RabbitCookieSalt:
166     type: string
167     default: unset
168     description: Salt for the rabbit cookie, change this to force the randomly generated rabbit cookie to change.
169   RabbitUserName:
170     default: guest
171     description: The username for RabbitMQ
172     type: string
173   RabbitPassword:
174     default: guest
175     description: The password for RabbitMQ
176     type: string
177     hidden: true
178   RabbitClientUseSSL:
179     default: false
180     description: >
181         Rabbit client subscriber parameter to specify
182         an SSL connection to the RabbitMQ host.
183     type: string
184   RabbitClientPort:
185     default: 5672
186     description: Set rabbit subscriber port, change this if using SSL
187     type: number
188   SnmpdReadonlyUserName:
189     default: ro_snmp_user
190     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
191     type: string
192   SnmpdReadonlyUserPassword:
193     default: unset
194     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
195     type: string
196     hidden: true
197
198
199   # Controller-specific params
200   AdminToken:
201     default: unset
202     description: The keystone auth secret.
203     type: string
204     hidden: true
205   CinderLVMLoopDeviceSize:
206     default: 5000
207     description: The size of the loopback file used by the cinder LVM driver.
208     type: number
209   CinderPassword:
210     default: unset
211     description: The password for the cinder service account, used by cinder-api.
212     type: string
213     hidden: true
214   CinderISCSIHelper:
215     default: tgtadm
216     description: The iSCSI helper to use with cinder.
217     type: string
218   ControllerCount:
219     type: number
220     default: 1
221   controllerExtraConfig:
222     default: {}
223     description: |
224       Controller specific configuration to inject into the cluster. Same
225       structure as ExtraConfig.
226     type: json
227   controllerImage:
228     type: string
229     default: overcloud-control
230     constraints:
231       - custom_constraint: glance.image
232   OvercloudControlFlavor:
233     description: Flavor for control nodes to request when deploying.
234     type: string
235     constraints:
236       - custom_constraint: nova.flavor
237   ControlVirtualInterface:
238     default: 'br-ex'
239     description: Interface where virtual ip will be assigned.
240     type: string
241   ExtraConfig:
242     default: {}
243     description: |
244       Additional configuration to inject into the cluster. The JSON should have
245       the following structure:
246         {"FILEKEY":
247           {"config":
248             [{"section": "SECTIONNAME",
249               "values":
250                 [{"option": "OPTIONNAME",
251                   "value": "VALUENAME"
252                  }
253                 ]
254              }
255             ]
256           }
257         }
258       For instance:
259         {"nova":
260           {"config":
261             [{"section": "default",
262               "values":
263                 [{"option": "force_config_drive",
264                   "value": "always"
265                  }
266                 ]
267              },
268              {"section": "cells",
269               "values":
270                 [{"option": "driver",
271                   "value": "nova.cells.rpc_driver.CellsRPCDriver"
272                  }
273                 ]
274              }
275             ]
276           }
277         }
278     type: json
279   GlanceLogFile:
280     description: The filepath of the file to use for logging messages from Glance.
281     type: string
282     default: ''
283   GlanceNotifierStrategy:
284     description: Strategy to use for Glance notification queue
285     type: string
286     default: noop
287   GlancePassword:
288     default: unset
289     description: The password for the glance service account, used by the glance services.
290     type: string
291     hidden: true
292   HeatPassword:
293     default: unset
294     description: The password for the Heat service account, used by the Heat services.
295     type: string
296     hidden: true
297   HeatStackDomainAdminPassword:
298     description: Password for heat_domain_admin user.
299     type: string
300     default: ''
301     hidden: true
302   KeystoneCACertificate:
303     default: ''
304     description: Keystone self-signed certificate authority certificate.
305     type: string
306   KeystoneSigningCertificate:
307     default: ''
308     description: Keystone certificate for verifying token validity.
309     type: string
310   KeystoneSigningKey:
311     default: ''
312     description: Keystone key for signing tokens.
313     type: string
314     hidden: true
315   KeystoneSSLCertificate:
316     default: ''
317     description: Keystone certificate for verifying token validity.
318     type: string
319   KeystoneSSLCertificateKey:
320     default: ''
321     description: Keystone key for signing tokens.
322     type: string
323     hidden: true
324   MysqlInnodbBufferPoolSize:
325     description: >
326         Specifies the size of the buffer pool in megabytes. Setting to
327         zero should be interpreted as "no value" and will defer to the
328         lower level default.
329     type: number
330     default: 0
331   NeutronDnsmasqOptions:
332     default: 'dhcp-option-force=26,1400'
333     description: Dnsmasq options for neutron-dhcp-agent. The default value here forces MTU to be set to 1400 to account for the tunnel overhead.
334     type: string
335   NeutronPublicInterfaceDefaultRoute:
336     default: ''
337     description: A custom default route for the NeutronPublicInterface.
338     type: string
339   NeutronPublicInterfaceIP:
340     default: ''
341     description: A custom IP address to put onto the NeutronPublicInterface.
342     type: string
343   NeutronPublicInterfaceRawDevice:
344     default: ''
345     description: If set, the public interface is a vlan with this device as the raw device.
346     type: string
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   SSLCertificate:
354     default: ''
355     description: If set, the contents of an SSL certificate .crt file for encrypting SSL endpoints.
356     type: string
357     hidden: true
358   SSLKey:
359     default: ''
360     description: If set, the contents of an SSL certificate .key file for encrypting SSL endpoints.
361     type: string
362     hidden: true
363   SSLCACertificate:
364     default: ''
365     description: If set, the contents of an SSL certificate authority file.
366     type: string
367   SwiftHashSuffix:
368     default: unset
369     description: A random string to be used as a salt when hashing to determine mappings in the ring.
370     type: string
371     hidden: true
372   SwiftPassword:
373     default: unset
374     description: The password for the swift service account, used by the swift proxy services.
375     type: string
376     hidden: true
377   SwiftMountCheck:
378     default: 'false'
379     description: Value of mount_check in Swift account/container/object -server.conf
380     type: boolean
381   SwiftMinPartHours:
382     type: number
383     default: 1
384     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
385   SwiftPartPower:
386     default: 10
387     description: Partition Power to use when building Swift rings
388     type: number
389   SwiftReplicas:
390     type: number
391     default: 3
392     description: How many replicas to use in the swift rings.
393
394 # Compute-specific params
395   CeilometerComputeAgent:
396     description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
397     type: string
398     default: ''
399     constraints:
400     - allowed_values: ['', Present]
401   ComputeCount:
402     type: number
403     default: 1
404   HypervisorNeutronPhysicalBridge:
405     default: 'br-ex'
406     description: >
407       An OVS bridge to create on each hypervisor. This defaults to br-ex the
408       same as the control plane nodes, as we have a uniform configuration of
409       the openvswitch agent. Typically should not need to be changed.
410     type: string
411   HypervisorNeutronPublicInterface:
412     default: nic1
413     description: What interface to add to the HypervisorNeutronPhysicalBridge.
414     type: string
415   NeutronNetworkVLANRanges:
416     default: 'datacentre'
417     description: >
418       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
419       Neutron documentation for permitted values. Defaults to permitting any
420       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
421     type: string
422   NovaComputeDriver:
423     type: string
424     default: libvirt.LibvirtDriver
425   NovaComputeExtraConfig:
426     default: {}
427     description: |
428       NovaCompute specific configuration to inject into the cluster. Same
429       structure as ExtraConfig.
430     type: json
431   NovaComputeLibvirtType:
432     default: ''
433     type: string
434   NovaImage:
435     type: string
436     default: overcloud-compute
437     constraints:
438       - custom_constraint: glance.image
439   OvercloudComputeFlavor:
440     description: Use this flavor
441     type: string
442     constraints:
443       - custom_constraint: nova.flavor
444
445 # Block storage specific parameters
446   BlockStorageCount:
447     type: number
448     default: 0
449   BlockStorageImage:
450     default: overcloud-cinder-volume
451     type: string
452   OvercloudBlockStorageFlavor:
453     description: Flavor for block storage nodes to request when deploying.
454     type: string
455     constraints:
456       - custom_constraint: nova.flavor
457
458 # Object storage specific parameters
459   ObjectStorageCount:
460     type: number
461     default: 0
462   OvercloudSwiftStorageFlavor:
463     description: Flavor for Swift storage nodes to request when deploying.
464     type: string
465     constraints:
466       - custom_constraint: nova.flavor
467   SwiftStorageImage:
468     default: overcloud-swift-storage
469     type: string
470
471 resources:
472
473   Controller:
474     type: OS::Heat::ResourceGroup
475     properties:
476       count: {get_param: ControllerCount}
477       resource_def:
478         type: OS::TripleO::Controller
479         properties:
480           AdminPassword: {get_param: AdminPassword}
481           AdminToken: {get_param: AdminToken}
482           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
483           CeilometerPassword: {get_param: CeilometerPassword}
484           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
485           CinderPassword: {get_param: CinderPassword}
486           CinderISCSIHelper: {get_param: CinderISCSIHelper}
487           CloudName: {get_param: CloudName}
488           ControlVirtualInterface: {get_param: ControlVirtualInterface}
489           ControllerExtraConfig: {get_param: controllerExtraConfig}
490           ExtraConfig: {get_param: ExtraConfig}
491           Flavor: {get_param: OvercloudControlFlavor}
492           GlancePort: {get_param: GlancePort}
493           GlanceProtocol: {get_param: GlanceProtocol}
494           GlancePassword: {get_param: GlancePassword}
495           GlanceNotifierStrategy: {get_param: GlanceNotifierStrategy}
496           GlanceLogFile: {get_param: GlanceLogFile}
497           HeatPassword: {get_param: HeatPassword}
498           HeatStackDomainAdminPassword: {get_param: HeatStackDomainAdminPassword}
499           Image: {get_param: controllerImage}
500           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
501           KeyName: {get_param: KeyName}
502           KeystoneCACertificate: {get_param: KeystoneCACertificate}
503           KeystoneSigningCertificate: {get_param: KeystoneSigningCertificate}
504           KeystoneSigningKey: {get_param: KeystoneSigningKey}
505           KeystoneSSLCertificate: {get_param: KeystoneSSLCertificate}
506           KeystoneSSLCertificateKey: {get_param: KeystoneSSLCertificateKey}
507           MysqlClusterUniquePart: {get_attr: [MysqlClusterUniquePart, value]}
508           MysqlInnodbBufferPoolSize: {get_param: MysqlInnodbBufferPoolSize}
509           MysqlRootPassword: {get_attr: [MysqlRootPassword, value]}
510           NeutronPublicInterfaceIP: {get_param: NeutronPublicInterfaceIP}
511           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
512           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
513           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
514           NeutronPublicInterface: {get_param: NeutronPublicInterface}
515           NeutronPublicInterfaceDefaultRoute: {get_param: NeutronPublicInterfaceDefaultRoute}
516           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
517           NeutronPassword: {get_param: NeutronPassword}
518           NeutronDnsmasqOptions: {get_param: NeutronDnsmasqOptions}
519           NeutronDVR: {get_param: NeutronDVR}
520           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
521           NeutronAgentMode: {get_param: NeutronAgentMode}
522           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
523           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
524           NeutronL3HA: {get_param: NeutronL3HA}
525           NeutronNetworkType: {get_param: NeutronNetworkType}
526           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
527           NovaPassword: {get_param: NovaPassword}
528           NtpServer: {get_param: NtpServer}
529           PublicVirtualInterface: {get_param: PublicVirtualInterface}
530           RabbitUserName: {get_param: RabbitUserName}
531           RabbitPassword: {get_param: RabbitPassword}
532           RabbitCookie: {get_attr: [RabbitCookie, value]}
533           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
534           RabbitClientPort: {get_param: RabbitClientPort}
535           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
536           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
537           SSLCertificate: {get_param: SSLCertificate}
538           SSLKey: {get_param: SSLKey}
539           SSLCACertificate: {get_param: SSLCACertificate}
540           SwiftHashSuffix: {get_param: SwiftHashSuffix}
541           SwiftMountCheck: {get_param: SwiftMountCheck}
542           SwiftMinPartHours: {get_param: SwiftMinPartHours}
543           SwiftPartPower: {get_param: SwiftPartPower}
544           SwiftPassword: {get_param: SwiftPassword}
545           SwiftReplicas: { get_param: SwiftReplicas}
546           VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
547           PublicVirtualIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
548
549   Compute:
550     type: OS::Heat::ResourceGroup
551     properties:
552       count: {get_param: ComputeCount}
553       resource_def:
554         type: OS::TripleO::Compute
555         properties:
556           AdminPassword: {get_param: AdminPassword}
557           CeilometerComputeAgent: {get_param: CeilometerComputeAgent}
558           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
559           CeilometerPassword: {get_param: CeilometerPassword}
560           ExtraConfig: {get_param: ExtraConfig}
561           Flavor: {get_param: OvercloudComputeFlavor}
562           GlanceHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
563           GlancePort: {get_param: GlancePort}
564           GlanceProtocol: {get_param: GlanceProtocol}
565           Image: {get_param: NovaImage}
566           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
567           KeyName: {get_param: KeyName}
568           KeystoneHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
569           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
570           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
571           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
572           NeutronHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
573           NeutronNetworkType: {get_param: NeutronNetworkType}
574           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
575           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
576           NeutronPassword: {get_param: NeutronPassword}
577           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
578           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
579           NeutronDVR: {get_param: NeutronDVR}
580           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
581           NeutronAgentMode: {get_param: NeutronComputeAgentMode}
582           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
583           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
584           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
585           NeutronL3HA: {get_param: NeutronL3HA}
586           NovaApiHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
587           NovaComputeDriver: {get_param: NovaComputeDriver}
588           NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
589           NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
590           NovaPublicIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
591           NovaPassword: {get_param: NovaPassword}
592           NtpServer: {get_param: NtpServer}
593           RabbitHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
594           RabbitPassword: {get_param: RabbitPassword}
595           RabbitUserName: {get_param: RabbitUserName}
596           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
597           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
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           KeyName: {get_param: KeyName}
625           Flavor: {get_param: OvercloudSwiftStorageFlavor}
626           HashSuffix: {get_param: SwiftHashSuffix}
627           MountCheck: {get_param: SwiftMountCheck}
628           MinPartHours: {get_param: SwiftMinPartHours}
629           PartPower: {get_param: SwiftPartPower}
630           Image: {get_param: SwiftStorageImage}
631           Replicas: { get_param: SwiftReplicas}
632
633
634   allNodesConfig:
635     type: OS::Heat::StructuredConfig
636     properties:
637       config:
638         completion-signal: {get_input: deploy_signal_id}
639         hosts:
640           list_join:
641           - "\n"
642           - - list_join:
643               - "\n"
644               - {get_attr: [Compute, hosts_entry]}
645             - list_join:
646               - "\n"
647               - {get_attr: [Controller, hosts_entry]}
648             - list_join:
649               - "\n"
650               - {get_attr: [BlockStorage, hosts_entry]}
651             - list_join:
652               - "\n"
653               - {get_attr: [ObjectStorage, hosts_entry]}
654         rabbit:
655           nodes:
656             list_join:
657             - ','
658             - {get_attr: [Controller, hostname]}
659         sysctl:
660           net.ipv4.tcp_keepalive_time: 5
661           net.ipv4.tcp_keepalive_probes: 5
662           net.ipv4.tcp_keepalive_intvl: 1
663
664   MysqlRootPassword:
665     type: OS::Heat::RandomString
666     properties:
667       length: 10
668
669   MysqlClusterUniquePart:
670     type: OS::Heat::RandomString
671     properties:
672       length: 10
673
674   RabbitCookie:
675     type: OS::Heat::RandomString
676     properties:
677       length: 20
678       salt: {get_param: RabbitCookieSalt}
679
680   ControlVirtualIP:
681     type: OS::Neutron::Port
682     properties:
683       name: control_virtual_ip
684       network_id: {get_param: NeutronControlPlaneID}
685       fixed_ips: {get_param: ControlFixedIPs}
686       replacement_policy: AUTO
687
688   PublicVirtualIP:
689     type: OS::Neutron::Port
690     properties:
691       name: public_virtual_ip
692       network: {get_param: PublicVirtualNetwork}
693       fixed_ips: {get_param: PublicVirtualFixedIPs}
694       replacement_policy: AUTO
695
696   ControllerBootstrapNodeConfig:
697     type: OS::Heat::StructuredConfig
698     properties:
699       group: os-apply-config
700       config:
701         bootstrap_host:
702           bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
703
704   ControllerBootstrapNodeDeployment:
705     type: OS::Heat::StructuredDeployments
706     properties:
707       config: {get_resource: ControllerBootstrapNodeConfig}
708       servers: {get_attr: [Controller, attributes, nova_server_resource]}
709       signal_transport: NO_SIGNAL
710
711   ControllerSwiftDeployment:
712     type: OS::Heat::StructuredDeployments
713     properties:
714       config: {get_resource: SwiftDevicesAndProxyConfig}
715       servers: {get_attr: [Controller, attributes, nova_server_resource]}
716       signal_transport: NO_SIGNAL
717
718   ObjectStorageSwiftDeployment:
719     type: OS::Heat::StructuredDeployments
720     properties:
721       config: {get_resource: SwiftDevicesAndProxyConfig}
722       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
723       signal_transport: NO_SIGNAL
724
725   SwiftDevicesAndProxyConfig:
726     type: OS::Heat::StructuredConfig
727     properties:
728       group: os-apply-config
729       config:
730         swift:
731           devices:
732             list_join:
733             - ", "
734             - - list_join:
735                 - ", "
736                 - {get_attr: [Controller, swift_device]}
737               - list_join:
738                 - ", "
739                 - {get_attr: [ObjectStorage, swift_device]}
740           proxy-memcache:
741             list_join:
742             - ","
743             - {get_attr: [Controller, swift_proxy_memcache]}
744
745   ControllerClusterConfig:
746     type: OS::Heat::StructuredConfig
747     properties:
748       config:
749         corosync:
750           nodes: {get_attr: [Controller, corosync_node]}
751         horizon:
752           caches:
753             memcached:
754               nodes: {get_attr: [Controller, hostname]}
755         mysql:
756           nodes: {get_attr: [Controller, corosync_node]}
757         haproxy:
758           nodes: {get_attr: [Controller, corosync_node]}
759
760   ControllerClusterDeployment:
761     type: OS::Heat::StructuredDeployments
762     properties:
763       config: {get_resource: ControllerClusterConfig}
764       servers: {get_attr: [Controller, attributes, nova_server_resource]}
765       signal_transport: NO_SIGNAL
766
767   ControllerAllNodesDeployment:
768     type: OS::Heat::StructuredDeployments
769     properties:
770       config: {get_resource: allNodesConfig}
771       servers: {get_attr: [Controller, attributes, nova_server_resource]}
772
773   ComputeAllNodesDeployment:
774     type: OS::Heat::StructuredDeployments
775     properties:
776       config: {get_resource: allNodesConfig}
777       servers: {get_attr: [Compute, attributes, nova_server_resource]}
778
779
780 outputs:
781   KeystoneURL:
782     description: URL for the Overcloud Keystone service
783     value:
784       list_join:
785       - ''
786       - - http://
787         - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
788         - :5000/v2.0/