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