Composable Sahara services
[apex-tripleo-heat-templates.git] / overcloud.yaml
1 heat_template_version: 2016-04-08
2
3 description: >
4   Deploy an OpenStack environment, consisting of several node types (roles),
5   Controller, Compute, BlockStorage, SwiftStorage and CephStorage.  The Storage
6   roles enable independent scaling of the storage components, but the minimal
7   deployment is one Controller and one Compute node.
8
9
10 # TODO(shadower): we should probably use the parameter groups to put
11 # some order in here.
12 parameters:
13
14   # Common parameters (not specific to a role)
15   AdminPassword:
16     description: The password for the keystone admin account, used for monitoring, querying neutron etc.
17     type: string
18     hidden: true
19   AodhPassword:
20     description: The password for the aodh services.
21     type: string
22     hidden: true
23   CeilometerBackend:
24     default: 'mongodb'
25     description: The ceilometer backend type.
26     type: string
27   CeilometerMeteringSecret:
28     description: Secret shared by the ceilometer services.
29     type: string
30     hidden: true
31   CeilometerPassword:
32     description: The password for the ceilometer service account.
33     type: string
34     hidden: true
35   CeilometerMeterDispatcher:
36     default: 'database'
37     description: Dispatcher to process meter data
38     type: string
39     constraints:
40     - allowed_values: ['gnocchi', 'database']
41   # This has to be an UUID so for now we generate it outside the template
42   CephClusterFSID:
43     default: ''
44     type: string
45     description: The Ceph cluster FSID. Must be a UUID.
46   CephMonKey:
47     default: ''
48     description: The Ceph monitors key. Can be created with ceph-authtool --gen-print-key.
49     type: string
50     hidden: true
51   CephAdminKey:
52     default: ''
53     description: The Ceph admin client key. Can be created with ceph-authtool --gen-print-key.
54     type: string
55     hidden: true
56   CinderEnableNfsBackend:
57     default: false
58     description: Whether to enable or not the NFS backend for Cinder
59     type: boolean
60   CephClientKey:
61     default: ''
62     description: The Ceph client key. Can be created with ceph-authtool --gen-print-key. Currently only used for external Ceph deployments to create the openstack user keyring.
63     type: string
64     hidden: true
65   CephExternalMonHost:
66     default: ''
67     type: string
68     description: List of externally managed Ceph Mon Host IPs. Only used for external Ceph deployments.
69   CinderEnableIscsiBackend:
70     default: true
71     description: Whether to enable or not the Iscsi backend for Cinder
72     type: boolean
73   CinderEnableRbdBackend:
74     default: false
75     description: Whether to enable or not the Rbd backend for Cinder
76     type: boolean
77   CloudName:
78     default: overcloud
79     description: The DNS name of this cloud. E.g. ci-overcloud.tripleo.org
80     type: string
81   ControlFixedIPs:
82     default: []
83     description: Should be used for arbitrary ips.
84     type: json
85   CorosyncIPv6:
86     default: false
87     description: Enable IPv6 in Corosync
88     type: boolean
89   Debug:
90     default: ''
91     description: Set to True to enable debugging on all services.
92     type: string
93   HAProxySyslogAddress:
94     default: /dev/log
95     description: Syslog address where HAproxy will send its log
96     type: string
97   HorizonAllowedHosts:
98     default: '*'
99     description: A list of IP/Hostname allowed to connect to horizon
100     type: comma_delimited_list
101   ImageUpdatePolicy:
102     default: 'REBUILD_PRESERVE_EPHEMERAL'
103     description: What policy to use when reconstructing instances. REBUILD for rebuilds, REBUILD_PRESERVE_EPHEMERAL to preserve /mnt.
104     type: string
105   InternalApiVirtualFixedIPs:
106     default: []
107     description: >
108         Control the IP allocation for the InternalApiVirtualInterface port. E.g.
109         [{'ip_address':'1.2.3.4'}]
110     type: json
111   KeyName:
112     default: default
113     description: Name of an existing Nova key pair to enable SSH access to the instances
114     type: string
115     constraints:
116       - custom_constraint: nova.keypair
117   MemcachedIPv6:
118     default: false
119     description: Enable IPv6 features in Memcached.
120     type: boolean
121   NeutronBridgeMappings:
122     description: >
123       The OVS logical->physical bridge mappings to use. See the Neutron
124       documentation for details. Defaults to mapping br-ex - the external
125       bridge on hosts - to a physical name 'datacentre' which can be used
126       to create provider networks (and we use this for the default floating
127       network) - if changing this either use different post-install network
128       scripts or be sure to keep 'datacentre' as a mapping network name.
129     type: comma_delimited_list
130     default: "datacentre:br-ex"
131   NeutronControlPlaneID:
132     default: 'ctlplane'
133     type: string
134     description: Neutron ID or name for ctlplane network.
135   NeutronEnableTunnelling:
136     type: string
137     default: "True"
138   NeutronEnableL2Pop:
139     type: string
140     description: >
141         Enable/disable the L2 population feature in the Neutron agents.
142     default: "False"
143   NeutronFlatNetworks:
144     type: comma_delimited_list
145     default: 'datacentre'
146     description: >
147       If set, flat networks to configure in neutron plugins. Defaults to
148       'datacentre' to permit external network creation.
149   NeutronNetworkType:
150     default: 'vxlan'
151     description: The tenant network type for Neutron.
152     type: comma_delimited_list
153   NeutronPassword:
154     description: The password for the neutron service account, used by neutron agents.
155     type: string
156     hidden: true
157   NeutronPublicInterface:
158     default: nic1
159     description: What interface to bridge onto br-ex for network nodes.
160     type: string
161   NeutronPublicInterfaceTag:
162     default: ''
163     description: >
164       VLAN tag for creating a public VLAN. The tag will be used to
165       create an access port on the exterior bridge for each control plane node,
166       and that port will be given the IP address returned by neutron from the
167       public network. Set CONTROLEXTRA=overcloud-vlan-port.yaml when compiling
168       overcloud.yaml to include the deployment of VLAN ports to the control
169       plane.
170     type: string
171   NeutronComputeAgentMode:
172     default: 'dvr'
173     description: Agent mode for the neutron-l3-agent on the compute hosts
174     type: string
175   NeutronAgentMode:
176     default: 'dvr_snat'
177     description: Agent mode for the neutron-l3-agent on the controller hosts
178     type: string
179   NeutronDVR:
180     default: 'False'
181     description: Whether to configure Neutron Distributed Virtual Routers
182     type: string
183   NeutronMetadataProxySharedSecret:
184     description: Shared secret to prevent spoofing
185     type: string
186     hidden: true
187   NeutronTenantMtu:
188     description: >
189       The default MTU for tenant networks. For VXLAN/GRE tunneling, this should
190       be at least 50 bytes smaller than the MTU on the physical network. This
191       value will be used to set the MTU on the virtual Ethernet device.
192       This value will be used to construct the NeutronDnsmasqOptions, since that
193       will determine the MTU that is assigned to the VM host through DHCP.
194     default: "1400"
195     type: string
196   NeutronTunnelTypes:
197     default: 'vxlan'
198     description: |
199         The tunnel types for the Neutron tenant network.
200     type: comma_delimited_list
201   NeutronTunnelIdRanges:
202     description: |
203         Comma-separated list of <tun_min>:<tun_max> tuples enumerating ranges
204         of GRE tunnel IDs that are available for tenant network allocation
205     default: ["1:4094", ]
206     type: comma_delimited_list
207   NeutronVniRanges:
208     description: |
209         Comma-separated list of <vni_min>:<vni_max> tuples enumerating ranges
210         of VXLAN VNI IDs that are available for tenant network allocation
211     default: ["1:4094", ]
212     type: comma_delimited_list
213   NeutronCorePlugin:
214     default: 'ml2'
215     description: |
216         The core plugin for Neutron. The value should be the entrypoint to be loaded
217         from neutron.core_plugins namespace.
218     type: string
219   NeutronServicePlugins:
220     default: "router,qos"
221     description: |
222         Comma-separated list of service plugin entrypoints to be loaded from the
223         neutron.service_plugins namespace.
224     type: comma_delimited_list
225   NeutronTypeDrivers:
226     default: "vxlan,vlan,flat,gre"
227     description: |
228         Comma-separated list of network type driver entrypoints to be loaded.
229     type: comma_delimited_list
230   NeutronMechanismDrivers:
231     default: 'openvswitch'
232     description: |
233         The mechanism drivers for the Neutron tenant network.
234     type: comma_delimited_list
235   NeutronPluginExtensions:
236     default: "qos,port_security"
237     description: |
238         Comma-separated list of extensions enabled for the Neutron plugin.
239     type: comma_delimited_list
240   NeutronAgentExtensions:
241     default: "qos"
242     description: |
243         Comma-separated list of extensions enabled for the Neutron agents.
244     type: comma_delimited_list
245   NeutronAllowL3AgentFailover:
246     default: 'False'
247     description: Allow automatic l3-agent failover
248     type: string
249   NeutronL3HA:
250     default: 'False'
251     description: Whether to enable l3-agent HA
252     type: string
253   NovaIPv6:
254     default: false
255     description: Enable IPv6 features in Nova
256     type: boolean
257   NovaPassword:
258     description: The password for the nova service account, used by nova-api.
259     type: string
260     hidden: true
261   NtpServer:
262     default: ''
263     description: Comma-separated list of ntp servers
264     type: comma_delimited_list
265   MongoDbNoJournal:
266     default: false
267     description: Should MongoDb journaling be disabled
268     type: boolean
269   MongoDbIPv6:
270     default: false
271     description: Enable IPv6 if MongoDB VIP is IPv6
272     type: boolean
273   PublicVirtualFixedIPs:
274     default: []
275     description: >
276         Control the IP allocation for the PublicVirtualInterface port. E.g.
277         [{'ip_address':'1.2.3.4'}]
278     type: json
279   RabbitCookieSalt:
280     type: string
281     default: unset
282     description: Salt for the rabbit cookie, change this to force the randomly generated rabbit cookie to change.
283   RabbitUserName:
284     default: guest
285     description: The username for RabbitMQ
286     type: string
287   RabbitPassword:
288     description: The password for RabbitMQ
289     type: string
290     hidden: true
291   RabbitClientUseSSL:
292     default: false
293     description: >
294         Rabbit client subscriber parameter to specify
295         an SSL connection to the RabbitMQ host.
296     type: string
297   RabbitClientPort:
298     default: 5672
299     description: Set rabbit subscriber port, change this if using SSL
300     type: number
301   RedisPassword:
302     description: The password for Redis
303     type: string
304     hidden: true
305   SnmpdReadonlyUserName:
306     default: ro_snmp_user
307     description: The user name for SNMPd with readonly rights running on all Overcloud nodes
308     type: string
309   SnmpdReadonlyUserPassword:
310     description: The user password for SNMPd with readonly rights running on all Overcloud nodes
311     type: string
312     hidden: true
313   StorageVirtualFixedIPs:
314     default: []
315     description: >
316         Control the IP allocation for the StorageVirtualInterface port. E.g.
317         [{'ip_address':'1.2.3.4'}]
318     type: json
319   StorageMgmtVirtualFixedIPs:
320     default: []
321     description: >
322         Control the IP allocation for the StorageMgmgVirtualInterface port. E.g.
323         [{'ip_address':'1.2.3.4'}]
324     type: json
325   TimeZone:
326     default: 'UTC'
327     description: The timezone to be set on nodes.
328     type: string
329   CloudDomain:
330     default: 'localdomain'
331     type: string
332     description: >
333       The DNS domain used for the hosts. This should match the dhcp_domain
334       configured in the Undercloud neutron. Defaults to localdomain.
335   ServerMetadata:
336     default: {}
337     description: >
338       Extra properties or metadata passed to Nova for the created nodes in
339       the overcloud. It's accessible via the Nova metadata API.
340     type: json
341
342   # Controller-specific params
343   CinderLVMLoopDeviceSize:
344     default: 10280
345     description: The size of the loopback file used by the cinder LVM driver.
346     type: number
347   CinderNfsMountOptions:
348     default: ''
349     description: >
350       Mount options for NFS mounts used by Cinder NFS backend. Effective
351       when CinderEnableNfsBackend is true.
352     type: string
353   CinderNfsServers:
354     default: ''
355     description: >
356       NFS servers used by Cinder NFS backend. Effective when
357       CinderEnableNfsBackend is true.
358     type: comma_delimited_list
359   CinderPassword:
360     description: The password for the cinder service account, used by cinder-api.
361     type: string
362     hidden: true
363   CinderISCSIHelper:
364     default: lioadm
365     description: The iSCSI helper to use with cinder.
366     type: string
367   ControllerCount:
368     type: number
369     default: 1
370     constraints:
371       - range: {min: 1}
372   controllerExtraConfig:
373     default: {}
374     description: |
375       Deprecated. Use ControllerExtraConfig via parameter_defaults instead.
376     type: json
377   controllerImage:
378     type: string
379     default: overcloud-full
380     constraints:
381       - custom_constraint: glance.image
382   OvercloudControlFlavor:
383     description: Flavor for control nodes to request when deploying.
384     default: baremetal
385     type: string
386     constraints:
387       - custom_constraint: nova.flavor
388   ControlVirtualInterface:
389     default: 'br-ex'
390     description: Interface where virtual ip will be assigned.
391     type: string
392   EnableFencing:
393     default: false
394     description: Whether to enable fencing in Pacemaker or not.
395     type: boolean
396   EnableGalera:
397     default: true
398     description: Whether to use Galera instead of regular MariaDB.
399     type: boolean
400   ControllerEnableCephStorage:
401     default: false
402     description: Whether to deploy Ceph Storage (OSD) on the Controller
403     type: boolean
404   ControllerEnableSwiftStorage:
405     default: true
406     description: Whether to enable Swift Storage on the Controller
407     type: boolean
408   ControllerSchedulerHints:
409     type: json
410     description: Optional scheduler hints to pass to nova
411     default: {}
412   ExtraConfig:
413     default: {}
414     description: |
415       Additional configuration to inject into the cluster. The format required
416       may be implementation specific, e.g puppet hieradata.  Any role specific
417       ExtraConfig, e.g controllerExtraConfig takes precedence over ExtraConfig.
418     type: json
419   FencingConfig:
420     default: {}
421     description: |
422       Pacemaker fencing configuration. The JSON should have
423       the following structure:
424         {
425           "devices": [
426             {
427               "agent": "AGENT_NAME",
428               "host_mac": "HOST_MAC_ADDRESS",
429               "params": {"PARAM_NAME": "PARAM_VALUE"}
430             }
431           ]
432         }
433       For instance:
434         {
435           "devices": [
436             {
437               "agent": "fence_xvm",
438               "host_mac": "52:54:00:aa:bb:cc",
439               "params": {
440                 "multicast_address": "225.0.0.12",
441                 "port": "baremetal_0",
442                 "manage_fw": true,
443                 "manage_key_file": true,
444                 "key_file": "/etc/fence_xvm.key",
445                 "key_file_password": "abcdef"
446               }
447             }
448           ]
449         }
450     type: json
451   GnocchiBackend:
452     default: file
453     description: The short name of the Gnocchi backend to use. Should be one
454       of swift, rbd or file
455     type: string
456     constraints:
457     - allowed_values: ['swift', 'file', 'rbd']
458   GnocchiIndexerBackend:
459     default: 'mysql'
460     description: The short name of the Gnocchi indexer backend to use.
461     type: string
462   GnocchiPassword:
463     description: The password for the gnocchi service account.
464     type: string
465     hidden: true
466   InstanceNameTemplate:
467     default: 'instance-%08x'
468     description: Template string to be used to generate instance names
469     type: string
470   ManageFirewall:
471     default: false
472     description: Whether to manage IPtables rules.
473     type: boolean
474   PurgeFirewallRules:
475     default: false
476     description: Whether IPtables rules should be purged before setting up the ones.
477     type: boolean
478   MysqlInnodbBufferPoolSize:
479     description: >
480         Specifies the size of the buffer pool in megabytes. Setting to
481         zero should be interpreted as "no value" and will defer to the
482         lower level default.
483     type: number
484     default: 0
485   MysqlMaxConnections:
486     description: Configures MySQL max_connections config setting
487     type: number
488     default: 4096
489   NeutronPublicInterfaceDefaultRoute:
490     default: ''
491     description: A custom default route for the NeutronPublicInterface.
492     type: string
493   NeutronPublicInterfaceIP:
494     default: ''
495     description: A custom IP address to put onto the NeutronPublicInterface.
496     type: string
497   NeutronPublicInterfaceRawDevice:
498     default: ''
499     description: If set, the public interface is a vlan with this device as the raw device.
500     type: string
501   PublicVirtualInterface:
502     default: 'br-ex'
503     description: >
504         Specifies the interface where the public-facing virtual ip will be assigned.
505         This should be int_public when a VLAN is being used.
506     type: string
507   SwiftHashSuffix:
508     description: A random string to be used as a salt when hashing to determine mappings in the ring.
509     type: string
510     hidden: true
511   SwiftMountCheck:
512     default: 'false'
513     description: Value of mount_check in Swift account/container/object -server.conf
514     type: boolean
515   SwiftMinPartHours:
516     type: number
517     default: 1
518     description: The minimum time (in hours) before a partition in a ring can be moved following a rebalance.
519   SwiftPartPower:
520     default: 10
521     description: Partition Power to use when building Swift rings
522     type: number
523   SwiftReplicas:
524     type: number
525     default: 3
526     description: How many replicas to use in the swift rings.
527
528 # Compute-specific params
529   CeilometerComputeAgent:
530     description: Indicates whether the Compute agent is present and expects nova-compute to be configured accordingly
531     type: string
532     default: ''
533     constraints:
534     - allowed_values: ['', Present]
535   ComputeCount:
536     type: number
537     default: 1
538   HypervisorNeutronPhysicalBridge:
539     default: 'br-ex'
540     description: >
541       An OVS bridge to create on each hypervisor. This defaults to br-ex the
542       same as the control plane nodes, as we have a uniform configuration of
543       the openvswitch agent. Typically should not need to be changed.
544     type: string
545   HypervisorNeutronPublicInterface:
546     default: nic1
547     description: What interface to add to the HypervisorNeutronPhysicalBridge.
548     type: string
549   NeutronNetworkVLANRanges:
550     default: 'datacentre:1:1000'
551     description: >
552       The Neutron ML2 and OpenVSwitch vlan mapping range to support. See the
553       Neutron documentation for permitted values. Defaults to permitting any
554       VLAN on the 'datacentre' physical network (See NeutronBridgeMappings).
555     type: comma_delimited_list
556   NovaComputeDriver:
557     type: string
558     default: libvirt.LibvirtDriver
559   NovaComputeExtraConfig:
560     default: {}
561     description: |
562       NovaCompute specific configuration to inject into the cluster. Same
563       structure as ExtraConfig.
564     type: json
565   NovaComputeLibvirtType:
566     default: kvm
567     type: string
568   NovaComputeLibvirtVifDriver:
569     default: ''
570     description: Libvirt VIF driver configuration for the network
571     type: string
572   NovaComputeSchedulerHints:
573     type: json
574     description: Optional scheduler hints to pass to nova
575     default: {}
576   NovaEnableRbdBackend:
577     default: false
578     description: Whether to enable or not the Rbd backend for Nova
579     type: boolean
580   NovaImage:
581     type: string
582     default: overcloud-full
583     constraints:
584       - custom_constraint: glance.image
585   NovaOVSBridge:
586     default: 'br-int'
587     description: Name of integration bridge used by Open vSwitch
588     type: string
589   NovaSecurityGroupAPI:
590     default: 'neutron'
591     description: The full class name of the security API class
592     type: string
593   OvercloudComputeFlavor:
594     description: Use this flavor
595     default: baremetal
596     type: string
597     constraints:
598       - custom_constraint: nova.flavor
599   ServiceNetMap:
600     default:
601       NeutronTenantNetwork: tenant
602       CeilometerApiNetwork: internal_api
603       AodhApiNetwork: internal_api
604       GnocchiApiNetwork: internal_api
605       MongoDbNetwork: internal_api
606       CinderApiNetwork: internal_api
607       CinderIscsiNetwork: storage
608       GlanceApiNetwork: storage
609       GlanceRegistryNetwork: internal_api
610       KeystoneAdminApiNetwork: ctlplane # allows undercloud to config endpoints
611       KeystonePublicApiNetwork: internal_api
612       NeutronApiNetwork: internal_api
613       HeatApiNetwork: internal_api
614       NovaApiNetwork: internal_api
615       NovaMetadataNetwork: internal_api
616       NovaVncProxyNetwork: internal_api
617       SwiftMgmtNetwork: storage_mgmt
618       SwiftProxyNetwork: storage
619       SaharaApiNetwork: internal_api
620       HorizonNetwork: internal_api
621       MemcachedNetwork: internal_api
622       RabbitMqNetwork: internal_api
623       RedisNetwork: internal_api
624       MysqlNetwork: internal_api
625       CephClusterNetwork: storage_mgmt
626       CephPublicNetwork: storage
627       ControllerHostnameResolveNetwork: internal_api
628       ComputeHostnameResolveNetwork: internal_api
629       BlockStorageHostnameResolveNetwork: internal_api
630       ObjectStorageHostnameResolveNetwork: internal_api
631       CephStorageHostnameResolveNetwork: storage
632     description: Mapping of service_name -> network name. Typically set
633                  via parameter_defaults in the resource registry.
634     type: json
635
636   ControllerServices:
637     default:
638       - OS::TripleO::Services::Keystone
639       - OS::TripleO::Services::GlanceApi
640       - OS::TripleO::Services::GlanceRegistry
641       - OS::TripleO::Services::HeatApi
642       - OS::TripleO::Services::HeatApiCfn
643       - OS::TripleO::Services::HeatApiCloudwatch
644       - OS::TripleO::Services::HeatEngine
645       - OS::TripleO::Services::NeutronDhcpAgent
646       - OS::TripleO::Services::NeutronL3Agent
647       - OS::TripleO::Services::NeutronMetadataAgent
648       - OS::TripleO::Services::RabbitMQ
649       - OS::TripleO::Services::Loadbalancer
650       - OS::TripleO::Services::Memcached
651       - OS::TripleO::Services::SwiftProxy
652     description: A list of service resources (configured in the Heat
653                  resource_registry) which represent nested stacks
654                  for each service that should get installed on the Controllers.
655     type: comma_delimited_list
656
657   ComputeServices:
658     default: []
659     description: A list of service resources (configured in the Heat
660                  resource_registry) which represent nested stacks
661                  for each service that should get installed on the Compute Nodes.
662     type: comma_delimited_list
663
664 # Block storage specific parameters
665   BlockStorageCount:
666     type: number
667     default: 0
668   BlockStorageImage:
669     default: overcloud-full
670     type: string
671   OvercloudBlockStorageFlavor:
672     description: Flavor for block storage nodes to request when deploying.
673     default: baremetal
674     type: string
675     constraints:
676       - custom_constraint: nova.flavor
677   BlockStorageExtraConfig:
678     default: {}
679     description: |
680       BlockStorage specific configuration to inject into the cluster. Same
681       structure as ExtraConfig.
682     type: json
683   BlockStorageSchedulerHints:
684     type: json
685     description: Optional scheduler hints to pass to nova
686     default: {}
687
688
689 # Object storage specific parameters
690   ObjectStorageCount:
691     type: number
692     default: 0
693   OvercloudSwiftStorageFlavor:
694     description: Flavor for Swift storage nodes to request when deploying.
695     default: baremetal
696     type: string
697     constraints:
698       - custom_constraint: nova.flavor
699   SwiftStorageImage:
700     default: overcloud-full
701     type: string
702   ObjectStorageExtraConfig:
703     default: {}
704     description: |
705       ObjectStorage specific configuration to inject into the cluster. Same
706       structure as ExtraConfig.
707     type: json
708   ObjectStorageSchedulerHints:
709     type: json
710     description: Optional scheduler hints to pass to nova
711     default: {}
712
713 # Ceph storage specific parameters
714   CephStorageCount:
715     type: number
716     default: 0
717   CephStorageImage:
718     default: overcloud-full
719     type: string
720   OvercloudCephStorageFlavor:
721     default: baremetal
722     description: Flavor for Ceph storage nodes to request when deploying.
723     type: string
724     constraints:
725       - custom_constraint: nova.flavor
726   CephStorageExtraConfig:
727     default: {}
728     description: |
729       CephStorage specific configuration to inject into the cluster. Same
730       structure as ExtraConfig.
731     type: json
732   CephStorageSchedulerHints:
733     type: json
734     description: Optional scheduler hints to pass to nova
735     default: {}
736   CephStorageServices:
737     default: []
738     description: A list of service resources (configured in the Heat
739                  resource_registry) which represent nested stacks
740                  for each service that should get installed on the CephStorage nodes.
741     type: comma_delimited_list
742
743   # Hostname format for each role
744   # Note %index% is translated into the index of the node, e.g 0/1/2 etc
745   # and %stackname% is replaced with OS::stack_name in the template below.
746   # If you want to use the heat generated names, pass '' (empty string).
747   ControllerHostnameFormat:
748     type: string
749     description: Format for Controller node hostnames
750     default: '%stackname%-controller-%index%'
751   ComputeHostnameFormat:
752     type: string
753     description: Format for Compute node hostnames
754     default: '%stackname%-novacompute-%index%'
755   BlockStorageHostnameFormat:
756     type: string
757     description: Format for BlockStorage node hostnames
758     default: '%stackname%-blockstorage-%index%'
759   ObjectStorageHostnameFormat:
760     type: string
761     description: Format for SwiftStorage node hostnames
762     default: '%stackname%-objectstorage-%index%'
763   CephStorageHostnameFormat:
764     type: string
765     description: Format for CephStorage node hostnames
766     default: '%stackname%-cephstorage-%index%'
767
768   # Identifiers to trigger tasks on nodes
769   UpdateIdentifier:
770     default: ''
771     type: string
772     description: >
773       Setting to a previously unused value during stack-update will trigger
774       package update on all nodes
775   DeployIdentifier:
776     default: ''
777     type: string
778     description: >
779       Setting this to a unique value will re-run any deployment tasks which
780       perform configuration on a Heat stack-update.
781
782   # If you want to remove a specific node from a resource group, you can pass
783   # the node name or id as a <Group>RemovalPolicies parameter, for example:
784   # ComputeRemovalPolicies: [{'resource_list': ['0']}]
785   ControllerRemovalPolicies:
786     default: []
787     type: json
788     description: >
789       List of resources to be removed from ControllerResourceGroup when
790       doing an update which requires removal of specific resources.
791   ComputeRemovalPolicies:
792     default: []
793     type: json
794     description: >
795       List of resources to be removed from ComputeResourceGroup when
796       doing an update which requires removal of specific resources.
797   BlockStorageRemovalPolicies:
798     default: []
799     type: json
800     description: >
801       List of resources to be removed from BlockStorageResourceGroup when
802       doing an update which requires removal of specific resources.
803   ObjectStorageRemovalPolicies:
804     default: []
805     type: json
806     description: >
807       List of resources to be removed from ObjectStorageResourceGroup when
808       doing an update which requires removal of specific resources.
809   CephStorageRemovalPolicies:
810     default: []
811     type: json
812     description: >
813       List of resources to be removed from CephStorageResourceGroup when
814       doing an update which requires removal of specific resources.
815
816 parameter_groups:
817 - label: deprecated
818   description: Do not use deprecated params, they will be removed.
819   parameters:
820   - controllerExtraConfig
821
822
823 resources:
824
825   HeatAuthEncryptionKey:
826     type: OS::Heat::RandomString
827
828   PcsdPassword:
829     type: OS::Heat::RandomString
830     properties:
831       length: 16
832
833   HorizonSecret:
834     type: OS::Heat::RandomString
835     properties:
836       length: 10
837
838   EndpointMap:
839     type: OS::TripleO::EndpointMap
840     properties:
841       CloudName: {get_param: CloudName}
842       CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
843       AodhApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
844       CinderApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
845       GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
846       GlanceRegistryVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
847       GnocchiApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
848       HeatApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
849       KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
850       KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
851       MysqlVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
852       NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
853       NovaApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
854       SaharaApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
855       SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
856       PublicVirtualIP: {get_attr: [VipMap, net_ip_uri_map, external]}
857
858   ControllerServiceChain:
859     type: OS::TripleO::Services
860     depends_on: Networks
861     properties:
862       Services: {get_param: ControllerServices}
863       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
864
865   Controller:
866     type: OS::Heat::ResourceGroup
867     depends_on: Networks
868     properties:
869       count: {get_param: ControllerCount}
870       removal_policies: {get_param: ControllerRemovalPolicies}
871       resource_def:
872         type: OS::TripleO::Controller
873         properties:
874           AdminPassword: {get_param: AdminPassword}
875           AodhPassword: {get_param: AodhPassword}
876           CeilometerBackend: {get_param: CeilometerBackend}
877           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
878           CeilometerPassword: {get_param: CeilometerPassword}
879           CeilometerMeterDispatcher: {get_param: CeilometerMeterDispatcher}
880           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
881           CinderNfsMountOptions: {get_param: CinderNfsMountOptions}
882           CinderNfsServers: {get_param: CinderNfsServers}
883           CinderPassword: {get_param: CinderPassword}
884           CinderISCSIHelper: {get_param: CinderISCSIHelper}
885           CinderEnableNfsBackend: {get_param: CinderEnableNfsBackend}
886           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
887           CinderEnableRbdBackend: {get_param: CinderEnableRbdBackend}
888           CloudDomain: {get_param: CloudDomain}
889           ControlVirtualInterface: {get_param: ControlVirtualInterface}
890           controllerExtraConfig: {get_param: controllerExtraConfig}
891           CorosyncIPv6: {get_param: CorosyncIPv6}
892           Debug: {get_param: Debug}
893           EnableFencing: {get_param: EnableFencing}
894           ManageFirewall: {get_param: ManageFirewall}
895           PurgeFirewallRules: {get_param: PurgeFirewallRules}
896           EnableGalera: {get_param: EnableGalera}
897           EnableCephStorage: {get_param: ControllerEnableCephStorage}
898           EnableSwiftStorage: {get_param: ControllerEnableSwiftStorage}
899           ExtraConfig: {get_param: ExtraConfig}
900           FencingConfig: {get_param: FencingConfig}
901           Flavor: {get_param: OvercloudControlFlavor}
902           GnocchiPassword: {get_param: GnocchiPassword}
903           GnocchiBackend: {get_param: GnocchiBackend}
904           GnocchiIndexerBackend: {get_param: GnocchiIndexerBackend}
905           HAProxySyslogAddress: {get_param: HAProxySyslogAddress}
906           HeatAuthEncryptionKey: {get_resource: HeatAuthEncryptionKey}
907           HorizonAllowedHosts: {get_param: HorizonAllowedHosts}
908           HorizonSecret: {get_resource: HorizonSecret}
909           Image: {get_param: controllerImage}
910           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
911           InstanceNameTemplate: {get_param: InstanceNameTemplate}
912           KeyName: {get_param: KeyName}
913           MemcachedIPv6: {get_param: MemcachedIPv6}
914           MysqlClusterUniquePart: {get_attr: [MysqlClusterUniquePart, value]}
915           MysqlInnodbBufferPoolSize: {get_param: MysqlInnodbBufferPoolSize}
916           MysqlMaxConnections: {get_param: MysqlMaxConnections}
917           MysqlRootPassword: {get_attr: [MysqlRootPassword, value]}
918           NeutronPublicInterfaceIP: {get_param: NeutronPublicInterfaceIP}
919           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
920           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
921           NeutronTenantMtu: {get_param: NeutronTenantMtu}
922           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
923           NeutronEnableL2Pop: {get_param: NeutronEnableL2Pop}
924           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
925           NeutronPublicInterface: {get_param: NeutronPublicInterface}
926           NeutronPublicInterfaceDefaultRoute: {get_param: NeutronPublicInterfaceDefaultRoute}
927           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
928           NeutronPassword: {get_param: NeutronPassword}
929           NeutronDVR: {get_param: NeutronDVR}
930           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
931           NeutronAgentMode: {get_param: NeutronAgentMode}
932           NeutronCorePlugin: {get_param: NeutronCorePlugin}
933           NeutronServicePlugins: {get_param: NeutronServicePlugins}
934           NeutronTypeDrivers: {get_param: NeutronTypeDrivers}
935           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
936           NeutronPluginExtensions: {get_param: NeutronPluginExtensions}
937           NeutronAgentExtensions: {get_param: NeutronAgentExtensions}
938           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
939           NeutronL3HA: {get_param: NeutronL3HA}
940           NeutronNetworkType: {get_param: NeutronNetworkType}
941           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
942           NovaIPv6: {get_param: NovaIPv6}
943           NovaPassword: {get_param: NovaPassword}
944           NtpServer: {get_param: NtpServer}
945           MongoDbNoJournal: {get_param: MongoDbNoJournal}
946           MongoDbIPv6: {get_param: MongoDbIPv6}
947           PcsdPassword: {get_resource: PcsdPassword}
948           PublicVirtualInterface: {get_param: PublicVirtualInterface}
949           RabbitPassword: {get_param: RabbitPassword}
950           RabbitUserName: {get_param: RabbitUserName}
951           RabbitCookie: {get_attr: [RabbitCookie, value]}
952           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
953           RabbitClientPort: {get_param: RabbitClientPort}
954           RedisPassword: {get_param: RedisPassword}
955           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
956           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
957           RedisVirtualIP: {get_attr: [RedisVirtualIP, ip_address]}
958           RedisVirtualIPUri: {get_attr: [RedisVirtualIP, ip_address_uri]}
959           SwiftHashSuffix: {get_param: SwiftHashSuffix}
960           SwiftMountCheck: {get_param: SwiftMountCheck}
961           SwiftMinPartHours: {get_param: SwiftMinPartHours}
962           SwiftPartPower: {get_param: SwiftPartPower}
963           SwiftReplicas: { get_param: SwiftReplicas}
964           TimeZone: {get_param: TimeZone}
965           VirtualIP: {get_attr: [VipMap, net_ip_map, ctlplane]} # deprecated. Use per service VIP settings instead now.
966           PublicVirtualIP: {get_attr: [VipMap, net_ip_map, external]}
967           ServiceNetMap: {get_param: ServiceNetMap}
968           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
969           CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
970           AodhApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
971           GnocchiApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
972           CinderApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
973           HeatApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
974           HeatApiVirtualIPUri: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
975           NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
976           SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
977           MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
978           NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
979           NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
980           SaharaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
981           UpdateIdentifier: {get_param: UpdateIdentifier}
982           Hostname:
983             str_replace:
984               template: {get_param: ControllerHostnameFormat}
985               params:
986                 '%stackname%': {get_param: 'OS::stack_name'}
987           NodeIndex: '%index%'
988           ServerMetadata: {get_param: ServerMetadata}
989           SchedulerHints: {get_param: ControllerSchedulerHints}
990           ServiceConfigSettings: {get_attr: [ControllerServiceChain, config_settings]}
991
992   ComputeServiceChain:
993     type: OS::TripleO::Services
994     properties:
995       Services: {get_param: ComputeServices}
996       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
997
998   Compute:
999     type: OS::Heat::ResourceGroup
1000     depends_on: Networks
1001     properties:
1002       count: {get_param: ComputeCount}
1003       removal_policies: {get_param: ComputeRemovalPolicies}
1004       resource_def:
1005         type: OS::TripleO::Compute
1006         properties:
1007           AdminPassword: {get_param: AdminPassword}
1008           CeilometerComputeAgent: {get_param: CeilometerComputeAgent}
1009           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
1010           CeilometerPassword: {get_param: CeilometerPassword}
1011           CinderEnableNfsBackend: {get_param: CinderEnableNfsBackend}
1012           CinderEnableRbdBackend: {get_param: CinderEnableRbdBackend}
1013           Debug: {get_param: Debug}
1014           ExtraConfig: {get_param: ExtraConfig}
1015           Flavor: {get_param: OvercloudComputeFlavor}
1016           GlanceHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1017           Image: {get_param: NovaImage}
1018           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
1019           KeyName: {get_param: KeyName}
1020           KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1021           KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1022           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
1023           NeutronTenantMtu: {get_param: NeutronTenantMtu}
1024           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
1025           NeutronEnableL2Pop : {get_param: NeutronEnableL2Pop}
1026           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
1027           NeutronHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1028           NeutronNetworkType: {get_param: NeutronNetworkType}
1029           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
1030           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
1031           NeutronPassword: {get_param: NeutronPassword}
1032           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
1033           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
1034           NeutronDVR: {get_param: NeutronDVR}
1035           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
1036           NeutronAgentMode: {get_param: NeutronComputeAgentMode}
1037           NeutronPublicInterfaceRawDevice: {get_param: NeutronPublicInterfaceRawDevice}
1038           NeutronCorePlugin: {get_param: NeutronCorePlugin}
1039           NeutronServicePlugins: {get_param: NeutronServicePlugins}
1040           NeutronTypeDrivers: {get_param: NeutronTypeDrivers}
1041           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
1042           NeutronAgentExtensions: {get_param: NeutronAgentExtensions}
1043           # L3 HA and Failover is not relevant for Computes, should be removed
1044           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
1045           NeutronL3HA: {get_param: NeutronL3HA}
1046           NovaApiHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1047           NovaComputeDriver: {get_param: NovaComputeDriver}
1048           NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
1049           NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
1050           NovaComputeLibvirtVifDriver: {get_param: NovaComputeLibvirtVifDriver}
1051           NovaEnableRbdBackend: {get_param: NovaEnableRbdBackend}
1052           NovaIPv6: {get_param: NovaIPv6}
1053           NovaPublicIP: {get_attr: [VipMap, net_ip_map, external]}
1054           NovaPassword: {get_param: NovaPassword}
1055           NovaOVSBridge: {get_param: NovaOVSBridge}
1056           NovaSecurityGroupAPI: {get_param: NovaSecurityGroupAPI}
1057           NtpServer: {get_param: NtpServer}
1058           RabbitHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1059           RabbitPassword: {get_param: RabbitPassword}
1060           RabbitUserName: {get_param: RabbitUserName}
1061           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
1062           RabbitClientPort: {get_param: RabbitClientPort}
1063           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
1064           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
1065           ServiceNetMap: {get_param: ServiceNetMap}
1066           TimeZone: {get_param: TimeZone}
1067           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1068           UpdateIdentifier: {get_param: UpdateIdentifier}
1069           Hostname:
1070             str_replace:
1071               template: {get_param: ComputeHostnameFormat}
1072               params:
1073                 '%stackname%': {get_param: 'OS::stack_name'}
1074           CloudDomain: {get_param: CloudDomain}
1075           ServerMetadata: {get_param: ServerMetadata}
1076           SchedulerHints: {get_param: NovaComputeSchedulerHints}
1077           NodeIndex: '%index%'
1078           ServiceConfigSettings: {get_attr: [ComputeServiceChain, config_settings]}
1079
1080
1081   BlockStorage:
1082     type: OS::Heat::ResourceGroup
1083     depends_on: Networks
1084     properties:
1085       count: {get_param: BlockStorageCount}
1086       removal_policies: {get_param: BlockStorageRemovalPolicies}
1087       resource_def:
1088         type: OS::TripleO::BlockStorage
1089         properties:
1090           Debug: {get_param: Debug}
1091           Image: {get_param: BlockStorageImage}
1092           CinderISCSIHelper: {get_param: CinderISCSIHelper}
1093           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
1094           # Purpose of the dedicated BlockStorage nodes should be to use their local LVM
1095           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
1096           CinderPassword: {get_param: CinderPassword}
1097           KeyName: {get_param: KeyName}
1098           Flavor: {get_param: OvercloudBlockStorageFlavor}
1099           VirtualIP: {get_attr: [VipMap, net_ip_map, ctlplane]}
1100           GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1101           RabbitPassword: {get_param: RabbitPassword}
1102           RabbitUserName: {get_param: RabbitUserName}
1103           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
1104           RabbitClientPort: {get_param: RabbitClientPort}
1105           TimeZone: {get_param: TimeZone}
1106           NtpServer: {get_param: NtpServer}
1107           UpdateIdentifier: {get_param: UpdateIdentifier}
1108           Hostname:
1109             str_replace:
1110               template: {get_param: BlockStorageHostnameFormat}
1111               params:
1112                 '%stackname%': {get_param: 'OS::stack_name'}
1113           ServiceNetMap: {get_param: ServiceNetMap}
1114           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1115           ExtraConfig: {get_param: ExtraConfig}
1116           BlockStorageExtraConfig: {get_param: BlockStorageExtraConfig}
1117           CloudDomain: {get_param: CloudDomain}
1118           ServerMetadata: {get_param: ServerMetadata}
1119           SchedulerHints: {get_param: BlockStorageSchedulerHints}
1120           NodeIndex: '%index%'
1121
1122   ObjectStorage:
1123     type: OS::Heat::ResourceGroup
1124     depends_on: Networks
1125     properties:
1126       count: {get_param: ObjectStorageCount}
1127       removal_policies: {get_param: ObjectStorageRemovalPolicies}
1128       resource_def:
1129         type: OS::TripleO::ObjectStorage
1130         properties:
1131           KeyName: {get_param: KeyName}
1132           Flavor: {get_param: OvercloudSwiftStorageFlavor}
1133           HashSuffix: {get_param: SwiftHashSuffix}
1134           MountCheck: {get_param: SwiftMountCheck}
1135           MinPartHours: {get_param: SwiftMinPartHours}
1136           PartPower: {get_param: SwiftPartPower}
1137           Image: {get_param: SwiftStorageImage}
1138           Replicas: { get_param: SwiftReplicas}
1139           TimeZone: {get_param: TimeZone}
1140           NtpServer: {get_param: NtpServer}
1141           UpdateIdentifier: {get_param: UpdateIdentifier}
1142           ServiceNetMap: {get_param: ServiceNetMap}
1143           Hostname:
1144             str_replace:
1145               template: {get_param: ObjectStorageHostnameFormat}
1146               params:
1147                 '%stackname%': {get_param: 'OS::stack_name'}
1148           ExtraConfig: {get_param: ExtraConfig}
1149           ObjectStorageExtraConfig: {get_param: ObjectStorageExtraConfig}
1150           CloudDomain: {get_param: CloudDomain}
1151           ServerMetadata: {get_param: ServerMetadata}
1152           SchedulerHints: {get_param: ObjectStorageSchedulerHints}
1153           NodeIndex: '%index%'
1154
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
1575   BlockStorageNodesPostDeployment:
1576     type: OS::TripleO::BlockStoragePostDeployment
1577     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
1578     properties:
1579       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1580       NodeConfigIdentifiers:
1581         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1582         blockstorage_config: {get_attr: [BlockStorage, attributes, config_identifier]}
1583         deployment_identifier: {get_param: DeployIdentifier}
1584
1585   CephStorageNodesPostDeployment:
1586     type: OS::TripleO::CephStoragePostDeployment
1587     depends_on: [ControllerNodesPostDeployment, CephStorageCephDeployment, CephStorageAllNodesDeployment]
1588     properties:
1589       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1590       NodeConfigIdentifiers:
1591         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1592         cephstorage_config: {get_attr: [CephStorage, attributes, config_identifier]}
1593         deployment_identifier: {get_param: DeployIdentifier}
1594       StepConfig: {get_attr: [CephStorageServiceChain, step_config]}
1595
1596 outputs:
1597   KeystoneURL:
1598     description: URL for the Overcloud Keystone service
1599     value: {get_attr: [EndpointMap, endpoint_map, KeystonePublic, uri]}
1600   KeystoneAdminVip:
1601     description: Keystone Admin VIP endpoint
1602     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1603   PublicVip:
1604     description: Controller VIP for public API endpoints
1605     value: {get_attr: [VipMap, net_ip_map, external]}
1606   AodhInternalVip:
1607     description: VIP for Aodh API internal endpoint
1608     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
1609   CeilometerInternalVip:
1610     description: VIP for Ceilometer API internal endpoint
1611     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1612   CinderInternalVip:
1613     description: VIP for Cinder API internal endpoint
1614     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1615   GlanceInternalVip:
1616     description: VIP for Glance API internal endpoint
1617     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1618   GnocchiInternalVip:
1619     description: VIP for Gnocchi API internal endpoint
1620     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
1621   HeatInternalVip:
1622     description: VIP for Heat API internal endpoint
1623     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1624   KeystoneInternalVip:
1625     description: VIP for Keystone API internal endpoint
1626     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1627   NeutronInternalVip:
1628     description: VIP for Neutron API internal endpoint
1629     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1630   NovaInternalVip:
1631     description: VIP for Nova API internal endpoint
1632     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1633   SaharaInternalVip:
1634     description: VIP for Sahara API internal endpoint
1635     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1636   SwiftInternalVip:
1637     description: VIP for Swift Proxy internal endpoint
1638     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1639   EndpointMap:
1640     description: |
1641       Mapping of the resources with the needed info for their endpoints.
1642       This includes the protocol used, the IP, port and also a full
1643       representation of the URI.
1644     value: {get_attr: [EndpointMap, endpoint_map]}
1645   HostsEntry:
1646     description: |
1647       The content that should be appended to your /etc/hosts if you want to get
1648       hostname-based access to the deployed nodes (useful for testing without
1649       setting up a DNS).
1650     value: {get_attr: [allNodesConfig, hosts_entries]}