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