Merge "Increase default max_connections for MySQL from 1024 to 4096"
[apex-tripleo-heat-templates.git] / overcloud-without-mergepy.yaml
1 heat_template_version: 2015-04-30
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   CeilometerBackend:
19     default: 'mongodb'
20     description: The ceilometer backend type.
21     type: string
22   CeilometerMeteringSecret:
23     default: unset
24     description: Secret shared by the ceilometer services.
25     type: string
26     hidden: true
27   CeilometerPassword:
28     default: unset
29     description: The password for the ceilometer service account.
30     type: string
31     hidden: true
32   # This has to be an UUID so for now we generate it outside the template
33   CephClusterFSID:
34     default: ''
35     type: string
36     description: The Ceph cluster FSID. Must be a UUID.
37   CephMonKey:
38     default: ''
39     description: The Ceph monitors key. Can be created with ceph-authtool --gen-print-key.
40     type: string
41   CephAdminKey:
42     default: ''
43     description: The Ceph admin client key. Can be created with ceph-authtool --gen-print-key.
44     type: string
45   CinderEnableIscsiBackend:
46     default: true
47     description: Whether to enable or not the Iscsi backend for Cinder
48     type: boolean
49   CloudName:
50     default: ''
51     description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
52     type: string
53   ControlFixedIPs:
54     default: []
55     description: Should be used for arbitrary ips.
56     type: json
57   Debug:
58     default: ''
59     description: Set to True to enable debugging on all services.
60     type: string
61   GlancePort:
62     default: "9292"
63     description: Glance port.
64     type: string
65   GlanceProtocol:
66     default: http
67     description: Protocol to use when connecting to glance, set to https for SSL.
68     type: string
69   ImageUpdatePolicy:
70     default: 'REBUILD_PRESERVE_EPHEMERAL'
71     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
72     type: string
73   KeyName:
74     default: default
75     description: Name of an existing EC2 KeyPair to enable SSH access to the instances
76     type: string
77     constraints:
78       - custom_constraint: nova.keypair
79   NeutronExternalNetworkBridge:
80     description: Name of bridge used for external network traffic.
81     type: string
82     default: 'br-ex'
83   NeutronBridgeMappings:
84     description: >
85       The OVS logical->physical bridge mappings to use. See the Neutron
86       documentation for details. Defaults to mapping br-ex - the external
87       bridge on hosts - to a physical name 'datacentre' which can be used
88       to create provider networks (and we use this for the default floating
89       network) - if changing this either use different post-install network
90       scripts or be sure to keep 'datacentre' as a mapping network name.
91     type: string
92     default: "datacentre:br-ex"
93   NeutronControlPlaneID:
94     default: ''
95     type: string
96     description: Neutron ID for ctlplane network.
97   NeutronEnableTunnelling:
98     type: string
99     default: "True"
100   NeutronFlatNetworks:
101     type: string
102     default: 'datacentre'
103     description: >
104       If set, flat networks to configure in neutron plugins. Defaults to
105       'datacentre' to permit external network creation.
106   NeutronNetworkType:
107     default: 'gre'
108     description: The tenant network type for Neutron, either gre or vxlan.
109     type: string
110   NeutronPassword:
111     default: unset
112     description: The password for the neutron service account, used by neutron agents.
113     type: string
114     hidden: true
115   NeutronPublicInterface:
116     default: nic1
117     description: What interface to bridge onto br-ex for network nodes.
118     type: string
119   NeutronPublicInterfaceTag:
120     default: ''
121     description: >
122       VLAN tag for creating a public VLAN. The tag will be used to
123       create an access port on the exterior bridge for each control plane node,
124       and that port will be given the IP address returned by neutron from the
125       public network. Set CONTROLEXTRA=overcloud-vlan-port.yaml when compiling
126       overcloud.yaml to include the deployment of VLAN ports to the control
127       plane.
128     type: string
129   NeutronComputeAgentMode:
130     default: 'dvr'
131     description: Agent mode for the neutron-l3-agent on the compute hosts
132     type: string
133   NeutronAgentMode:
134     default: 'dvr_snat'
135     description: Agent mode for the neutron-l3-agent on the controller hosts
136     type: string
137   NeutronDVR:
138     default: 'False'
139     description: Whether to configure Neutron Distributed Virtual Routers
140     type: string
141   NeutronMetadataProxySharedSecret:
142     default: 'unset'
143     description: Shared secret to prevent spoofing
144     type: string
145   NeutronTunnelTypes:
146     default: 'gre'
147     description: |
148         The tunnel types for the Neutron tenant network. To specify multiple
149         values, use a comma separated string, like so: 'gre,vxlan'
150     type: string
151   NeutronTunnelIdRanges:
152     description: |
153         Comma-separated list of <tun_min>:<tun_max> tuples enumerating ranges
154         of GRE tunnel IDs that are available for tenant network allocation
155     default: ["1:1000", ]
156     type: comma_delimited_list
157   NeutronVniRanges:
158     description: |
159         Comma-separated list of <vni_min>:<vni_max> tuples enumerating ranges
160         of VXLAN VNI IDs that are available for tenant network allocation
161     default: ["1:1000", ]
162     type: comma_delimited_list
163   NeutronMechanismDrivers:
164     default: 'openvswitch'
165     description: |
166         The mechanism drivers for the Neutron tenant network. To specify multiple
167         values, use a comma separated string, like so: 'openvswitch,l2_population'
168     type: string
169   NeutronAllowL3AgentFailover:
170     default: 'True'
171     description: Allow automatic l3-agent failover
172     type: string
173   NeutronL3HA:
174     default: 'False'
175     description: Whether to enable l3-agent HA
176     type: string
177   NeutronDhcpAgentsPerNetwork:
178     type: number
179     default: 3
180     description: The number of neutron dhcp agents to schedule per network
181   NovaPassword:
182     default: unset
183     description: The password for the nova service account, used by nova-api.
184     type: string
185     hidden: true
186   NtpServer:
187     type: string
188     default: ''
189   MongoDbNoJournal:
190     default: false
191     description: Should MongoDb journaling be disabled
192     type: boolean
193   PublicVirtualFixedIPs:
194     default: []
195     description: >
196         Control the IP allocation for the PublicVirtualInterface port. E.g.
197         [{'ip_address':'1.2.3.4'}]
198     type: json
199   PublicVirtualNetwork:
200     default: 'ctlplane'
201     type: string
202     description: >
203         Neutron network to allocate public virtual IP port on.
204   RabbitCookieSalt:
205     type: string
206     default: unset
207     description: Salt for the rabbit cookie, change this to force the randomly generated rabbit cookie to change.
208   # FIXME: 'guest' is provisioned in RabbitMQ by default, we should create a user if these are changed
209   RabbitUserName:
210     default: guest
211     description: The username for RabbitMQ
212     type: string
213   RabbitPassword:
214     default: guest
215     description: The password for RabbitMQ
216     type: string
217     hidden: true
218   RabbitClientUseSSL:
219     default: false
220     description: >
221         Rabbit client subscriber parameter to specify
222         an SSL connection to the RabbitMQ host.
223     type: string
224   RabbitClientPort:
225     default: 5672
226     description: Set rabbit subscriber port, change this if using SSL
227     type: number
228   SnmpdReadonlyUserName:
229     default: ro_snmp_user
230     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
231     type: string
232   SnmpdReadonlyUserPassword:
233     default: unset
234     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
235     type: string
236     hidden: true
237
238   # Controller-specific params
239   AdminToken:
240     default: unset
241     description: The keystone auth secret.
242     type: string
243     hidden: true
244   CinderEnableRbdBackend:
245     default: false
246     description: Whether to enable or not the Rbd backend for Cinder
247     type: boolean
248   CinderLVMLoopDeviceSize:
249     default: 5000
250     description: The size of the loopback file used by the cinder LVM driver.
251     type: number
252   CinderPassword:
253     default: unset
254     description: The password for the cinder service account, used by cinder-api.
255     type: string
256     hidden: true
257   CinderISCSIHelper:
258     default: tgtadm
259     description: The iSCSI helper to use with cinder.
260     type: string
261   ControllerCount:
262     type: number
263     default: 1
264   controllerExtraConfig:
265     default: {}
266     description: |
267       Controller specific configuration to inject into the cluster. Same
268       structure as ExtraConfig.
269     type: json
270   controllerImage:
271     type: string
272     default: overcloud-control
273     constraints:
274       - custom_constraint: glance.image
275   OvercloudControlFlavor:
276     description: Flavor for control nodes to request when deploying.
277     type: string
278     constraints:
279       - custom_constraint: nova.flavor
280   ControlVirtualInterface:
281     default: 'br-ex'
282     description: Interface where virtual ip will be assigned.
283     type: string
284   EnableFencing:
285     default: false
286     description: Whether to enable fencing in Pacemaker or not.
287     type: boolean
288   EnableGalera:
289     default: true
290     description: Whether to use Galera instead of regular MariaDB.
291     type: boolean
292   ControllerEnableCephStorage:
293     default: false
294     description: Whether to deploy Ceph Storage (OSD) on the Controller
295     type: boolean
296   ControllerEnableSwiftStorage:
297     default: true
298     description: Whether to enable Swift Storage on the Controller
299     type: boolean
300   ExtraConfig:
301     default: {}
302     description: |
303       Additional configuration to inject into the cluster. The format required
304       may be implementation specific, e.g puppet hieradata.  Any role specific
305       ExtraConfig, e.g controllerExtraConfig takes precedence over ExtraConfig.
306     type: json
307   FencingConfig:
308     default: {}
309     description: |
310       Pacemaker fencing configuration. The JSON should have
311       the following structure:
312         {
313           "devices": [
314             {
315               "agent": "AGENT_NAME",
316               "host_mac": "HOST_MAC_ADDRESS",
317               "params": {"PARAM_NAME": "PARAM_VALUE"}
318             }
319           ]
320         }
321       For instance:
322         {
323           "devices": [
324             {
325               "agent": "fence_xvm",
326               "host_mac": "52:54:00:aa:bb:cc",
327               "params": {
328                 "multicast_address": "225.0.0.12",
329                 "port": "baremetal_0",
330                 "manage_fw": true,
331                 "manage_key_file": true,
332                 "key_file": "/etc/fence_xvm.key",
333                 "key_file_password": "abcdef"
334               }
335             }
336           ]
337         }
338     type: json
339   GlanceLogFile:
340     description: The filepath of the file to use for logging messages from Glance.
341     type: string
342     default: ''
343   GlanceNotifierStrategy:
344     description: Strategy to use for Glance notification queue
345     type: string
346     default: noop
347   GlancePassword:
348     default: unset
349     description: The password for the glance service account, used by the glance services.
350     type: string
351     hidden: true
352   GlanceBackend:
353     default: swift
354     description: The short name of the Glance backend to use. Should be one
355       of swift, rbd or file
356     type: string
357     constraints:
358     - allowed_values: ['swift', 'file', 'rbd']
359   HeatPassword:
360     default: unset
361     description: The password for the Heat service account, used by the Heat services.
362     type: string
363     hidden: true
364   HeatStackDomainAdminPassword:
365     description: Password for heat_domain_admin user.
366     type: string
367     default: ''
368     hidden: true
369   KeystoneCACertificate:
370     default: ''
371     description: Keystone self-signed certificate authority certificate.
372     type: string
373   KeystoneSigningCertificate:
374     default: ''
375     description: Keystone certificate for verifying token validity.
376     type: string
377   KeystoneSigningKey:
378     default: ''
379     description: Keystone key for signing tokens.
380     type: string
381     hidden: true
382   KeystoneSSLCertificate:
383     default: ''
384     description: Keystone certificate for verifying token validity.
385     type: string
386   KeystoneSSLCertificateKey:
387     default: ''
388     description: Keystone key for signing tokens.
389     type: string
390     hidden: true
391   MysqlInnodbBufferPoolSize:
392     description: >
393         Specifies the size of the buffer pool in megabytes. Setting to
394         zero should be interpreted as "no value" and will defer to the
395         lower level default.
396     type: number
397     default: 0
398   MysqlMaxConnections:
399     description: Configures MySQL max_connections config setting
400     type: number
401     default: 4096
402   NeutronDnsmasqOptions:
403     default: 'dhcp-option-force=26,1400'
404     description: Dnsmasq options for neutron-dhcp-agent. The default value here forces MTU to be set to 1400 to account for the tunnel overhead.
405     type: string
406   NeutronPublicInterfaceDefaultRoute:
407     default: ''
408     description: A custom default route for the NeutronPublicInterface.
409     type: string
410   NeutronPublicInterfaceIP:
411     default: ''
412     description: A custom IP address to put onto the NeutronPublicInterface.
413     type: string
414   NeutronPublicInterfaceRawDevice:
415     default: ''
416     description: If set, the public interface is a vlan with this device as the raw device.
417     type: string
418   PublicVirtualInterface:
419     default: 'br-ex'
420     description: >
421         Specifies the interface where the public-facing virtual ip will be assigned.
422         This should be int_public when a VLAN is being used.
423     type: string
424   SSLCertificate:
425     default: ''
426     description: If set, the contents of an SSL certificate .crt file for encrypting SSL endpoints.
427     type: string
428     hidden: true
429   SSLKey:
430     default: ''
431     description: If set, the contents of an SSL certificate .key file for encrypting SSL endpoints.
432     type: string
433     hidden: true
434   SSLCACertificate:
435     default: ''
436     description: If set, the contents of an SSL certificate authority file.
437     type: string
438   SwiftHashSuffix:
439     default: unset
440     description: A random string to be used as a salt when hashing to determine mappings in the ring.
441     type: string
442     hidden: true
443   SwiftPassword:
444     default: unset
445     description: The password for the swift service account, used by the swift proxy services.
446     type: string
447     hidden: true
448   SwiftMountCheck:
449     default: 'false'
450     description: Value of mount_check in Swift account/container/object -server.conf
451     type: boolean
452   SwiftMinPartHours:
453     type: number
454     default: 1
455     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
456   SwiftPartPower:
457     default: 10
458     description: Partition Power to use when building Swift rings
459     type: number
460   SwiftReplicas:
461     type: number
462     default: 3
463     description: How many replicas to use in the swift rings.
464
465 # Compute-specific params
466   CeilometerComputeAgent:
467     description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
468     type: string
469     default: ''
470     constraints:
471     - allowed_values: ['', Present]
472   ComputeCount:
473     type: number
474     default: 1
475   HypervisorNeutronPhysicalBridge:
476     default: 'br-ex'
477     description: >
478       An OVS bridge to create on each hypervisor. This defaults to br-ex the
479       same as the control plane nodes, as we have a uniform configuration of
480       the openvswitch agent. Typically should not need to be changed.
481     type: string
482   HypervisorNeutronPublicInterface:
483     default: nic1
484     description: What interface to add to the HypervisorNeutronPhysicalBridge.
485     type: string
486   NeutronNetworkVLANRanges:
487     default: 'datacentre'
488     description: >
489       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
490       Neutron documentation for permitted values. Defaults to permitting any
491       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
492     type: comma_delimited_list
493   NovaComputeDriver:
494     type: string
495     default: libvirt.LibvirtDriver
496   NovaComputeExtraConfig:
497     default: {}
498     description: |
499       NovaCompute specific configuration to inject into the cluster. Same
500       structure as ExtraConfig.
501     type: json
502   NovaComputeLibvirtType:
503     default: ''
504     type: string
505   NovaEnableRbdBackend:
506     default: false
507     description: Whether to enable or not the Rbd backend for Nova
508     type: boolean
509   NovaImage:
510     type: string
511     default: overcloud-compute
512     constraints:
513       - custom_constraint: glance.image
514   OvercloudComputeFlavor:
515     description: Use this flavor
516     type: string
517     constraints:
518       - custom_constraint: nova.flavor
519   ServiceNetMap:
520     default:
521       NeutronTenantNetwork: tenant
522       CeilometerApiNetwork: internal_api
523       MongoDbNetwork: internal_api
524       CinderApiNetwork: internal_api
525       CinderIscsiNetwork: storage
526       GlanceApiNetwork: storage
527       GlanceRegistryNetwork: internal_api
528       KeystoneAdminApiNetwork: internal_api
529       KeystonePublicApiNetwork: internal_api
530       NeutronApiNetwork: internal_api
531       HeatApiNetwork: internal_api
532       NovaApiNetwork: internal_api
533       NovaMetadataNetwork: internal_api
534       NovaVncProxyNetwork: internal_api
535       SwiftMgmtNetwork: storage_mgmt
536       SwiftProxyNetwork: storage
537       HorizonNetwork: internal_api
538       MemcachedNetwork: internal_api
539       RabbitMqNetwork: internal_api
540       RedisNetwork: internal_api
541       MysqlNetwork: internal_api
542       CephClusterNetwork: storage_mgmt
543       CephPublicNetwork: storage
544       ControllerHostnameResolveNetwork: internal_api
545       ComputeHostnameResolveNetwork: internal_api
546       BlockStorageHostnameResolveNetwork: internal_api
547       ObjectStorageHostnameResolveNetwork: internal_api
548       CephStorageHostnameResolveNetwork: storage
549     description: Mapping of service_name -> network name. Typically set
550                  via parameter_defaults in the resource registry.
551     type: json
552
553 # Block storage specific parameters
554   BlockStorageCount:
555     type: number
556     default: 0
557   BlockStorageImage:
558     default: overcloud-cinder-volume
559     type: string
560   OvercloudBlockStorageFlavor:
561     description: Flavor for block storage nodes to request when deploying.
562     type: string
563     constraints:
564       - custom_constraint: nova.flavor
565
566 # Object storage specific parameters
567   ObjectStorageCount:
568     type: number
569     default: 0
570   OvercloudSwiftStorageFlavor:
571     description: Flavor for Swift storage nodes to request when deploying.
572     type: string
573     constraints:
574       - custom_constraint: nova.flavor
575   SwiftStorageImage:
576     default: overcloud-swift-storage
577     type: string
578
579 # Ceph storage specific parameters
580   CephStorageCount:
581     type: number
582     default: 0
583   CephStorageImage:
584     default: overcloud-ceph-storage
585     type: string
586   OvercloudCephStorageFlavor:
587     default: baremetal
588     description: Flavor for Ceph storage nodes to request when deploying.
589     type: string
590     constraints:
591       - custom_constraint: nova.flavor
592
593   # Hostname format for each role
594   # Note %index% is translated into the index of the node, e.g 0/1/2 etc
595   # and %stackname% is replaced with OS::stack_name in the template below.
596   # If you want to use the heat generated names, pass '' (empty string).
597   ControllerHostnameFormat:
598     type: string
599     description: Format for Controller node hostnames
600     default: '%stackname%-controller-%index%'
601   ComputeHostnameFormat:
602     type: string
603     description: Format for Compute node hostnames
604     default: '%stackname%-novacompute-%index%'
605   BlockStorageHostnameFormat:
606     type: string
607     description: Format for BlockStorage node hostnames
608     default: '%stackname%-blockstorage-%index%'
609   ObjectStorageHostnameFormat:
610     type: string
611     description: Format for SwiftStorage node hostnames
612     default: '%stackname%-objectstorage-%index%'
613   CephStorageHostnameFormat:
614     type: string
615     description: Format for CephStorage node hostnames
616     default: '%stackname%-cephstorage-%index%'
617
618   # Identifiers to trigger tasks on nodes
619   UpdateIdentifier:
620     default: ''
621     type: string
622     description: >
623       Setting to a previously unused value during stack-update will trigger
624       package update on all nodes
625
626   # If you want to remove a specific node from a resource group, you can pass
627   # the node name or id as a <Group>RemovalPolicies parameter, for example:
628   # ComputeRemovalPolicies: [{'resource_list': ['0']}]
629   ControllerRemovalPolicies:
630     default: []
631     type: json
632     description: >
633       List of resources to be removed from ControllerResourceGroup when
634       doing an update which requires removal of specific resources.
635   ComputeRemovalPolicies:
636     default: []
637     type: json
638     description: >
639       List of resources to be removed from ComputeResourceGroup when
640       doing an update which requires removal of specific resources.
641   BlockStorageRemovalPolicies:
642     default: []
643     type: json
644     description: >
645       List of resources to be removed from BlockStorageResourceGroup when
646       doing an update which requires removal of specific resources.
647   ObjectStorageRemovalPolicies:
648     default: []
649     type: json
650     description: >
651       List of resources to be removed from ObjectStorageResourceGroup when
652       doing an update which requires removal of specific resources.
653   CephStorageRemovalPolicies:
654     default: []
655     type: json
656     description: >
657       List of resources to be removed from CephStorageResourceGroup when
658       doing an update which requires removal of specific resources.
659
660
661 resources:
662
663   HeatAuthEncryptionKey:
664     type: OS::Heat::RandomString
665
666   PcsdPassword:
667     type: OS::Heat::RandomString
668     properties:
669       length: 16
670
671   HorizonSecret:
672     type: OS::Heat::RandomString
673     properties:
674       length: 10
675
676   Controller:
677     type: OS::Heat::ResourceGroup
678     depends_on: Networks
679     properties:
680       count: {get_param: ControllerCount}
681       removal_policies: {get_param: ControllerRemovalPolicies}
682       resource_def:
683         type: OS::TripleO::Controller
684         properties:
685           AdminPassword: {get_param: AdminPassword}
686           AdminToken: {get_param: AdminToken}
687           CeilometerBackend: {get_param: CeilometerBackend}
688           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
689           CeilometerPassword: {get_param: CeilometerPassword}
690           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
691           CinderPassword: {get_param: CinderPassword}
692           CinderISCSIHelper: {get_param: CinderISCSIHelper}
693           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
694           CinderEnableRbdBackend: {get_param: CinderEnableRbdBackend}
695           CloudName: {get_param: CloudName}
696           ControlVirtualInterface: {get_param: ControlVirtualInterface}
697           ControllerExtraConfig: {get_param: controllerExtraConfig}
698           Debug: {get_param: Debug}
699           EnableFencing: {get_param: EnableFencing}
700           EnableGalera: {get_param: EnableGalera}
701           EnableCephStorage: {get_param: ControllerEnableCephStorage}
702           EnableSwiftStorage: {get_param: ControllerEnableSwiftStorage}
703           ExtraConfig: {get_param: ExtraConfig}
704           FencingConfig: {get_param: FencingConfig}
705           Flavor: {get_param: OvercloudControlFlavor}
706           GlancePort: {get_param: GlancePort}
707           GlanceProtocol: {get_param: GlanceProtocol}
708           GlancePassword: {get_param: GlancePassword}
709           GlanceBackend: {get_param: GlanceBackend}
710           GlanceNotifierStrategy: {get_param: GlanceNotifierStrategy}
711           GlanceLogFile: {get_param: GlanceLogFile}
712           HeatPassword: {get_param: HeatPassword}
713           HeatStackDomainAdminPassword: {get_param: HeatStackDomainAdminPassword}
714           HeatAuthEncryptionKey: {get_resource: HeatAuthEncryptionKey}
715           HorizonSecret: {get_resource: HorizonSecret}
716           Image: {get_param: controllerImage}
717           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
718           KeyName: {get_param: KeyName}
719           KeystoneCACertificate: {get_param: KeystoneCACertificate}
720           KeystoneSigningCertificate: {get_param: KeystoneSigningCertificate}
721           KeystoneSigningKey: {get_param: KeystoneSigningKey}
722           KeystoneSSLCertificate: {get_param: KeystoneSSLCertificate}
723           KeystoneSSLCertificateKey: {get_param: KeystoneSSLCertificateKey}
724           MysqlClusterUniquePart: {get_attr: [MysqlClusterUniquePart, value]}
725           MysqlInnodbBufferPoolSize: {get_param: MysqlInnodbBufferPoolSize}
726           MysqlMaxConnections: {get_param: MysqlMaxConnections}
727           MysqlRootPassword: {get_attr: [MysqlRootPassword, value]}
728           NeutronPublicInterfaceIP: {get_param: NeutronPublicInterfaceIP}
729           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
730           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
731           NeutronExternalNetworkBridge: {get_param: NeutronExternalNetworkBridge}
732           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
733           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
734           NeutronPublicInterface: {get_param: NeutronPublicInterface}
735           NeutronPublicInterfaceDefaultRoute: {get_param: NeutronPublicInterfaceDefaultRoute}
736           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
737           NeutronPassword: {get_param: NeutronPassword}
738           NeutronDnsmasqOptions: {get_param: NeutronDnsmasqOptions}
739           NeutronDVR: {get_param: NeutronDVR}
740           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
741           NeutronAgentMode: {get_param: NeutronAgentMode}
742           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
743           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
744           NeutronL3HA: {get_param: NeutronL3HA}
745           NeutronDhcpAgentsPerNetwork: {get_param: NeutronDhcpAgentsPerNetwork}
746           NeutronNetworkType: {get_param: NeutronNetworkType}
747           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
748           NovaPassword: {get_param: NovaPassword}
749           NtpServer: {get_param: NtpServer}
750           MongoDbNoJournal: {get_param: MongoDbNoJournal}
751           PcsdPassword: {get_resource: PcsdPassword}
752           PublicVirtualInterface: {get_param: PublicVirtualInterface}
753           RabbitPassword: {get_param: RabbitPassword}
754           RabbitUserName: {get_param: RabbitUserName}
755           RabbitCookie: {get_attr: [RabbitCookie, value]}
756           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
757           RabbitClientPort: {get_param: RabbitClientPort}
758           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
759           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
760           RedisVirtualIP: {get_attr: [RedisVirtualIP, ip_address]}
761           SSLCertificate: {get_param: SSLCertificate}
762           SSLKey: {get_param: SSLKey}
763           SSLCACertificate: {get_param: SSLCACertificate}
764           SwiftHashSuffix: {get_param: SwiftHashSuffix}
765           SwiftMountCheck: {get_param: SwiftMountCheck}
766           SwiftMinPartHours: {get_param: SwiftMinPartHours}
767           SwiftPartPower: {get_param: SwiftPartPower}
768           SwiftPassword: {get_param: SwiftPassword}
769           SwiftReplicas: { get_param: SwiftReplicas}
770           VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]} # deprecated. Use per service VIP settings instead now.
771           PublicVirtualIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]} # deprecated. Use per service VIP settings instead now.
772           ServiceNetMap: {get_param: ServiceNetMap}
773           HeatApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
774           GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
775           MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
776           KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
777           NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
778           UpdateIdentifier: {get_param: UpdateIdentifier}
779           Hostname:
780             str_replace:
781               template: {get_param: ControllerHostnameFormat}
782               params:
783                 '%stackname%': {get_param: 'OS::stack_name'}
784
785   Compute:
786     type: OS::Heat::ResourceGroup
787     depends_on: Networks
788     properties:
789       count: {get_param: ComputeCount}
790       removal_policies: {get_param: ComputeRemovalPolicies}
791       resource_def:
792         type: OS::TripleO::Compute
793         properties:
794           AdminPassword: {get_param: AdminPassword}
795           CeilometerComputeAgent: {get_param: CeilometerComputeAgent}
796           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
797           CeilometerPassword: {get_param: CeilometerPassword}
798           Debug: {get_param: Debug}
799           ExtraConfig: {get_param: ExtraConfig}
800           Flavor: {get_param: OvercloudComputeFlavor}
801           GlanceHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
802           GlancePort: {get_param: GlancePort}
803           GlanceProtocol: {get_param: GlanceProtocol}
804           Image: {get_param: NovaImage}
805           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
806           KeyName: {get_param: KeyName}
807           KeystoneHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
808           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
809           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
810           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
811           NeutronHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
812           NeutronNetworkType: {get_param: NeutronNetworkType}
813           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
814           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
815           NeutronPassword: {get_param: NeutronPassword}
816           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
817           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
818           NeutronDVR: {get_param: NeutronDVR}
819           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
820           NeutronAgentMode: {get_param: NeutronComputeAgentMode}
821           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
822           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
823           # L3 HA and Failover is not relevant for Computes, should be removed
824           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
825           NeutronL3HA: {get_param: NeutronL3HA}
826           NovaApiHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
827           NovaComputeDriver: {get_param: NovaComputeDriver}
828           NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
829           NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
830           NovaEnableRbdBackend: {get_param: NovaEnableRbdBackend}
831           NovaPublicIP: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
832           NovaPassword: {get_param: NovaPassword}
833           NtpServer: {get_param: NtpServer}
834           RabbitHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
835           RabbitPassword: {get_param: RabbitPassword}
836           RabbitUserName: {get_param: RabbitUserName}
837           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
838           RabbitClientPort: {get_param: RabbitClientPort}
839           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
840           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
841           ServiceNetMap: {get_param: ServiceNetMap}
842           UpdateIdentifier: {get_param: UpdateIdentifier}
843           Hostname:
844             str_replace:
845               template: {get_param: ComputeHostnameFormat}
846               params:
847                 '%stackname%': {get_param: 'OS::stack_name'}
848
849   BlockStorage:
850     type: OS::Heat::ResourceGroup
851     depends_on: Networks
852     properties:
853       count: {get_param: BlockStorageCount}
854       removal_policies: {get_param: BlockStorageRemovalPolicies}
855       resource_def:
856         type: OS::TripleO::BlockStorage
857         properties:
858           Debug: {get_param: Debug}
859           Image: {get_param: BlockStorageImage}
860           CinderISCSIHelper: {get_param: CinderISCSIHelper}
861           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
862           # Purpose of the dedicated BlockStorage nodes should be to use their local LVM
863           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
864           CinderPassword: {get_param: CinderPassword}
865           KeyName: {get_param: KeyName}
866           Flavor: {get_param: OvercloudBlockStorageFlavor}
867           VirtualIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
868           GlancePort: {get_param: GlancePort}
869           GlanceProtocol: {get_param: GlanceProtocol}
870           GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
871           RabbitPassword: {get_param: RabbitPassword}
872           RabbitUserName: {get_param: RabbitUserName}
873           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
874           RabbitClientPort: {get_param: RabbitClientPort}
875           NtpServer: {get_param: NtpServer}
876           UpdateIdentifier: {get_param: UpdateIdentifier}
877           Hostname:
878             str_replace:
879               template: {get_param: BlockStorageHostnameFormat}
880               params:
881                 '%stackname%': {get_param: 'OS::stack_name'}
882           ServiceNetMap: {get_param: ServiceNetMap}
883           MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
884
885   ObjectStorage:
886     type: OS::Heat::ResourceGroup
887     depends_on: Networks
888     properties:
889       count: {get_param: ObjectStorageCount}
890       removal_policies: {get_param: ObjectStorageRemovalPolicies}
891       resource_def:
892         type: OS::TripleO::ObjectStorage
893         properties:
894           KeyName: {get_param: KeyName}
895           Flavor: {get_param: OvercloudSwiftStorageFlavor}
896           HashSuffix: {get_param: SwiftHashSuffix}
897           MountCheck: {get_param: SwiftMountCheck}
898           MinPartHours: {get_param: SwiftMinPartHours}
899           PartPower: {get_param: SwiftPartPower}
900           Image: {get_param: SwiftStorageImage}
901           Replicas: { get_param: SwiftReplicas}
902           NtpServer: {get_param: NtpServer}
903           UpdateIdentifier: {get_param: UpdateIdentifier}
904           ServiceNetMap: {get_param: ServiceNetMap}
905           Hostname:
906             str_replace:
907               template: {get_param: ObjectStorageHostnameFormat}
908               params:
909                 '%stackname%': {get_param: 'OS::stack_name'}
910
911   CephStorage:
912     type: OS::Heat::ResourceGroup
913     depends_on: Networks
914     properties:
915       count: {get_param: CephStorageCount}
916       removal_policies: {get_param: CephStorageRemovalPolicies}
917       resource_def:
918         type: OS::TripleO::CephStorage
919         properties:
920           Image: {get_param: CephStorageImage}
921           KeyName: {get_param: KeyName}
922           Flavor: {get_param: OvercloudCephStorageFlavor}
923           NtpServer: {get_param: NtpServer}
924           ServiceNetMap: {get_param: ServiceNetMap}
925           UpdateIdentifier: {get_param: UpdateIdentifier}
926           Hostname:
927             str_replace:
928               template: {get_param: CephStorageHostnameFormat}
929               params:
930                 '%stackname%': {get_param: 'OS::stack_name'}
931
932   ControllerIpListMap:
933     type: OS::TripleO::Network::Ports::NetIpListMap
934     properties:
935       ExternalIpList: {get_attr: [Controller, external_ip_address]}
936       InternalApiIpList: {get_attr: [Controller, internal_api_ip_address]}
937       StorageIpList: {get_attr: [Controller, storage_ip_address]}
938       StorageMgmtIpList: {get_attr: [Controller, storage_mgmt_ip_address]}
939       TenantIpList: {get_attr: [Controller, tenant_ip_address]}
940
941   allNodesConfig:
942     type: OS::TripleO::AllNodes::SoftwareConfig
943     properties:
944       compute_hosts: {get_attr: [Compute, hosts_entry]}
945       controller_hosts: {get_attr: [Controller, hosts_entry]}
946       controller_ips: {get_attr: [Controller, ip_address]}
947       block_storage_hosts: {get_attr: [BlockStorage, hosts_entry]}
948       object_storage_hosts: {get_attr: [ObjectStorage, hosts_entry]}
949       ceph_storage_hosts: {get_attr: [CephStorage, hosts_entry]}
950       controller_names: {get_attr: [Controller, hostname]}
951       rabbit_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
952       mongo_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
953       redis_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
954       memcache_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
955       mysql_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
956       horizon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
957       heat_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
958       swift_proxy_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
959       ceilometer_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
960       nova_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
961       nova_metadata_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
962       glance_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
963       glance_registry_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
964       cinder_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
965       neutron_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
966       keystone_public_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
967       keystone_admin_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
968
969   MysqlRootPassword:
970     type: OS::Heat::RandomString
971     properties:
972       length: 10
973
974   MysqlClusterUniquePart:
975     type: OS::Heat::RandomString
976     properties:
977       length: 10
978
979   RabbitCookie:
980     type: OS::Heat::RandomString
981     properties:
982       length: 20
983       salt: {get_param: RabbitCookieSalt}
984
985   # creates the network architecture
986   Networks:
987     type: OS::TripleO::Network
988
989   ControlVirtualIP:
990     type: OS::Neutron::Port
991     depends_on: Networks
992     properties:
993       name: control_virtual_ip
994       network_id: {get_param: NeutronControlPlaneID}
995       fixed_ips: {get_param: ControlFixedIPs}
996       replacement_policy: AUTO
997
998   RedisVirtualIP:
999     depends_on: Networks
1000     type: OS::TripleO::Controller::Ports::RedisVipPort
1001     properties:
1002       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1003       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
1004       PortName: redis_virtual_ip
1005       NetworkName: {get_param: [ServiceNetMap, RedisNetwork]}
1006
1007   # same as external
1008   PublicVirtualIP:
1009     type: OS::Neutron::Port
1010     depends_on: Networks
1011     properties:
1012       name: public_virtual_ip
1013       network: {get_param: PublicVirtualNetwork}
1014       fixed_ips: {get_param: PublicVirtualFixedIPs}
1015       replacement_policy: AUTO
1016
1017   InternalApiVirtualIP:
1018     depends_on: Networks
1019     type: OS::TripleO::Controller::Ports::InternalApiPort
1020     properties:
1021       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1022       PortName: internal_api_virtual_ip
1023
1024   StorageVirtualIP:
1025     depends_on: Networks
1026     type: OS::TripleO::Controller::Ports::StoragePort
1027     properties:
1028       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1029       PortName: storage_virtual_ip
1030
1031   StorageMgmtVirtualIP:
1032     depends_on: Networks
1033     type: OS::TripleO::Controller::Ports::StorageMgmtPort
1034     properties:
1035       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1036       PortName: storage_management_virtual_ip
1037
1038   VipMap:
1039     type: OS::TripleO::Network::Ports::NetIpMap
1040     properties:
1041       ExternalIp: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
1042       InternalApiIp: {get_attr: [InternalApiVirtualIP, ip_address]}
1043       StorageIp: {get_attr: [StorageVirtualIP, ip_address]}
1044       StorageMgmtIp: {get_attr: [StorageMgmtVirtualIP, ip_address]}
1045       # No tenant VIP required
1046
1047   VipConfig:
1048     type: OS::TripleO::VipConfig
1049
1050   VipDeployment:
1051     type: OS::Heat::StructuredDeployments
1052     properties:
1053       config: {get_resource: VipConfig}
1054       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1055       input_values:
1056         # service VIP mappings
1057         keystone_admin_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1058         keystone_public_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1059         neutron_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1060         cinder_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1061         glance_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1062         glance_registry_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1063         swift_proxy_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1064         nova_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1065         nova_metadata_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1066         ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1067         heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1068         horizon_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1069         redis_vip: {get_attr: [RedisVirtualIP, ip_address]}
1070         mysql_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1071         rabbit_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1072         # direct configuration of Virtual IPs for each network
1073         control_virtual_ip: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1074         public_virtual_ip: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
1075         internal_api_virtual_ip: {get_attr: [InternalApiVirtualIP, ip_address]}
1076         storage_virtual_ip: {get_attr: [StorageVirtualIP, ip_address]}
1077         storage_mgmt_virtual_ip: {get_attr: [StorageMgmtVirtualIP, ip_address]}
1078
1079   ControllerBootstrapNodeConfig:
1080     type: OS::TripleO::BootstrapNode::SoftwareConfig
1081     properties:
1082       bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
1083       bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]}
1084
1085   ControllerBootstrapNodeDeployment:
1086     type: OS::Heat::StructuredDeployments
1087     properties:
1088       config: {get_attr: [ControllerBootstrapNodeConfig, config_id]}
1089       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1090
1091   ControllerSwiftDeployment:
1092     type: OS::Heat::StructuredDeployments
1093     properties:
1094       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1095       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1096
1097   ObjectStorageSwiftDeployment:
1098     type: OS::Heat::StructuredDeployments
1099     properties:
1100       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1101       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1102
1103   SwiftDevicesAndProxyConfig:
1104     type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig
1105     properties:
1106       controller_swift_devices: {get_attr: [Controller, swift_device]}
1107       object_store_swift_devices: {get_attr: [ObjectStorage, swift_device]}
1108       controller_swift_proxy_memcaches: {get_attr: [Controller, swift_proxy_memcache]}
1109
1110   ComputeCephDeployment:
1111     type: OS::Heat::StructuredDeployments
1112     properties:
1113       config: {get_attr: [CephClusterConfig, config_id]}
1114       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1115
1116   ControllerCephDeployment:
1117     type: OS::Heat::StructuredDeployments
1118     properties:
1119       config: {get_attr: [CephClusterConfig, config_id]}
1120       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1121
1122   CephStorageCephDeployment:
1123     type: OS::Heat::StructuredDeployments
1124     properties:
1125       config: {get_attr: [CephClusterConfig, config_id]}
1126       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1127
1128   CephClusterConfig:
1129     type: OS::TripleO::CephClusterConfig::SoftwareConfig
1130     properties:
1131       ceph_fsid: {get_param: CephClusterFSID}
1132       ceph_mon_key: {get_param: CephMonKey}
1133       ceph_admin_key: {get_param: CephAdminKey}
1134       ceph_mon_names: {get_attr: [Controller, hostname]}
1135       ceph_mon_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
1136
1137   ControllerClusterConfig:
1138     type: OS::Heat::StructuredConfig
1139     properties:
1140       group: os-apply-config
1141       config:
1142         corosync:
1143           nodes: {get_attr: [Controller, corosync_node]}
1144         horizon:
1145           caches:
1146             memcached:
1147               nodes: {get_attr: [Controller, hostname]}
1148         mysql:
1149           nodes: {get_attr: [Controller, corosync_node]}
1150         haproxy:
1151           nodes: {get_attr: [Controller, corosync_node]}
1152
1153   ControllerClusterDeployment:
1154     type: OS::Heat::StructuredDeployments
1155     properties:
1156       config: {get_resource: ControllerClusterConfig}
1157       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1158
1159   ControllerAllNodesDeployment:
1160     type: OS::Heat::StructuredDeployments
1161     properties:
1162       config: {get_attr: [allNodesConfig, config_id]}
1163       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1164
1165   ComputeAllNodesDeployment:
1166     type: OS::Heat::StructuredDeployments
1167     properties:
1168       config: {get_attr: [allNodesConfig, config_id]}
1169       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1170
1171   BlockStorageAllNodesDeployment:
1172     type: OS::Heat::StructuredDeployments
1173     properties:
1174       config: {get_attr: [allNodesConfig, config_id]}
1175       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1176
1177   ObjectStorageAllNodesDeployment:
1178     type: OS::Heat::StructuredDeployments
1179     properties:
1180       config: {get_attr: [allNodesConfig, config_id]}
1181       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1182
1183   CephStorageAllNodesDeployment:
1184     type: OS::Heat::StructuredDeployments
1185     properties:
1186       config: {get_attr: [allNodesConfig, config_id]}
1187       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1188
1189   # Nested stack deployment runs after all other controller deployments
1190   ControllerNodesPostDeployment:
1191     type: OS::TripleO::ControllerPostDeployment
1192     depends_on: [ControllerBootstrapNodeDeployment, ControllerAllNodesDeployment, ControllerSwiftDeployment, ControllerCephDeployment]
1193     properties:
1194       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1195       NodeConfigIdentifiers: {get_attr: [Controller, attributes, config_identifier]}
1196
1197   ComputeNodesPostDeployment:
1198     type: OS::TripleO::ComputePostDeployment
1199     depends_on: [ComputeAllNodesDeployment, ComputeCephDeployment]
1200     properties:
1201       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1202       NodeConfigIdentifiers: {get_attr: [Compute, attributes, config_identifier]}
1203
1204   ObjectStorageNodesPostDeployment:
1205     type: OS::TripleO::ObjectStoragePostDeployment
1206     depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
1207     properties:
1208       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1209       NodeConfigIdentifiers: {get_attr: [ObjectStorage, attributes, config_identifier]}
1210
1211
1212   BlockStorageNodesPostDeployment:
1213     type: OS::TripleO::BlockStoragePostDeployment
1214     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
1215     properties:
1216       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1217       NodeConfigIdentifiers: {get_attr: [BlockStorage, attributes, config_identifier]}
1218
1219   CephStorageNodesPostDeployment:
1220     type: OS::TripleO::CephStoragePostDeployment
1221     depends_on: [ControllerNodesPostDeployment, CephStorageCephDeployment, CephStorageAllNodesDeployment]
1222     properties:
1223       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1224       NodeConfigIdentifiers: {get_attr: [CephStorage, attributes, config_identifier]}
1225
1226 outputs:
1227   KeystoneURL:
1228     description: URL for the Overcloud Keystone service
1229     value:
1230       list_join:
1231       - ''
1232       - - http://
1233         - {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
1234         - :5000/v2.0/
1235   PublicVip:
1236     description: Controller VIP for public API endpoints
1237     value: {get_attr: [PublicVirtualIP, fixed_ips, 0, ip_address]}
1238   CeilometerInternalVip:
1239     description: VIP for Ceilometer API internal endpoint
1240     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1241   CinderInternalVip:
1242     description: VIP for Cinder API internal endpoint
1243     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1244   GlanceInternalVip:
1245     description: VIP for Glance API internal endpoint
1246     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1247   HeatInternalVip:
1248     description: VIP for Heat API internal endpoint
1249     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1250   KeystoneInternalVip:
1251     description: VIP for Keystone API internal endpoint
1252     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1253   NeutronInternalVip:
1254     description: VIP for Neutron API internal endpoint
1255     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1256   NovaInternalVip:
1257     description: VIP for Nova API internal endpoint
1258     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1259   SwiftInternalVip:
1260     description: VIP for Swift Proxy internal endpoint
1261     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}