2d4b7071f974c87f0ec615dacd64ceec7f231c2c
[apex-tripleo-heat-templates.git] / overcloud.yaml
1 heat_template_version: 2015-04-30
2
3 description: >
4   Deploy an OpenStack environment, consisting of several node types (roles),
5   Controller, Compute, BlockStorage, SwiftStorage and CephStorage.  The Storage
6   roles enable independent scaling of the storage components, but the minimal
7   deployment is one Controller and one Compute node.
8
9
10 # TODO(shadower): we should probably use the parameter groups to put
11 # some order in here.
12 parameters:
13
14   # Common parameters (not specific to a role)
15   AdminPassword:
16     description: The password for the keystone admin account, used for monitoring, querying neutron etc.
17     type: string
18     hidden: true
19   CeilometerBackend:
20     default: 'mongodb'
21     description: The ceilometer backend type.
22     type: string
23   CeilometerMeteringSecret:
24     description: Secret shared by the ceilometer services.
25     type: string
26     hidden: true
27   CeilometerPassword:
28     description: The password for the ceilometer service account.
29     type: string
30     hidden: true
31   # This has to be an UUID so for now we generate it outside the template
32   CephClusterFSID:
33     default: ''
34     type: string
35     description: The Ceph cluster FSID. Must be a UUID.
36   CephMonKey:
37     default: ''
38     description: The Ceph monitors key. Can be created with ceph-authtool --gen-print-key.
39     type: string
40     hidden: true
41   CephAdminKey:
42     default: ''
43     description: The Ceph admin client key. Can be created with ceph-authtool --gen-print-key.
44     type: string
45     hidden: true
46   CinderEnableNfsBackend:
47     default: false
48     description: Whether to enable or not the NFS backend for Cinder
49     type: boolean
50   CephClientKey:
51     default: ''
52     description: The Ceph client key. Can be created with ceph-authtool --gen-print-key. Currently only used for external Ceph deployments to create the openstack user keyring.
53     type: string
54     hidden: true
55   CephExternalMonHost:
56     default: ''
57     type: string
58     description: List of externally managed Ceph Mon Host IPs. Only used for external Ceph deployments.
59   CinderEnableIscsiBackend:
60     default: true
61     description: Whether to enable or not the Iscsi backend for Cinder
62     type: boolean
63   CinderEnableRbdBackend:
64     default: false
65     description: Whether to enable or not the Rbd backend for Cinder
66     type: boolean
67   CloudName:
68     default: overcloud
69     description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
70     type: string
71   ControlFixedIPs:
72     default: []
73     description: Should be used for arbitrary ips.
74     type: json
75   CorosyncIPv6:
76     default: false
77     description: Enable IPv6 in Corosync
78     type: boolean
79   Debug:
80     default: ''
81     description: Set to True to enable debugging on all services.
82     type: string
83   HAProxySyslogAddress:
84     default: /dev/log
85     description: Syslog address where HAproxy will send its log
86     type: string
87   HorizonAllowedHosts:
88     default: '*'
89     description: A list of IP/Hostname allowed to connect to horizon
90     type: comma_delimited_list
91   ImageUpdatePolicy:
92     default: 'REBUILD_PRESERVE_EPHEMERAL'
93     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
94     type: string
95   InternalApiVirtualFixedIPs:
96     default: []
97     description: >
98         Control the IP allocation for the InternalApiVirtualInterface port. E.g.
99         [{'ip_address':'1.2.3.4'}]
100     type: json
101   KeyName:
102     default: default
103     description: Name of an existing Nova key pair to enable SSH access to the instances
104     type: string
105     constraints:
106       - custom_constraint: nova.keypair
107   NeutronExternalNetworkBridge:
108     description: Name of bridge used for external network traffic.
109     type: string
110     default: 'br-ex'
111   NeutronBridgeMappings:
112     description: >
113       The OVS logical->physical bridge mappings to use. See the Neutron
114       documentation for details. Defaults to mapping br-ex - the external
115       bridge on hosts - to a physical name 'datacentre' which can be used
116       to create provider networks (and we use this for the default floating
117       network) - if changing this either use different post-install network
118       scripts or be sure to keep 'datacentre' as a mapping network name.
119     type: comma_delimited_list
120     default: "datacentre:br-ex"
121   NeutronControlPlaneID:
122     default: 'ctlplane'
123     type: string
124     description: Neutron ID or name for ctlplane network.
125   NeutronEnableIsolatedMetadata:
126     default: 'False'
127     description: If True, DHCP provide metadata route to VM.
128     type: string
129   NeutronEnableTunnelling:
130     type: string
131     default: "True"
132   NeutronEnableL2Pop:
133     type: string
134     description: >
135         Enable/disable the L2 population feature in the Neutron agents.
136     default: "False"
137   NeutronFlatNetworks:
138     type: comma_delimited_list
139     default: 'datacentre'
140     description: >
141       If set, flat networks to configure in neutron plugins. Defaults to
142       'datacentre' to permit external network creation.
143   NeutronNetworkType:
144     default: 'vxlan'
145     description: The tenant network type for Neutron.
146     type: comma_delimited_list
147   NeutronPassword:
148     description: The password for the neutron service account, used by neutron agents.
149     type: string
150     hidden: true
151   NeutronPublicInterface:
152     default: nic1
153     description: What interface to bridge onto br-ex for network nodes.
154     type: string
155   NeutronPublicInterfaceTag:
156     default: ''
157     description: >
158       VLAN tag for creating a public VLAN. The tag will be used to
159       create an access port on the exterior bridge for each control plane node,
160       and that port will be given the IP address returned by neutron from the
161       public network. Set CONTROLEXTRA=overcloud-vlan-port.yaml when compiling
162       overcloud.yaml to include the deployment of VLAN ports to the control
163       plane.
164     type: string
165   NeutronComputeAgentMode:
166     default: 'dvr'
167     description: Agent mode for the neutron-l3-agent on the compute hosts
168     type: string
169   NeutronAgentMode:
170     default: 'dvr_snat'
171     description: Agent mode for the neutron-l3-agent on the controller hosts
172     type: string
173   NeutronDVR:
174     default: 'False'
175     description: Whether to configure Neutron Distributed Virtual Routers
176     type: string
177   NeutronMetadataProxySharedSecret:
178     description: Shared secret to prevent spoofing
179     type: string
180     hidden: true
181   NeutronTenantMtu:
182     description: >
183       The default MTU for tenant networks. For VXLAN/GRE tunneling, this should
184       be at least 50 bytes smaller than the MTU on the physical network. This
185       value will be used to set the MTU on the virtual Ethernet device.
186       This value will be used to construct the NeutronDnsmasqOptions, since that
187       will determine the MTU that is assigned to the VM host through DHCP.
188     default: "1400"
189     type: string
190   NeutronTunnelTypes:
191     default: 'vxlan'
192     description: |
193         The tunnel types for the Neutron tenant network.
194     type: comma_delimited_list
195   NeutronTunnelIdRanges:
196     description: |
197         Comma-separated list of <tun_min>:<tun_max> tuples enumerating ranges
198         of GRE tunnel IDs that are available for tenant network allocation
199     default: ["1:4094", ]
200     type: comma_delimited_list
201   NeutronVniRanges:
202     description: |
203         Comma-separated list of <vni_min>:<vni_max> tuples enumerating ranges
204         of VXLAN VNI IDs that are available for tenant network allocation
205     default: ["1:4094", ]
206     type: comma_delimited_list
207   NeutronCorePlugin:
208     default: 'ml2'
209     description: |
210         The core plugin for Neutron. The value should be the entrypoint to be loaded
211         from neutron.core_plugins namespace.
212     type: string
213   NeutronServicePlugins:
214     default: "router,qos"
215     description: |
216         Comma-separated list of service plugin entrypoints to be loaded from the
217         neutron.service_plugins namespace.
218     type: comma_delimited_list
219   NeutronTypeDrivers:
220     default: "vxlan,vlan,flat,gre"
221     description: |
222         Comma-separated list of network type driver entrypoints to be loaded.
223     type: comma_delimited_list
224   NeutronMechanismDrivers:
225     default: 'openvswitch'
226     description: |
227         The mechanism drivers for the Neutron tenant network.
228     type: comma_delimited_list
229   NeutronPluginExtensions:
230     default: "qos,port_security"
231     description: |
232         Comma-separated list of extensions enabled for the Neutron plugin.
233     type: comma_delimited_list
234   NeutronAgentExtensions:
235     default: "qos"
236     description: |
237         Comma-separated list of extensions enabled for the Neutron agents.
238     type: comma_delimited_list
239   NeutronAllowL3AgentFailover:
240     default: 'False'
241     description: Allow automatic l3-agent failover
242     type: string
243   NeutronL3HA:
244     default: 'False'
245     description: Whether to enable l3-agent HA
246     type: string
247   NeutronDhcpAgentsPerNetwork:
248     type: number
249     default: 1
250     description: The number of neutron dhcp agents to schedule per network
251   NovaIPv6:
252     default: false
253     description: Enable IPv6 features in Nova
254     type: boolean
255   NovaPassword:
256     description: The password for the nova service account, used by nova-api.
257     type: string
258     hidden: true
259   NtpServer:
260     default: ''
261     description: Comma-separated list of ntp servers
262     type: comma_delimited_list
263   MongoDbNoJournal:
264     default: false
265     description: Should MongoDb journaling be disabled
266     type: boolean
267   MongoDbIPv6:
268     default: false
269     description: Enable IPv6 if MongoDB VIP is IPv6
270     type: boolean
271   PublicVirtualFixedIPs:
272     default: []
273     description: >
274         Control the IP allocation for the PublicVirtualInterface port. E.g.
275         [{'ip_address':'1.2.3.4'}]
276     type: json
277   RabbitCookieSalt:
278     type: string
279     default: unset
280     description: Salt for the rabbit cookie, change this to force the randomly generated rabbit cookie to change.
281   # FIXME: 'guest' is provisioned in RabbitMQ by default, we should create a user if these are changed
282   RabbitUserName:
283     default: guest
284     description: The username for RabbitMQ
285     type: string
286   RabbitPassword:
287     default: guest
288     description: The password for RabbitMQ
289     type: string
290     hidden: true
291   RabbitClientUseSSL:
292     default: false
293     description: >
294         Rabbit client subscriber parameter to specify
295         an SSL connection to the RabbitMQ host.
296     type: string
297   RabbitClientPort:
298     default: 5672
299     description: Set rabbit subscriber port, change this if using SSL
300     type: number
301   # We need to set this as string because 'unlimited' is a valid setting
302   RabbitFDLimit:
303     default: 16384
304     description: Configures RabbitMQ FD limit
305     type: string
306   RabbitIPv6:
307     default: false
308     description: Enable IPv6 in RabbitMQ
309     type: boolean
310   SnmpdReadonlyUserName:
311     default: ro_snmp_user
312     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
313     type: string
314   SnmpdReadonlyUserPassword:
315     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
316     type: string
317     hidden: true
318   StorageVirtualFixedIPs:
319     default: []
320     description: >
321         Control the IP allocation for the StorageVirtualInterface port. E.g.
322         [{'ip_address':'1.2.3.4'}]
323     type: json
324   StorageMgmtVirtualFixedIPs:
325     default: []
326     description: >
327         Control the IP allocation for the StorageMgmgVirtualInterface port. E.g.
328         [{'ip_address':'1.2.3.4'}]
329     type: json
330   TimeZone:
331     default: 'UTC'
332     description: The timezone to be set on nodes.
333     type: string
334   CloudDomain:
335     default: 'localdomain'
336     type: string
337     description: >
338       The DNS domain used for the hosts. This should match the dhcp_domain
339       configured in the Undercloud neutron. Defaults to localdomain.
340   ServerMetadata:
341     default: {}
342     description: >
343       Extra properties or metadata passed to Nova for the created nodes in
344       the overcloud. It's accessible via the Nova metadata API.
345     type: json
346
347   # Controller-specific params
348   AdminToken:
349     description: The keystone auth secret.
350     type: string
351     hidden: true
352   CinderLVMLoopDeviceSize:
353     default: 10280
354     description: The size of the loopback file used by the cinder LVM driver.
355     type: number
356   CinderNfsMountOptions:
357     default: ''
358     description: >
359       Mount options for NFS mounts used by Cinder NFS backend. Effective
360       when CinderEnableNfsBackend is true.
361     type: string
362   CinderNfsServers:
363     default: ''
364     description: >
365       NFS servers used by Cinder NFS backend. Effective when
366       CinderEnableNfsBackend is true.
367     type: comma_delimited_list
368   CinderPassword:
369     description: The password for the cinder service account, used by cinder-api.
370     type: string
371     hidden: true
372   CinderISCSIHelper:
373     default: lioadm
374     description: The iSCSI helper to use with cinder.
375     type: string
376   ControllerCount:
377     type: number
378     default: 1
379     constraints:
380       - range: {min: 1}
381   controllerExtraConfig:
382     default: {}
383     description: |
384       Controller specific configuration to inject into the cluster. Same
385       structure as ExtraConfig.
386     type: json
387   controllerImage:
388     type: string
389     default: overcloud-full
390     constraints:
391       - custom_constraint: glance.image
392   OvercloudControlFlavor:
393     description: Flavor for control nodes to request when deploying.
394     default: baremetal
395     type: string
396     constraints:
397       - custom_constraint: nova.flavor
398   ControlVirtualInterface:
399     default: 'br-ex'
400     description: Interface where virtual ip will be assigned.
401     type: string
402   EnableFencing:
403     default: false
404     description: Whether to enable fencing in Pacemaker or not.
405     type: boolean
406   EnableGalera:
407     default: true
408     description: Whether to use Galera instead of regular MariaDB.
409     type: boolean
410   ControllerEnableCephStorage:
411     default: false
412     description: Whether to deploy Ceph Storage (OSD) on the Controller
413     type: boolean
414   ControllerEnableSwiftStorage:
415     default: true
416     description: Whether to enable Swift Storage on the Controller
417     type: boolean
418   ControllerSchedulerHints:
419     type: json
420     description: Optional scheduler hints to pass to nova
421     default: {}
422   ExtraConfig:
423     default: {}
424     description: |
425       Additional configuration to inject into the cluster. The format required
426       may be implementation specific, e.g puppet hieradata.  Any role specific
427       ExtraConfig, e.g controllerExtraConfig takes precedence over ExtraConfig.
428     type: json
429   FencingConfig:
430     default: {}
431     description: |
432       Pacemaker fencing configuration. The JSON should have
433       the following structure:
434         {
435           "devices": [
436             {
437               "agent": "AGENT_NAME",
438               "host_mac": "HOST_MAC_ADDRESS",
439               "params": {"PARAM_NAME": "PARAM_VALUE"}
440             }
441           ]
442         }
443       For instance:
444         {
445           "devices": [
446             {
447               "agent": "fence_xvm",
448               "host_mac": "52:54:00:aa:bb:cc",
449               "params": {
450                 "multicast_address": "225.0.0.12",
451                 "port": "baremetal_0",
452                 "manage_fw": true,
453                 "manage_key_file": true,
454                 "key_file": "/etc/fence_xvm.key",
455                 "key_file_password": "abcdef"
456               }
457             }
458           ]
459         }
460     type: json
461   GlanceLogFile:
462     description: The filepath of the file to use for logging messages from Glance.
463     type: string
464     default: ''
465   GlanceNotifierStrategy:
466     description: Strategy to use for Glance notification queue
467     type: string
468     default: noop
469   GlancePassword:
470     description: The password for the glance service account, used by the glance services.
471     type: string
472     hidden: true
473   GlanceBackend:
474     default: swift
475     description: The short name of the Glance backend to use. Should be one
476       of swift, rbd or file
477     type: string
478     constraints:
479     - allowed_values: ['swift', 'file', 'rbd']
480   HeatPassword:
481     description: The password for the Heat service account, used by the Heat services.
482     type: string
483     hidden: true
484   HeatStackDomainAdminPassword:
485     description: Password for heat_domain_admin user.
486     type: string
487     hidden: true
488   InstanceNameTemplate:
489     default: 'instance-%08x'
490     description: Template string to be used to generate instance names
491     type: string
492   KeystoneCACertificate:
493     default: ''
494     description: Keystone self-signed certificate authority certificate.
495     type: string
496   KeystoneSigningCertificate:
497     default: ''
498     description: Keystone certificate for verifying token validity.
499     type: string
500   KeystoneSigningKey:
501     default: ''
502     description: Keystone key for signing tokens.
503     type: string
504     hidden: true
505   KeystoneSSLCertificate:
506     default: ''
507     description: Keystone certificate for verifying token validity.
508     type: string
509   KeystoneSSLCertificateKey:
510     default: ''
511     description: Keystone key for signing tokens.
512     type: string
513     hidden: true
514   KeystoneNotificationDriver:
515     description: Comma-separated list of Oslo notification drivers used by Keystone
516     default: ['messaging']
517     type: comma_delimited_list
518   KeystoneNotificationFormat:
519     description: The Keystone notification format
520     default: 'basic'
521     type: string
522     constraints:
523       - allowed_values: [ 'basic', 'cadf' ]
524   ManageFirewall:
525     default: false
526     description: Whether to manage IPtables rules.
527     type: boolean
528   PurgeFirewallRules:
529     default: false
530     description: Whether IPtables rules should be purged before setting up the ones.
531     type: boolean
532   MysqlInnodbBufferPoolSize:
533     description: >
534         Specifies the size of the buffer pool in megabytes. Setting to
535         zero should be interpreted as "no value" and will defer to the
536         lower level default.
537     type: number
538     default: 0
539   MysqlMaxConnections:
540     description: Configures MySQL max_connections config setting
541     type: number
542     default: 4096
543   NeutronDnsmasqOptions:
544     default: 'dhcp-option-force=26,%MTU%'
545     description: >
546       Dnsmasq options for neutron-dhcp-agent. The default value here forces MTU
547       to be set to the value of NeutronTenantMtu, which should be set to account
548       for tunnel overhead.
549     type: string
550   NeutronPublicInterfaceDefaultRoute:
551     default: ''
552     description: A custom default route for the NeutronPublicInterface.
553     type: string
554   NeutronPublicInterfaceIP:
555     default: ''
556     description: A custom IP address to put onto the NeutronPublicInterface.
557     type: string
558   NeutronPublicInterfaceRawDevice:
559     default: ''
560     description: If set, the public interface is a vlan with this device as the raw device.
561     type: string
562   PublicVirtualInterface:
563     default: 'br-ex'
564     description: >
565         Specifies the interface where the public-facing virtual ip will be assigned.
566         This should be int_public when a VLAN is being used.
567     type: string
568   SwiftHashSuffix:
569     description: A random string to be used as a salt when hashing to determine mappings in the ring.
570     type: string
571     hidden: true
572   SwiftPassword:
573     description: The password for the swift service account, used by the swift proxy services.
574     type: string
575     hidden: true
576   SwiftMountCheck:
577     default: 'false'
578     description: Value of mount_check in Swift account/container/object -server.conf
579     type: boolean
580   SwiftMinPartHours:
581     type: number
582     default: 1
583     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
584   SwiftPartPower:
585     default: 10
586     description: Partition Power to use when building Swift rings
587     type: number
588   SwiftReplicas:
589     type: number
590     default: 3
591     description: How many replicas to use in the swift rings.
592   SaharaPassword:
593     description: The password for the sahara service account.
594     type: string
595     hidden: true
596
597 # Compute-specific params
598   CeilometerComputeAgent:
599     description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
600     type: string
601     default: ''
602     constraints:
603     - allowed_values: ['', Present]
604   ComputeCount:
605     type: number
606     default: 1
607   HypervisorNeutronPhysicalBridge:
608     default: 'br-ex'
609     description: >
610       An OVS bridge to create on each hypervisor. This defaults to br-ex the
611       same as the control plane nodes, as we have a uniform configuration of
612       the openvswitch agent. Typically should not need to be changed.
613     type: string
614   HypervisorNeutronPublicInterface:
615     default: nic1
616     description: What interface to add to the HypervisorNeutronPhysicalBridge.
617     type: string
618   NeutronNetworkVLANRanges:
619     default: 'datacentre:1:1000'
620     description: >
621       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
622       Neutron documentation for permitted values. Defaults to permitting any
623       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
624     type: comma_delimited_list
625   NovaComputeDriver:
626     type: string
627     default: libvirt.LibvirtDriver
628   NovaComputeExtraConfig:
629     default: {}
630     description: |
631       NovaCompute specific configuration to inject into the cluster. Same
632       structure as ExtraConfig.
633     type: json
634   NovaComputeLibvirtType:
635     default: kvm
636     type: string
637   NovaComputeLibvirtVifDriver:
638     default: ''
639     description: Libvirt VIF driver configuration for the network
640     type: string
641   NovaComputeSchedulerHints:
642     type: json
643     description: Optional scheduler hints to pass to nova
644     default: {}
645   NovaEnableRbdBackend:
646     default: false
647     description: Whether to enable or not the Rbd backend for Nova
648     type: boolean
649   NovaImage:
650     type: string
651     default: overcloud-full
652     constraints:
653       - custom_constraint: glance.image
654   NovaOVSBridge:
655     default: 'br-int'
656     description: Name of integration bridge used by Open vSwitch
657     type: string
658   NovaSecurityGroupAPI:
659     default: 'neutron'
660     description: The full class name of the security API class
661     type: string
662   OvercloudComputeFlavor:
663     description: Use this flavor
664     default: baremetal
665     type: string
666     constraints:
667       - custom_constraint: nova.flavor
668   ServiceNetMap:
669     default:
670       NeutronTenantNetwork: tenant
671       CeilometerApiNetwork: internal_api
672       MongoDbNetwork: internal_api
673       CinderApiNetwork: internal_api
674       CinderIscsiNetwork: storage
675       GlanceApiNetwork: storage
676       GlanceRegistryNetwork: internal_api
677       KeystoneAdminApiNetwork: ctlplane # allows undercloud to config endpoints
678       KeystonePublicApiNetwork: internal_api
679       NeutronApiNetwork: internal_api
680       HeatApiNetwork: internal_api
681       NovaApiNetwork: internal_api
682       NovaMetadataNetwork: internal_api
683       NovaVncProxyNetwork: internal_api
684       SwiftMgmtNetwork: storage_mgmt
685       SwiftProxyNetwork: storage
686       SaharaApiNetwork: internal_api
687       HorizonNetwork: internal_api
688       MemcachedNetwork: internal_api
689       RabbitMqNetwork: internal_api
690       RedisNetwork: internal_api
691       MysqlNetwork: internal_api
692       CephClusterNetwork: storage_mgmt
693       CephPublicNetwork: storage
694       ControllerHostnameResolveNetwork: internal_api
695       ComputeHostnameResolveNetwork: internal_api
696       BlockStorageHostnameResolveNetwork: internal_api
697       ObjectStorageHostnameResolveNetwork: internal_api
698       CephStorageHostnameResolveNetwork: storage
699     description: Mapping of service_name -> network name. Typically set
700                  via parameter_defaults in the resource registry.
701     type: json
702
703 # Block storage specific parameters
704   BlockStorageCount:
705     type: number
706     default: 0
707   BlockStorageImage:
708     default: overcloud-full
709     type: string
710   OvercloudBlockStorageFlavor:
711     description: Flavor for block storage nodes to request when deploying.
712     default: baremetal
713     type: string
714     constraints:
715       - custom_constraint: nova.flavor
716   BlockStorageExtraConfig:
717     default: {}
718     description: |
719       BlockStorage specific configuration to inject into the cluster. Same
720       structure as ExtraConfig.
721     type: json
722   BlockStorageSchedulerHints:
723     type: json
724     description: Optional scheduler hints to pass to nova
725     default: {}
726
727
728 # Object storage specific parameters
729   ObjectStorageCount:
730     type: number
731     default: 0
732   OvercloudSwiftStorageFlavor:
733     description: Flavor for Swift storage nodes to request when deploying.
734     default: baremetal
735     type: string
736     constraints:
737       - custom_constraint: nova.flavor
738   SwiftStorageImage:
739     default: overcloud-full
740     type: string
741   ObjectStorageExtraConfig:
742     default: {}
743     description: |
744       ObjectStorage specific configuration to inject into the cluster. Same
745       structure as ExtraConfig.
746     type: json
747   ObjectStorageSchedulerHints:
748     type: json
749     description: Optional scheduler hints to pass to nova
750     default: {}
751
752 # Ceph storage specific parameters
753   CephStorageCount:
754     type: number
755     default: 0
756   CephStorageImage:
757     default: overcloud-full
758     type: string
759   OvercloudCephStorageFlavor:
760     default: baremetal
761     description: Flavor for Ceph storage nodes to request when deploying.
762     type: string
763     constraints:
764       - custom_constraint: nova.flavor
765   CephStorageExtraConfig:
766     default: {}
767     description: |
768       CephStorage specific configuration to inject into the cluster. Same
769       structure as ExtraConfig.
770     type: json
771   CephStorageSchedulerHints:
772     type: json
773     description: Optional scheduler hints to pass to nova
774     default: {}
775
776
777   # Hostname format for each role
778   # Note %index% is translated into the index of the node, e.g 0/1/2 etc
779   # and %stackname% is replaced with OS::stack_name in the template below.
780   # If you want to use the heat generated names, pass '' (empty string).
781   ControllerHostnameFormat:
782     type: string
783     description: Format for Controller node hostnames
784     default: '%stackname%-controller-%index%'
785   ComputeHostnameFormat:
786     type: string
787     description: Format for Compute node hostnames
788     default: '%stackname%-novacompute-%index%'
789   BlockStorageHostnameFormat:
790     type: string
791     description: Format for BlockStorage node hostnames
792     default: '%stackname%-blockstorage-%index%'
793   ObjectStorageHostnameFormat:
794     type: string
795     description: Format for SwiftStorage node hostnames
796     default: '%stackname%-objectstorage-%index%'
797   CephStorageHostnameFormat:
798     type: string
799     description: Format for CephStorage node hostnames
800     default: '%stackname%-cephstorage-%index%'
801
802   # Identifiers to trigger tasks on nodes
803   UpdateIdentifier:
804     default: ''
805     type: string
806     description: >
807       Setting to a previously unused value during stack-update will trigger
808       package update on all nodes
809   DeployIdentifier:
810     default: ''
811     type: string
812     description: >
813       Setting this to a unique value will re-run any deployment tasks which
814       perform configuration on a Heat stack-update.
815
816   # If you want to remove a specific node from a resource group, you can pass
817   # the node name or id as a <Group>RemovalPolicies parameter, for example:
818   # ComputeRemovalPolicies: [{'resource_list': ['0']}]
819   ControllerRemovalPolicies:
820     default: []
821     type: json
822     description: >
823       List of resources to be removed from ControllerResourceGroup when
824       doing an update which requires removal of specific resources.
825   ComputeRemovalPolicies:
826     default: []
827     type: json
828     description: >
829       List of resources to be removed from ComputeResourceGroup when
830       doing an update which requires removal of specific resources.
831   BlockStorageRemovalPolicies:
832     default: []
833     type: json
834     description: >
835       List of resources to be removed from BlockStorageResourceGroup when
836       doing an update which requires removal of specific resources.
837   ObjectStorageRemovalPolicies:
838     default: []
839     type: json
840     description: >
841       List of resources to be removed from ObjectStorageResourceGroup when
842       doing an update which requires removal of specific resources.
843   CephStorageRemovalPolicies:
844     default: []
845     type: json
846     description: >
847       List of resources to be removed from CephStorageResourceGroup when
848       doing an update which requires removal of specific resources.
849
850
851 resources:
852
853   HeatAuthEncryptionKey:
854     type: OS::Heat::RandomString
855
856   PcsdPassword:
857     type: OS::Heat::RandomString
858     properties:
859       length: 16
860
861   HorizonSecret:
862     type: OS::Heat::RandomString
863     properties:
864       length: 10
865
866   EndpointMap:
867     type: OS::TripleO::EndpointMap
868     properties:
869       CloudName: {get_param: CloudName}
870       CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
871       CinderApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
872       GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
873       GlanceRegistryVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
874       HeatApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
875       KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
876       KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
877       MysqlVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
878       NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
879       NovaApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
880       SaharaApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
881       SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
882       PublicVirtualIP: {get_attr: [VipMap, net_ip_uri_map, external]}
883
884   Controller:
885     type: OS::Heat::ResourceGroup
886     depends_on: Networks
887     properties:
888       count: {get_param: ControllerCount}
889       removal_policies: {get_param: ControllerRemovalPolicies}
890       resource_def:
891         type: OS::TripleO::Controller
892         properties:
893           AdminPassword: {get_param: AdminPassword}
894           AdminToken: {get_param: AdminToken}
895           CeilometerBackend: {get_param: CeilometerBackend}
896           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
897           CeilometerPassword: {get_param: CeilometerPassword}
898           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
899           CinderNfsMountOptions: {get_param: CinderNfsMountOptions}
900           CinderNfsServers: {get_param: CinderNfsServers}
901           CinderPassword: {get_param: CinderPassword}
902           CinderISCSIHelper: {get_param: CinderISCSIHelper}
903           CinderEnableNfsBackend: {get_param: CinderEnableNfsBackend}
904           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
905           CinderEnableRbdBackend: {get_param: CinderEnableRbdBackend}
906           CloudDomain: {get_param: CloudDomain}
907           ControlVirtualInterface: {get_param: ControlVirtualInterface}
908           ControllerExtraConfig: {get_param: controllerExtraConfig}
909           CorosyncIPv6: {get_param: CorosyncIPv6}
910           Debug: {get_param: Debug}
911           EnableFencing: {get_param: EnableFencing}
912           ManageFirewall: {get_param: ManageFirewall}
913           PurgeFirewallRules: {get_param: PurgeFirewallRules}
914           EnableGalera: {get_param: EnableGalera}
915           EnableCephStorage: {get_param: ControllerEnableCephStorage}
916           EnableSwiftStorage: {get_param: ControllerEnableSwiftStorage}
917           ExtraConfig: {get_param: ExtraConfig}
918           FencingConfig: {get_param: FencingConfig}
919           Flavor: {get_param: OvercloudControlFlavor}
920           GlancePassword: {get_param: GlancePassword}
921           GlanceBackend: {get_param: GlanceBackend}
922           GlanceNotifierStrategy: {get_param: GlanceNotifierStrategy}
923           GlanceLogFile: {get_param: GlanceLogFile}
924           HAProxySyslogAddress: {get_param: HAProxySyslogAddress}
925           HeatPassword: {get_param: HeatPassword}
926           HeatStackDomainAdminPassword: {get_param: HeatStackDomainAdminPassword}
927           HeatAuthEncryptionKey: {get_resource: HeatAuthEncryptionKey}
928           HorizonAllowedHosts: {get_param: HorizonAllowedHosts}
929           HorizonSecret: {get_resource: HorizonSecret}
930           Image: {get_param: controllerImage}
931           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
932           InstanceNameTemplate: {get_param: InstanceNameTemplate}
933           KeyName: {get_param: KeyName}
934           KeystoneCACertificate: {get_param: KeystoneCACertificate}
935           KeystoneSigningCertificate: {get_param: KeystoneSigningCertificate}
936           KeystoneSigningKey: {get_param: KeystoneSigningKey}
937           KeystoneSSLCertificate: {get_param: KeystoneSSLCertificate}
938           KeystoneSSLCertificateKey: {get_param: KeystoneSSLCertificateKey}
939           KeystoneNotificationDriver: {get_param: KeystoneNotificationDriver}
940           KeystoneNotificationFormat: {get_param: KeystoneNotificationFormat}
941           MysqlClusterUniquePart: {get_attr: [MysqlClusterUniquePart, value]}
942           MysqlInnodbBufferPoolSize: {get_param: MysqlInnodbBufferPoolSize}
943           MysqlMaxConnections: {get_param: MysqlMaxConnections}
944           MysqlRootPassword: {get_attr: [MysqlRootPassword, value]}
945           NeutronPublicInterfaceIP: {get_param: NeutronPublicInterfaceIP}
946           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
947           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
948           NeutronTenantMtu: {get_param: NeutronTenantMtu}
949           NeutronExternalNetworkBridge: {get_param: NeutronExternalNetworkBridge}
950           NeutronEnableIsolatedMetadata: {get_param: NeutronEnableIsolatedMetadata}
951           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
952           NeutronEnableL2Pop: {get_param: NeutronEnableL2Pop}
953           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
954           NeutronPublicInterface: {get_param: NeutronPublicInterface}
955           NeutronPublicInterfaceDefaultRoute: {get_param: NeutronPublicInterfaceDefaultRoute}
956           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
957           NeutronPassword: {get_param: NeutronPassword}
958           NeutronDnsmasqOptions:
959             str_replace:
960               template: {get_param: NeutronDnsmasqOptions}
961               params:
962                 '%MTU%': {get_param: NeutronTenantMtu}
963           NeutronDVR: {get_param: NeutronDVR}
964           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
965           NeutronAgentMode: {get_param: NeutronAgentMode}
966           NeutronCorePlugin: {get_param: NeutronCorePlugin}
967           NeutronServicePlugins: {get_param: NeutronServicePlugins}
968           NeutronTypeDrivers: {get_param: NeutronTypeDrivers}
969           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
970           NeutronPluginExtensions: {get_param: NeutronPluginExtensions}
971           NeutronAgentExtensions: {get_param: NeutronAgentExtensions}
972           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
973           NeutronL3HA: {get_param: NeutronL3HA}
974           NeutronDhcpAgentsPerNetwork: {get_param: NeutronDhcpAgentsPerNetwork}
975           NeutronNetworkType: {get_param: NeutronNetworkType}
976           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
977           NovaIPv6: {get_param: NovaIPv6}
978           NovaPassword: {get_param: NovaPassword}
979           NtpServer: {get_param: NtpServer}
980           MongoDbNoJournal: {get_param: MongoDbNoJournal}
981           MongoDbIPv6: {get_param: MongoDbIPv6}
982           PcsdPassword: {get_resource: PcsdPassword}
983           PublicVirtualInterface: {get_param: PublicVirtualInterface}
984           RabbitPassword: {get_param: RabbitPassword}
985           RabbitUserName: {get_param: RabbitUserName}
986           RabbitCookie: {get_attr: [RabbitCookie, value]}
987           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
988           RabbitClientPort: {get_param: RabbitClientPort}
989           RabbitFDLimit: {get_param: RabbitFDLimit}
990           RabbitIPv6: {get_param: RabbitIPv6}
991           SaharaPassword: {get_param: SaharaPassword}
992           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
993           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
994           RedisVirtualIP: {get_attr: [RedisVirtualIP, ip_address]}
995           RedisVirtualIPUri: {get_attr: [RedisVirtualIP, ip_address_uri]}
996           SwiftHashSuffix: {get_param: SwiftHashSuffix}
997           SwiftMountCheck: {get_param: SwiftMountCheck}
998           SwiftMinPartHours: {get_param: SwiftMinPartHours}
999           SwiftPartPower: {get_param: SwiftPartPower}
1000           SwiftPassword: {get_param: SwiftPassword}
1001           SwiftReplicas: { get_param: SwiftReplicas}
1002           TimeZone: {get_param: TimeZone}
1003           VirtualIP: {get_attr: [VipMap, net_ip_map, ctlplane]} # deprecated. Use per service VIP settings instead now.
1004           PublicVirtualIP: {get_attr: [VipMap, net_ip_map, external]}
1005           ServiceNetMap: {get_param: ServiceNetMap}
1006           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1007           CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1008           CinderApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1009           HeatApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1010           HeatApiVirtualIPUri: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1011           GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1012           GlanceRegistryVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1013           NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1014           SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1015           MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1016           MysqlVirtualIPUri: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1017           KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1018           KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1019           NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1020           NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1021           SaharaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1022           UpdateIdentifier: {get_param: UpdateIdentifier}
1023           Hostname:
1024             str_replace:
1025               template: {get_param: ControllerHostnameFormat}
1026               params:
1027                 '%stackname%': {get_param: 'OS::stack_name'}
1028           NodeIndex: '%index%'
1029           ServerMetadata: {get_param: ServerMetadata}
1030           SchedulerHints: {get_param: ControllerSchedulerHints}
1031
1032   Compute:
1033     type: OS::Heat::ResourceGroup
1034     depends_on: Networks
1035     properties:
1036       count: {get_param: ComputeCount}
1037       removal_policies: {get_param: ComputeRemovalPolicies}
1038       resource_def:
1039         type: OS::TripleO::Compute
1040         properties:
1041           AdminPassword: {get_param: AdminPassword}
1042           CeilometerComputeAgent: {get_param: CeilometerComputeAgent}
1043           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
1044           CeilometerPassword: {get_param: CeilometerPassword}
1045           CinderEnableNfsBackend: {get_param: CinderEnableNfsBackend}
1046           CinderEnableRbdBackend: {get_param: CinderEnableRbdBackend}
1047           Debug: {get_param: Debug}
1048           ExtraConfig: {get_param: ExtraConfig}
1049           Flavor: {get_param: OvercloudComputeFlavor}
1050           GlanceHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1051           Image: {get_param: NovaImage}
1052           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
1053           KeyName: {get_param: KeyName}
1054           KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1055           KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1056           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
1057           NeutronTenantMtu: {get_param: NeutronTenantMtu}
1058           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
1059           NeutronEnableL2Pop : {get_param: NeutronEnableL2Pop}
1060           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
1061           NeutronHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1062           NeutronNetworkType: {get_param: NeutronNetworkType}
1063           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
1064           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
1065           NeutronPassword: {get_param: NeutronPassword}
1066           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
1067           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
1068           NeutronDVR: {get_param: NeutronDVR}
1069           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
1070           NeutronAgentMode: {get_param: NeutronComputeAgentMode}
1071           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
1072           NeutronCorePlugin: {get_param: NeutronCorePlugin}
1073           NeutronServicePlugins: {get_param: NeutronServicePlugins}
1074           NeutronTypeDrivers: {get_param: NeutronTypeDrivers}
1075           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
1076           NeutronAgentExtensions: {get_param: NeutronAgentExtensions}
1077           # L3 HA and Failover is not relevant for Computes, should be removed
1078           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
1079           NeutronL3HA: {get_param: NeutronL3HA}
1080           NovaApiHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1081           NovaComputeDriver: {get_param: NovaComputeDriver}
1082           NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
1083           NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
1084           NovaComputeLibvirtVifDriver: {get_param: NovaComputeLibvirtVifDriver}
1085           NovaEnableRbdBackend: {get_param: NovaEnableRbdBackend}
1086           NovaIPv6: {get_param: NovaIPv6}
1087           NovaPublicIP: {get_attr: [VipMap, net_ip_map, external]}
1088           NovaPassword: {get_param: NovaPassword}
1089           NovaOVSBridge: {get_param: NovaOVSBridge}
1090           NovaSecurityGroupAPI: {get_param: NovaSecurityGroupAPI}
1091           NtpServer: {get_param: NtpServer}
1092           RabbitHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1093           RabbitPassword: {get_param: RabbitPassword}
1094           RabbitUserName: {get_param: RabbitUserName}
1095           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
1096           RabbitClientPort: {get_param: RabbitClientPort}
1097           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
1098           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
1099           ServiceNetMap: {get_param: ServiceNetMap}
1100           TimeZone: {get_param: TimeZone}
1101           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1102           UpdateIdentifier: {get_param: UpdateIdentifier}
1103           Hostname:
1104             str_replace:
1105               template: {get_param: ComputeHostnameFormat}
1106               params:
1107                 '%stackname%': {get_param: 'OS::stack_name'}
1108           CloudDomain: {get_param: CloudDomain}
1109           ServerMetadata: {get_param: ServerMetadata}
1110           SchedulerHints: {get_param: NovaComputeSchedulerHints}
1111
1112   BlockStorage:
1113     type: OS::Heat::ResourceGroup
1114     depends_on: Networks
1115     properties:
1116       count: {get_param: BlockStorageCount}
1117       removal_policies: {get_param: BlockStorageRemovalPolicies}
1118       resource_def:
1119         type: OS::TripleO::BlockStorage
1120         properties:
1121           Debug: {get_param: Debug}
1122           Image: {get_param: BlockStorageImage}
1123           CinderISCSIHelper: {get_param: CinderISCSIHelper}
1124           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
1125           # Purpose of the dedicated BlockStorage nodes should be to use their local LVM
1126           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
1127           CinderPassword: {get_param: CinderPassword}
1128           KeyName: {get_param: KeyName}
1129           Flavor: {get_param: OvercloudBlockStorageFlavor}
1130           VirtualIP: {get_attr: [VipMap, net_ip_map, ctlplane]}
1131           GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1132           RabbitPassword: {get_param: RabbitPassword}
1133           RabbitUserName: {get_param: RabbitUserName}
1134           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
1135           RabbitClientPort: {get_param: RabbitClientPort}
1136           TimeZone: {get_param: TimeZone}
1137           NtpServer: {get_param: NtpServer}
1138           UpdateIdentifier: {get_param: UpdateIdentifier}
1139           Hostname:
1140             str_replace:
1141               template: {get_param: BlockStorageHostnameFormat}
1142               params:
1143                 '%stackname%': {get_param: 'OS::stack_name'}
1144           ServiceNetMap: {get_param: ServiceNetMap}
1145           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1146           MysqlVirtualIPUri: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1147           ExtraConfig: {get_param: ExtraConfig}
1148           BlockStorageExtraConfig: {get_param: BlockStorageExtraConfig}
1149           CloudDomain: {get_param: CloudDomain}
1150           ServerMetadata: {get_param: ServerMetadata}
1151           SchedulerHints: {get_param: BlockStorageSchedulerHints}
1152
1153   ObjectStorage:
1154     type: OS::Heat::ResourceGroup
1155     depends_on: Networks
1156     properties:
1157       count: {get_param: ObjectStorageCount}
1158       removal_policies: {get_param: ObjectStorageRemovalPolicies}
1159       resource_def:
1160         type: OS::TripleO::ObjectStorage
1161         properties:
1162           KeyName: {get_param: KeyName}
1163           Flavor: {get_param: OvercloudSwiftStorageFlavor}
1164           HashSuffix: {get_param: SwiftHashSuffix}
1165           MountCheck: {get_param: SwiftMountCheck}
1166           MinPartHours: {get_param: SwiftMinPartHours}
1167           PartPower: {get_param: SwiftPartPower}
1168           Image: {get_param: SwiftStorageImage}
1169           Replicas: { get_param: SwiftReplicas}
1170           TimeZone: {get_param: TimeZone}
1171           NtpServer: {get_param: NtpServer}
1172           UpdateIdentifier: {get_param: UpdateIdentifier}
1173           ServiceNetMap: {get_param: ServiceNetMap}
1174           Hostname:
1175             str_replace:
1176               template: {get_param: ObjectStorageHostnameFormat}
1177               params:
1178                 '%stackname%': {get_param: 'OS::stack_name'}
1179           ExtraConfig: {get_param: ExtraConfig}
1180           ObjectStorageExtraConfig: {get_param: ObjectStorageExtraConfig}
1181           CloudDomain: {get_param: CloudDomain}
1182           ServerMetadata: {get_param: ServerMetadata}
1183           SchedulerHints: {get_param: ObjectStorageSchedulerHints}
1184
1185   CephStorage:
1186     type: OS::Heat::ResourceGroup
1187     depends_on: Networks
1188     properties:
1189       count: {get_param: CephStorageCount}
1190       removal_policies: {get_param: CephStorageRemovalPolicies}
1191       resource_def:
1192         type: OS::TripleO::CephStorage
1193         properties:
1194           Image: {get_param: CephStorageImage}
1195           KeyName: {get_param: KeyName}
1196           Flavor: {get_param: OvercloudCephStorageFlavor}
1197           NtpServer: {get_param: NtpServer}
1198           ServiceNetMap: {get_param: ServiceNetMap}
1199           TimeZone: {get_param: TimeZone}
1200           UpdateIdentifier: {get_param: UpdateIdentifier}
1201           Hostname:
1202             str_replace:
1203               template: {get_param: CephStorageHostnameFormat}
1204               params:
1205                 '%stackname%': {get_param: 'OS::stack_name'}
1206           ExtraConfig: {get_param: ExtraConfig}
1207           CephStorageExtraConfig: {get_param: CephStorageExtraConfig}
1208           CloudDomain: {get_param: CloudDomain}
1209           ServerMetadata: {get_param: ServerMetadata}
1210           SchedulerHints: {get_param: CephStorageSchedulerHints}
1211
1212   ControllerIpListMap:
1213     type: OS::TripleO::Network::Ports::NetIpListMap
1214     properties:
1215       ControlPlaneIpList: {get_attr: [Controller, ip_address]}
1216       ExternalIpList: {get_attr: [Controller, external_ip_address]}
1217       InternalApiIpList: {get_attr: [Controller, internal_api_ip_address]}
1218       StorageIpList: {get_attr: [Controller, storage_ip_address]}
1219       StorageMgmtIpList: {get_attr: [Controller, storage_mgmt_ip_address]}
1220       TenantIpList: {get_attr: [Controller, tenant_ip_address]}
1221       ManagementIpList: {get_attr: [Controller, management_ip_address]}
1222
1223   allNodesConfig:
1224     type: OS::TripleO::AllNodes::SoftwareConfig
1225     properties:
1226       compute_hosts: {get_attr: [Compute, hosts_entry]}
1227       controller_hosts: {get_attr: [Controller, hosts_entry]}
1228       controller_ips: {get_attr: [Controller, ip_address]}
1229       block_storage_hosts: {get_attr: [BlockStorage, hosts_entry]}
1230       object_storage_hosts: {get_attr: [ObjectStorage, hosts_entry]}
1231       ceph_storage_hosts: {get_attr: [CephStorage, hosts_entry]}
1232       controller_names: {get_attr: [Controller, hostname]}
1233       rabbit_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1234       mongo_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
1235       redis_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
1236       memcache_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1237       mysql_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1238       horizon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1239       heat_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1240       swift_proxy_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1241       ceilometer_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1242       nova_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1243       nova_metadata_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1244       glance_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1245       glance_registry_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1246       cinder_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1247       neutron_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1248       keystone_public_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1249       keystone_admin_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1250       sahara_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1251       DeployIdentifier: {get_param: DeployIdentifier}
1252       UpdateIdentifier: {get_param: UpdateIdentifier}
1253
1254   MysqlRootPassword:
1255     type: OS::Heat::RandomString
1256     properties:
1257       length: 10
1258
1259   MysqlClusterUniquePart:
1260     type: OS::Heat::RandomString
1261     properties:
1262       length: 10
1263
1264   RabbitCookie:
1265     type: OS::Heat::RandomString
1266     properties:
1267       length: 20
1268       salt: {get_param: RabbitCookieSalt}
1269
1270   # creates the network architecture
1271   Networks:
1272     type: OS::TripleO::Network
1273
1274   ControlVirtualIP:
1275     type: OS::Neutron::Port
1276     depends_on: Networks
1277     properties:
1278       name: control_virtual_ip
1279       network: {get_param: NeutronControlPlaneID}
1280       fixed_ips: {get_param: ControlFixedIPs}
1281       replacement_policy: AUTO
1282
1283   RedisVirtualIP:
1284     depends_on: Networks
1285     type: OS::TripleO::Network::Ports::RedisVipPort
1286     properties:
1287       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1288       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
1289       PortName: redis_virtual_ip
1290       NetworkName: {get_param: [ServiceNetMap, RedisNetwork]}
1291       ServiceName: redis
1292
1293   # The public VIP is on the External net, falls back to ctlplane
1294   PublicVirtualIP:
1295     depends_on: Networks
1296     type: OS::TripleO::Network::Ports::ExternalVipPort
1297     properties:
1298       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1299       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
1300       PortName: public_virtual_ip
1301       FixedIPs: {get_param: PublicVirtualFixedIPs}
1302
1303   InternalApiVirtualIP:
1304     depends_on: Networks
1305     type: OS::TripleO::Network::Ports::InternalApiVipPort
1306     properties:
1307       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1308       PortName: internal_api_virtual_ip
1309       FixedIPs: {get_param: InternalApiVirtualFixedIPs}
1310
1311   StorageVirtualIP:
1312     depends_on: Networks
1313     type: OS::TripleO::Network::Ports::StorageVipPort
1314     properties:
1315       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1316       PortName: storage_virtual_ip
1317       FixedIPs: {get_param: StorageVirtualFixedIPs}
1318
1319   StorageMgmtVirtualIP:
1320     depends_on: Networks
1321     type: OS::TripleO::Network::Ports::StorageMgmtVipPort
1322     properties:
1323       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1324       PortName: storage_management_virtual_ip
1325       FixedIPs: {get_param: StorageMgmtVirtualFixedIPs}
1326
1327   VipMap:
1328     type: OS::TripleO::Network::Ports::NetVipMap
1329     properties:
1330       ControlPlaneIp: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1331       ExternalIp: {get_attr: [PublicVirtualIP, ip_address]}
1332       ExternalIpUri: {get_attr: [PublicVirtualIP, ip_address_uri]}
1333       InternalApiIp: {get_attr: [InternalApiVirtualIP, ip_address]}
1334       InternalApiIpUri: {get_attr: [InternalApiVirtualIP, ip_address_uri]}
1335       StorageIp: {get_attr: [StorageVirtualIP, ip_address]}
1336       StorageIpUri: {get_attr: [StorageVirtualIP, ip_address_uri]}
1337       StorageMgmtIp: {get_attr: [StorageMgmtVirtualIP, ip_address]}
1338       StorageMgmtIpUri: {get_attr: [StorageMgmtVirtualIP, ip_address_uri]}
1339       # No tenant or management VIP required
1340
1341   VipConfig:
1342     type: OS::TripleO::VipConfig
1343
1344   VipDeployment:
1345     type: OS::Heat::StructuredDeployments
1346     properties:
1347       name: VipDeployment
1348       config: {get_resource: VipConfig}
1349       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1350       input_values:
1351         # service VIP mappings
1352         keystone_admin_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1353         keystone_public_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1354         neutron_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1355         cinder_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1356         glance_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1357         glance_registry_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1358         swift_proxy_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1359         nova_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1360         nova_metadata_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1361         ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1362         heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1363         horizon_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1364         redis_vip: {get_attr: [RedisVirtualIP, ip_address]}
1365         mysql_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1366         rabbit_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1367         # direct configuration of Virtual IPs for each network
1368         control_virtual_ip: {get_attr: [VipMap, net_ip_map, ctlplane]}
1369         public_virtual_ip: {get_attr: [VipMap, net_ip_map, external]}
1370         internal_api_virtual_ip: {get_attr: [VipMap, net_ip_map, internal_api]}
1371         sahara_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1372         storage_virtual_ip: {get_attr: [VipMap, net_ip_map, storage]}
1373         storage_mgmt_virtual_ip: {get_attr: [VipMap, net_ip_map, storage_mgmt]}
1374
1375   ControllerBootstrapNodeConfig:
1376     type: OS::TripleO::BootstrapNode::SoftwareConfig
1377     properties:
1378       bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
1379       bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]}
1380
1381   ControllerBootstrapNodeDeployment:
1382     type: OS::Heat::StructuredDeployments
1383     properties:
1384       name: ControllerBootstrapNodeDeployment
1385       config: {get_attr: [ControllerBootstrapNodeConfig, config_id]}
1386       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1387
1388   ControllerSwiftDeployment:
1389     type: OS::Heat::StructuredDeployments
1390     properties:
1391       name: ControllerSwiftDeployment
1392       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1393       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1394
1395   ObjectStorageSwiftDeployment:
1396     type: OS::Heat::StructuredDeployments
1397     properties:
1398       name: ObjectStorageSwiftDeployment
1399       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1400       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1401
1402   SwiftDevicesAndProxyConfig:
1403     type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig
1404     properties:
1405       controller_swift_devices: {get_attr: [Controller, swift_device]}
1406       object_store_swift_devices: {get_attr: [ObjectStorage, swift_device]}
1407       controller_swift_proxy_memcaches: {get_attr: [Controller, swift_proxy_memcache]}
1408
1409   ComputeCephDeployment:
1410     type: OS::Heat::StructuredDeployments
1411     properties:
1412       name: ComputeCephDeployment
1413       config: {get_attr: [CephClusterConfig, config_id]}
1414       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1415
1416   ControllerCephDeployment:
1417     type: OS::Heat::StructuredDeployments
1418     properties:
1419       name: ControllerCephDeployment
1420       config: {get_attr: [CephClusterConfig, config_id]}
1421       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1422
1423   CephStorageCephDeployment:
1424     type: OS::Heat::StructuredDeployments
1425     properties:
1426       name: CephStorageCephDeployment
1427       config: {get_attr: [CephClusterConfig, config_id]}
1428       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1429
1430   CephClusterConfig:
1431     type: OS::TripleO::CephClusterConfig::SoftwareConfig
1432     properties:
1433       ceph_storage_count: {get_param: CephStorageCount}
1434       ceph_fsid: {get_param: CephClusterFSID}
1435       ceph_mon_key: {get_param: CephMonKey}
1436       ceph_admin_key: {get_param: CephAdminKey}
1437       ceph_client_key: {get_param: CephClientKey}
1438       ceph_external_mon_ips: {get_param: CephExternalMonHost}
1439       ceph_mon_names: {get_attr: [Controller, hostname]}
1440       ceph_mon_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
1441
1442   ControllerClusterConfig:
1443     type: OS::Heat::StructuredConfig
1444     properties:
1445       group: os-apply-config
1446       config:
1447         corosync:
1448           nodes: {get_attr: [Controller, corosync_node]}
1449         horizon:
1450           caches:
1451             memcached:
1452               nodes: {get_attr: [Controller, hostname]}
1453         mysql:
1454           nodes: {get_attr: [Controller, corosync_node]}
1455         haproxy:
1456           nodes: {get_attr: [Controller, corosync_node]}
1457
1458   ControllerClusterDeployment:
1459     type: OS::Heat::StructuredDeployments
1460     properties:
1461       name: ControllerClusterDeployment
1462       config: {get_resource: ControllerClusterConfig}
1463       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1464
1465   ControllerAllNodesDeployment:
1466     type: OS::Heat::StructuredDeployments
1467     properties:
1468       name: ControllerAllNodesDeployment
1469       config: {get_attr: [allNodesConfig, config_id]}
1470       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1471
1472   ComputeAllNodesDeployment:
1473     type: OS::Heat::StructuredDeployments
1474     properties:
1475       name: ComputeAllNodesDeployment
1476       config: {get_attr: [allNodesConfig, config_id]}
1477       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1478
1479   BlockStorageAllNodesDeployment:
1480     type: OS::Heat::StructuredDeployments
1481     properties:
1482       name: BlockStorageAllNodesDeployment
1483       config: {get_attr: [allNodesConfig, config_id]}
1484       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1485
1486   ObjectStorageAllNodesDeployment:
1487     type: OS::Heat::StructuredDeployments
1488     properties:
1489       name: ObjectStorageAllNodesDeployment
1490       config: {get_attr: [allNodesConfig, config_id]}
1491       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1492
1493   CephStorageAllNodesDeployment:
1494     type: OS::Heat::StructuredDeployments
1495     properties:
1496       name: CephStorageAllNodesDeployment
1497       config: {get_attr: [allNodesConfig, config_id]}
1498       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1499
1500   # All Nodes Validations
1501   AllNodesValidationConfig:
1502     type: OS::TripleO::AllNodes::Validation
1503     properties:
1504       PingTestIps:
1505         list_join:
1506         - ' '
1507         - - {get_attr: [Controller, resource.0.external_ip_address]}
1508           - {get_attr: [Controller, resource.0.internal_api_ip_address]}
1509           - {get_attr: [Controller, resource.0.storage_ip_address]}
1510           - {get_attr: [Controller, resource.0.storage_mgmt_ip_address]}
1511           - {get_attr: [Controller, resource.0.tenant_ip_address]}
1512
1513   ControllerAllNodesValidationDeployment:
1514     type: OS::Heat::StructuredDeployments
1515     depends_on: ControllerAllNodesDeployment
1516     properties:
1517       name: ControllerAllNodesValidationDeployment
1518       config: {get_resource: AllNodesValidationConfig}
1519       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1520
1521   ComputeAllNodesValidationDeployment:
1522     type: OS::Heat::StructuredDeployments
1523     depends_on: ComputeAllNodesDeployment
1524     properties:
1525       name: ComputeAllNodesValidationDeployment
1526       config: {get_resource: AllNodesValidationConfig}
1527       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1528
1529   BlockStorageAllNodesValidationDeployment:
1530     type: OS::Heat::StructuredDeployments
1531     depends_on: BlockStorageAllNodesDeployment
1532     properties:
1533       name: BlockStorageAllNodesValidationDeployment
1534       config: {get_resource: AllNodesValidationConfig}
1535       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1536
1537   ObjectStorageAllNodesValidationDeployment:
1538     type: OS::Heat::StructuredDeployments
1539     depends_on: ObjectStorageAllNodesDeployment
1540     properties:
1541       name: ObjectStorageAllNodesValidationDeployment
1542       config: {get_resource: AllNodesValidationConfig}
1543       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1544
1545   CephStorageAllNodesValidationDeployment:
1546     type: OS::Heat::StructuredDeployments
1547     depends_on: CephStorageAllNodesDeployment
1548     properties:
1549       name: CephStorageAllNodesValidationDeployment
1550       config: {get_resource: AllNodesValidationConfig}
1551       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1552
1553   UpdateWorkflow:
1554     type: OS::TripleO::Tasks::UpdateWorkflow
1555     properties:
1556       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
1557       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
1558       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1559       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1560       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1561       input_values:
1562         deploy_identifier: {get_param: DeployIdentifier}
1563         update_identifier: {get_param: UpdateIdentifier}
1564
1565   # Optional ExtraConfig for all nodes - all roles are passed in here, but
1566   # the nested template may configure each role differently (or not at all)
1567   AllNodesExtraConfig:
1568     type: OS::TripleO::AllNodesExtraConfig
1569     depends_on:
1570       - UpdateWorkflow
1571       - ComputeAllNodesValidationDeployment
1572       - BlockStorageAllNodesValidationDeployment
1573       - ObjectStorageAllNodesValidationDeployment
1574       - CephStorageAllNodesValidationDeployment
1575       - ControllerAllNodesValidationDeployment
1576     properties:
1577       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
1578       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
1579       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1580       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1581       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1582
1583   # Nested stack deployment runs after all other controller deployments
1584   ControllerNodesPostDeployment:
1585     type: OS::TripleO::ControllerPostDeployment
1586     depends_on: [ControllerBootstrapNodeDeployment, ControllerAllNodesDeployment, ControllerSwiftDeployment, ControllerCephDeployment]
1587     properties:
1588       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1589       NodeConfigIdentifiers:
1590         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1591         controller_config: {get_attr: [Controller, attributes, config_identifier]}
1592         deployment_identifier: {get_param: DeployIdentifier}
1593
1594   ComputeNodesPostDeployment:
1595     type: OS::TripleO::ComputePostDeployment
1596     depends_on: [ComputeAllNodesDeployment, ComputeCephDeployment]
1597     properties:
1598       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1599       NodeConfigIdentifiers:
1600         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1601         compute_config: {get_attr: [Compute, attributes, config_identifier]}
1602         deployment_identifier: {get_param: DeployIdentifier}
1603
1604   ObjectStorageNodesPostDeployment:
1605     type: OS::TripleO::ObjectStoragePostDeployment
1606     depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
1607     properties:
1608       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1609       NodeConfigIdentifiers:
1610         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1611         objectstorage_config: {get_attr: [ObjectStorage, attributes, config_identifier]}
1612         deployment_identifier: {get_param: DeployIdentifier}
1613
1614   BlockStorageNodesPostDeployment:
1615     type: OS::TripleO::BlockStoragePostDeployment
1616     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
1617     properties:
1618       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1619       NodeConfigIdentifiers:
1620         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1621         blockstorage_config: {get_attr: [BlockStorage, attributes, config_identifier]}
1622         deployment_identifier: {get_param: DeployIdentifier}
1623
1624   CephStorageNodesPostDeployment:
1625     type: OS::TripleO::CephStoragePostDeployment
1626     depends_on: [ControllerNodesPostDeployment, CephStorageCephDeployment, CephStorageAllNodesDeployment]
1627     properties:
1628       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1629       NodeConfigIdentifiers:
1630         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1631         cephstorage_config: {get_attr: [CephStorage, attributes, config_identifier]}
1632         deployment_identifier: {get_param: DeployIdentifier}
1633
1634 outputs:
1635   KeystoneURL:
1636     description: URL for the Overcloud Keystone service
1637     value: {get_attr: [EndpointMap, endpoint_map, KeystonePublic, uri]}
1638   KeystoneAdminVip:
1639     description: Keystone Admin VIP endpoint
1640     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1641   PublicVip:
1642     description: Controller VIP for public API endpoints
1643     value: {get_attr: [VipMap, net_ip_map, external]}
1644   CeilometerInternalVip:
1645     description: VIP for Ceilometer API internal endpoint
1646     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1647   CinderInternalVip:
1648     description: VIP for Cinder API internal endpoint
1649     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1650   GlanceInternalVip:
1651     description: VIP for Glance API internal endpoint
1652     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1653   HeatInternalVip:
1654     description: VIP for Heat API internal endpoint
1655     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1656   KeystoneInternalVip:
1657     description: VIP for Keystone API internal endpoint
1658     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1659   NeutronInternalVip:
1660     description: VIP for Neutron API internal endpoint
1661     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1662   NovaInternalVip:
1663     description: VIP for Nova API internal endpoint
1664     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1665   SaharaInternalVip:
1666     description: VIP for Sahara API internal endpoint
1667     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1668   SwiftInternalVip:
1669     description: VIP for Swift Proxy internal endpoint
1670     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1671   HostsEntry:
1672     description: |
1673       The content that should be appended to your /etc/hosts if you want to get
1674       hostname-based access to the deployed nodes (useful for testing without
1675       setting up a DNS).
1676     value: {get_attr: [allNodesConfig, hosts_entries]}