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