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