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