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