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