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