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