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