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