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