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