Merge "Bring back (abandoned) support for Cinder/NFS"
[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   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: nic1
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           NeutronNetworkType: {get_param: NeutronNetworkType}
513           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
514           NovaPassword: {get_param: NovaPassword}
515           NtpServer: {get_param: NtpServer}
516           PublicVirtualInterface: {get_param: PublicVirtualInterface}
517           RabbitUserName: {get_param: RabbitUserName}
518           RabbitPassword: {get_param: RabbitPassword}
519           RabbitCookie: {get_attr: [RabbitCookie, value]}
520           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
521           RabbitClientPort: {get_param: RabbitClientPort}
522           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
523           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
524           SSLCertificate: {get_param: SSLCertificate}
525           SSLKey: {get_param: SSLKey}
526           SSLCACertificate: {get_param: SSLCACertificate}
527           SwiftHashSuffix: {get_param: SwiftHashSuffix}
528           SwiftPartPower: {get_param: SwiftPartPower}
529           SwiftPassword: {get_param: SwiftPassword}
530           SwiftReplicas: { get_param: SwiftReplicas}
531           VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
532           PublicVirtualIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
533
534   Compute:
535     type: OS::Heat::ResourceGroup
536     properties:
537       count: {get_param: ComputeCount}
538       resource_def:
539         type: OS::TripleO::Compute
540         properties:
541           AdminPassword: {get_param: AdminPassword}
542           CeilometerComputeAgent: {get_param: CeilometerComputeAgent}
543           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
544           CeilometerPassword: {get_param: CeilometerPassword}
545           ExtraConfig: {get_param: ExtraConfig}
546           Flavor: {get_param: OvercloudComputeFlavor}
547           GlanceHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
548           GlancePort: {get_param: GlancePort}
549           GlanceProtocol: {get_param: GlanceProtocol}
550           Image: {get_param: NovaImage}
551           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
552           KeyName: {get_param: KeyName}
553           KeystoneHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
554           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
555           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
556           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
557           NeutronHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
558           NeutronNetworkType: {get_param: NeutronNetworkType}
559           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
560           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
561           NeutronPassword: {get_param: NeutronPassword}
562           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
563           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
564           NeutronDVR: {get_param: NeutronDVR}
565           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
566           NeutronAgentMode: {get_param: NeutronComputeAgentMode}
567           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
568           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
569           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
570           NovaApiHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
571           NovaComputeDriver: {get_param: NovaComputeDriver}
572           NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
573           NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
574           NovaPublicIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
575           NovaPassword: {get_param: NovaPassword}
576           NtpServer: {get_param: NtpServer}
577           RabbitHost: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
578           RabbitPassword: {get_param: RabbitPassword}
579           RabbitUserName: {get_param: RabbitUserName}
580           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
581           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
582
583   BlockStorage:
584     type: OS::Heat::ResourceGroup
585     properties:
586       count: {get_param: BlockStorageCount}
587       resource_def:
588         type: OS::TripleO::BlockStorage
589         properties:
590           AdminPassword: {get_param: AdminPassword}
591           Image: {get_param: BlockStorageImage}
592           CinderISCSIHelper: {get_param: CinderISCSIHelper}
593           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
594           CinderPassword: {get_param: CinderPassword}
595           VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
596           KeyName: {get_param: KeyName}
597           Flavor: {get_param: OvercloudBlockStorageFlavor}
598           RabbitPassword: {get_param: RabbitPassword}
599           RabbitUserName: {get_param: RabbitUserName}
600
601   ObjectStorage:
602     type: OS::Heat::ResourceGroup
603     properties:
604       count: {get_param: ObjectStorageCount}
605       resource_def:
606         type: OS::TripleO::ObjectStorage
607         properties:
608           ControllerIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
609           KeyName: {get_param: KeyName}
610           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
611           NeutronNetworkType: {get_param: NeutronNetworkType}
612           Flavor: {get_param: OvercloudSwiftStorageFlavor}
613           HashSuffix: {get_param: SwiftHashSuffix}
614           PartPower: {get_param: SwiftPartPower}
615           Password: {get_param: SwiftPassword}
616           Image: {get_param: SwiftStorageImage}
617           Replicas: { get_param: SwiftReplicas}
618
619
620   allNodesConfig:
621     type: OS::Heat::StructuredConfig
622     properties:
623       config:
624         completion-signal: {get_input: deploy_signal_id}
625         hosts:
626           list_join:
627           - "\n"
628           - - list_join:
629               - "\n"
630               - {get_attr: [Compute, hosts_entry]}
631             - list_join:
632               - "\n"
633               - {get_attr: [Controller, hosts_entry]}
634             - list_join:
635               - "\n"
636               - {get_attr: [BlockStorage, hosts_entry]}
637             - list_join:
638               - "\n"
639               - {get_attr: [ObjectStorage, hosts_entry]}
640         rabbit:
641           nodes:
642             list_join:
643             - ','
644             - {get_attr: [Controller, hostname]}
645         sysctl:
646           net.ipv4.tcp_keepalive_time: 5
647           net.ipv4.tcp_keepalive_probes: 5
648           net.ipv4.tcp_keepalive_intvl: 1
649
650   MysqlRootPassword:
651     type: OS::Heat::RandomString
652     properties:
653       length: 10
654
655   MysqlClusterUniquePart:
656     type: OS::Heat::RandomString
657     properties:
658       length: 10
659
660   RabbitCookie:
661     type: OS::Heat::RandomString
662     properties:
663       length: 20
664       salt: {get_param: RabbitCookieSalt}
665
666   ControlVirtualIP:
667     type: OS::Neutron::Port
668     properties:
669       name: control_virtual_ip
670       network_id: {get_param: NeutronControlPlaneID}
671       fixed_ips: {get_param: ControlFixedIPs}
672       replacement_policy: AUTO
673
674   PublicVirtualIP:
675     type: OS::Neutron::Port
676     properties:
677       name: public_virtual_ip
678       network: {get_param: PublicVirtualNetwork}
679       fixed_ips: {get_param: PublicVirtualFixedIPs}
680       replacement_policy: AUTO
681
682   ControllerBootstrapNodeConfig:
683     type: OS::Heat::StructuredConfig
684     properties:
685       group: os-apply-config
686       config:
687         bootstrap_host:
688           bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
689
690   ControllerBootstrapNodeDeployment:
691     type: OS::Heat::StructuredDeployments
692     properties:
693       config: {get_resource: ControllerBootstrapNodeConfig}
694       servers: {get_attr: [Controller, attributes, nova_server_resource]}
695       signal_transport: NO_SIGNAL
696
697   ControllerSwiftDeployment:
698     type: OS::Heat::StructuredDeployments
699     properties:
700       config: {get_resource: SwiftDevicesAndProxyConfig}
701       servers: {get_attr: [Controller, attributes, nova_server_resource]}
702       signal_transport: NO_SIGNAL
703
704   ObjectStorageSwiftDeployment:
705     type: OS::Heat::StructuredDeployments
706     properties:
707       config: {get_resource: SwiftDevicesAndProxyConfig}
708       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
709       signal_transport: NO_SIGNAL
710
711   SwiftDevicesAndProxyConfig:
712     type: OS::Heat::StructuredConfig
713     properties:
714       group: os-apply-config
715       config:
716         swift:
717           devices:
718             list_join:
719             - ", "
720             - - list_join:
721                 - ", "
722                 - {get_attr: [Controller, swift_device]}
723               - list_join:
724                 - ", "
725                 - {get_attr: [ObjectStorage, swift_device]}
726           proxy-memcache:
727             list_join:
728             - ","
729             - {get_attr: [Controller, swift_proxy_memcache]}
730
731   ControllerClusterConfig:
732     type: OS::Heat::StructuredConfig
733     properties:
734       config:
735         corosync:
736           nodes: {get_attr: [Controller, corosync_node]}
737         horizon:
738           caches:
739             memcached:
740               nodes: {get_attr: [Controller, hostname]}
741         mysql:
742           nodes: {get_attr: [Controller, corosync_node]}
743         haproxy:
744           nodes: {get_attr: [Controller, corosync_node]}
745
746   ControllerClusterDeployment:
747     type: OS::Heat::StructuredDeployments
748     properties:
749       config: {get_resource: ControllerClusterConfig}
750       servers: {get_attr: [Controller, attributes, nova_server_resource]}
751       signal_transport: NO_SIGNAL
752
753   ControllerAllNodesDeployment:
754     type: OS::Heat::StructuredDeployments
755     properties:
756       config: {get_resource: allNodesConfig}
757       servers: {get_attr: [Controller, attributes, nova_server_resource]}
758
759   ComputeAllNodesDeployment:
760     type: OS::Heat::StructuredDeployments
761     properties:
762       config: {get_resource: allNodesConfig}
763       servers: {get_attr: [Compute, attributes, nova_server_resource]}
764
765
766 outputs:
767   KeystoneURL:
768     description: URL for the Overcloud Keystone service
769     value:
770       list_join:
771       - ''
772       - - http://
773         - {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
774         - :5000/v2.0/