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