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