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