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