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