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