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