5f0ad7d8b203446d86bbe9368543a45e1dac986c
[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           NovaIPv6: {get_param: NovaIPv6}
864           NovaPassword: {get_param: NovaPassword}
865           NtpServer: {get_param: NtpServer}
866           PcsdPassword: {get_resource: PcsdPassword}
867           PublicVirtualInterface: {get_param: PublicVirtualInterface}
868           RabbitPassword: {get_param: RabbitPassword}
869           RabbitUserName: {get_param: RabbitUserName}
870           RabbitCookie: {get_attr: [RabbitCookie, value]}
871           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
872           RabbitClientPort: {get_param: RabbitClientPort}
873           RedisPassword: {get_param: RedisPassword}
874           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
875           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
876           RedisVirtualIP: {get_attr: [RedisVirtualIP, ip_address]}
877           RedisVirtualIPUri: {get_attr: [RedisVirtualIP, ip_address_uri]}
878           SwiftHashSuffix: {get_param: SwiftHashSuffix}
879           SwiftMountCheck: {get_param: SwiftMountCheck}
880           SwiftMinPartHours: {get_param: SwiftMinPartHours}
881           SwiftPartPower: {get_param: SwiftPartPower}
882           SwiftReplicas: { get_param: SwiftReplicas}
883           TimeZone: {get_param: TimeZone}
884           VirtualIP: {get_attr: [VipMap, net_ip_map, ctlplane]} # deprecated. Use per service VIP settings instead now.
885           PublicVirtualIP: {get_attr: [VipMap, net_ip_map, external]}
886           ServiceNetMap: {get_param: ServiceNetMap}
887           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
888           CeilometerApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
889           AodhApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
890           GnocchiApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
891           CinderApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
892           HeatApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
893           HeatApiVirtualIPUri: {get_attr: [VipMap, net_ip_uri_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
894           NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
895           SwiftProxyVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
896           MysqlVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
897           NeutronApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
898           NovaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
899           SaharaApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
900           UpdateIdentifier: {get_param: UpdateIdentifier}
901           Hostname:
902             str_replace:
903               template: {get_param: ControllerHostnameFormat}
904               params:
905                 '%stackname%': {get_param: 'OS::stack_name'}
906           NodeIndex: '%index%'
907           ServerMetadata: {get_param: ServerMetadata}
908           SchedulerHints: {get_param: ControllerSchedulerHints}
909           ServiceConfigSettings: {get_attr: [ControllerServiceChain, config_settings]}
910
911   ComputeServiceChain:
912     type: OS::TripleO::Services
913     properties:
914       Services: {get_param: ComputeServices}
915       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
916
917   Compute:
918     type: OS::Heat::ResourceGroup
919     depends_on: Networks
920     properties:
921       count: {get_param: ComputeCount}
922       removal_policies: {get_param: ComputeRemovalPolicies}
923       resource_def:
924         type: OS::TripleO::Compute
925         properties:
926           AdminPassword: {get_param: AdminPassword}
927           CeilometerComputeAgent: {get_param: CeilometerComputeAgent}
928           CeilometerMeteringSecret: {get_param: CeilometerMeteringSecret}
929           CeilometerPassword: {get_param: CeilometerPassword}
930           CinderEnableNfsBackend: {get_param: CinderEnableNfsBackend}
931           CinderEnableRbdBackend: {get_param: CinderEnableRbdBackend}
932           Debug: {get_param: Debug}
933           ExtraConfig: {get_param: ExtraConfig}
934           Flavor: {get_param: OvercloudComputeFlavor}
935           GlanceHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
936           Image: {get_param: NovaImage}
937           ImageUpdatePolicy: {get_param: ImageUpdatePolicy}
938           KeyName: {get_param: KeyName}
939           KeystoneAdminApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
940           KeystonePublicApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
941           NeutronBridgeMappings: {get_param: NeutronBridgeMappings}
942           NeutronTenantMtu: {get_param: NeutronTenantMtu}
943           NeutronEnableTunnelling: {get_param: NeutronEnableTunnelling}
944           NeutronEnableL2Pop : {get_param: NeutronEnableL2Pop}
945           NeutronFlatNetworks: {get_param: NeutronFlatNetworks}
946           NeutronHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
947           NeutronNetworkType: {get_param: NeutronNetworkType}
948           NeutronTunnelTypes: {get_param: NeutronTunnelTypes}
949           NeutronNetworkVLANRanges: {get_param: NeutronNetworkVLANRanges}
950           NeutronPassword: {get_param: NeutronPassword}
951           NeutronPhysicalBridge: {get_param: HypervisorNeutronPhysicalBridge}
952           NeutronPublicInterface: {get_param: HypervisorNeutronPublicInterface}
953           NeutronMetadataProxySharedSecret: {get_param: NeutronMetadataProxySharedSecret}
954           NeutronCorePlugin: {get_param: NeutronCorePlugin}
955           NeutronServicePlugins: {get_param: NeutronServicePlugins}
956           NeutronTypeDrivers: {get_param: NeutronTypeDrivers}
957           NeutronMechanismDrivers: {get_param: NeutronMechanismDrivers}
958           NeutronAgentExtensions: {get_param: NeutronAgentExtensions}
959           # L3 HA and Failover is not relevant for Computes, should be removed
960           NeutronAllowL3AgentFailover: {get_param: NeutronAllowL3AgentFailover}
961           NeutronL3HA: {get_param: NeutronL3HA}
962           NovaApiHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
963           NovaComputeDriver: {get_param: NovaComputeDriver}
964           NovaComputeExtraConfig: {get_param: NovaComputeExtraConfig}
965           NovaComputeLibvirtType: {get_param: NovaComputeLibvirtType}
966           NovaComputeLibvirtVifDriver: {get_param: NovaComputeLibvirtVifDriver}
967           NovaEnableRbdBackend: {get_param: NovaEnableRbdBackend}
968           NovaIPv6: {get_param: NovaIPv6}
969           NovaPublicIP: {get_attr: [VipMap, net_ip_map, external]}
970           NovaPassword: {get_param: NovaPassword}
971           NovaOVSBridge: {get_param: NovaOVSBridge}
972           NovaSecurityGroupAPI: {get_param: NovaSecurityGroupAPI}
973           NtpServer: {get_param: NtpServer}
974           RabbitHost: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
975           RabbitPassword: {get_param: RabbitPassword}
976           RabbitUserName: {get_param: RabbitUserName}
977           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
978           RabbitClientPort: {get_param: RabbitClientPort}
979           SnmpdReadonlyUserName: {get_param: SnmpdReadonlyUserName}
980           SnmpdReadonlyUserPassword: {get_param: SnmpdReadonlyUserPassword}
981           ServiceNetMap: {get_param: ServiceNetMap}
982           TimeZone: {get_param: TimeZone}
983           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
984           UpdateIdentifier: {get_param: UpdateIdentifier}
985           Hostname:
986             str_replace:
987               template: {get_param: ComputeHostnameFormat}
988               params:
989                 '%stackname%': {get_param: 'OS::stack_name'}
990           CloudDomain: {get_param: CloudDomain}
991           ServerMetadata: {get_param: ServerMetadata}
992           SchedulerHints: {get_param: NovaComputeSchedulerHints}
993           NodeIndex: '%index%'
994           ServiceConfigSettings: {get_attr: [ComputeServiceChain, config_settings]}
995
996
997   BlockStorage:
998     type: OS::Heat::ResourceGroup
999     depends_on: Networks
1000     properties:
1001       count: {get_param: BlockStorageCount}
1002       removal_policies: {get_param: BlockStorageRemovalPolicies}
1003       resource_def:
1004         type: OS::TripleO::BlockStorage
1005         properties:
1006           Debug: {get_param: Debug}
1007           Image: {get_param: BlockStorageImage}
1008           CinderISCSIHelper: {get_param: CinderISCSIHelper}
1009           CinderLVMLoopDeviceSize: {get_param: CinderLVMLoopDeviceSize}
1010           # Purpose of the dedicated BlockStorage nodes should be to use their local LVM
1011           CinderEnableIscsiBackend: {get_param: CinderEnableIscsiBackend}
1012           CinderPassword: {get_param: CinderPassword}
1013           KeyName: {get_param: KeyName}
1014           Flavor: {get_param: OvercloudBlockStorageFlavor}
1015           VirtualIP: {get_attr: [VipMap, net_ip_map, ctlplane]}
1016           GlanceApiVirtualIP: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1017           RabbitPassword: {get_param: RabbitPassword}
1018           RabbitUserName: {get_param: RabbitUserName}
1019           RabbitClientUseSSL: {get_param: RabbitClientUseSSL}
1020           RabbitClientPort: {get_param: RabbitClientPort}
1021           TimeZone: {get_param: TimeZone}
1022           NtpServer: {get_param: NtpServer}
1023           UpdateIdentifier: {get_param: UpdateIdentifier}
1024           Hostname:
1025             str_replace:
1026               template: {get_param: BlockStorageHostnameFormat}
1027               params:
1028                 '%stackname%': {get_param: 'OS::stack_name'}
1029           ServiceNetMap: {get_param: ServiceNetMap}
1030           EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1031           ExtraConfig: {get_param: ExtraConfig}
1032           BlockStorageExtraConfig: {get_param: BlockStorageExtraConfig}
1033           CloudDomain: {get_param: CloudDomain}
1034           ServerMetadata: {get_param: ServerMetadata}
1035           SchedulerHints: {get_param: BlockStorageSchedulerHints}
1036           NodeIndex: '%index%'
1037
1038   ObjectStorageServiceChain:
1039     type: OS::TripleO::Services
1040     properties:
1041       Services: {get_param: ObjectStorageServices}
1042       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1043
1044   ObjectStorage:
1045     type: OS::Heat::ResourceGroup
1046     depends_on: Networks
1047     properties:
1048       count: {get_param: ObjectStorageCount}
1049       removal_policies: {get_param: ObjectStorageRemovalPolicies}
1050       resource_def:
1051         type: OS::TripleO::ObjectStorage
1052         properties:
1053           KeyName: {get_param: KeyName}
1054           Flavor: {get_param: OvercloudSwiftStorageFlavor}
1055           HashSuffix: {get_param: SwiftHashSuffix}
1056           MountCheck: {get_param: SwiftMountCheck}
1057           MinPartHours: {get_param: SwiftMinPartHours}
1058           PartPower: {get_param: SwiftPartPower}
1059           Image: {get_param: SwiftStorageImage}
1060           Replicas: { get_param: SwiftReplicas}
1061           TimeZone: {get_param: TimeZone}
1062           NtpServer: {get_param: NtpServer}
1063           UpdateIdentifier: {get_param: UpdateIdentifier}
1064           ServiceNetMap: {get_param: ServiceNetMap}
1065           Hostname:
1066             str_replace:
1067               template: {get_param: ObjectStorageHostnameFormat}
1068               params:
1069                 '%stackname%': {get_param: 'OS::stack_name'}
1070           ExtraConfig: {get_param: ExtraConfig}
1071           ObjectStorageExtraConfig: {get_param: ObjectStorageExtraConfig}
1072           CloudDomain: {get_param: CloudDomain}
1073           ServerMetadata: {get_param: ServerMetadata}
1074           SchedulerHints: {get_param: ObjectStorageSchedulerHints}
1075           NodeIndex: '%index%'
1076           ServiceConfigSettings: {get_attr: [ObjectStorageServiceChain, config_settings]}
1077
1078   CephStorageServiceChain:
1079     type: OS::TripleO::Services
1080     properties:
1081       Services: {get_param: CephStorageServices}
1082       EndpointMap: {get_attr: [EndpointMap, endpoint_map]}
1083
1084   CephStorage:
1085     type: OS::Heat::ResourceGroup
1086     depends_on: Networks
1087     properties:
1088       count: {get_param: CephStorageCount}
1089       removal_policies: {get_param: CephStorageRemovalPolicies}
1090       resource_def:
1091         type: OS::TripleO::CephStorage
1092         properties:
1093           Image: {get_param: CephStorageImage}
1094           KeyName: {get_param: KeyName}
1095           Flavor: {get_param: OvercloudCephStorageFlavor}
1096           NtpServer: {get_param: NtpServer}
1097           ServiceNetMap: {get_param: ServiceNetMap}
1098           TimeZone: {get_param: TimeZone}
1099           UpdateIdentifier: {get_param: UpdateIdentifier}
1100           Hostname:
1101             str_replace:
1102               template: {get_param: CephStorageHostnameFormat}
1103               params:
1104                 '%stackname%': {get_param: 'OS::stack_name'}
1105           ExtraConfig: {get_param: ExtraConfig}
1106           CephStorageExtraConfig: {get_param: CephStorageExtraConfig}
1107           CloudDomain: {get_param: CloudDomain}
1108           ServerMetadata: {get_param: ServerMetadata}
1109           SchedulerHints: {get_param: CephStorageSchedulerHints}
1110           NodeIndex: '%index%'
1111           ServiceConfigSettings: {get_attr: [CephStorageServiceChain, config_settings]}
1112
1113   ControllerIpListMap:
1114     type: OS::TripleO::Network::Ports::NetIpListMap
1115     properties:
1116       ControlPlaneIpList: {get_attr: [Controller, ip_address]}
1117       ExternalIpList: {get_attr: [Controller, external_ip_address]}
1118       InternalApiIpList: {get_attr: [Controller, internal_api_ip_address]}
1119       StorageIpList: {get_attr: [Controller, storage_ip_address]}
1120       StorageMgmtIpList: {get_attr: [Controller, storage_mgmt_ip_address]}
1121       TenantIpList: {get_attr: [Controller, tenant_ip_address]}
1122       ManagementIpList: {get_attr: [Controller, management_ip_address]}
1123
1124   allNodesConfig:
1125     type: OS::TripleO::AllNodes::SoftwareConfig
1126     properties:
1127       compute_hosts: {get_attr: [Compute, hosts_entry]}
1128       controller_hosts: {get_attr: [Controller, hosts_entry]}
1129       controller_ips: {get_attr: [Controller, ip_address]}
1130       block_storage_hosts: {get_attr: [BlockStorage, hosts_entry]}
1131       object_storage_hosts: {get_attr: [ObjectStorage, hosts_entry]}
1132       ceph_storage_hosts: {get_attr: [CephStorage, hosts_entry]}
1133       controller_names: {get_attr: [Controller, hostname]}
1134       rabbit_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1135       mongo_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MongoDbNetwork]}]}
1136       redis_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, RedisNetwork]}]}
1137       memcache_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MemcachedNetwork]}]}
1138       mysql_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1139       horizon_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1140       heat_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1141       swift_proxy_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1142       ceilometer_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1143       aodh_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
1144       gnocchi_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
1145       nova_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1146       nova_metadata_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1147       glance_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1148       glance_registry_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1149       cinder_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1150       neutron_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1151       keystone_public_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1152       keystone_admin_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1153       sahara_api_node_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1154       DeployIdentifier: {get_param: DeployIdentifier}
1155       UpdateIdentifier: {get_param: UpdateIdentifier}
1156
1157   MysqlRootPassword:
1158     type: OS::Heat::RandomString
1159     properties:
1160       length: 10
1161
1162   MysqlClusterUniquePart:
1163     type: OS::Heat::RandomString
1164     properties:
1165       length: 10
1166
1167   RabbitCookie:
1168     type: OS::Heat::RandomString
1169     properties:
1170       length: 20
1171       salt: {get_param: RabbitCookieSalt}
1172
1173   # creates the network architecture
1174   Networks:
1175     type: OS::TripleO::Network
1176
1177   ControlVirtualIP:
1178     type: OS::Neutron::Port
1179     depends_on: Networks
1180     properties:
1181       name: control_virtual_ip
1182       network: {get_param: NeutronControlPlaneID}
1183       fixed_ips: {get_param: ControlFixedIPs}
1184       replacement_policy: AUTO
1185
1186   RedisVirtualIP:
1187     depends_on: Networks
1188     type: OS::TripleO::Network::Ports::RedisVipPort
1189     properties:
1190       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1191       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
1192       PortName: redis_virtual_ip
1193       NetworkName: {get_param: [ServiceNetMap, RedisNetwork]}
1194       ServiceName: redis
1195
1196   # The public VIP is on the External net, falls back to ctlplane
1197   PublicVirtualIP:
1198     depends_on: Networks
1199     type: OS::TripleO::Network::Ports::ExternalVipPort
1200     properties:
1201       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1202       ControlPlaneNetwork: {get_param: NeutronControlPlaneID}
1203       PortName: public_virtual_ip
1204       FixedIPs: {get_param: PublicVirtualFixedIPs}
1205
1206   InternalApiVirtualIP:
1207     depends_on: Networks
1208     type: OS::TripleO::Network::Ports::InternalApiVipPort
1209     properties:
1210       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1211       PortName: internal_api_virtual_ip
1212       FixedIPs: {get_param: InternalApiVirtualFixedIPs}
1213
1214   StorageVirtualIP:
1215     depends_on: Networks
1216     type: OS::TripleO::Network::Ports::StorageVipPort
1217     properties:
1218       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1219       PortName: storage_virtual_ip
1220       FixedIPs: {get_param: StorageVirtualFixedIPs}
1221
1222   StorageMgmtVirtualIP:
1223     depends_on: Networks
1224     type: OS::TripleO::Network::Ports::StorageMgmtVipPort
1225     properties:
1226       ControlPlaneIP: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1227       PortName: storage_management_virtual_ip
1228       FixedIPs: {get_param: StorageMgmtVirtualFixedIPs}
1229
1230   VipMap:
1231     type: OS::TripleO::Network::Ports::NetVipMap
1232     properties:
1233       ControlPlaneIp: {get_attr: [ControlVirtualIP, fixed_ips, 0, ip_address]}
1234       ExternalIp: {get_attr: [PublicVirtualIP, ip_address]}
1235       ExternalIpUri: {get_attr: [PublicVirtualIP, ip_address_uri]}
1236       InternalApiIp: {get_attr: [InternalApiVirtualIP, ip_address]}
1237       InternalApiIpUri: {get_attr: [InternalApiVirtualIP, ip_address_uri]}
1238       StorageIp: {get_attr: [StorageVirtualIP, ip_address]}
1239       StorageIpUri: {get_attr: [StorageVirtualIP, ip_address_uri]}
1240       StorageMgmtIp: {get_attr: [StorageMgmtVirtualIP, ip_address]}
1241       StorageMgmtIpUri: {get_attr: [StorageMgmtVirtualIP, ip_address_uri]}
1242       # No tenant or management VIP required
1243
1244   VipConfig:
1245     type: OS::TripleO::VipConfig
1246
1247   VipDeployment:
1248     type: OS::Heat::StructuredDeployments
1249     properties:
1250       name: VipDeployment
1251       config: {get_resource: VipConfig}
1252       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1253       input_values:
1254         # service VIP mappings
1255         keystone_admin_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1256         keystone_public_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1257         neutron_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1258         cinder_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1259         glance_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1260         glance_registry_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceRegistryNetwork]}]}
1261         swift_proxy_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1262         nova_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1263         nova_metadata_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaMetadataNetwork]}]}
1264         ceilometer_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1265         aodh_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
1266         gnocchi_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
1267         heat_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1268         horizon_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HorizonNetwork]}]}
1269         redis_vip: {get_attr: [RedisVirtualIP, ip_address]}
1270         mysql_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, MysqlNetwork]}]}
1271         rabbit_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, RabbitMqNetwork]}]}
1272         # direct configuration of Virtual IPs for each network
1273         control_virtual_ip: {get_attr: [VipMap, net_ip_map, ctlplane]}
1274         public_virtual_ip: {get_attr: [VipMap, net_ip_map, external]}
1275         internal_api_virtual_ip: {get_attr: [VipMap, net_ip_map, internal_api]}
1276         sahara_api_vip: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1277         storage_virtual_ip: {get_attr: [VipMap, net_ip_map, storage]}
1278         storage_mgmt_virtual_ip: {get_attr: [VipMap, net_ip_map, storage_mgmt]}
1279
1280   ControllerBootstrapNodeConfig:
1281     type: OS::TripleO::BootstrapNode::SoftwareConfig
1282     properties:
1283       bootstrap_nodeid: {get_attr: [Controller, resource.0.hostname]}
1284       bootstrap_nodeid_ip: {get_attr: [Controller, resource.0.ip_address]}
1285
1286   ControllerBootstrapNodeDeployment:
1287     type: OS::Heat::StructuredDeployments
1288     properties:
1289       name: ControllerBootstrapNodeDeployment
1290       config: {get_attr: [ControllerBootstrapNodeConfig, config_id]}
1291       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1292
1293   ControllerSwiftDeployment:
1294     type: OS::Heat::StructuredDeployments
1295     properties:
1296       name: ControllerSwiftDeployment
1297       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1298       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1299
1300   ObjectStorageSwiftDeployment:
1301     type: OS::Heat::StructuredDeployments
1302     properties:
1303       name: ObjectStorageSwiftDeployment
1304       config: {get_attr: [SwiftDevicesAndProxyConfig, config_id]}
1305       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1306
1307   SwiftDevicesAndProxyConfig:
1308     type: OS::TripleO::SwiftDevicesAndProxy::SoftwareConfig
1309     properties:
1310       controller_swift_devices: {get_attr: [Controller, swift_device]}
1311       object_store_swift_devices: {get_attr: [ObjectStorage, swift_device]}
1312       controller_swift_proxy_memcaches: {get_attr: [Controller, swift_proxy_memcache]}
1313
1314   ComputeCephDeployment:
1315     type: OS::Heat::StructuredDeployments
1316     properties:
1317       name: ComputeCephDeployment
1318       config: {get_attr: [CephClusterConfig, config_id]}
1319       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1320
1321   ControllerCephDeployment:
1322     type: OS::Heat::StructuredDeployments
1323     properties:
1324       name: ControllerCephDeployment
1325       config: {get_attr: [CephClusterConfig, config_id]}
1326       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1327
1328   CephStorageCephDeployment:
1329     type: OS::Heat::StructuredDeployments
1330     properties:
1331       name: CephStorageCephDeployment
1332       config: {get_attr: [CephClusterConfig, config_id]}
1333       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1334
1335   CephClusterConfig:
1336     type: OS::TripleO::CephClusterConfig::SoftwareConfig
1337     properties:
1338       ceph_storage_count: {get_param: CephStorageCount}
1339       ceph_fsid: {get_param: CephClusterFSID}
1340       ceph_mon_key: {get_param: CephMonKey}
1341       ceph_admin_key: {get_param: CephAdminKey}
1342       ceph_client_key: {get_param: CephClientKey}
1343       ceph_external_mon_ips: {get_param: CephExternalMonHost}
1344       ceph_mon_names: {get_attr: [Controller, hostname]}
1345       ceph_mon_ips: {get_attr: [ControllerIpListMap, net_ip_map, {get_param: [ServiceNetMap, CephPublicNetwork]}]}
1346
1347   ControllerAllNodesDeployment:
1348     type: OS::Heat::StructuredDeployments
1349     properties:
1350       name: ControllerAllNodesDeployment
1351       config: {get_attr: [allNodesConfig, config_id]}
1352       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1353
1354   ComputeAllNodesDeployment:
1355     type: OS::Heat::StructuredDeployments
1356     properties:
1357       name: ComputeAllNodesDeployment
1358       config: {get_attr: [allNodesConfig, config_id]}
1359       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1360
1361   BlockStorageAllNodesDeployment:
1362     type: OS::Heat::StructuredDeployments
1363     properties:
1364       name: BlockStorageAllNodesDeployment
1365       config: {get_attr: [allNodesConfig, config_id]}
1366       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1367
1368   ObjectStorageAllNodesDeployment:
1369     type: OS::Heat::StructuredDeployments
1370     properties:
1371       name: ObjectStorageAllNodesDeployment
1372       config: {get_attr: [allNodesConfig, config_id]}
1373       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1374
1375   CephStorageAllNodesDeployment:
1376     type: OS::Heat::StructuredDeployments
1377     properties:
1378       name: CephStorageAllNodesDeployment
1379       config: {get_attr: [allNodesConfig, config_id]}
1380       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1381
1382   # All Nodes Validations
1383   AllNodesValidationConfig:
1384     type: OS::TripleO::AllNodes::Validation
1385     properties:
1386       PingTestIps:
1387         list_join:
1388         - ' '
1389         - - {get_attr: [Controller, resource.0.external_ip_address]}
1390           - {get_attr: [Controller, resource.0.internal_api_ip_address]}
1391           - {get_attr: [Controller, resource.0.storage_ip_address]}
1392           - {get_attr: [Controller, resource.0.storage_mgmt_ip_address]}
1393           - {get_attr: [Controller, resource.0.tenant_ip_address]}
1394
1395   ControllerAllNodesValidationDeployment:
1396     type: OS::Heat::StructuredDeployments
1397     depends_on: ControllerAllNodesDeployment
1398     properties:
1399       name: ControllerAllNodesValidationDeployment
1400       config: {get_resource: AllNodesValidationConfig}
1401       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1402
1403   ComputeAllNodesValidationDeployment:
1404     type: OS::Heat::StructuredDeployments
1405     depends_on: ComputeAllNodesDeployment
1406     properties:
1407       name: ComputeAllNodesValidationDeployment
1408       config: {get_resource: AllNodesValidationConfig}
1409       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1410
1411   BlockStorageAllNodesValidationDeployment:
1412     type: OS::Heat::StructuredDeployments
1413     depends_on: BlockStorageAllNodesDeployment
1414     properties:
1415       name: BlockStorageAllNodesValidationDeployment
1416       config: {get_resource: AllNodesValidationConfig}
1417       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1418
1419   ObjectStorageAllNodesValidationDeployment:
1420     type: OS::Heat::StructuredDeployments
1421     depends_on: ObjectStorageAllNodesDeployment
1422     properties:
1423       name: ObjectStorageAllNodesValidationDeployment
1424       config: {get_resource: AllNodesValidationConfig}
1425       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1426
1427   CephStorageAllNodesValidationDeployment:
1428     type: OS::Heat::StructuredDeployments
1429     depends_on: CephStorageAllNodesDeployment
1430     properties:
1431       name: CephStorageAllNodesValidationDeployment
1432       config: {get_resource: AllNodesValidationConfig}
1433       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1434
1435   UpdateWorkflow:
1436     type: OS::TripleO::Tasks::UpdateWorkflow
1437     properties:
1438       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
1439       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
1440       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1441       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1442       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1443       input_values:
1444         deploy_identifier: {get_param: DeployIdentifier}
1445         update_identifier: {get_param: UpdateIdentifier}
1446
1447   # Optional ExtraConfig for all nodes - all roles are passed in here, but
1448   # the nested template may configure each role differently (or not at all)
1449   AllNodesExtraConfig:
1450     type: OS::TripleO::AllNodesExtraConfig
1451     depends_on:
1452       - UpdateWorkflow
1453       - ComputeAllNodesValidationDeployment
1454       - BlockStorageAllNodesValidationDeployment
1455       - ObjectStorageAllNodesValidationDeployment
1456       - CephStorageAllNodesValidationDeployment
1457       - ControllerAllNodesValidationDeployment
1458     properties:
1459       controller_servers: {get_attr: [Controller, attributes, nova_server_resource]}
1460       compute_servers: {get_attr: [Compute, attributes, nova_server_resource]}
1461       blockstorage_servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1462       objectstorage_servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1463       cephstorage_servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1464
1465   # Nested stack deployment runs after all other controller deployments
1466   ControllerNodesPostDeployment:
1467     type: OS::TripleO::ControllerPostDeployment
1468     depends_on: [ControllerBootstrapNodeDeployment, ControllerAllNodesDeployment, ControllerSwiftDeployment, ControllerCephDeployment]
1469     properties:
1470       servers: {get_attr: [Controller, attributes, nova_server_resource]}
1471       NodeConfigIdentifiers:
1472         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1473         controller_config: {get_attr: [Controller, attributes, config_identifier]}
1474         deployment_identifier: {get_param: DeployIdentifier}
1475       StepConfig: {get_attr: [ControllerServiceChain, step_config]}
1476
1477   ComputeNodesPostDeployment:
1478     type: OS::TripleO::ComputePostDeployment
1479     depends_on: [ComputeAllNodesDeployment, ComputeCephDeployment]
1480     properties:
1481       servers: {get_attr: [Compute, attributes, nova_server_resource]}
1482       NodeConfigIdentifiers:
1483         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1484         compute_config: {get_attr: [Compute, attributes, config_identifier]}
1485         deployment_identifier: {get_param: DeployIdentifier}
1486       StepConfig: {get_attr: [ComputeServiceChain, step_config]}
1487
1488   ObjectStorageNodesPostDeployment:
1489     type: OS::TripleO::ObjectStoragePostDeployment
1490     depends_on: [ObjectStorageSwiftDeployment, ObjectStorageAllNodesDeployment]
1491     properties:
1492       servers: {get_attr: [ObjectStorage, attributes, nova_server_resource]}
1493       NodeConfigIdentifiers:
1494         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1495         objectstorage_config: {get_attr: [ObjectStorage, attributes, config_identifier]}
1496         deployment_identifier: {get_param: DeployIdentifier}
1497       StepConfig: {get_attr: [ObjectStorageServiceChain, step_config]}
1498
1499   BlockStorageNodesPostDeployment:
1500     type: OS::TripleO::BlockStoragePostDeployment
1501     depends_on: [ControllerNodesPostDeployment, BlockStorageAllNodesDeployment]
1502     properties:
1503       servers: {get_attr: [BlockStorage, attributes, nova_server_resource]}
1504       NodeConfigIdentifiers:
1505         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1506         blockstorage_config: {get_attr: [BlockStorage, attributes, config_identifier]}
1507         deployment_identifier: {get_param: DeployIdentifier}
1508
1509   CephStorageNodesPostDeployment:
1510     type: OS::TripleO::CephStoragePostDeployment
1511     depends_on: [ControllerNodesPostDeployment, CephStorageCephDeployment, CephStorageAllNodesDeployment]
1512     properties:
1513       servers: {get_attr: [CephStorage, attributes, nova_server_resource]}
1514       NodeConfigIdentifiers:
1515         allnodes_extra: {get_attr: [AllNodesExtraConfig, config_identifier]}
1516         cephstorage_config: {get_attr: [CephStorage, attributes, config_identifier]}
1517         deployment_identifier: {get_param: DeployIdentifier}
1518       StepConfig: {get_attr: [CephStorageServiceChain, step_config]}
1519
1520 outputs:
1521   KeystoneURL:
1522     description: URL for the Overcloud Keystone service
1523     value: {get_attr: [EndpointMap, endpoint_map, KeystonePublic, uri]}
1524   KeystoneAdminVip:
1525     description: Keystone Admin VIP endpoint
1526     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystoneAdminApiNetwork]}]}
1527   PublicVip:
1528     description: Controller VIP for public API endpoints
1529     value: {get_attr: [VipMap, net_ip_map, external]}
1530   AodhInternalVip:
1531     description: VIP for Aodh API internal endpoint
1532     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, AodhApiNetwork]}]}
1533   CeilometerInternalVip:
1534     description: VIP for Ceilometer API internal endpoint
1535     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CeilometerApiNetwork]}]}
1536   CinderInternalVip:
1537     description: VIP for Cinder API internal endpoint
1538     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, CinderApiNetwork]}]}
1539   GlanceInternalVip:
1540     description: VIP for Glance API internal endpoint
1541     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GlanceApiNetwork]}]}
1542   GnocchiInternalVip:
1543     description: VIP for Gnocchi API internal endpoint
1544     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, GnocchiApiNetwork]}]}
1545   HeatInternalVip:
1546     description: VIP for Heat API internal endpoint
1547     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, HeatApiNetwork]}]}
1548   KeystoneInternalVip:
1549     description: VIP for Keystone API internal endpoint
1550     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, KeystonePublicApiNetwork]}]}
1551   NeutronInternalVip:
1552     description: VIP for Neutron API internal endpoint
1553     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NeutronApiNetwork]}]}
1554   NovaInternalVip:
1555     description: VIP for Nova API internal endpoint
1556     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, NovaApiNetwork]}]}
1557   SaharaInternalVip:
1558     description: VIP for Sahara API internal endpoint
1559     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SaharaApiNetwork]}]}
1560   SwiftInternalVip:
1561     description: VIP for Swift Proxy internal endpoint
1562     value: {get_attr: [VipMap, net_ip_map, {get_param: [ServiceNetMap, SwiftProxyNetwork]}]}
1563   EndpointMap:
1564     description: |
1565       Mapping of the resources with the needed info for their endpoints.
1566       This includes the protocol used, the IP, port and also a full
1567       representation of the URI.
1568     value: {get_attr: [EndpointMap, endpoint_map]}
1569   HostsEntry:
1570     description: |
1571       The content that should be appended to your /etc/hosts if you want to get
1572       hostname-based access to the deployed nodes (useful for testing without
1573       setting up a DNS).
1574     value: {get_attr: [allNodesConfig, hosts_entries]}