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