Don't store Neutron DB credentials on compute node
[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     default: baremetal
230     description: Flavor for control nodes to request when deploying.
231     type: string
232     constraints:
233       - custom_constraint: nova.flavor
234   ControlVirtualInterface:
235     default: 'br-ex'
236     description: Interface where virtual ip will be assigned.
237     type: string
238   ExtraConfig:
239     default: {}
240     description: |
241       Additional configuration to inject into the cluster. The JSON should have
242       the following structure:
243         {"FILEKEY":
244           {"config":
245             [{"section": "SECTIONNAME",
246               "values":
247                 [{"option": "OPTIONNAME",
248                   "value": "VALUENAME"
249                  }
250                 ]
251              }
252             ]
253           }
254         }
255       For instance:
256         {"nova":
257           {"config":
258             [{"section": "default",
259               "values":
260                 [{"option": "force_config_drive",
261                   "value": "always"
262                  }
263                 ]
264              },
265              {"section": "cells",
266               "values":
267                 [{"option": "driver",
268                   "value": "nova.cells.rpc_driver.CellsRPCDriver"
269                  }
270                 ]
271              }
272             ]
273           }
274         }
275     type: json
276   GlanceLogFile:
277     description: The filepath of the file to use for logging messages from Glance.
278     type: string
279     default: ''
280   GlanceNotifierStrategy:
281     description: Strategy to use for Glance notification queue
282     type: string
283     default: noop
284   GlancePassword:
285     default: unset
286     description: The password for the glance service account, used by the glance services.
287     type: string
288     hidden: true
289   HeatPassword:
290     default: unset
291     description: The password for the Heat service account, used by the Heat services.
292     type: string
293     hidden: true
294   HeatStackDomainAdminPassword:
295     description: Password for heat_domain_admin user.
296     type: string
297     default: ''
298     hidden: true
299   KeystoneCACertificate:
300     default: ''
301     description: Keystone self-signed certificate authority certificate.
302     type: string
303   KeystoneSigningCertificate:
304     default: ''
305     description: Keystone certificate for verifying token validity.
306     type: string
307   KeystoneSigningKey:
308     default: ''
309     description: Keystone key for signing tokens.
310     type: string
311     hidden: true
312   KeystoneSSLCertificate:
313     default: ''
314     description: Keystone certificate for verifying token validity.
315     type: string
316   KeystoneSSLCertificateKey:
317     default: ''
318     description: Keystone key for signing tokens.
319     type: string
320     hidden: true
321   MysqlInnodbBufferPoolSize:
322     description: >
323         Specifies the size of the buffer pool in megabytes. Setting to
324         zero should be interpreted as "no value" and will defer to the
325         lower level default.
326     type: number
327     default: 0
328   NeutronDnsmasqOptions:
329     default: 'dhcp-option-force=26,1400'
330     description: Dnsmasq options for neutron-dhcp-agent. The default value here forces MTU to be set to 1400 to account for the tunnel overhead.
331     type: string
332   NeutronPublicInterfaceDefaultRoute:
333     default: ''
334     description: A custom default route for the NeutronPublicInterface.
335     type: string
336   NeutronPublicInterfaceIP:
337     default: ''
338     description: A custom IP address to put onto the NeutronPublicInterface.
339     type: string
340   NeutronPublicInterfaceRawDevice:
341     default: ''
342     description: If set, the public interface is a vlan with this device as the raw device.
343     type: string
344   PublicVirtualInterface:
345     default: 'br-ex'
346     description: >
347         Specifies the interface where the public-facing virtual ip will be assigned.
348         This should be int_public when a VLAN is being used.
349     type: string
350   SSLCertificate:
351     default: ''
352     description: If set, the contents of an SSL certificate .crt file for encrypting SSL endpoints.
353     type: string
354     hidden: true
355   SSLKey:
356     default: ''
357     description: If set, the contents of an SSL certificate .key file for encrypting SSL endpoints.
358     type: string
359     hidden: true
360   SSLCACertificate:
361     default: ''
362     description: If set, the contents of an SSL certificate authority file.
363     type: string
364   SwiftHashSuffix:
365     default: unset
366     description: A random string to be used as a salt when hashing to determine mappings in the ring.
367     type: string
368     hidden: true
369   SwiftPassword:
370     default: unset
371     description: The password for the swift service account, used by the swift proxy services.
372     type: string
373     hidden: true
374   SwiftPartPower:
375     default: 10
376     description: Partition Power to use when building Swift rings
377     type: number
378   SwiftReplicas:
379     type: number
380     default: 1
381     description: How many replicas to use in the swift rings.
382
383 # Compute-specific params
384   CeilometerComputeAgent:
385     description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
386     type: string
387     default: ''
388     constraints:
389     - allowed_values: ['', Present]
390   ComputeCount:
391     type: number
392     default: 1
393   HypervisorNeutronPhysicalBridge:
394     default: 'br-ex'
395     description: >
396       An OVS bridge to create on each hypervisor. This defaults to br-ex the
397       same as the control plane nodes, as we have a uniform configuration of
398       the openvswitch agent. Typically should not need to be changed.
399     type: string
400   HypervisorNeutronPublicInterface:
401     default: 'eth0'
402     description: What interface to add to the HypervisorNeutronPhysicalBridge.
403     type: string
404   NeutronNetworkVLANRanges:
405     default: 'datacentre'
406     description: >
407       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
408       Neutron documentation for permitted values. Defaults to permitting any
409       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
410     type: string
411   NovaComputeDriver:
412     type: string
413     default: libvirt.LibvirtDriver
414   NovaComputeExtraConfig:
415     default: {}
416     description: |
417       NovaCompute specific configuration to inject into the cluster. Same
418       structure as ExtraConfig.
419     type: json
420   NovaComputeLibvirtType:
421     default: ''
422     type: string
423   NovaImage:
424     type: string
425     default: overcloud-compute
426     constraints:
427       - custom_constraint: glance.image
428   OvercloudComputeFlavor:
429     description: Use this flavor
430     type: string
431     default: baremetal
432     constraints:
433       - custom_constraint: nova.flavor
434
435 # Block storage specific parameters
436   BlockStorageCount:
437     type: number
438     default: 1
439   BlockStorageImage:
440     default: overcloud-cinder-volume
441     type: string
442   OvercloudBlockStorageFlavor:
443     default: baremetal
444     description: Flavor for block storage nodes to request when deploying.
445     type: string
446
447 # Object storage specific parameters
448   ObjectStorageCount:
449     type: number
450     default: 0
451   OvercloudSwiftStorageFlavor:
452     default: baremetal
453     description: Flavor for Swift storage nodes to request when deploying.
454     type: string
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           CeilometerDSN:
581             list_join:
582               - ''
583               - - mysql://ceilometer:unset@
584                 - &compute_database_host {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
585                 - /ceilometer
586
587   BlockStorage:
588     type: OS::Heat::ResourceGroup
589     properties:
590       count: {get_param: BlockStorageCount}
591       resource_def:
592         type: OS::TripleO::BlockStorage
593         properties:
594           AdminPassword: {get_param: AdminPassword}
595           Image: {get_param: BlockStorageImage}
596           CinderISCSIHelper: {get_param: CinderISCSIHelper}
597           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
598           CinderPassword: {get_param: CinderPassword}
599           VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
600           KeyName: {get_param: KeyName}
601           Flavor: {get_param: OvercloudBlockStorageFlavor}
602           RabbitPassword: {get_param: RabbitPassword}
603           RabbitUserName: {get_param: RabbitUserName}
604
605   ObjectStorage:
606     type: OS::Heat::ResourceGroup
607     properties:
608       count: {get_param: ObjectStorageCount}
609       resource_def:
610         type: OS::TripleO::ObjectStorage
611         properties:
612           ControllerIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
613           KeyName: {get_param: KeyName}
614           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
615           NeutronNetworkType: {get_param: NeutronNetworkType}
616           Flavor: {get_param: OvercloudSwiftStorageFlavor}
617           HashSuffix: {get_param: SwiftHashSuffix}
618           PartPower: {get_param: SwiftPartPower}
619           Password: {get_param: SwiftPassword}
620           Image: {get_param: SwiftStorageImage}
621           Replicas: { get_param: SwiftReplicas}
622
623
624   allNodesConfig:
625     type: OS::Heat::StructuredConfig
626     properties:
627       config:
628         completion-signal: {get_input: deploy_signal_id}
629         hosts:
630           list_join:
631           - "\n"
632           - - list_join:
633               - "\n"
634               - {get_attr: [Compute, hosts_entry]}
635             - list_join:
636               - "\n"
637               - {get_attr: [Controller, hosts_entry]}
638             - list_join:
639               - "\n"
640               - {get_attr: [BlockStorage, hosts_entry]}
641             - list_join:
642               - "\n"
643               - {get_attr: [ObjectStorage, hosts_entry]}
644         rabbit:
645           nodes:
646             list_join:
647             - ','
648             - {get_attr: [Controller, hostname]}
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/