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