Merge "composable neutron server"
[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::NeutronServer
640       - OS::TripleO::Services::RabbitMQ
641       - OS::TripleO::Services::HAproxy
642       - OS::TripleO::Services::Keepalived
643       - OS::TripleO::Services::Memcached
644       - OS::TripleO::Services::SwiftProxy
645       - OS::TripleO::Services::Redis
646       - OS::TripleO::Services::NovaConductor
647     description: A list of service resources (configured in the Heat
648                  resource_registry) which represent nested stacks
649                  for each service that should get installed on the Controllers.
650     type: comma_delimited_list
651
652   ComputeServices:
653     default: []
654     description: A list of service resources (configured in the Heat
655                  resource_registry) which represent nested stacks
656                  for each service that should get installed on the Compute Nodes.
657     type: comma_delimited_list
658
659 # Block storage specific parameters
660   BlockStorageCount:
661     type: number
662     default: 0
663   BlockStorageImage:
664     default: overcloud-full
665     type: string
666   OvercloudBlockStorageFlavor:
667     description: Flavor for block storage nodes to request when deploying.
668     default: baremetal
669     type: string
670     constraints:
671       - custom_constraint: nova.flavor
672   BlockStorageExtraConfig:
673     default: {}
674     description: |
675       BlockStorage specific configuration to inject into the cluster. Same
676       structure as ExtraConfig.
677     type: json
678   BlockStorageSchedulerHints:
679     type: json
680     description: Optional scheduler hints to pass to nova
681     default: {}
682
683
684 # Object storage specific parameters
685   ObjectStorageCount:
686     type: number
687     default: 0
688   OvercloudSwiftStorageFlavor:
689     description: Flavor for Swift storage nodes to request when deploying.
690     default: baremetal
691     type: string
692     constraints:
693       - custom_constraint: nova.flavor
694   SwiftStorageImage:
695     default: overcloud-full
696     type: string
697   ObjectStorageExtraConfig:
698     default: {}
699     description: |
700       ObjectStorage specific configuration to inject into the cluster. Same
701       structure as ExtraConfig.
702     type: json
703   ObjectStorageSchedulerHints:
704     type: json
705     description: Optional scheduler hints to pass to nova
706     default: {}
707   ObjectStorageServices:
708     default: []
709     description: A list of service resources (configured in the Heat
710                  resource_registry) which represent nested stacks
711                  for each service that should get installed on the ObjectStorage nodes.
712                  Note this role currently only supports steps 2, 3 and 4 configuration.
713     type: comma_delimited_list
714
715
716 # Ceph storage specific parameters
717   CephStorageCount:
718     type: number
719     default: 0
720   CephStorageImage:
721     default: overcloud-full
722     type: string
723   OvercloudCephStorageFlavor:
724     default: baremetal
725     description: Flavor for Ceph storage nodes to request when deploying.
726     type: string
727     constraints:
728       - custom_constraint: nova.flavor
729   CephStorageExtraConfig:
730     default: {}
731     description: |
732       CephStorage specific configuration to inject into the cluster. Same
733       structure as ExtraConfig.
734     type: json
735   CephStorageSchedulerHints:
736     type: json
737     description: Optional scheduler hints to pass to nova
738     default: {}
739   CephStorageServices:
740     default: []
741     description: A list of service resources (configured in the Heat
742                  resource_registry) which represent nested stacks
743                  for each service that should get installed on the CephStorage nodes.
744     type: comma_delimited_list
745
746   # Hostname format for each role
747   # Note %index% is translated into the index of the node, e.g 0/1/2 etc
748   # and %stackname% is replaced with OS::stack_name in the template below.
749   # If you want to use the heat generated names, pass '' (empty string).
750   ControllerHostnameFormat:
751     type: string
752     description: Format for Controller node hostnames
753     default: '%stackname%-controller-%index%'
754   ComputeHostnameFormat:
755     type: string
756     description: Format for Compute node hostnames
757     default: '%stackname%-novacompute-%index%'
758   BlockStorageHostnameFormat:
759     type: string
760     description: Format for BlockStorage node hostnames
761     default: '%stackname%-blockstorage-%index%'
762   ObjectStorageHostnameFormat:
763     type: string
764     description: Format for SwiftStorage node hostnames
765     default: '%stackname%-objectstorage-%index%'
766   CephStorageHostnameFormat:
767     type: string
768     description: Format for CephStorage node hostnames
769     default: '%stackname%-cephstorage-%index%'
770
771   # Identifiers to trigger tasks on nodes
772   UpdateIdentifier:
773     default: ''
774     type: string
775     description: >
776       Setting to a previously unused value during stack-update will trigger
777       package update on all nodes
778   DeployIdentifier:
779     default: ''
780     type: string
781     description: >
782       Setting this to a unique value will re-run any deployment tasks which
783       perform configuration on a Heat stack-update.
784
785   # If you want to remove a specific node from a resource group, you can pass
786   # the node name or id as a <Group>RemovalPolicies parameter, for example:
787   # ComputeRemovalPolicies: [{'resource_list': ['0']}]
788   ControllerRemovalPolicies:
789     default: []
790     type: json
791     description: >
792       List of resources to be removed from ControllerResourceGroup when
793       doing an update which requires removal of specific resources.
794   ComputeRemovalPolicies:
795     default: []
796     type: json
797     description: >
798       List of resources to be removed from ComputeResourceGroup when
799       doing an update which requires removal of specific resources.
800   BlockStorageRemovalPolicies:
801     default: []
802     type: json
803     description: >
804       List of resources to be removed from BlockStorageResourceGroup when
805       doing an update which requires removal of specific resources.
806   ObjectStorageRemovalPolicies:
807     default: []
808     type: json
809     description: >
810       List of resources to be removed from ObjectStorageResourceGroup when
811       doing an update which requires removal of specific resources.
812   CephStorageRemovalPolicies:
813     default: []
814     type: json
815     description: >
816       List of resources to be removed from CephStorageResourceGroup when
817       doing an update which requires removal of specific resources.
818
819 parameter_groups:
820 - label: deprecated
821   description: Do not use deprecated params, they will be removed.
822   parameters:
823   - controllerExtraConfig
824
825
826 resources:
827
828   HeatAuthEncryptionKey:
829     type: OS::Heat::RandomString
830
831   PcsdPassword:
832     type: OS::Heat::RandomString
833     properties:
834       length: 16
835
836   HorizonSecret:
837     type: OS::Heat::RandomString
838     properties:
839       length: 10
840
841   EndpointMap:
842     type: OS::TripleO::EndpointMap
843     properties:
844       CloudName: {get_param: CloudName}
845       CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
846       AodhApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
847       CinderApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
848       GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
849       GlanceRegistryVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
850       GnocchiApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
851       HeatApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
852       KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
853       KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
854       MysqlVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
855       NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
856       NovaApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
857       SaharaApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
858       SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
859       PublicVirtualIP: {get_attr: [VipMap, net_ip_uri_map, external]}
860
861   ControllerServiceChain:
862     type: OS::TripleO::Services
863     depends_on: Networks
864     properties:
865       Services: {get_param: ControllerServices}
866       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
867
868   Controller:
869     type: OS::Heat::ResourceGroup
870     depends_on: Networks
871     properties:
872       count: {get_param: ControllerCount}
873       removal_policies: {get_param: ControllerRemovalPolicies}
874       resource_def:
875         type: OS::TripleO::Controller
876         properties:
877           AdminPassword: {get_param: AdminPassword}
878           AodhPassword: {get_param: AodhPassword}
879           CeilometerBackend: {get_param: CeilometerBackend}
880           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
881           CeilometerPassword: {get_param: CeilometerPassword}
882           CeilometerMeterDispatcher: {get_param: CeilometerMeterDispatcher}
883           CloudDomain: {get_param: CloudDomain}
884           ControlVirtualInterface: {get_param: ControlVirtualInterface}
885           controllerExtraConfig: {get_param: controllerExtraConfig}
886           CorosyncIPv6: {get_param: CorosyncIPv6}
887           Debug: {get_param: Debug}
888           EnableFencing: {get_param: EnableFencing}
889           ManageFirewall: {get_param: ManageFirewall}
890           PurgeFirewallRules: {get_param: PurgeFirewallRules}
891           EnableGalera: {get_param: EnableGalera}
892           EnableCephStorage: {get_param: ControllerEnableCephStorage}
893           EnableSwiftStorage: {get_param: ControllerEnableSwiftStorage}
894           ExtraConfig: {get_param: ExtraConfig}
895           FencingConfig: {get_param: FencingConfig}
896           Flavor: {get_param: OvercloudControlFlavor}
897           GnocchiPassword: {get_param: GnocchiPassword}
898           GnocchiBackend: {get_param: GnocchiBackend}
899           GnocchiIndexerBackend: {get_param: GnocchiIndexerBackend}
900           HAProxySyslogAddress: {get_param: HAProxySyslogAddress}
901           HeatAuthEncryptionKey: {get_resource: HeatAuthEncryptionKey}
902           HorizonAllowedHosts: {get_param: HorizonAllowedHosts}
903           HorizonSecret: {get_resource: HorizonSecret}
904           Image: {get_param: controllerImage}
905           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
906           InstanceNameTemplate: {get_param: InstanceNameTemplate}
907           KeyName: {get_param: KeyName}
908           MemcachedIPv6: {get_param: MemcachedIPv6}
909           MysqlClusterUniquePart: {get_attr: [MysqlClusterUniquePart, value]}
910           MysqlInnodbBufferPoolSize: {get_param: MysqlInnodbBufferPoolSize}
911           MysqlMaxConnections: {get_param: MysqlMaxConnections}
912           MysqlRootPassword: {get_attr: [MysqlRootPassword, value]}
913           NeutronPublicInterfaceIP: {get_param: NeutronPublicInterfaceIP}
914           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
915           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
916           NeutronTenantMtu: {get_param: NeutronTenantMtu}
917           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
918           NeutronEnableL2Pop: {get_param: NeutronEnableL2Pop}
919           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
920           NeutronPublicInterface: {get_param: NeutronPublicInterface}
921           NeutronPublicInterfaceDefaultRoute: {get_param: NeutronPublicInterfaceDefaultRoute}
922           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
923           NeutronPassword: {get_param: NeutronPassword}
924           NeutronDVR: {get_param: NeutronDVR}
925           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
926           NeutronAgentMode: {get_param: NeutronAgentMode}
927           NeutronCorePlugin: {get_param: NeutronCorePlugin}
928           NeutronServicePlugins: {get_param: NeutronServicePlugins}
929           NeutronTypeDrivers: {get_param: NeutronTypeDrivers}
930           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
931           NeutronPluginExtensions: {get_param: NeutronPluginExtensions}
932           NeutronAgentExtensions: {get_param: NeutronAgentExtensions}
933           NeutronNetworkType: {get_param: NeutronNetworkType}
934           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
935           NovaIPv6: {get_param: NovaIPv6}
936           NovaPassword: {get_param: NovaPassword}
937           NtpServer: {get_param: NtpServer}
938           MongoDbNoJournal: {get_param: MongoDbNoJournal}
939           MongoDbIPv6: {get_param: MongoDbIPv6}
940           PcsdPassword: {get_resource: PcsdPassword}
941           PublicVirtualInterface: {get_param: PublicVirtualInterface}
942           RabbitPassword: {get_param: RabbitPassword}
943           RabbitUserName: {get_param: RabbitUserName}
944           RabbitCookie: {get_attr: [RabbitCookie, value]}
945           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
946           RabbitClientPort: {get_param: RabbitClientPort}
947           RedisPassword: {get_param: RedisPassword}
948           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
949           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
950           RedisVirtualIP: {get_attr: [RedisVirtualIP, ip_address]}
951           RedisVirtualIPUri: {get_attr: [RedisVirtualIP, ip_address_uri]}
952           SwiftHashSuffix: {get_param: SwiftHashSuffix}
953           SwiftMountCheck: {get_param: SwiftMountCheck}
954           SwiftMinPartHours: {get_param: SwiftMinPartHours}
955           SwiftPartPower: {get_param: SwiftPartPower}
956           SwiftReplicas: { get_param: SwiftReplicas}
957           TimeZone: {get_param: TimeZone}
958           VirtualIP: {get_attr: [VipMap, net_ip_map, ctlplane]} # deprecated. Use per service VIP settings instead now.
959           PublicVirtualIP: {get_attr: [VipMap, net_ip_map, external]}
960           ServiceNetMap: {get_param: ServiceNetMap}
961           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
962           CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
963           AodhApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
964           GnocchiApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
965           CinderApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
966           HeatApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
967           HeatApiVirtualIPUri: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
968           NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
969           SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
970           MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
971           NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
972           NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
973           SaharaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
974           UpdateIdentifier: {get_param: UpdateIdentifier}
975           Hostname:
976             str_replace:
977               template: {get_param: ControllerHostnameFormat}
978               params:
979                 '%stackname%': {get_param: 'OS::stack_name'}
980           NodeIndex: '%index%'
981           ServerMetadata: {get_param: ServerMetadata}
982           SchedulerHints: {get_param: ControllerSchedulerHints}
983           ServiceConfigSettings: {get_attr: [ControllerServiceChain, config_settings]}
984
985   ComputeServiceChain:
986     type: OS::TripleO::Services
987     properties:
988       Services: {get_param: ComputeServices}
989       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
990
991   Compute:
992     type: OS::Heat::ResourceGroup
993     depends_on: Networks
994     properties:
995       count: {get_param: ComputeCount}
996       removal_policies: {get_param: ComputeRemovalPolicies}
997       resource_def:
998         type: OS::TripleO::Compute
999         properties:
1000           AdminPassword: {get_param: AdminPassword}
1001           CeilometerComputeAgent: {get_param: CeilometerComputeAgent}
1002           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
1003           CeilometerPassword: {get_param: CeilometerPassword}
1004           CinderEnableNfsBackend: {get_param: CinderEnableNfsBackend}
1005           CinderEnableRbdBackend: {get_param: CinderEnableRbdBackend}
1006           Debug: {get_param: Debug}
1007           ExtraConfig: {get_param: ExtraConfig}
1008           Flavor: {get_param: OvercloudComputeFlavor}
1009           GlanceHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1010           Image: {get_param: NovaImage}
1011           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
1012           KeyName: {get_param: KeyName}
1013           KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1014           KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1015           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
1016           NeutronTenantMtu: {get_param: NeutronTenantMtu}
1017           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
1018           NeutronEnableL2Pop : {get_param: NeutronEnableL2Pop}
1019           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
1020           NeutronHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1021           NeutronNetworkType: {get_param: NeutronNetworkType}
1022           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
1023           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
1024           NeutronPassword: {get_param: NeutronPassword}
1025           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
1026           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
1027           NeutronDVR: {get_param: NeutronDVR}
1028           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
1029           NeutronAgentMode: {get_param: NeutronComputeAgentMode}
1030           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
1031           NeutronCorePlugin: {get_param: NeutronCorePlugin}
1032           NeutronServicePlugins: {get_param: NeutronServicePlugins}
1033           NeutronTypeDrivers: {get_param: NeutronTypeDrivers}
1034           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
1035           NeutronAgentExtensions: {get_param: NeutronAgentExtensions}
1036           # L3 HA and Failover is not relevant for Computes, should be removed
1037           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
1038           NeutronL3HA: {get_param: NeutronL3HA}
1039           NovaApiHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1040           NovaComputeDriver: {get_param: NovaComputeDriver}
1041           NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
1042           NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
1043           NovaComputeLibvirtVifDriver: {get_param: NovaComputeLibvirtVifDriver}
1044           NovaEnableRbdBackend: {get_param: NovaEnableRbdBackend}
1045           NovaIPv6: {get_param: NovaIPv6}
1046           NovaPublicIP: {get_attr: [VipMap, net_ip_map, external]}
1047           NovaPassword: {get_param: NovaPassword}
1048           NovaOVSBridge: {get_param: NovaOVSBridge}
1049           NovaSecurityGroupAPI: {get_param: NovaSecurityGroupAPI}
1050           NtpServer: {get_param: NtpServer}
1051           RabbitHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1052           RabbitPassword: {get_param: RabbitPassword}
1053           RabbitUserName: {get_param: RabbitUserName}
1054           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
1055           RabbitClientPort: {get_param: RabbitClientPort}
1056           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
1057           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
1058           ServiceNetMap: {get_param: ServiceNetMap}
1059           TimeZone: {get_param: TimeZone}
1060           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1061           UpdateIdentifier: {get_param: UpdateIdentifier}
1062           Hostname:
1063             str_replace:
1064               template: {get_param: ComputeHostnameFormat}
1065               params:
1066                 '%stackname%': {get_param: 'OS::stack_name'}
1067           CloudDomain: {get_param: CloudDomain}
1068           ServerMetadata: {get_param: ServerMetadata}
1069           SchedulerHints: {get_param: NovaComputeSchedulerHints}
1070           NodeIndex: '%index%'
1071           ServiceConfigSettings: {get_attr: [ComputeServiceChain, config_settings]}
1072
1073
1074   BlockStorage:
1075     type: OS::Heat::ResourceGroup
1076     depends_on: Networks
1077     properties:
1078       count: {get_param: BlockStorageCount}
1079       removal_policies: {get_param: BlockStorageRemovalPolicies}
1080       resource_def:
1081         type: OS::TripleO::BlockStorage
1082         properties:
1083           Debug: {get_param: Debug}
1084           Image: {get_param: BlockStorageImage}
1085           CinderISCSIHelper: {get_param: CinderISCSIHelper}
1086           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
1087           # Purpose of the dedicated BlockStorage nodes should be to use their local LVM
1088           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
1089           CinderPassword: {get_param: CinderPassword}
1090           KeyName: {get_param: KeyName}
1091           Flavor: {get_param: OvercloudBlockStorageFlavor}
1092           VirtualIP: {get_attr: [VipMap, net_ip_map, ctlplane]}
1093           GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1094           RabbitPassword: {get_param: RabbitPassword}
1095           RabbitUserName: {get_param: RabbitUserName}
1096           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
1097           RabbitClientPort: {get_param: RabbitClientPort}
1098           TimeZone: {get_param: TimeZone}
1099           NtpServer: {get_param: NtpServer}
1100           UpdateIdentifier: {get_param: UpdateIdentifier}
1101           Hostname:
1102             str_replace:
1103               template: {get_param: BlockStorageHostnameFormat}
1104               params:
1105                 '%stackname%': {get_param: 'OS::stack_name'}
1106           ServiceNetMap: {get_param: ServiceNetMap}
1107           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1108           ExtraConfig: {get_param: ExtraConfig}
1109           BlockStorageExtraConfig: {get_param: BlockStorageExtraConfig}
1110           CloudDomain: {get_param: CloudDomain}
1111           ServerMetadata: {get_param: ServerMetadata}
1112           SchedulerHints: {get_param: BlockStorageSchedulerHints}
1113           NodeIndex: '%index%'
1114
1115   ObjectStorageServiceChain:
1116     type: OS::TripleO::Services
1117     properties:
1118       Services: {get_param: ObjectStorageServices}
1119       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1120
1121   ObjectStorage:
1122     type: OS::Heat::ResourceGroup
1123     depends_on: Networks
1124     properties:
1125       count: {get_param: ObjectStorageCount}
1126       removal_policies: {get_param: ObjectStorageRemovalPolicies}
1127       resource_def:
1128         type: OS::TripleO::ObjectStorage
1129         properties:
1130           KeyName: {get_param: KeyName}
1131           Flavor: {get_param: OvercloudSwiftStorageFlavor}
1132           HashSuffix: {get_param: SwiftHashSuffix}
1133           MountCheck: {get_param: SwiftMountCheck}
1134           MinPartHours: {get_param: SwiftMinPartHours}
1135           PartPower: {get_param: SwiftPartPower}
1136           Image: {get_param: SwiftStorageImage}
1137           Replicas: { get_param: SwiftReplicas}
1138           TimeZone: {get_param: TimeZone}
1139           NtpServer: {get_param: NtpServer}
1140           UpdateIdentifier: {get_param: UpdateIdentifier}
1141           ServiceNetMap: {get_param: ServiceNetMap}
1142           Hostname:
1143             str_replace:
1144               template: {get_param: ObjectStorageHostnameFormat}
1145               params:
1146                 '%stackname%': {get_param: 'OS::stack_name'}
1147           ExtraConfig: {get_param: ExtraConfig}
1148           ObjectStorageExtraConfig: {get_param: ObjectStorageExtraConfig}
1149           CloudDomain: {get_param: CloudDomain}
1150           ServerMetadata: {get_param: ServerMetadata}
1151           SchedulerHints: {get_param: ObjectStorageSchedulerHints}
1152           NodeIndex: '%index%'
1153           ServiceConfigSettings: {get_attr: [ObjectStorageServiceChain, config_settings]}
1154
1155   CephStorageServiceChain:
1156     type: OS::TripleO::Services
1157     properties:
1158       Services: {get_param: CephStorageServices}
1159       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1160
1161   CephStorage:
1162     type: OS::Heat::ResourceGroup
1163     depends_on: Networks
1164     properties:
1165       count: {get_param: CephStorageCount}
1166       removal_policies: {get_param: CephStorageRemovalPolicies}
1167       resource_def:
1168         type: OS::TripleO::CephStorage
1169         properties:
1170           Image: {get_param: CephStorageImage}
1171           KeyName: {get_param: KeyName}
1172           Flavor: {get_param: OvercloudCephStorageFlavor}
1173           NtpServer: {get_param: NtpServer}
1174           ServiceNetMap: {get_param: ServiceNetMap}
1175           TimeZone: {get_param: TimeZone}
1176           UpdateIdentifier: {get_param: UpdateIdentifier}
1177           Hostname:
1178             str_replace:
1179               template: {get_param: CephStorageHostnameFormat}
1180               params:
1181                 '%stackname%': {get_param: 'OS::stack_name'}
1182           ExtraConfig: {get_param: ExtraConfig}
1183           CephStorageExtraConfig: {get_param: CephStorageExtraConfig}
1184           CloudDomain: {get_param: CloudDomain}
1185           ServerMetadata: {get_param: ServerMetadata}
1186           SchedulerHints: {get_param: CephStorageSchedulerHints}
1187           NodeIndex: '%index%'
1188           ServiceConfigSettings: {get_attr: [CephStorageServiceChain, config_settings]}
1189
1190   ControllerIpListMap:
1191     type: OS::TripleO::Network::Ports::NetIpListMap
1192     properties:
1193       ControlPlaneIpList: {get_attr: [Controller, ip_address]}
1194       ExternalIpList: {get_attr: [Controller, external_ip_address]}
1195       InternalApiIpList: {get_attr: [Controller, internal_api_ip_address]}
1196       StorageIpList: {get_attr: [Controller, storage_ip_address]}
1197       StorageMgmtIpList: {get_attr: [Controller, storage_mgmt_ip_address]}
1198       TenantIpList: {get_attr: [Controller, tenant_ip_address]}
1199       ManagementIpList: {get_attr: [Controller, management_ip_address]}
1200
1201   allNodesConfig:
1202     type: OS::TripleO::AllNodes::SoftwareConfig
1203     properties:
1204       compute_hosts: {get_attr: [Compute, hosts_entry]}
1205       controller_hosts: {get_attr: [Controller, hosts_entry]}
1206       controller_ips: {get_attr: [Controller, ip_address]}
1207       block_storage_hosts: {get_attr: [BlockStorage, hosts_entry]}
1208       object_storage_hosts: {get_attr: [ObjectStorage, hosts_entry]}
1209       ceph_storage_hosts: {get_attr: [CephStorage, hosts_entry]}
1210       controller_names: {get_attr: [Controller, hostname]}
1211       rabbit_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1212       mongo_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
1213       redis_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
1214       memcache_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1215       mysql_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1216       horizon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1217       heat_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1218       swift_proxy_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1219       ceilometer_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1220       aodh_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
1221       gnocchi_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
1222       nova_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1223       nova_metadata_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1224       glance_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1225       glance_registry_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1226       cinder_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1227       neutron_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1228       keystone_public_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1229       keystone_admin_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1230       sahara_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1231       DeployIdentifier: {get_param: DeployIdentifier}
1232       UpdateIdentifier: {get_param: UpdateIdentifier}
1233
1234   MysqlRootPassword:
1235     type: OS::Heat::RandomString
1236     properties:
1237       length: 10
1238
1239   MysqlClusterUniquePart:
1240     type: OS::Heat::RandomString
1241     properties:
1242       length: 10
1243
1244   RabbitCookie:
1245     type: OS::Heat::RandomString
1246     properties:
1247       length: 20
1248       salt: {get_param: RabbitCookieSalt}
1249
1250   # creates the network architecture
1251   Networks:
1252     type: OS::TripleO::Network
1253
1254   ControlVirtualIP:
1255     type: OS::Neutron::Port
1256     depends_on: Networks
1257     properties:
1258       name: control_virtual_ip
1259       network: {get_param: NeutronControlPlaneID}
1260       fixed_ips: {get_param: ControlFixedIPs}
1261       replacement_policy: AUTO
1262
1263   RedisVirtualIP:
1264     depends_on: Networks
1265     type: OS::TripleO::Network::Ports::RedisVipPort
1266     properties:
1267       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1268       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
1269       PortName: redis_virtual_ip
1270       NetworkName: {get_param: [ServiceNetMap, RedisNetwork]}
1271       ServiceName: redis
1272
1273   # The public VIP is on the External net, falls back to ctlplane
1274   PublicVirtualIP:
1275     depends_on: Networks
1276     type: OS::TripleO::Network::Ports::ExternalVipPort
1277     properties:
1278       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1279       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
1280       PortName: public_virtual_ip
1281       FixedIPs: {get_param: PublicVirtualFixedIPs}
1282
1283   InternalApiVirtualIP:
1284     depends_on: Networks
1285     type: OS::TripleO::Network::Ports::InternalApiVipPort
1286     properties:
1287       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1288       PortName: internal_api_virtual_ip
1289       FixedIPs: {get_param: InternalApiVirtualFixedIPs}
1290
1291   StorageVirtualIP:
1292     depends_on: Networks
1293     type: OS::TripleO::Network::Ports::StorageVipPort
1294     properties:
1295       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1296       PortName: storage_virtual_ip
1297       FixedIPs: {get_param: StorageVirtualFixedIPs}
1298
1299   StorageMgmtVirtualIP:
1300     depends_on: Networks
1301     type: OS::TripleO::Network::Ports::StorageMgmtVipPort
1302     properties:
1303       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1304       PortName: storage_management_virtual_ip
1305       FixedIPs: {get_param: StorageMgmtVirtualFixedIPs}
1306
1307   VipMap:
1308     type: OS::TripleO::Network::Ports::NetVipMap
1309     properties:
1310       ControlPlaneIp: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1311       ExternalIp: {get_attr: [PublicVirtualIP, ip_address]}
1312       ExternalIpUri: {get_attr: [PublicVirtualIP, ip_address_uri]}
1313       InternalApiIp: {get_attr: [InternalApiVirtualIP, ip_address]}
1314       InternalApiIpUri: {get_attr: [InternalApiVirtualIP, ip_address_uri]}
1315       StorageIp: {get_attr: [StorageVirtualIP, ip_address]}
1316       StorageIpUri: {get_attr: [StorageVirtualIP, ip_address_uri]}
1317       StorageMgmtIp: {get_attr: [StorageMgmtVirtualIP, ip_address]}
1318       StorageMgmtIpUri: {get_attr: [StorageMgmtVirtualIP, ip_address_uri]}
1319       # No tenant or management VIP required
1320
1321   VipConfig:
1322     type: OS::TripleO::VipConfig
1323
1324   VipDeployment:
1325     type: OS::Heat::StructuredDeployments
1326     properties:
1327       name: VipDeployment
1328       config: {get_resource: VipConfig}
1329       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1330       input_values:
1331         # service VIP mappings
1332         keystone_admin_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1333         keystone_public_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1334         neutron_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1335         cinder_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1336         glance_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1337         glance_registry_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1338         swift_proxy_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1339         nova_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1340         nova_metadata_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1341         ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1342         aodh_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
1343         gnocchi_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
1344         heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1345         horizon_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1346         redis_vip: {get_attr: [RedisVirtualIP, ip_address]}
1347         mysql_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1348         rabbit_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1349         # direct configuration of Virtual IPs for each network
1350         control_virtual_ip: {get_attr: [VipMap, net_ip_map, ctlplane]}
1351         public_virtual_ip: {get_attr: [VipMap, net_ip_map, external]}
1352         internal_api_virtual_ip: {get_attr: [VipMap, net_ip_map, internal_api]}
1353         sahara_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1354         storage_virtual_ip: {get_attr: [VipMap, net_ip_map, storage]}
1355         storage_mgmt_virtual_ip: {get_attr: [VipMap, net_ip_map, storage_mgmt]}
1356
1357   ControllerBootstrapNodeConfig:
1358     type: OS::TripleO::BootstrapNode::SoftwareConfig
1359     properties:
1360       bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
1361       bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]}
1362
1363   ControllerBootstrapNodeDeployment:
1364     type: OS::Heat::StructuredDeployments
1365     properties:
1366       name: ControllerBootstrapNodeDeployment
1367       config: {get_attr: [ControllerBootstrapNodeConfig, config_id]}
1368       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1369
1370   ControllerSwiftDeployment:
1371     type: OS::Heat::StructuredDeployments
1372     properties:
1373       name: ControllerSwiftDeployment
1374       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1375       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1376
1377   ObjectStorageSwiftDeployment:
1378     type: OS::Heat::StructuredDeployments
1379     properties:
1380       name: ObjectStorageSwiftDeployment
1381       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1382       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1383
1384   SwiftDevicesAndProxyConfig:
1385     type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig
1386     properties:
1387       controller_swift_devices: {get_attr: [Controller, swift_device]}
1388       object_store_swift_devices: {get_attr: [ObjectStorage, swift_device]}
1389       controller_swift_proxy_memcaches: {get_attr: [Controller, swift_proxy_memcache]}
1390
1391   ComputeCephDeployment:
1392     type: OS::Heat::StructuredDeployments
1393     properties:
1394       name: ComputeCephDeployment
1395       config: {get_attr: [CephClusterConfig, config_id]}
1396       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1397
1398   ControllerCephDeployment:
1399     type: OS::Heat::StructuredDeployments
1400     properties:
1401       name: ControllerCephDeployment
1402       config: {get_attr: [CephClusterConfig, config_id]}
1403       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1404
1405   CephStorageCephDeployment:
1406     type: OS::Heat::StructuredDeployments
1407     properties:
1408       name: CephStorageCephDeployment
1409       config: {get_attr: [CephClusterConfig, config_id]}
1410       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1411
1412   CephClusterConfig:
1413     type: OS::TripleO::CephClusterConfig::SoftwareConfig
1414     properties:
1415       ceph_storage_count: {get_param: CephStorageCount}
1416       ceph_fsid: {get_param: CephClusterFSID}
1417       ceph_mon_key: {get_param: CephMonKey}
1418       ceph_admin_key: {get_param: CephAdminKey}
1419       ceph_client_key: {get_param: CephClientKey}
1420       ceph_external_mon_ips: {get_param: CephExternalMonHost}
1421       ceph_mon_names: {get_attr: [Controller, hostname]}
1422       ceph_mon_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
1423
1424   ControllerAllNodesDeployment:
1425     type: OS::Heat::StructuredDeployments
1426     properties:
1427       name: ControllerAllNodesDeployment
1428       config: {get_attr: [allNodesConfig, config_id]}
1429       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1430
1431   ComputeAllNodesDeployment:
1432     type: OS::Heat::StructuredDeployments
1433     properties:
1434       name: ComputeAllNodesDeployment
1435       config: {get_attr: [allNodesConfig, config_id]}
1436       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1437
1438   BlockStorageAllNodesDeployment:
1439     type: OS::Heat::StructuredDeployments
1440     properties:
1441       name: BlockStorageAllNodesDeployment
1442       config: {get_attr: [allNodesConfig, config_id]}
1443       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1444
1445   ObjectStorageAllNodesDeployment:
1446     type: OS::Heat::StructuredDeployments
1447     properties:
1448       name: ObjectStorageAllNodesDeployment
1449       config: {get_attr: [allNodesConfig, config_id]}
1450       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1451
1452   CephStorageAllNodesDeployment:
1453     type: OS::Heat::StructuredDeployments
1454     properties:
1455       name: CephStorageAllNodesDeployment
1456       config: {get_attr: [allNodesConfig, config_id]}
1457       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1458
1459   # All Nodes Validations
1460   AllNodesValidationConfig:
1461     type: OS::TripleO::AllNodes::Validation
1462     properties:
1463       PingTestIps:
1464         list_join:
1465         - ' '
1466         - - {get_attr: [Controller, resource.0.external_ip_address]}
1467           - {get_attr: [Controller, resource.0.internal_api_ip_address]}
1468           - {get_attr: [Controller, resource.0.storage_ip_address]}
1469           - {get_attr: [Controller, resource.0.storage_mgmt_ip_address]}
1470           - {get_attr: [Controller, resource.0.tenant_ip_address]}
1471
1472   ControllerAllNodesValidationDeployment:
1473     type: OS::Heat::StructuredDeployments
1474     depends_on: ControllerAllNodesDeployment
1475     properties:
1476       name: ControllerAllNodesValidationDeployment
1477       config: {get_resource: AllNodesValidationConfig}
1478       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1479
1480   ComputeAllNodesValidationDeployment:
1481     type: OS::Heat::StructuredDeployments
1482     depends_on: ComputeAllNodesDeployment
1483     properties:
1484       name: ComputeAllNodesValidationDeployment
1485       config: {get_resource: AllNodesValidationConfig}
1486       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1487
1488   BlockStorageAllNodesValidationDeployment:
1489     type: OS::Heat::StructuredDeployments
1490     depends_on: BlockStorageAllNodesDeployment
1491     properties:
1492       name: BlockStorageAllNodesValidationDeployment
1493       config: {get_resource: AllNodesValidationConfig}
1494       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1495
1496   ObjectStorageAllNodesValidationDeployment:
1497     type: OS::Heat::StructuredDeployments
1498     depends_on: ObjectStorageAllNodesDeployment
1499     properties:
1500       name: ObjectStorageAllNodesValidationDeployment
1501       config: {get_resource: AllNodesValidationConfig}
1502       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1503
1504   CephStorageAllNodesValidationDeployment:
1505     type: OS::Heat::StructuredDeployments
1506     depends_on: CephStorageAllNodesDeployment
1507     properties:
1508       name: CephStorageAllNodesValidationDeployment
1509       config: {get_resource: AllNodesValidationConfig}
1510       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1511
1512   UpdateWorkflow:
1513     type: OS::TripleO::Tasks::UpdateWorkflow
1514     properties:
1515       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
1516       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
1517       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1518       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1519       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1520       input_values:
1521         deploy_identifier: {get_param: DeployIdentifier}
1522         update_identifier: {get_param: UpdateIdentifier}
1523
1524   # Optional ExtraConfig for all nodes - all roles are passed in here, but
1525   # the nested template may configure each role differently (or not at all)
1526   AllNodesExtraConfig:
1527     type: OS::TripleO::AllNodesExtraConfig
1528     depends_on:
1529       - UpdateWorkflow
1530       - ComputeAllNodesValidationDeployment
1531       - BlockStorageAllNodesValidationDeployment
1532       - ObjectStorageAllNodesValidationDeployment
1533       - CephStorageAllNodesValidationDeployment
1534       - ControllerAllNodesValidationDeployment
1535     properties:
1536       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
1537       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
1538       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1539       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1540       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1541
1542   # Nested stack deployment runs after all other controller deployments
1543   ControllerNodesPostDeployment:
1544     type: OS::TripleO::ControllerPostDeployment
1545     depends_on: [ControllerBootstrapNodeDeployment, ControllerAllNodesDeployment, ControllerSwiftDeployment, ControllerCephDeployment]
1546     properties:
1547       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1548       NodeConfigIdentifiers:
1549         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1550         controller_config: {get_attr: [Controller, attributes, config_identifier]}
1551         deployment_identifier: {get_param: DeployIdentifier}
1552       StepConfig: {get_attr: [ControllerServiceChain, step_config]}
1553
1554   ComputeNodesPostDeployment:
1555     type: OS::TripleO::ComputePostDeployment
1556     depends_on: [ComputeAllNodesDeployment, ComputeCephDeployment]
1557     properties:
1558       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1559       NodeConfigIdentifiers:
1560         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1561         compute_config: {get_attr: [Compute, attributes, config_identifier]}
1562         deployment_identifier: {get_param: DeployIdentifier}
1563       StepConfig: {get_attr: [ComputeServiceChain, step_config]}
1564
1565   ObjectStorageNodesPostDeployment:
1566     type: OS::TripleO::ObjectStoragePostDeployment
1567     depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
1568     properties:
1569       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1570       NodeConfigIdentifiers:
1571         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1572         objectstorage_config: {get_attr: [ObjectStorage, attributes, config_identifier]}
1573         deployment_identifier: {get_param: DeployIdentifier}
1574       StepConfig: {get_attr: [ObjectStorageServiceChain, step_config]}
1575
1576   BlockStorageNodesPostDeployment:
1577     type: OS::TripleO::BlockStoragePostDeployment
1578     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
1579     properties:
1580       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1581       NodeConfigIdentifiers:
1582         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1583         blockstorage_config: {get_attr: [BlockStorage, attributes, config_identifier]}
1584         deployment_identifier: {get_param: DeployIdentifier}
1585
1586   CephStorageNodesPostDeployment:
1587     type: OS::TripleO::CephStoragePostDeployment
1588     depends_on: [ControllerNodesPostDeployment, CephStorageCephDeployment, CephStorageAllNodesDeployment]
1589     properties:
1590       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1591       NodeConfigIdentifiers:
1592         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1593         cephstorage_config: {get_attr: [CephStorage, attributes, config_identifier]}
1594         deployment_identifier: {get_param: DeployIdentifier}
1595       StepConfig: {get_attr: [CephStorageServiceChain, step_config]}
1596
1597 outputs:
1598   KeystoneURL:
1599     description: URL for the Overcloud Keystone service
1600     value: {get_attr: [EndpointMap, endpoint_map, KeystonePublic, uri]}
1601   KeystoneAdminVip:
1602     description: Keystone Admin VIP endpoint
1603     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1604   PublicVip:
1605     description: Controller VIP for public API endpoints
1606     value: {get_attr: [VipMap, net_ip_map, external]}
1607   AodhInternalVip:
1608     description: VIP for Aodh API internal endpoint
1609     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
1610   CeilometerInternalVip:
1611     description: VIP for Ceilometer API internal endpoint
1612     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1613   CinderInternalVip:
1614     description: VIP for Cinder API internal endpoint
1615     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1616   GlanceInternalVip:
1617     description: VIP for Glance API internal endpoint
1618     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1619   GnocchiInternalVip:
1620     description: VIP for Gnocchi API internal endpoint
1621     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
1622   HeatInternalVip:
1623     description: VIP for Heat API internal endpoint
1624     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1625   KeystoneInternalVip:
1626     description: VIP for Keystone API internal endpoint
1627     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1628   NeutronInternalVip:
1629     description: VIP for Neutron API internal endpoint
1630     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1631   NovaInternalVip:
1632     description: VIP for Nova API internal endpoint
1633     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1634   SaharaInternalVip:
1635     description: VIP for Sahara API internal endpoint
1636     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1637   SwiftInternalVip:
1638     description: VIP for Swift Proxy internal endpoint
1639     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1640   EndpointMap:
1641     description: |
1642       Mapping of the resources with the needed info for their endpoints.
1643       This includes the protocol used, the IP, port and also a full
1644       representation of the URI.
1645     value: {get_attr: [EndpointMap, endpoint_map]}
1646   HostsEntry:
1647     description: |
1648       The content that should be appended to your /etc/hosts if you want to get
1649       hostname-based access to the deployed nodes (useful for testing without
1650       setting up a DNS).
1651     value: {get_attr: [allNodesConfig, hosts_entries]}