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