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