623562689c58285f2edf11b70a694a5f9a5e0605
[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       IronicApiNetwork: 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     description: A list of service resources (configured in the Heat
595                  resource_registry) which represent nested stacks
596                  for each service that should get installed on the Controllers.
597     type: comma_delimited_list
598
599   ComputeServices:
600     default: []
601     description: A list of service resources (configured in the Heat
602                  resource_registry) which represent nested stacks
603                  for each service that should get installed on the Compute Nodes.
604     type: comma_delimited_list
605
606 # Block storage specific parameters
607   BlockStorageCount:
608     type: number
609     default: 0
610   BlockStorageImage:
611     default: overcloud-full
612     type: string
613   OvercloudBlockStorageFlavor:
614     description: Flavor for block storage nodes to request when deploying.
615     default: baremetal
616     type: string
617     constraints:
618       - custom_constraint: nova.flavor
619   BlockStorageExtraConfig:
620     default: {}
621     description: |
622       BlockStorage specific configuration to inject into the cluster. Same
623       structure as ExtraConfig.
624     type: json
625   BlockStorageSchedulerHints:
626     type: json
627     description: Optional scheduler hints to pass to nova
628     default: {}
629
630
631 # Object storage specific parameters
632   ObjectStorageCount:
633     type: number
634     default: 0
635   OvercloudSwiftStorageFlavor:
636     description: Flavor for Swift storage nodes to request when deploying.
637     default: baremetal
638     type: string
639     constraints:
640       - custom_constraint: nova.flavor
641   SwiftStorageImage:
642     default: overcloud-full
643     type: string
644   ObjectStorageExtraConfig:
645     default: {}
646     description: |
647       ObjectStorage specific configuration to inject into the cluster. Same
648       structure as ExtraConfig.
649     type: json
650   ObjectStorageSchedulerHints:
651     type: json
652     description: Optional scheduler hints to pass to nova
653     default: {}
654   ObjectStorageServices:
655     default: []
656     description: A list of service resources (configured in the Heat
657                  resource_registry) which represent nested stacks
658                  for each service that should get installed on the ObjectStorage nodes.
659                  Note this role currently only supports steps 2, 3 and 4 configuration.
660     type: comma_delimited_list
661
662
663 # Ceph storage specific parameters
664   CephStorageCount:
665     type: number
666     default: 0
667   CephStorageImage:
668     default: overcloud-full
669     type: string
670   OvercloudCephStorageFlavor:
671     default: baremetal
672     description: Flavor for Ceph storage nodes to request when deploying.
673     type: string
674     constraints:
675       - custom_constraint: nova.flavor
676   CephStorageExtraConfig:
677     default: {}
678     description: |
679       CephStorage specific configuration to inject into the cluster. Same
680       structure as ExtraConfig.
681     type: json
682   CephStorageSchedulerHints:
683     type: json
684     description: Optional scheduler hints to pass to nova
685     default: {}
686   CephStorageServices:
687     default: []
688     description: A list of service resources (configured in the Heat
689                  resource_registry) which represent nested stacks
690                  for each service that should get installed on the CephStorage nodes.
691     type: comma_delimited_list
692
693   # Hostname format for each role
694   # Note %index% is translated into the index of the node, e.g 0/1/2 etc
695   # and %stackname% is replaced with OS::stack_name in the template below.
696   # If you want to use the heat generated names, pass '' (empty string).
697   ControllerHostnameFormat:
698     type: string
699     description: Format for Controller node hostnames
700     default: '%stackname%-controller-%index%'
701   ComputeHostnameFormat:
702     type: string
703     description: Format for Compute node hostnames
704     default: '%stackname%-novacompute-%index%'
705   BlockStorageHostnameFormat:
706     type: string
707     description: Format for BlockStorage node hostnames
708     default: '%stackname%-blockstorage-%index%'
709   ObjectStorageHostnameFormat:
710     type: string
711     description: Format for SwiftStorage node hostnames
712     default: '%stackname%-objectstorage-%index%'
713   CephStorageHostnameFormat:
714     type: string
715     description: Format for CephStorage node hostnames
716     default: '%stackname%-cephstorage-%index%'
717
718   # Identifiers to trigger tasks on nodes
719   UpdateIdentifier:
720     default: ''
721     type: string
722     description: >
723       Setting to a previously unused value during stack-update will trigger
724       package update on all nodes
725   DeployIdentifier:
726     default: ''
727     type: string
728     description: >
729       Setting this to a unique value will re-run any deployment tasks which
730       perform configuration on a Heat stack-update.
731
732   # If you want to remove a specific node from a resource group, you can pass
733   # the node name or id as a <Group>RemovalPolicies parameter, for example:
734   # ComputeRemovalPolicies: [{'resource_list': ['0']}]
735   ControllerRemovalPolicies:
736     default: []
737     type: json
738     description: >
739       List of resources to be removed from ControllerResourceGroup when
740       doing an update which requires removal of specific resources.
741   ComputeRemovalPolicies:
742     default: []
743     type: json
744     description: >
745       List of resources to be removed from ComputeResourceGroup when
746       doing an update which requires removal of specific resources.
747   BlockStorageRemovalPolicies:
748     default: []
749     type: json
750     description: >
751       List of resources to be removed from BlockStorageResourceGroup when
752       doing an update which requires removal of specific resources.
753   ObjectStorageRemovalPolicies:
754     default: []
755     type: json
756     description: >
757       List of resources to be removed from ObjectStorageResourceGroup when
758       doing an update which requires removal of specific resources.
759   CephStorageRemovalPolicies:
760     default: []
761     type: json
762     description: >
763       List of resources to be removed from CephStorageResourceGroup when
764       doing an update which requires removal of specific resources.
765
766 parameter_groups:
767 - label: deprecated
768   description: Do not use deprecated params, they will be removed.
769   parameters:
770   - controllerExtraConfig
771
772
773 resources:
774
775   HeatAuthEncryptionKey:
776     type: OS::Heat::RandomString
777
778   PcsdPassword:
779     type: OS::Heat::RandomString
780     properties:
781       length: 16
782
783   HorizonSecret:
784     type: OS::Heat::RandomString
785     properties:
786       length: 10
787
788   EndpointMap:
789     type: OS::TripleO::EndpointMap
790     properties:
791       CloudName: {get_param: CloudName}
792       CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
793       AodhApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
794       CinderApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
795       GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
796       GlanceRegistryVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
797       GnocchiApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
798       HeatApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
799       IronicApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
800       KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
801       KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
802       MysqlVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
803       NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
804       NovaApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
805       SaharaApiVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
806       SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
807       PublicVirtualIP: {get_attr: [VipMap, net_ip_uri_map, external]}
808
809   ControllerServiceChain:
810     type: OS::TripleO::Services
811     depends_on: Networks
812     properties:
813       Services: {get_param: ControllerServices}
814       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
815
816   Controller:
817     type: OS::Heat::ResourceGroup
818     depends_on: Networks
819     properties:
820       count: {get_param: ControllerCount}
821       removal_policies: {get_param: ControllerRemovalPolicies}
822       resource_def:
823         type: OS::TripleO::Controller
824         properties:
825           AdminPassword: {get_param: AdminPassword}
826           AodhPassword: {get_param: AodhPassword}
827           CeilometerBackend: {get_param: CeilometerBackend}
828           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
829           CeilometerPassword: {get_param: CeilometerPassword}
830           CeilometerMeterDispatcher: {get_param: CeilometerMeterDispatcher}
831           CloudDomain: {get_param: CloudDomain}
832           ControlVirtualInterface: {get_param: ControlVirtualInterface}
833           controllerExtraConfig: {get_param: controllerExtraConfig}
834           CorosyncIPv6: {get_param: CorosyncIPv6}
835           Debug: {get_param: Debug}
836           EnableFencing: {get_param: EnableFencing}
837           ManageFirewall: {get_param: ManageFirewall}
838           PurgeFirewallRules: {get_param: PurgeFirewallRules}
839           EnableGalera: {get_param: EnableGalera}
840           EnableCephStorage: {get_param: ControllerEnableCephStorage}
841           EnableSwiftStorage: {get_param: ControllerEnableSwiftStorage}
842           ExtraConfig: {get_param: ExtraConfig}
843           FencingConfig: {get_param: FencingConfig}
844           Flavor: {get_param: OvercloudControlFlavor}
845           GnocchiPassword: {get_param: GnocchiPassword}
846           GnocchiBackend: {get_param: GnocchiBackend}
847           GnocchiIndexerBackend: {get_param: GnocchiIndexerBackend}
848           HAProxySyslogAddress: {get_param: HAProxySyslogAddress}
849           HeatAuthEncryptionKey: {get_resource: HeatAuthEncryptionKey}
850           HorizonAllowedHosts: {get_param: HorizonAllowedHosts}
851           HorizonSecret: {get_resource: HorizonSecret}
852           Image: {get_param: controllerImage}
853           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
854           InstanceNameTemplate: {get_param: InstanceNameTemplate}
855           KeyName: {get_param: KeyName}
856           MemcachedIPv6: {get_param: MemcachedIPv6}
857           MysqlClusterUniquePart: {get_attr: [MysqlClusterUniquePart, value]}
858           MysqlInnodbBufferPoolSize: {get_param: MysqlInnodbBufferPoolSize}
859           MysqlMaxConnections: {get_param: MysqlMaxConnections}
860           MysqlRootPassword: {get_attr: [MysqlRootPassword, value]}
861           NeutronTenantMtu: {get_param: NeutronTenantMtu}
862           NeutronPublicInterface: {get_param: NeutronPublicInterface}
863           NeutronPassword: {get_param: NeutronPassword}
864           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
865           NovaIPv6: {get_param: NovaIPv6}
866           NovaPassword: {get_param: NovaPassword}
867           NtpServer: {get_param: NtpServer}
868           PcsdPassword: {get_resource: PcsdPassword}
869           PublicVirtualInterface: {get_param: PublicVirtualInterface}
870           RabbitPassword: {get_param: RabbitPassword}
871           RabbitUserName: {get_param: RabbitUserName}
872           RabbitCookie: {get_attr: [RabbitCookie, value]}
873           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
874           RabbitClientPort: {get_param: RabbitClientPort}
875           RedisPassword: {get_param: RedisPassword}
876           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
877           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
878           RedisVirtualIP: {get_attr: [RedisVirtualIP, ip_address]}
879           RedisVirtualIPUri: {get_attr: [RedisVirtualIP, ip_address_uri]}
880           SwiftHashSuffix: {get_param: SwiftHashSuffix}
881           SwiftMountCheck: {get_param: SwiftMountCheck}
882           SwiftMinPartHours: {get_param: SwiftMinPartHours}
883           SwiftPartPower: {get_param: SwiftPartPower}
884           SwiftReplicas: { get_param: SwiftReplicas}
885           TimeZone: {get_param: TimeZone}
886           VirtualIP: {get_attr: [VipMap, net_ip_map, ctlplane]} # deprecated. Use per service VIP settings instead now.
887           PublicVirtualIP: {get_attr: [VipMap, net_ip_map, external]}
888           ServiceNetMap: {get_param: ServiceNetMap}
889           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
890           CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
891           AodhApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
892           GnocchiApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
893           CinderApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
894           HeatApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
895           HeatApiVirtualIPUri: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
896           NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
897           SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
898           MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
899           NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
900           NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
901           SaharaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
902           UpdateIdentifier: {get_param: UpdateIdentifier}
903           Hostname:
904             str_replace:
905               template: {get_param: ControllerHostnameFormat}
906               params:
907                 '%stackname%': {get_param: 'OS::stack_name'}
908           NodeIndex: '%index%'
909           ServerMetadata: {get_param: ServerMetadata}
910           SchedulerHints: {get_param: ControllerSchedulerHints}
911           ServiceConfigSettings: {get_attr: [ControllerServiceChain, config_settings]}
912
913   ComputeServiceChain:
914     type: OS::TripleO::Services
915     properties:
916       Services: {get_param: ComputeServices}
917       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
918
919   Compute:
920     type: OS::Heat::ResourceGroup
921     depends_on: Networks
922     properties:
923       count: {get_param: ComputeCount}
924       removal_policies: {get_param: ComputeRemovalPolicies}
925       resource_def:
926         type: OS::TripleO::Compute
927         properties:
928           AdminPassword: {get_param: AdminPassword}
929           CeilometerComputeAgent: {get_param: CeilometerComputeAgent}
930           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
931           CeilometerPassword: {get_param: CeilometerPassword}
932           CinderEnableNfsBackend: {get_param: CinderEnableNfsBackend}
933           CinderEnableRbdBackend: {get_param: CinderEnableRbdBackend}
934           Debug: {get_param: Debug}
935           ExtraConfig: {get_param: ExtraConfig}
936           Flavor: {get_param: OvercloudComputeFlavor}
937           GlanceHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
938           Image: {get_param: NovaImage}
939           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
940           KeyName: {get_param: KeyName}
941           KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
942           KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
943           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
944           NeutronTenantMtu: {get_param: NeutronTenantMtu}
945           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
946           NeutronEnableL2Pop : {get_param: NeutronEnableL2Pop}
947           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
948           NeutronHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
949           NeutronNetworkType: {get_param: NeutronNetworkType}
950           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
951           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
952           NeutronPassword: {get_param: NeutronPassword}
953           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
954           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
955           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
956           NeutronCorePlugin: {get_param: NeutronCorePlugin}
957           NeutronServicePlugins: {get_param: NeutronServicePlugins}
958           NeutronTypeDrivers: {get_param: NeutronTypeDrivers}
959           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
960           NeutronAgentExtensions: {get_param: NeutronAgentExtensions}
961           # L3 HA and Failover is not relevant for Computes, should be removed
962           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
963           NeutronL3HA: {get_param: NeutronL3HA}
964           NovaApiHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
965           NovaComputeDriver: {get_param: NovaComputeDriver}
966           NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
967           NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
968           NovaComputeLibvirtVifDriver: {get_param: NovaComputeLibvirtVifDriver}
969           NovaEnableRbdBackend: {get_param: NovaEnableRbdBackend}
970           NovaIPv6: {get_param: NovaIPv6}
971           NovaPublicIP: {get_attr: [VipMap, net_ip_map, external]}
972           NovaPassword: {get_param: NovaPassword}
973           NovaOVSBridge: {get_param: NovaOVSBridge}
974           NovaSecurityGroupAPI: {get_param: NovaSecurityGroupAPI}
975           NtpServer: {get_param: NtpServer}
976           RabbitHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
977           RabbitPassword: {get_param: RabbitPassword}
978           RabbitUserName: {get_param: RabbitUserName}
979           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
980           RabbitClientPort: {get_param: RabbitClientPort}
981           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
982           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
983           ServiceNetMap: {get_param: ServiceNetMap}
984           TimeZone: {get_param: TimeZone}
985           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
986           UpdateIdentifier: {get_param: UpdateIdentifier}
987           Hostname:
988             str_replace:
989               template: {get_param: ComputeHostnameFormat}
990               params:
991                 '%stackname%': {get_param: 'OS::stack_name'}
992           CloudDomain: {get_param: CloudDomain}
993           ServerMetadata: {get_param: ServerMetadata}
994           SchedulerHints: {get_param: NovaComputeSchedulerHints}
995           NodeIndex: '%index%'
996           ServiceConfigSettings: {get_attr: [ComputeServiceChain, config_settings]}
997
998
999   BlockStorage:
1000     type: OS::Heat::ResourceGroup
1001     depends_on: Networks
1002     properties:
1003       count: {get_param: BlockStorageCount}
1004       removal_policies: {get_param: BlockStorageRemovalPolicies}
1005       resource_def:
1006         type: OS::TripleO::BlockStorage
1007         properties:
1008           Debug: {get_param: Debug}
1009           Image: {get_param: BlockStorageImage}
1010           CinderISCSIHelper: {get_param: CinderISCSIHelper}
1011           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
1012           # Purpose of the dedicated BlockStorage nodes should be to use their local LVM
1013           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
1014           CinderPassword: {get_param: CinderPassword}
1015           KeyName: {get_param: KeyName}
1016           Flavor: {get_param: OvercloudBlockStorageFlavor}
1017           VirtualIP: {get_attr: [VipMap, net_ip_map, ctlplane]}
1018           GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1019           RabbitPassword: {get_param: RabbitPassword}
1020           RabbitUserName: {get_param: RabbitUserName}
1021           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
1022           RabbitClientPort: {get_param: RabbitClientPort}
1023           TimeZone: {get_param: TimeZone}
1024           NtpServer: {get_param: NtpServer}
1025           UpdateIdentifier: {get_param: UpdateIdentifier}
1026           Hostname:
1027             str_replace:
1028               template: {get_param: BlockStorageHostnameFormat}
1029               params:
1030                 '%stackname%': {get_param: 'OS::stack_name'}
1031           ServiceNetMap: {get_param: ServiceNetMap}
1032           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1033           ExtraConfig: {get_param: ExtraConfig}
1034           BlockStorageExtraConfig: {get_param: BlockStorageExtraConfig}
1035           CloudDomain: {get_param: CloudDomain}
1036           ServerMetadata: {get_param: ServerMetadata}
1037           SchedulerHints: {get_param: BlockStorageSchedulerHints}
1038           NodeIndex: '%index%'
1039
1040   ObjectStorageServiceChain:
1041     type: OS::TripleO::Services
1042     properties:
1043       Services: {get_param: ObjectStorageServices}
1044       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1045
1046   ObjectStorage:
1047     type: OS::Heat::ResourceGroup
1048     depends_on: Networks
1049     properties:
1050       count: {get_param: ObjectStorageCount}
1051       removal_policies: {get_param: ObjectStorageRemovalPolicies}
1052       resource_def:
1053         type: OS::TripleO::ObjectStorage
1054         properties:
1055           KeyName: {get_param: KeyName}
1056           Flavor: {get_param: OvercloudSwiftStorageFlavor}
1057           HashSuffix: {get_param: SwiftHashSuffix}
1058           MountCheck: {get_param: SwiftMountCheck}
1059           MinPartHours: {get_param: SwiftMinPartHours}
1060           PartPower: {get_param: SwiftPartPower}
1061           Image: {get_param: SwiftStorageImage}
1062           Replicas: { get_param: SwiftReplicas}
1063           TimeZone: {get_param: TimeZone}
1064           NtpServer: {get_param: NtpServer}
1065           UpdateIdentifier: {get_param: UpdateIdentifier}
1066           ServiceNetMap: {get_param: ServiceNetMap}
1067           Hostname:
1068             str_replace:
1069               template: {get_param: ObjectStorageHostnameFormat}
1070               params:
1071                 '%stackname%': {get_param: 'OS::stack_name'}
1072           ExtraConfig: {get_param: ExtraConfig}
1073           ObjectStorageExtraConfig: {get_param: ObjectStorageExtraConfig}
1074           CloudDomain: {get_param: CloudDomain}
1075           ServerMetadata: {get_param: ServerMetadata}
1076           SchedulerHints: {get_param: ObjectStorageSchedulerHints}
1077           NodeIndex: '%index%'
1078           ServiceConfigSettings: {get_attr: [ObjectStorageServiceChain, config_settings]}
1079
1080   CephStorageServiceChain:
1081     type: OS::TripleO::Services
1082     properties:
1083       Services: {get_param: CephStorageServices}
1084       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1085
1086   CephStorage:
1087     type: OS::Heat::ResourceGroup
1088     depends_on: Networks
1089     properties:
1090       count: {get_param: CephStorageCount}
1091       removal_policies: {get_param: CephStorageRemovalPolicies}
1092       resource_def:
1093         type: OS::TripleO::CephStorage
1094         properties:
1095           Image: {get_param: CephStorageImage}
1096           KeyName: {get_param: KeyName}
1097           Flavor: {get_param: OvercloudCephStorageFlavor}
1098           NtpServer: {get_param: NtpServer}
1099           ServiceNetMap: {get_param: ServiceNetMap}
1100           TimeZone: {get_param: TimeZone}
1101           UpdateIdentifier: {get_param: UpdateIdentifier}
1102           Hostname:
1103             str_replace:
1104               template: {get_param: CephStorageHostnameFormat}
1105               params:
1106                 '%stackname%': {get_param: 'OS::stack_name'}
1107           ExtraConfig: {get_param: ExtraConfig}
1108           CephStorageExtraConfig: {get_param: CephStorageExtraConfig}
1109           CloudDomain: {get_param: CloudDomain}
1110           ServerMetadata: {get_param: ServerMetadata}
1111           SchedulerHints: {get_param: CephStorageSchedulerHints}
1112           NodeIndex: '%index%'
1113           ServiceConfigSettings: {get_attr: [CephStorageServiceChain, config_settings]}
1114
1115   ControllerIpListMap:
1116     type: OS::TripleO::Network::Ports::NetIpListMap
1117     properties:
1118       ControlPlaneIpList: {get_attr: [Controller, ip_address]}
1119       ExternalIpList: {get_attr: [Controller, external_ip_address]}
1120       InternalApiIpList: {get_attr: [Controller, internal_api_ip_address]}
1121       StorageIpList: {get_attr: [Controller, storage_ip_address]}
1122       StorageMgmtIpList: {get_attr: [Controller, storage_mgmt_ip_address]}
1123       TenantIpList: {get_attr: [Controller, tenant_ip_address]}
1124       ManagementIpList: {get_attr: [Controller, management_ip_address]}
1125
1126   allNodesConfig:
1127     type: OS::TripleO::AllNodes::SoftwareConfig
1128     properties:
1129       compute_hosts: {get_attr: [Compute, hosts_entry]}
1130       controller_hosts: {get_attr: [Controller, hosts_entry]}
1131       controller_ips: {get_attr: [Controller, ip_address]}
1132       block_storage_hosts: {get_attr: [BlockStorage, hosts_entry]}
1133       object_storage_hosts: {get_attr: [ObjectStorage, hosts_entry]}
1134       ceph_storage_hosts: {get_attr: [CephStorage, hosts_entry]}
1135       controller_names: {get_attr: [Controller, hostname]}
1136       rabbit_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1137       mongo_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
1138       redis_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
1139       memcache_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1140       mysql_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1141       horizon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1142       heat_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1143       swift_proxy_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1144       ceilometer_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1145       aodh_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
1146       gnocchi_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
1147       nova_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1148       nova_metadata_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1149       glance_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1150       glance_registry_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1151       cinder_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1152       neutron_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1153       keystone_public_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1154       keystone_admin_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1155       sahara_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1156       ironic_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
1157       DeployIdentifier: {get_param: DeployIdentifier}
1158       UpdateIdentifier: {get_param: UpdateIdentifier}
1159
1160   MysqlRootPassword:
1161     type: OS::Heat::RandomString
1162     properties:
1163       length: 10
1164
1165   MysqlClusterUniquePart:
1166     type: OS::Heat::RandomString
1167     properties:
1168       length: 10
1169
1170   RabbitCookie:
1171     type: OS::Heat::RandomString
1172     properties:
1173       length: 20
1174       salt: {get_param: RabbitCookieSalt}
1175
1176   # creates the network architecture
1177   Networks:
1178     type: OS::TripleO::Network
1179
1180   ControlVirtualIP:
1181     type: OS::Neutron::Port
1182     depends_on: Networks
1183     properties:
1184       name: control_virtual_ip
1185       network: {get_param: NeutronControlPlaneID}
1186       fixed_ips: {get_param: ControlFixedIPs}
1187       replacement_policy: AUTO
1188
1189   RedisVirtualIP:
1190     depends_on: Networks
1191     type: OS::TripleO::Network::Ports::RedisVipPort
1192     properties:
1193       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1194       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
1195       PortName: redis_virtual_ip
1196       NetworkName: {get_param: [ServiceNetMap, RedisNetwork]}
1197       ServiceName: redis
1198
1199   # The public VIP is on the External net, falls back to ctlplane
1200   PublicVirtualIP:
1201     depends_on: Networks
1202     type: OS::TripleO::Network::Ports::ExternalVipPort
1203     properties:
1204       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1205       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
1206       PortName: public_virtual_ip
1207       FixedIPs: {get_param: PublicVirtualFixedIPs}
1208
1209   InternalApiVirtualIP:
1210     depends_on: Networks
1211     type: OS::TripleO::Network::Ports::InternalApiVipPort
1212     properties:
1213       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1214       PortName: internal_api_virtual_ip
1215       FixedIPs: {get_param: InternalApiVirtualFixedIPs}
1216
1217   StorageVirtualIP:
1218     depends_on: Networks
1219     type: OS::TripleO::Network::Ports::StorageVipPort
1220     properties:
1221       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1222       PortName: storage_virtual_ip
1223       FixedIPs: {get_param: StorageVirtualFixedIPs}
1224
1225   StorageMgmtVirtualIP:
1226     depends_on: Networks
1227     type: OS::TripleO::Network::Ports::StorageMgmtVipPort
1228     properties:
1229       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1230       PortName: storage_management_virtual_ip
1231       FixedIPs: {get_param: StorageMgmtVirtualFixedIPs}
1232
1233   VipMap:
1234     type: OS::TripleO::Network::Ports::NetVipMap
1235     properties:
1236       ControlPlaneIp: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1237       ExternalIp: {get_attr: [PublicVirtualIP, ip_address]}
1238       ExternalIpUri: {get_attr: [PublicVirtualIP, ip_address_uri]}
1239       InternalApiIp: {get_attr: [InternalApiVirtualIP, ip_address]}
1240       InternalApiIpUri: {get_attr: [InternalApiVirtualIP, ip_address_uri]}
1241       StorageIp: {get_attr: [StorageVirtualIP, ip_address]}
1242       StorageIpUri: {get_attr: [StorageVirtualIP, ip_address_uri]}
1243       StorageMgmtIp: {get_attr: [StorageMgmtVirtualIP, ip_address]}
1244       StorageMgmtIpUri: {get_attr: [StorageMgmtVirtualIP, ip_address_uri]}
1245       # No tenant or management VIP required
1246
1247   VipConfig:
1248     type: OS::TripleO::VipConfig
1249
1250   VipDeployment:
1251     type: OS::Heat::StructuredDeployments
1252     properties:
1253       name: VipDeployment
1254       config: {get_resource: VipConfig}
1255       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1256       input_values:
1257         # service VIP mappings
1258         keystone_admin_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1259         keystone_public_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1260         neutron_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1261         cinder_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1262         glance_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1263         glance_registry_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1264         swift_proxy_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1265         nova_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1266         nova_metadata_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1267         ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1268         aodh_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
1269         gnocchi_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
1270         heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1271         horizon_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1272         redis_vip: {get_attr: [RedisVirtualIP, ip_address]}
1273         mysql_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1274         rabbit_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1275         # direct configuration of Virtual IPs for each network
1276         control_virtual_ip: {get_attr: [VipMap, net_ip_map, ctlplane]}
1277         public_virtual_ip: {get_attr: [VipMap, net_ip_map, external]}
1278         internal_api_virtual_ip: {get_attr: [VipMap, net_ip_map, internal_api]}
1279         sahara_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1280         ironic_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
1281         storage_virtual_ip: {get_attr: [VipMap, net_ip_map, storage]}
1282         storage_mgmt_virtual_ip: {get_attr: [VipMap, net_ip_map, storage_mgmt]}
1283
1284   ControllerBootstrapNodeConfig:
1285     type: OS::TripleO::BootstrapNode::SoftwareConfig
1286     properties:
1287       bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
1288       bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]}
1289
1290   ControllerBootstrapNodeDeployment:
1291     type: OS::Heat::StructuredDeployments
1292     properties:
1293       name: ControllerBootstrapNodeDeployment
1294       config: {get_attr: [ControllerBootstrapNodeConfig, config_id]}
1295       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1296
1297   ControllerSwiftDeployment:
1298     type: OS::Heat::StructuredDeployments
1299     properties:
1300       name: ControllerSwiftDeployment
1301       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1302       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1303
1304   ObjectStorageSwiftDeployment:
1305     type: OS::Heat::StructuredDeployments
1306     properties:
1307       name: ObjectStorageSwiftDeployment
1308       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1309       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1310
1311   SwiftDevicesAndProxyConfig:
1312     type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig
1313     properties:
1314       controller_swift_devices: {get_attr: [Controller, swift_device]}
1315       object_store_swift_devices: {get_attr: [ObjectStorage, swift_device]}
1316       controller_swift_proxy_memcaches: {get_attr: [Controller, swift_proxy_memcache]}
1317
1318   ComputeCephDeployment:
1319     type: OS::Heat::StructuredDeployments
1320     properties:
1321       name: ComputeCephDeployment
1322       config: {get_attr: [CephClusterConfig, config_id]}
1323       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1324
1325   ControllerCephDeployment:
1326     type: OS::Heat::StructuredDeployments
1327     properties:
1328       name: ControllerCephDeployment
1329       config: {get_attr: [CephClusterConfig, config_id]}
1330       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1331
1332   CephStorageCephDeployment:
1333     type: OS::Heat::StructuredDeployments
1334     properties:
1335       name: CephStorageCephDeployment
1336       config: {get_attr: [CephClusterConfig, config_id]}
1337       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1338
1339   CephClusterConfig:
1340     type: OS::TripleO::CephClusterConfig::SoftwareConfig
1341     properties:
1342       ceph_storage_count: {get_param: CephStorageCount}
1343       ceph_fsid: {get_param: CephClusterFSID}
1344       ceph_mon_key: {get_param: CephMonKey}
1345       ceph_admin_key: {get_param: CephAdminKey}
1346       ceph_client_key: {get_param: CephClientKey}
1347       ceph_external_mon_ips: {get_param: CephExternalMonHost}
1348       ceph_mon_names: {get_attr: [Controller, hostname]}
1349       ceph_mon_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
1350
1351   ControllerAllNodesDeployment:
1352     type: OS::Heat::StructuredDeployments
1353     properties:
1354       name: ControllerAllNodesDeployment
1355       config: {get_attr: [allNodesConfig, config_id]}
1356       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1357
1358   ComputeAllNodesDeployment:
1359     type: OS::Heat::StructuredDeployments
1360     properties:
1361       name: ComputeAllNodesDeployment
1362       config: {get_attr: [allNodesConfig, config_id]}
1363       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1364
1365   BlockStorageAllNodesDeployment:
1366     type: OS::Heat::StructuredDeployments
1367     properties:
1368       name: BlockStorageAllNodesDeployment
1369       config: {get_attr: [allNodesConfig, config_id]}
1370       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1371
1372   ObjectStorageAllNodesDeployment:
1373     type: OS::Heat::StructuredDeployments
1374     properties:
1375       name: ObjectStorageAllNodesDeployment
1376       config: {get_attr: [allNodesConfig, config_id]}
1377       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1378
1379   CephStorageAllNodesDeployment:
1380     type: OS::Heat::StructuredDeployments
1381     properties:
1382       name: CephStorageAllNodesDeployment
1383       config: {get_attr: [allNodesConfig, config_id]}
1384       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1385
1386   # All Nodes Validations
1387   AllNodesValidationConfig:
1388     type: OS::TripleO::AllNodes::Validation
1389     properties:
1390       PingTestIps:
1391         list_join:
1392         - ' '
1393         - - {get_attr: [Controller, resource.0.external_ip_address]}
1394           - {get_attr: [Controller, resource.0.internal_api_ip_address]}
1395           - {get_attr: [Controller, resource.0.storage_ip_address]}
1396           - {get_attr: [Controller, resource.0.storage_mgmt_ip_address]}
1397           - {get_attr: [Controller, resource.0.tenant_ip_address]}
1398
1399   ControllerAllNodesValidationDeployment:
1400     type: OS::Heat::StructuredDeployments
1401     depends_on: ControllerAllNodesDeployment
1402     properties:
1403       name: ControllerAllNodesValidationDeployment
1404       config: {get_resource: AllNodesValidationConfig}
1405       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1406
1407   ComputeAllNodesValidationDeployment:
1408     type: OS::Heat::StructuredDeployments
1409     depends_on: ComputeAllNodesDeployment
1410     properties:
1411       name: ComputeAllNodesValidationDeployment
1412       config: {get_resource: AllNodesValidationConfig}
1413       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1414
1415   BlockStorageAllNodesValidationDeployment:
1416     type: OS::Heat::StructuredDeployments
1417     depends_on: BlockStorageAllNodesDeployment
1418     properties:
1419       name: BlockStorageAllNodesValidationDeployment
1420       config: {get_resource: AllNodesValidationConfig}
1421       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1422
1423   ObjectStorageAllNodesValidationDeployment:
1424     type: OS::Heat::StructuredDeployments
1425     depends_on: ObjectStorageAllNodesDeployment
1426     properties:
1427       name: ObjectStorageAllNodesValidationDeployment
1428       config: {get_resource: AllNodesValidationConfig}
1429       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1430
1431   CephStorageAllNodesValidationDeployment:
1432     type: OS::Heat::StructuredDeployments
1433     depends_on: CephStorageAllNodesDeployment
1434     properties:
1435       name: CephStorageAllNodesValidationDeployment
1436       config: {get_resource: AllNodesValidationConfig}
1437       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1438
1439   UpdateWorkflow:
1440     type: OS::TripleO::Tasks::UpdateWorkflow
1441     properties:
1442       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
1443       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
1444       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1445       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1446       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1447       input_values:
1448         deploy_identifier: {get_param: DeployIdentifier}
1449         update_identifier: {get_param: UpdateIdentifier}
1450
1451   # Optional ExtraConfig for all nodes - all roles are passed in here, but
1452   # the nested template may configure each role differently (or not at all)
1453   AllNodesExtraConfig:
1454     type: OS::TripleO::AllNodesExtraConfig
1455     depends_on:
1456       - UpdateWorkflow
1457       - ComputeAllNodesValidationDeployment
1458       - BlockStorageAllNodesValidationDeployment
1459       - ObjectStorageAllNodesValidationDeployment
1460       - CephStorageAllNodesValidationDeployment
1461       - ControllerAllNodesValidationDeployment
1462     properties:
1463       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
1464       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
1465       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1466       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1467       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1468
1469   # Nested stack deployment runs after all other controller deployments
1470   ControllerNodesPostDeployment:
1471     type: OS::TripleO::ControllerPostDeployment
1472     depends_on: [ControllerBootstrapNodeDeployment, ControllerAllNodesDeployment, ControllerSwiftDeployment, ControllerCephDeployment]
1473     properties:
1474       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1475       NodeConfigIdentifiers:
1476         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1477         controller_config: {get_attr: [Controller, attributes, config_identifier]}
1478         deployment_identifier: {get_param: DeployIdentifier}
1479       StepConfig: {get_attr: [ControllerServiceChain, step_config]}
1480
1481   ComputeNodesPostDeployment:
1482     type: OS::TripleO::ComputePostDeployment
1483     depends_on: [ComputeAllNodesDeployment, ComputeCephDeployment]
1484     properties:
1485       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1486       NodeConfigIdentifiers:
1487         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1488         compute_config: {get_attr: [Compute, attributes, config_identifier]}
1489         deployment_identifier: {get_param: DeployIdentifier}
1490       StepConfig: {get_attr: [ComputeServiceChain, step_config]}
1491
1492   ObjectStorageNodesPostDeployment:
1493     type: OS::TripleO::ObjectStoragePostDeployment
1494     depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
1495     properties:
1496       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1497       NodeConfigIdentifiers:
1498         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1499         objectstorage_config: {get_attr: [ObjectStorage, attributes, config_identifier]}
1500         deployment_identifier: {get_param: DeployIdentifier}
1501       StepConfig: {get_attr: [ObjectStorageServiceChain, step_config]}
1502
1503   BlockStorageNodesPostDeployment:
1504     type: OS::TripleO::BlockStoragePostDeployment
1505     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
1506     properties:
1507       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1508       NodeConfigIdentifiers:
1509         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1510         blockstorage_config: {get_attr: [BlockStorage, attributes, config_identifier]}
1511         deployment_identifier: {get_param: DeployIdentifier}
1512
1513   CephStorageNodesPostDeployment:
1514     type: OS::TripleO::CephStoragePostDeployment
1515     depends_on: [ControllerNodesPostDeployment, CephStorageCephDeployment, CephStorageAllNodesDeployment]
1516     properties:
1517       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1518       NodeConfigIdentifiers:
1519         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1520         cephstorage_config: {get_attr: [CephStorage, attributes, config_identifier]}
1521         deployment_identifier: {get_param: DeployIdentifier}
1522       StepConfig: {get_attr: [CephStorageServiceChain, step_config]}
1523
1524 outputs:
1525   KeystoneURL:
1526     description: URL for the Overcloud Keystone service
1527     value: {get_attr: [EndpointMap, endpoint_map, KeystonePublic, uri]}
1528   KeystoneAdminVip:
1529     description: Keystone Admin VIP endpoint
1530     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1531   PublicVip:
1532     description: Controller VIP for public API endpoints
1533     value: {get_attr: [VipMap, net_ip_map, external]}
1534   AodhInternalVip:
1535     description: VIP for Aodh API internal endpoint
1536     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
1537   CeilometerInternalVip:
1538     description: VIP for Ceilometer API internal endpoint
1539     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1540   CinderInternalVip:
1541     description: VIP for Cinder API internal endpoint
1542     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1543   GlanceInternalVip:
1544     description: VIP for Glance API internal endpoint
1545     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1546   GnocchiInternalVip:
1547     description: VIP for Gnocchi API internal endpoint
1548     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
1549   HeatInternalVip:
1550     description: VIP for Heat API internal endpoint
1551     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1552   IronicInternalVip:
1553     description: VIP for Ironic API internal endpoint
1554     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, IronicApiNetwork]}]}
1555   KeystoneInternalVip:
1556     description: VIP for Keystone API internal endpoint
1557     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1558   NeutronInternalVip:
1559     description: VIP for Neutron API internal endpoint
1560     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1561   NovaInternalVip:
1562     description: VIP for Nova API internal endpoint
1563     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1564   SaharaInternalVip:
1565     description: VIP for Sahara API internal endpoint
1566     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1567   SwiftInternalVip:
1568     description: VIP for Swift Proxy internal endpoint
1569     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1570   EndpointMap:
1571     description: |
1572       Mapping of the resources with the needed info for their endpoints.
1573       This includes the protocol used, the IP, port and also a full
1574       representation of the URI.
1575     value: {get_attr: [EndpointMap, endpoint_map]}
1576   HostsEntry:
1577     description: |
1578       The content that should be appended to your /etc/hosts if you want to get
1579       hostname-based access to the deployed nodes (useful for testing without
1580       setting up a DNS).
1581     value: {get_attr: [allNodesConfig, hosts_entries]}