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