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