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