Allow the containerized compute node to spawn larger VMs
[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           NovaPublicIP: {get_attr: [VipMap, net_ip_map, external]}
1087           NovaPassword: {get_param: NovaPassword}
1088           NovaOVSBridge: {get_param: NovaOVSBridge}
1089           NovaSecurityGroupAPI: {get_param: NovaSecurityGroupAPI}
1090           NtpServer: {get_param: NtpServer}
1091           RabbitHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1092           RabbitPassword: {get_param: RabbitPassword}
1093           RabbitUserName: {get_param: RabbitUserName}
1094           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
1095           RabbitClientPort: {get_param: RabbitClientPort}
1096           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
1097           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
1098           ServiceNetMap: {get_param: ServiceNetMap}
1099           TimeZone: {get_param: TimeZone}
1100           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1101           UpdateIdentifier: {get_param: UpdateIdentifier}
1102           Hostname:
1103             str_replace:
1104               template: {get_param: ComputeHostnameFormat}
1105               params:
1106                 '%stackname%': {get_param: 'OS::stack_name'}
1107           CloudDomain: {get_param: CloudDomain}
1108           ServerMetadata: {get_param: ServerMetadata}
1109           SchedulerHints: {get_param: NovaComputeSchedulerHints}
1110
1111   BlockStorage:
1112     type: OS::Heat::ResourceGroup
1113     depends_on: Networks
1114     properties:
1115       count: {get_param: BlockStorageCount}
1116       removal_policies: {get_param: BlockStorageRemovalPolicies}
1117       resource_def:
1118         type: OS::TripleO::BlockStorage
1119         properties:
1120           Debug: {get_param: Debug}
1121           Image: {get_param: BlockStorageImage}
1122           CinderISCSIHelper: {get_param: CinderISCSIHelper}
1123           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
1124           # Purpose of the dedicated BlockStorage nodes should be to use their local LVM
1125           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
1126           CinderPassword: {get_param: CinderPassword}
1127           KeyName: {get_param: KeyName}
1128           Flavor: {get_param: OvercloudBlockStorageFlavor}
1129           VirtualIP: {get_attr: [VipMap, net_ip_map, ctlplane]}
1130           GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1131           RabbitPassword: {get_param: RabbitPassword}
1132           RabbitUserName: {get_param: RabbitUserName}
1133           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
1134           RabbitClientPort: {get_param: RabbitClientPort}
1135           TimeZone: {get_param: TimeZone}
1136           NtpServer: {get_param: NtpServer}
1137           UpdateIdentifier: {get_param: UpdateIdentifier}
1138           Hostname:
1139             str_replace:
1140               template: {get_param: BlockStorageHostnameFormat}
1141               params:
1142                 '%stackname%': {get_param: 'OS::stack_name'}
1143           ServiceNetMap: {get_param: ServiceNetMap}
1144           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1145           MysqlVirtualIPUri: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1146           ExtraConfig: {get_param: ExtraConfig}
1147           BlockStorageExtraConfig: {get_param: BlockStorageExtraConfig}
1148           CloudDomain: {get_param: CloudDomain}
1149           ServerMetadata: {get_param: ServerMetadata}
1150           SchedulerHints: {get_param: BlockStorageSchedulerHints}
1151
1152   ObjectStorage:
1153     type: OS::Heat::ResourceGroup
1154     depends_on: Networks
1155     properties:
1156       count: {get_param: ObjectStorageCount}
1157       removal_policies: {get_param: ObjectStorageRemovalPolicies}
1158       resource_def:
1159         type: OS::TripleO::ObjectStorage
1160         properties:
1161           KeyName: {get_param: KeyName}
1162           Flavor: {get_param: OvercloudSwiftStorageFlavor}
1163           HashSuffix: {get_param: SwiftHashSuffix}
1164           MountCheck: {get_param: SwiftMountCheck}
1165           MinPartHours: {get_param: SwiftMinPartHours}
1166           PartPower: {get_param: SwiftPartPower}
1167           Image: {get_param: SwiftStorageImage}
1168           Replicas: { get_param: SwiftReplicas}
1169           TimeZone: {get_param: TimeZone}
1170           NtpServer: {get_param: NtpServer}
1171           UpdateIdentifier: {get_param: UpdateIdentifier}
1172           ServiceNetMap: {get_param: ServiceNetMap}
1173           Hostname:
1174             str_replace:
1175               template: {get_param: ObjectStorageHostnameFormat}
1176               params:
1177                 '%stackname%': {get_param: 'OS::stack_name'}
1178           ExtraConfig: {get_param: ExtraConfig}
1179           ObjectStorageExtraConfig: {get_param: ObjectStorageExtraConfig}
1180           CloudDomain: {get_param: CloudDomain}
1181           ServerMetadata: {get_param: ServerMetadata}
1182           SchedulerHints: {get_param: ObjectStorageSchedulerHints}
1183
1184   CephStorage:
1185     type: OS::Heat::ResourceGroup
1186     depends_on: Networks
1187     properties:
1188       count: {get_param: CephStorageCount}
1189       removal_policies: {get_param: CephStorageRemovalPolicies}
1190       resource_def:
1191         type: OS::TripleO::CephStorage
1192         properties:
1193           Image: {get_param: CephStorageImage}
1194           KeyName: {get_param: KeyName}
1195           Flavor: {get_param: OvercloudCephStorageFlavor}
1196           NtpServer: {get_param: NtpServer}
1197           ServiceNetMap: {get_param: ServiceNetMap}
1198           TimeZone: {get_param: TimeZone}
1199           UpdateIdentifier: {get_param: UpdateIdentifier}
1200           Hostname:
1201             str_replace:
1202               template: {get_param: CephStorageHostnameFormat}
1203               params:
1204                 '%stackname%': {get_param: 'OS::stack_name'}
1205           ExtraConfig: {get_param: ExtraConfig}
1206           CephStorageExtraConfig: {get_param: CephStorageExtraConfig}
1207           CloudDomain: {get_param: CloudDomain}
1208           ServerMetadata: {get_param: ServerMetadata}
1209           SchedulerHints: {get_param: CephStorageSchedulerHints}
1210
1211   ControllerIpListMap:
1212     type: OS::TripleO::Network::Ports::NetIpListMap
1213     properties:
1214       ControlPlaneIpList: {get_attr: [Controller, ip_address]}
1215       ExternalIpList: {get_attr: [Controller, external_ip_address]}
1216       InternalApiIpList: {get_attr: [Controller, internal_api_ip_address]}
1217       StorageIpList: {get_attr: [Controller, storage_ip_address]}
1218       StorageMgmtIpList: {get_attr: [Controller, storage_mgmt_ip_address]}
1219       TenantIpList: {get_attr: [Controller, tenant_ip_address]}
1220       ManagementIpList: {get_attr: [Controller, management_ip_address]}
1221
1222   allNodesConfig:
1223     type: OS::TripleO::AllNodes::SoftwareConfig
1224     properties:
1225       compute_hosts: {get_attr: [Compute, hosts_entry]}
1226       controller_hosts: {get_attr: [Controller, hosts_entry]}
1227       controller_ips: {get_attr: [Controller, ip_address]}
1228       block_storage_hosts: {get_attr: [BlockStorage, hosts_entry]}
1229       object_storage_hosts: {get_attr: [ObjectStorage, hosts_entry]}
1230       ceph_storage_hosts: {get_attr: [CephStorage, hosts_entry]}
1231       controller_names: {get_attr: [Controller, hostname]}
1232       rabbit_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1233       mongo_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
1234       redis_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
1235       memcache_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1236       mysql_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1237       horizon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1238       heat_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1239       swift_proxy_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1240       ceilometer_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1241       nova_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1242       nova_metadata_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1243       glance_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1244       glance_registry_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1245       cinder_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1246       neutron_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1247       keystone_public_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1248       keystone_admin_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1249       sahara_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1250       DeployIdentifier: {get_param: DeployIdentifier}
1251       UpdateIdentifier: {get_param: UpdateIdentifier}
1252
1253   MysqlRootPassword:
1254     type: OS::Heat::RandomString
1255     properties:
1256       length: 10
1257
1258   MysqlClusterUniquePart:
1259     type: OS::Heat::RandomString
1260     properties:
1261       length: 10
1262
1263   RabbitCookie:
1264     type: OS::Heat::RandomString
1265     properties:
1266       length: 20
1267       salt: {get_param: RabbitCookieSalt}
1268
1269   # creates the network architecture
1270   Networks:
1271     type: OS::TripleO::Network
1272
1273   ControlVirtualIP:
1274     type: OS::Neutron::Port
1275     depends_on: Networks
1276     properties:
1277       name: control_virtual_ip
1278       network: {get_param: NeutronControlPlaneID}
1279       fixed_ips: {get_param: ControlFixedIPs}
1280       replacement_policy: AUTO
1281
1282   RedisVirtualIP:
1283     depends_on: Networks
1284     type: OS::TripleO::Network::Ports::RedisVipPort
1285     properties:
1286       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1287       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
1288       PortName: redis_virtual_ip
1289       NetworkName: {get_param: [ServiceNetMap, RedisNetwork]}
1290       ServiceName: redis
1291
1292   # The public VIP is on the External net, falls back to ctlplane
1293   PublicVirtualIP:
1294     depends_on: Networks
1295     type: OS::TripleO::Network::Ports::ExternalVipPort
1296     properties:
1297       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1298       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
1299       PortName: public_virtual_ip
1300       FixedIPs: {get_param: PublicVirtualFixedIPs}
1301
1302   InternalApiVirtualIP:
1303     depends_on: Networks
1304     type: OS::TripleO::Network::Ports::InternalApiVipPort
1305     properties:
1306       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1307       PortName: internal_api_virtual_ip
1308       FixedIPs: {get_param: InternalApiVirtualFixedIPs}
1309
1310   StorageVirtualIP:
1311     depends_on: Networks
1312     type: OS::TripleO::Network::Ports::StorageVipPort
1313     properties:
1314       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1315       PortName: storage_virtual_ip
1316       FixedIPs: {get_param: StorageVirtualFixedIPs}
1317
1318   StorageMgmtVirtualIP:
1319     depends_on: Networks
1320     type: OS::TripleO::Network::Ports::StorageMgmtVipPort
1321     properties:
1322       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1323       PortName: storage_management_virtual_ip
1324       FixedIPs: {get_param: StorageMgmtVirtualFixedIPs}
1325
1326   VipMap:
1327     type: OS::TripleO::Network::Ports::NetVipMap
1328     properties:
1329       ControlPlaneIp: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1330       ExternalIp: {get_attr: [PublicVirtualIP, ip_address]}
1331       ExternalIpUri: {get_attr: [PublicVirtualIP, ip_address_uri]}
1332       InternalApiIp: {get_attr: [InternalApiVirtualIP, ip_address]}
1333       InternalApiIpUri: {get_attr: [InternalApiVirtualIP, ip_address_uri]}
1334       StorageIp: {get_attr: [StorageVirtualIP, ip_address]}
1335       StorageIpUri: {get_attr: [StorageVirtualIP, ip_address_uri]}
1336       StorageMgmtIp: {get_attr: [StorageMgmtVirtualIP, ip_address]}
1337       StorageMgmtIpUri: {get_attr: [StorageMgmtVirtualIP, ip_address_uri]}
1338       # No tenant or management VIP required
1339
1340   VipConfig:
1341     type: OS::TripleO::VipConfig
1342
1343   VipDeployment:
1344     type: OS::Heat::StructuredDeployments
1345     properties:
1346       name: VipDeployment
1347       config: {get_resource: VipConfig}
1348       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1349       input_values:
1350         # service VIP mappings
1351         keystone_admin_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1352         keystone_public_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1353         neutron_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1354         cinder_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1355         glance_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1356         glance_registry_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1357         swift_proxy_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1358         nova_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1359         nova_metadata_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1360         ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1361         heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1362         horizon_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1363         redis_vip: {get_attr: [RedisVirtualIP, ip_address]}
1364         mysql_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1365         rabbit_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1366         # direct configuration of Virtual IPs for each network
1367         control_virtual_ip: {get_attr: [VipMap, net_ip_map, ctlplane]}
1368         public_virtual_ip: {get_attr: [VipMap, net_ip_map, external]}
1369         internal_api_virtual_ip: {get_attr: [VipMap, net_ip_map, internal_api]}
1370         sahara_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1371         storage_virtual_ip: {get_attr: [VipMap, net_ip_map, storage]}
1372         storage_mgmt_virtual_ip: {get_attr: [VipMap, net_ip_map, storage_mgmt]}
1373
1374   ControllerBootstrapNodeConfig:
1375     type: OS::TripleO::BootstrapNode::SoftwareConfig
1376     properties:
1377       bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
1378       bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]}
1379
1380   ControllerBootstrapNodeDeployment:
1381     type: OS::Heat::StructuredDeployments
1382     properties:
1383       name: ControllerBootstrapNodeDeployment
1384       config: {get_attr: [ControllerBootstrapNodeConfig, config_id]}
1385       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1386
1387   ControllerSwiftDeployment:
1388     type: OS::Heat::StructuredDeployments
1389     properties:
1390       name: ControllerSwiftDeployment
1391       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1392       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1393
1394   ObjectStorageSwiftDeployment:
1395     type: OS::Heat::StructuredDeployments
1396     properties:
1397       name: ObjectStorageSwiftDeployment
1398       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1399       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1400
1401   SwiftDevicesAndProxyConfig:
1402     type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig
1403     properties:
1404       controller_swift_devices: {get_attr: [Controller, swift_device]}
1405       object_store_swift_devices: {get_attr: [ObjectStorage, swift_device]}
1406       controller_swift_proxy_memcaches: {get_attr: [Controller, swift_proxy_memcache]}
1407
1408   ComputeCephDeployment:
1409     type: OS::Heat::StructuredDeployments
1410     properties:
1411       name: ComputeCephDeployment
1412       config: {get_attr: [CephClusterConfig, config_id]}
1413       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1414
1415   ControllerCephDeployment:
1416     type: OS::Heat::StructuredDeployments
1417     properties:
1418       name: ControllerCephDeployment
1419       config: {get_attr: [CephClusterConfig, config_id]}
1420       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1421
1422   CephStorageCephDeployment:
1423     type: OS::Heat::StructuredDeployments
1424     properties:
1425       name: CephStorageCephDeployment
1426       config: {get_attr: [CephClusterConfig, config_id]}
1427       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1428
1429   CephClusterConfig:
1430     type: OS::TripleO::CephClusterConfig::SoftwareConfig
1431     properties:
1432       ceph_storage_count: {get_param: CephStorageCount}
1433       ceph_fsid: {get_param: CephClusterFSID}
1434       ceph_mon_key: {get_param: CephMonKey}
1435       ceph_admin_key: {get_param: CephAdminKey}
1436       ceph_client_key: {get_param: CephClientKey}
1437       ceph_external_mon_ips: {get_param: CephExternalMonHost}
1438       ceph_mon_names: {get_attr: [Controller, hostname]}
1439       ceph_mon_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
1440
1441   ControllerClusterConfig:
1442     type: OS::Heat::StructuredConfig
1443     properties:
1444       group: os-apply-config
1445       config:
1446         corosync:
1447           nodes: {get_attr: [Controller, corosync_node]}
1448         horizon:
1449           caches:
1450             memcached:
1451               nodes: {get_attr: [Controller, hostname]}
1452         mysql:
1453           nodes: {get_attr: [Controller, corosync_node]}
1454         haproxy:
1455           nodes: {get_attr: [Controller, corosync_node]}
1456
1457   ControllerClusterDeployment:
1458     type: OS::Heat::StructuredDeployments
1459     properties:
1460       name: ControllerClusterDeployment
1461       config: {get_resource: ControllerClusterConfig}
1462       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1463
1464   ControllerAllNodesDeployment:
1465     type: OS::Heat::StructuredDeployments
1466     properties:
1467       name: ControllerAllNodesDeployment
1468       config: {get_attr: [allNodesConfig, config_id]}
1469       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1470
1471   ComputeAllNodesDeployment:
1472     type: OS::Heat::StructuredDeployments
1473     properties:
1474       name: ComputeAllNodesDeployment
1475       config: {get_attr: [allNodesConfig, config_id]}
1476       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1477
1478   BlockStorageAllNodesDeployment:
1479     type: OS::Heat::StructuredDeployments
1480     properties:
1481       name: BlockStorageAllNodesDeployment
1482       config: {get_attr: [allNodesConfig, config_id]}
1483       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1484
1485   ObjectStorageAllNodesDeployment:
1486     type: OS::Heat::StructuredDeployments
1487     properties:
1488       name: ObjectStorageAllNodesDeployment
1489       config: {get_attr: [allNodesConfig, config_id]}
1490       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1491
1492   CephStorageAllNodesDeployment:
1493     type: OS::Heat::StructuredDeployments
1494     properties:
1495       name: CephStorageAllNodesDeployment
1496       config: {get_attr: [allNodesConfig, config_id]}
1497       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1498
1499   # All Nodes Validations
1500   AllNodesValidationConfig:
1501     type: OS::TripleO::AllNodes::Validation
1502     properties:
1503       PingTestIps:
1504         list_join:
1505         - ' '
1506         - - {get_attr: [Controller, resource.0.external_ip_address]}
1507           - {get_attr: [Controller, resource.0.internal_api_ip_address]}
1508           - {get_attr: [Controller, resource.0.storage_ip_address]}
1509           - {get_attr: [Controller, resource.0.storage_mgmt_ip_address]}
1510           - {get_attr: [Controller, resource.0.tenant_ip_address]}
1511
1512   ControllerAllNodesValidationDeployment:
1513     type: OS::Heat::StructuredDeployments
1514     depends_on: ControllerAllNodesDeployment
1515     properties:
1516       name: ControllerAllNodesValidationDeployment
1517       config: {get_resource: AllNodesValidationConfig}
1518       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1519
1520   ComputeAllNodesValidationDeployment:
1521     type: OS::Heat::StructuredDeployments
1522     depends_on: ComputeAllNodesDeployment
1523     properties:
1524       name: ComputeAllNodesValidationDeployment
1525       config: {get_resource: AllNodesValidationConfig}
1526       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1527
1528   BlockStorageAllNodesValidationDeployment:
1529     type: OS::Heat::StructuredDeployments
1530     depends_on: BlockStorageAllNodesDeployment
1531     properties:
1532       name: BlockStorageAllNodesValidationDeployment
1533       config: {get_resource: AllNodesValidationConfig}
1534       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1535
1536   ObjectStorageAllNodesValidationDeployment:
1537     type: OS::Heat::StructuredDeployments
1538     depends_on: ObjectStorageAllNodesDeployment
1539     properties:
1540       name: ObjectStorageAllNodesValidationDeployment
1541       config: {get_resource: AllNodesValidationConfig}
1542       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1543
1544   CephStorageAllNodesValidationDeployment:
1545     type: OS::Heat::StructuredDeployments
1546     depends_on: CephStorageAllNodesDeployment
1547     properties:
1548       name: CephStorageAllNodesValidationDeployment
1549       config: {get_resource: AllNodesValidationConfig}
1550       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1551
1552   UpdateWorkflow:
1553     type: OS::TripleO::Tasks::UpdateWorkflow
1554     properties:
1555       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
1556       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
1557       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1558       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1559       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1560       input_values:
1561         deploy_identifier: {get_param: DeployIdentifier}
1562         update_identifier: {get_param: UpdateIdentifier}
1563
1564   # Optional ExtraConfig for all nodes - all roles are passed in here, but
1565   # the nested template may configure each role differently (or not at all)
1566   AllNodesExtraConfig:
1567     type: OS::TripleO::AllNodesExtraConfig
1568     depends_on:
1569       - UpdateWorkflow
1570       - ComputeAllNodesValidationDeployment
1571       - BlockStorageAllNodesValidationDeployment
1572       - ObjectStorageAllNodesValidationDeployment
1573       - CephStorageAllNodesValidationDeployment
1574       - ControllerAllNodesValidationDeployment
1575     properties:
1576       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
1577       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
1578       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1579       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1580       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1581
1582   # Nested stack deployment runs after all other controller deployments
1583   ControllerNodesPostDeployment:
1584     type: OS::TripleO::ControllerPostDeployment
1585     depends_on: [ControllerBootstrapNodeDeployment, ControllerAllNodesDeployment, ControllerSwiftDeployment, ControllerCephDeployment]
1586     properties:
1587       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1588       NodeConfigIdentifiers:
1589         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1590         controller_config: {get_attr: [Controller, attributes, config_identifier]}
1591         deployment_identifier: {get_param: DeployIdentifier}
1592
1593   ComputeNodesPostDeployment:
1594     type: OS::TripleO::ComputePostDeployment
1595     depends_on: [ComputeAllNodesDeployment, ComputeCephDeployment]
1596     properties:
1597       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1598       NodeConfigIdentifiers:
1599         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1600         compute_config: {get_attr: [Compute, attributes, config_identifier]}
1601         deployment_identifier: {get_param: DeployIdentifier}
1602
1603   ObjectStorageNodesPostDeployment:
1604     type: OS::TripleO::ObjectStoragePostDeployment
1605     depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
1606     properties:
1607       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1608       NodeConfigIdentifiers:
1609         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1610         objectstorage_config: {get_attr: [ObjectStorage, attributes, config_identifier]}
1611         deployment_identifier: {get_param: DeployIdentifier}
1612
1613   BlockStorageNodesPostDeployment:
1614     type: OS::TripleO::BlockStoragePostDeployment
1615     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
1616     properties:
1617       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1618       NodeConfigIdentifiers:
1619         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1620         blockstorage_config: {get_attr: [BlockStorage, attributes, config_identifier]}
1621         deployment_identifier: {get_param: DeployIdentifier}
1622
1623   CephStorageNodesPostDeployment:
1624     type: OS::TripleO::CephStoragePostDeployment
1625     depends_on: [ControllerNodesPostDeployment, CephStorageCephDeployment, CephStorageAllNodesDeployment]
1626     properties:
1627       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1628       NodeConfigIdentifiers:
1629         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1630         cephstorage_config: {get_attr: [CephStorage, attributes, config_identifier]}
1631         deployment_identifier: {get_param: DeployIdentifier}
1632
1633 outputs:
1634   KeystoneURL:
1635     description: URL for the Overcloud Keystone service
1636     value: {get_attr: [EndpointMap, endpoint_map, KeystonePublic, uri]}
1637   KeystoneAdminVip:
1638     description: Keystone Admin VIP endpoint
1639     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1640   PublicVip:
1641     description: Controller VIP for public API endpoints
1642     value: {get_attr: [VipMap, net_ip_map, external]}
1643   CeilometerInternalVip:
1644     description: VIP for Ceilometer API internal endpoint
1645     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1646   CinderInternalVip:
1647     description: VIP for Cinder API internal endpoint
1648     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1649   GlanceInternalVip:
1650     description: VIP for Glance API internal endpoint
1651     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1652   HeatInternalVip:
1653     description: VIP for Heat API internal endpoint
1654     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1655   KeystoneInternalVip:
1656     description: VIP for Keystone API internal endpoint
1657     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1658   NeutronInternalVip:
1659     description: VIP for Neutron API internal endpoint
1660     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1661   NovaInternalVip:
1662     description: VIP for Nova API internal endpoint
1663     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1664   SaharaInternalVip:
1665     description: VIP for Sahara API internal endpoint
1666     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1667   SwiftInternalVip:
1668     description: VIP for Swift Proxy internal endpoint
1669     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1670   HostsEntry:
1671     description: |
1672       The content that should be appended to your /etc/hosts if you want to get
1673       hostname-based access to the deployed nodes (useful for testing without
1674       setting up a DNS).
1675     value: {get_attr: [allNodesConfig, hosts_entries]}