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