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