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