Repository: fabric-testbed/InformationModel (language: python)

Issue:
Add children property to CompositeNode
Add `nodes` property to `CompositeNode` in `fim/user/compsite_node.py` to list all the worker nodes embedded inside a composite node. This is needed for ABQM with level=2.


Discussion / hints:
Is this property meant to link names or objects? I.e. ABQM level 2 will have Node objects reflecting individual workers and then CompositeNode object reflecting sites where those are? 

If it is that the more likely solution is that we need a new relationship type. Please let me know @kthare10 
ABQM level 2 has two kinds of nodes:
- Composite Node representing the sites
- Worker nodes inside a site node

Need a way to traverse both sites as well as workers within each. Agree that having an additional relationship would help.

For now, I have the following hack:

```
    print(f"{s.name} [Site]")
    print(f"     Maitenance State: {s.maintenance_info}")
    if s.capacities is None:
        continue
    print(f"     cpu: {s.capacities.cpu}/{s.capacity_allocations.cpu if s.capacity_allocations is not None else 0}, "
              f"core: {s.capacities.core}/{s.capacity_allocations.core if s.capacity_allocations is not None else 0}, "
              f"ram: {s.capacities.ram}/{s.capacity_allocations.ram if s.capacity_allocations is not None else 0}, "
              f"disk: {s.capacities.disk}/{s.capacity_allocations.disk if s.capacity_allocations is not None else 0}",
              f"unit: {s.capacities.unit}/{s.capacity_allocations.unit if s.capacity_allocations is not None else 0}")
    
    ##### Get Workers from Site ##### Hack until FIM fix available
    from fim.graph.abc_property_graph import ABCPropertyGraph
    from fim.view_only_dict import ViewOnlyDict
    from fim.user import Node
    node_id_list = s.topo.graph_model.get_first_neighbor(node_id=s.node_id, rel=ABCPropertyGraph.REL_HAS,
                                                         node_label=ABCPropertyGraph.CLASS_NetworkNode)
    ret = dict()
    for nid in node_id_list:
        _, node_props = s.topo.graph_model.get_node_properties(node_id=nid)
        n = Node(name=node_props[ABCPropertyGraph.PROP_NAME], node_id=nid, topo=s.topo)
        # exclude Facility nodes
        from fim.user import NodeType
        if n.type != NodeType.Facility:
            ret[n.name] = n
    nodes = ViewOnlyDict(ret)
```
So having looked at ABQM code, I'm not sure we can do much better than what we have. If we add a new relationship type to connect worker Nodes to site CompositeNodes you are still left with using get_first_neighbor() to get them. 

A property on a graph has to have a simple type, so we can add a property 'Children' (or similar) that will be a list of names of worker nodes, but I'm not sure it gives you anything on top of what you already have (?) 

When you say 'traverse', which direction are you traversing in? From CompositeNode of the site down to worker nodes or vice versa? 
Composite node to worker nodes, I think just encapsulating the above code snipped in `list_nodes()` or `nodes` in `fim/user/compsite_node.py` would make the user call a bit friendly. Keeping `get_first_neighbor` would be okay.

Fix patch:
diff --git a/fim/__init__.py b/fim/__init__.py
index 480f28c..8d8e820 100644
--- a/fim/__init__.py
+++ b/fim/__init__.py
@@ -1,5 +1,5 @@
 """
 FABRIC Information Model library and utilities
 """
-__VERSION__ = "1.5.5"
+__VERSION__ = "1.6.1"
 __version__ = __VERSION__
diff --git a/fim/logging/log_collector.py b/fim/logging/log_collector.py
index 5e73eb1..76c6023 100644
--- a/fim/logging/log_collector.py
+++ b/fim/logging/log_collector.py
@@ -29,6 +29,7 @@
 """
 
 from typing import Dict, Any, List
+from collections import defaultdict
 
 from fim.user.topology import ExperimentTopology
 from fim.user.node import Node
@@ -187,7 +188,7 @@ def __str__(self):
         comp = ' compute ' + ','.join(['vms:' + str(self._attributes['vm_count']),
                                        'cores:' + str(self._attributes['core_count']),
                                        'p4s:' + str(self._attributes['p4_count'])])
-        sites = facilities = components = services = ''
+        sites = facilities = components = services = vmdetails = ''
 
         if len(self._attributes['sites']):
             sites = ' sites ' + ','.join(self._attributes['sites'])
@@ -204,7 +205,15 @@ def __str__(self):
             slist = [t[0] + ':' + str(t[1]) for t in filter(lambda n: n[0] != 'OVS', self._attributes['services'])]
             services = ' services ' + ','.join(slist)
 
-        return ';'.join(filter(lambda n: len(n) > 0, [comp, sites, facilities, components, services]))
+        # aggregate VM capacity information
+        if len(self._attributes['nodes']) > 0:
+            vmdict = defaultdict(int)
+            for cap in self._attributes['nodes']:
+                # these are capacity_allocation or capacity objects (if capacity_allocation is set it is preferred)
+                vmdict[f'C{cap.core}/R{cap.ram}/D{cap.disk}'] += 1
+            vmdetails = ' vmdetails ' + ','.join([i[0] + ':' + str(i[1]) for i in vmdict.items()])
+
+        return ';'.join(filter(lambda n: len(n) > 0, [comp, sites, facilities, components, services, vmdetails]))
 
     def __repr__(self):
         return str(self.attributes)
diff --git a/fim/slivers/data/instance_sizes.json b/fim/slivers/data/instance_sizes.json
index 7b1579f..e379266 100644
--- a/fim/slivers/data/instance_sizes.json
+++ b/fim/slivers/data/instance_sizes.json
@@ -14,10 +14,10 @@
     "ram": 4,
     "disk": 500
   },
-  "fabric.c4.m4.d2000": {
+  "fabric.c4.m4.d1000": {
     "core": 4,
     "ram": 4,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c4.m8.d10": {
     "core": 4,
@@ -34,10 +34,10 @@
     "ram": 8,
     "disk": 500
   },
-  "fabric.c4.m8.d2000": {
+  "fabric.c4.m8.d1000": {
     "core": 4,
     "ram": 8,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c4.m16.d10": {
     "core": 4,
@@ -54,10 +54,10 @@
     "ram": 16,
     "disk": 500
   },
-  "fabric.c4.m16.d2000": {
+  "fabric.c4.m16.d1000": {
     "core": 4,
     "ram": 16,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c4.m32.d10": {
     "core": 4,
@@ -74,10 +74,10 @@
     "ram": 32,
     "disk": 500
   },
-  "fabric.c4.m32.d2000": {
+  "fabric.c4.m32.d1000": {
     "core": 4,
     "ram": 32,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c4.m64.d10": {
     "core": 4,
@@ -94,10 +94,10 @@
     "ram": 64,
     "disk": 500
   },
-  "fabric.c4.m64.d2000": {
+  "fabric.c4.m64.d1000": {
     "core": 4,
     "ram": 64,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c4.m128.d10": {
     "core": 4,
@@ -114,10 +114,10 @@
     "ram": 128,
     "disk": 500
   },
-  "fabric.c4.m128.d2000": {
+  "fabric.c4.m128.d1000": {
     "core": 4,
     "ram": 128,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c4.m256.d10": {
     "core": 4,
@@ -134,10 +134,10 @@
     "ram": 256,
     "disk": 500
   },
-  "fabric.c4.m256.d2000": {
+  "fabric.c4.m256.d1000": {
     "core": 4,
     "ram": 256,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c4.m384.d10": {
     "core": 4,
@@ -154,10 +154,10 @@
     "ram": 384,
     "disk": 500
   },
-  "fabric.c4.m384.d2000": {
+  "fabric.c4.m384.d1000": {
     "core": 4,
     "ram": 384,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c6.m4.d10": {
     "core": 6,
@@ -174,10 +174,10 @@
     "ram": 4,
     "disk": 500
   },
-  "fabric.c6.m4.d2000": {
+  "fabric.c6.m4.d1000": {
     "core": 6,
     "ram": 4,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c6.m8.d10": {
     "core": 6,
@@ -194,10 +194,10 @@
     "ram": 8,
     "disk": 500
   },
-  "fabric.c6.m8.d2000": {
+  "fabric.c6.m8.d1000": {
     "core": 6,
     "ram": 8,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c6.m16.d10": {
     "core": 6,
@@ -214,10 +214,10 @@
     "ram": 16,
     "disk": 500
   },
-  "fabric.c6.m16.d2000": {
+  "fabric.c6.m16.d1000": {
     "core": 6,
     "ram": 16,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c6.m32.d10": {
     "core": 6,
@@ -234,10 +234,10 @@
     "ram": 32,
     "disk": 500
   },
-  "fabric.c6.m32.d2000": {
+  "fabric.c6.m32.d1000": {
     "core": 6,
     "ram": 32,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c6.m64.d10": {
     "core": 6,
@@ -254,10 +254,10 @@
     "ram": 64,
     "disk": 500
   },
-  "fabric.c6.m64.d2000": {
+  "fabric.c6.m64.d1000": {
     "core": 6,
     "ram": 64,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c6.m128.d10": {
     "core": 6,
@@ -274,10 +274,10 @@
     "ram": 128,
     "disk": 500
   },
-  "fabric.c6.m128.d2000": {
+  "fabric.c6.m128.d1000": {
     "core": 6,
     "ram": 128,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c6.m256.d10": {
     "core": 6,
@@ -294,10 +294,10 @@
     "ram": 256,
     "disk": 500
   },
-  "fabric.c6.m256.d2000": {
+  "fabric.c6.m256.d1000": {
     "core": 6,
     "ram": 256,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c6.m384.d10": {
     "core": 6,
@@ -314,10 +314,10 @@
     "ram": 384,
     "disk": 500
   },
-  "fabric.c6.m384.d2000": {
+  "fabric.c6.m384.d1000": {
     "core": 6,
     "ram": 384,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c8.m4.d10": {
     "core": 8,
@@ -334,10 +334,10 @@
     "ram": 4,
     "disk": 500
   },
-  "fabric.c8.m4.d2000": {
+  "fabric.c8.m4.d1000": {
     "core": 8,
     "ram": 4,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c8.m8.d10": {
     "core": 8,
@@ -354,10 +354,10 @@
     "ram": 8,
     "disk": 500
   },
-  "fabric.c8.m8.d2000": {
+  "fabric.c8.m8.d1000": {
     "core": 8,
     "ram": 8,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c8.m16.d10": {
     "core": 8,
@@ -374,10 +374,10 @@
     "ram": 16,
     "disk": 500
   },
-  "fabric.c8.m16.d2000": {
+  "fabric.c8.m16.d1000": {
     "core": 8,
     "ram": 16,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c8.m32.d10": {
     "core": 8,
@@ -394,10 +394,10 @@
     "ram": 32,
     "disk": 500
   },
-  "fabric.c8.m32.d2000": {
+  "fabric.c8.m32.d1000": {
     "core": 8,
     "ram": 32,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c8.m64.d10": {
     "core": 8,
@@ -414,10 +414,10 @@
     "ram": 64,
     "disk": 500
   },
-  "fabric.c8.m64.d2000": {
+  "fabric.c8.m64.d1000": {
     "core": 8,
     "ram": 64,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c8.m128.d10": {
     "core": 8,
@@ -434,10 +434,10 @@
     "ram": 128,
     "disk": 500
   },
-  "fabric.c8.m128.d2000": {
+  "fabric.c8.m128.d1000": {
     "core": 8,
     "ram": 128,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c8.m256.d10": {
     "core": 8,
@@ -454,10 +454,10 @@
     "ram": 256,
     "disk": 500
   },
-  "fabric.c8.m256.d2000": {
+  "fabric.c8.m256.d1000": {
     "core": 8,
     "ram": 256,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c8.m384.d10": {
     "core": 8,
@@ -474,10 +474,10 @@
     "ram": 384,
     "disk": 500
   },
-  "fabric.c8.m384.d2000": {
+  "fabric.c8.m384.d1000": {
     "core": 8,
     "ram": 384,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c10.m4.d10": {
     "core": 10,
@@ -494,10 +494,10 @@
     "ram": 4,
     "disk": 500
   },
-  "fabric.c10.m4.d2000": {
+  "fabric.c10.m4.d1000": {
     "core": 10,
     "ram": 4,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c10.m8.d10": {
     "core": 10,
@@ -514,10 +514,10 @@
     "ram": 8,
     "disk": 500
   },
-  "fabric.c10.m8.d2000": {
+  "fabric.c10.m8.d1000": {
     "core": 10,
     "ram": 8,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c10.m16.d10": {
     "core": 10,
@@ -534,10 +534,10 @@
     "ram": 16,
     "disk": 500
   },
-  "fabric.c10.m16.d2000": {
+  "fabric.c10.m16.d1000": {
     "core": 10,
     "ram": 16,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c10.m32.d10": {
     "core": 10,
@@ -554,10 +554,10 @@
     "ram": 32,
     "disk": 500
   },
-  "fabric.c10.m32.d2000": {
+  "fabric.c10.m32.d1000": {
     "core": 10,
     "ram": 32,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c10.m64.d10": {
     "core": 10,
@@ -574,10 +574,10 @@
     "ram": 64,
     "disk": 500
   },
-  "fabric.c10.m64.d2000": {
+  "fabric.c10.m64.d1000": {
     "core": 10,
     "ram": 64,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c10.m128.d10": {
     "core": 10,
@@ -594,10 +594,10 @@
     "ram": 128,
     "disk": 500
   },
-  "fabric.c10.m128.d2000": {
+  "fabric.c10.m128.d1000": {
     "core": 10,
     "ram": 128,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c10.m256.d10": {
     "core": 10,
@@ -614,10 +614,10 @@
     "ram": 256,
     "disk": 500
   },
-  "fabric.c10.m256.d2000": {
+  "fabric.c10.m256.d1000": {
     "core": 10,
     "ram": 256,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c10.m384.d10": {
     "core": 10,
@@ -634,10 +634,10 @@
     "ram": 384,
     "disk": 500
   },
-  "fabric.c10.m384.d2000": {
+  "fabric.c10.m384.d1000": {
     "core": 10,
     "ram": 384,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c12.m4.d10": {
     "core": 12,
@@ -654,10 +654,10 @@
     "ram": 4,
     "disk": 500
   },
-  "fabric.c12.m4.d2000": {
+  "fabric.c12.m4.d1000": {
     "core": 12,
     "ram": 4,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c12.m8.d10": {
     "core": 12,
@@ -674,10 +674,10 @@
     "ram": 8,
     "disk": 500
   },
-  "fabric.c12.m8.d2000": {
+  "fabric.c12.m8.d1000": {
     "core": 12,
     "ram": 8,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c12.m16.d10": {
     "core": 12,
@@ -694,10 +694,10 @@
     "ram": 16,
     "disk": 500
   },
-  "fabric.c12.m16.d2000": {
+  "fabric.c12.m16.d1000": {
     "core": 12,
     "ram": 16,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c12.m32.d10": {
     "core": 12,
@@ -714,10 +714,10 @@
     "ram": 32,
     "disk": 500
   },
-  "fabric.c12.m32.d2000": {
+  "fabric.c12.m32.d1000": {
     "core": 12,
     "ram": 32,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c12.m64.d10": {
     "core": 12,
@@ -734,10 +734,10 @@
     "ram": 64,
     "disk": 500
   },
-  "fabric.c12.m64.d2000": {
+  "fabric.c12.m64.d1000": {
     "core": 12,
     "ram": 64,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c12.m128.d10": {
     "core": 12,
@@ -754,10 +754,10 @@
     "ram": 128,
     "disk": 500
   },
-  "fabric.c12.m128.d2000": {
+  "fabric.c12.m128.d1000": {
     "core": 12,
     "ram": 128,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c12.m256.d10": {
     "core": 12,
@@ -774,10 +774,10 @@
     "ram": 256,
     "disk": 500
   },
-  "fabric.c12.m256.d2000": {
+  "fabric.c12.m256.d1000": {
     "core": 12,
     "ram": 256,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c12.m384.d10": {
     "core": 12,
@@ -794,10 +794,10 @@
     "ram": 384,
     "disk": 500
   },
-  "fabric.c12.m384.d2000": {
+  "fabric.c12.m384.d1000": {
     "core": 12,
     "ram": 384,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c14.m4.d10": {
     "core": 14,
@@ -814,10 +814,10 @@
     "ram": 4,
     "disk": 500
   },
-  "fabric.c14.m4.d2000": {
+  "fabric.c14.m4.d1000": {
     "core": 14,
     "ram": 4,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c14.m8.d10": {
     "core": 14,
@@ -834,10 +834,10 @@
     "ram": 8,
     "disk": 500
   },
-  "fabric.c14.m8.d2000": {
+  "fabric.c14.m8.d1000": {
     "core": 14,
     "ram": 8,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c14.m16.d10": {
     "core": 14,
@@ -854,10 +854,10 @@
     "ram": 16,
     "disk": 500
   },
-  "fabric.c14.m16.d2000": {
+  "fabric.c14.m16.d1000": {
     "core": 14,
     "ram": 16,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c14.m32.d10": {
     "core": 14,
@@ -874,10 +874,10 @@
     "ram": 32,
     "disk": 500
   },
-  "fabric.c14.m32.d2000": {
+  "fabric.c14.m32.d1000": {
     "core": 14,
     "ram": 32,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c14.m64.d10": {
     "core": 14,
@@ -894,10 +894,10 @@
     "ram": 64,
     "disk": 500
   },
-  "fabric.c14.m64.d2000": {
+  "fabric.c14.m64.d1000": {
     "core": 14,
     "ram": 64,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c14.m128.d10": {
     "core": 14,
@@ -914,10 +914,10 @@
     "ram": 128,
     "disk": 500
   },
-  "fabric.c14.m128.d2000": {
+  "fabric.c14.m128.d1000": {
     "core": 14,
     "ram": 128,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c14.m256.d10": {
     "core": 14,
@@ -934,10 +934,10 @@
     "ram": 256,
     "disk": 500
   },
-  "fabric.c14.m256.d2000": {
+  "fabric.c14.m256.d1000": {
     "core": 14,
     "ram": 256,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c14.m384.d10": {
     "core": 14,
@@ -954,10 +954,10 @@
     "ram": 384,
     "disk": 500
   },
-  "fabric.c14.m384.d2000": {
+  "fabric.c14.m384.d1000": {
     "core": 14,
     "ram": 384,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c16.m4.d10": {
     "core": 16,
@@ -974,10 +974,10 @@
     "ram": 4,
     "disk": 500
   },
-  "fabric.c16.m4.d2000": {
+  "fabric.c16.m4.d1000": {
     "core": 16,
     "ram": 4,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c16.m8.d10": {
     "core": 16,
@@ -994,10 +994,10 @@
     "ram": 8,
     "disk": 500
   },
-  "fabric.c16.m8.d2000": {
+  "fabric.c16.m8.d1000": {
     "core": 16,
     "ram": 8,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c16.m16.d10": {
     "core": 16,
@@ -1014,10 +1014,10 @@
     "ram": 16,
     "disk": 500
   },
-  "fabric.c16.m16.d2000": {
+  "fabric.c16.m16.d1000": {
     "core": 16,
     "ram": 16,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c16.m32.d10": {
     "core": 16,
@@ -1034,10 +1034,10 @@
     "ram": 32,
     "disk": 500
   },
-  "fabric.c16.m32.d2000": {
+  "fabric.c16.m32.d1000": {
     "core": 16,
     "ram": 32,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c16.m64.d10": {
     "core": 16,
@@ -1054,10 +1054,10 @@
     "ram": 64,
     "disk": 500
   },
-  "fabric.c16.m64.d2000": {
+  "fabric.c16.m64.d1000": {
     "core": 16,
     "ram": 64,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c16.m128.d10": {
     "core": 16,
@@ -1074,10 +1074,10 @@
     "ram": 128,
     "disk": 500
   },
-  "fabric.c16.m128.d2000": {
+  "fabric.c16.m128.d1000": {
     "core": 16,
     "ram": 128,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c16.m256.d10": {
     "core": 16,
@@ -1094,10 +1094,10 @@
     "ram": 256,
     "disk": 500
   },
-  "fabric.c16.m256.d2000": {
+  "fabric.c16.m256.d1000": {
     "core": 16,
     "ram": 256,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c16.m384.d10": {
     "core": 16,
@@ -1114,10 +1114,10 @@
     "ram": 384,
     "disk": 500
   },
-  "fabric.c16.m384.d2000": {
+  "fabric.c16.m384.d1000": {
     "core": 16,
     "ram": 384,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c18.m4.d10": {
     "core": 18,
@@ -1134,10 +1134,10 @@
     "ram": 4,
     "disk": 500
   },
-  "fabric.c18.m4.d2000": {
+  "fabric.c18.m4.d1000": {
     "core": 18,
     "ram": 4,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c18.m8.d10": {
     "core": 18,
@@ -1154,10 +1154,10 @@
     "ram": 8,
     "disk": 500
   },
-  "fabric.c18.m8.d2000": {
+  "fabric.c18.m8.d1000": {
     "core": 18,
     "ram": 8,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c18.m16.d10": {
     "core": 18,
@@ -1174,10 +1174,10 @@
     "ram": 16,
     "disk": 500
   },
-  "fabric.c18.m16.d2000": {
+  "fabric.c18.m16.d1000": {
     "core": 18,
     "ram": 16,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c18.m32.d10": {
     "core": 18,
@@ -1194,10 +1194,10 @@
     "ram": 32,
     "disk": 500
   },
-  "fabric.c18.m32.d2000": {
+  "fabric.c18.m32.d1000": {
     "core": 18,
     "ram": 32,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c18.m64.d10": {
     "core": 18,
@@ -1214,10 +1214,10 @@
     "ram": 64,
     "disk": 500
   },
-  "fabric.c18.m64.d2000": {
+  "fabric.c18.m64.d1000": {
     "core": 18,
     "ram": 64,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c18.m128.d10": {
     "core": 18,
@@ -1234,10 +1234,10 @@
     "ram": 128,
     "disk": 500
   },
-  "fabric.c18.m128.d2000": {
+  "fabric.c18.m128.d1000": {
     "core": 18,
     "ram": 128,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c18.m256.d10": {
     "core": 18,
@@ -1254,10 +1254,10 @@
     "ram": 256,
     "disk": 500
   },
-  "fabric.c18.m256.d2000": {
+  "fabric.c18.m256.d1000": {
     "core": 18,
     "ram": 256,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c18.m384.d10": {
     "core": 18,
@@ -1274,10 +1274,10 @@
     "ram": 384,
     "disk": 500
   },
-  "fabric.c18.m384.d2000": {
+  "fabric.c18.m384.d1000": {
     "core": 18,
     "ram": 384,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c20.m4.d10": {
     "core": 20,
@@ -1294,10 +1294,10 @@
     "ram": 4,
     "disk": 500
   },
-  "fabric.c20.m4.d2000": {
+  "fabric.c20.m4.d1000": {
     "core": 20,
     "ram": 4,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c20.m8.d10": {
     "core": 20,
@@ -1314,10 +1314,10 @@
     "ram": 8,
     "disk": 500
   },
-  "fabric.c20.m8.d2000": {
+  "fabric.c20.m8.d1000": {
     "core": 20,
     "ram": 8,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c20.m16.d10": {
     "core": 20,
@@ -1334,10 +1334,10 @@
     "ram": 16,
     "disk": 500
   },
-  "fabric.c20.m16.d2000": {
+  "fabric.c20.m16.d1000": {
     "core": 20,
     "ram": 16,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c20.m32.d10": {
     "core": 20,
@@ -1354,10 +1354,10 @@
     "ram": 32,
     "disk": 500
   },
-  "fabric.c20.m32.d2000": {
+  "fabric.c20.m32.d1000": {
     "core": 20,
     "ram": 32,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c20.m64.d10": {
     "core": 20,
@@ -1374,10 +1374,10 @@
     "ram": 64,
     "disk": 500
   },
-  "fabric.c20.m64.d2000": {
+  "fabric.c20.m64.d1000": {
     "core": 20,
     "ram": 64,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c20.m128.d10": {
     "core": 20,
@@ -1394,10 +1394,10 @@
     "ram": 128,
     "disk": 500
   },
-  "fabric.c20.m128.d2000": {
+  "fabric.c20.m128.d1000": {
     "core": 20,
     "ram": 128,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c20.m256.d10": {
     "core": 20,
@@ -1414,10 +1414,10 @@
     "ram": 256,
     "disk": 500
   },
-  "fabric.c20.m256.d2000": {
+  "fabric.c20.m256.d1000": {
     "core": 20,
     "ram": 256,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c20.m384.d10": {
     "core": 20,
@@ -1434,10 +1434,10 @@
     "ram": 384,
     "disk": 500
   },
-  "fabric.c20.m384.d2000": {
+  "fabric.c20.m384.d1000": {
     "core": 20,
     "ram": 384,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c22.m4.d10": {
     "core": 22,
@@ -1454,10 +1454,10 @@
     "ram": 4,
     "disk": 500
   },
-  "fabric.c22.m4.d2000": {
+  "fabric.c22.m4.d1000": {
     "core": 22,
     "ram": 4,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c22.m8.d10": {
     "core": 22,
@@ -1474,10 +1474,10 @@
     "ram": 8,
     "disk": 500
   },
-  "fabric.c22.m8.d2000": {
+  "fabric.c22.m8.d1000": {
     "core": 22,
     "ram": 8,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c22.m16.d10": {
     "core": 22,
@@ -1494,10 +1494,10 @@
     "ram": 16,
     "disk": 500
   },
-  "fabric.c22.m16.d2000": {
+  "fabric.c22.m16.d1000": {
     "core": 22,
     "ram": 16,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c22.m32.d10": {
     "core": 22,
@@ -1514,10 +1514,10 @@
     "ram": 32,
     "disk": 500
   },
-  "fabric.c22.m32.d2000": {
+  "fabric.c22.m32.d1000": {
     "core": 22,
     "ram": 32,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c22.m64.d10": {
     "core": 22,
@@ -1534,10 +1534,10 @@
     "ram": 64,
     "disk": 500
   },
-  "fabric.c22.m64.d2000": {
+  "fabric.c22.m64.d1000": {
     "core": 22,
     "ram": 64,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c22.m128.d10": {
     "core": 22,
@@ -1554,10 +1554,10 @@
     "ram": 128,
     "disk": 500
   },
-  "fabric.c22.m128.d2000": {
+  "fabric.c22.m128.d1000": {
     "core": 22,
     "ram": 128,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c22.m256.d10": {
     "core": 22,
@@ -1574,10 +1574,10 @@
     "ram": 256,
     "disk": 500
   },
-  "fabric.c22.m256.d2000": {
+  "fabric.c22.m256.d1000": {
     "core": 22,
     "ram": 256,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c22.m384.d10": {
     "core": 22,
@@ -1594,10 +1594,10 @@
     "ram": 384,
     "disk": 500
   },
-  "fabric.c22.m384.d2000": {
+  "fabric.c22.m384.d1000": {
     "core": 22,
     "ram": 384,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c24.m4.d10": {
     "core": 24,
@@ -1614,10 +1614,10 @@
     "ram": 4,
     "disk": 500
   },
-  "fabric.c24.m4.d2000": {
+  "fabric.c24.m4.d1000": {
     "core": 24,
     "ram": 4,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c24.m8.d10": {
     "core": 24,
@@ -1634,10 +1634,10 @@
     "ram": 8,
     "disk": 500
   },
-  "fabric.c24.m8.d2000": {
+  "fabric.c24.m8.d1000": {
     "core": 24,
     "ram": 8,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c24.m16.d10": {
     "core": 24,
@@ -1654,10 +1654,10 @@
     "ram": 16,
     "disk": 500
   },
-  "fabric.c24.m16.d2000": {
+  "fabric.c24.m16.d1000": {
     "core": 24,
     "ram": 16,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c24.m32.d10": {
     "core": 24,
@@ -1674,10 +1674,10 @@
     "ram": 32,
     "disk": 500
   },
-  "fabric.c24.m32.d2000": {
+  "fabric.c24.m32.d1000": {
     "core": 24,
     "ram": 32,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c24.m64.d10": {
     "core": 24,
@@ -1694,10 +1694,10 @@
     "ram": 64,
     "disk": 500
   },
-  "fabric.c24.m64.d2000": {
+  "fabric.c24.m64.d1000": {
     "core": 24,
     "ram": 64,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c24.m128.d10": {
     "core": 24,
@@ -1714,10 +1714,10 @@
     "ram": 128,
     "disk": 500
   },
-  "fabric.c24.m128.d2000": {
+  "fabric.c24.m128.d1000": {
     "core": 24,
     "ram": 128,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c24.m256.d10": {
     "core": 24,
@@ -1734,10 +1734,10 @@
     "ram": 256,
     "disk": 500
   },
-  "fabric.c24.m256.d2000": {
+  "fabric.c24.m256.d1000": {
     "core": 24,
     "ram": 256,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c24.m384.d10": {
     "core": 24,
@@ -1754,10 +1754,10 @@
     "ram": 384,
     "disk": 500
   },
-  "fabric.c24.m384.d2000": {
+  "fabric.c24.m384.d1000": {
     "core": 24,
     "ram": 384,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c26.m4.d10": {
     "core": 26,
@@ -1774,10 +1774,10 @@
     "ram": 4,
     "disk": 500
   },
-  "fabric.c26.m4.d2000": {
+  "fabric.c26.m4.d1000": {
     "core": 26,
     "ram": 4,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c26.m8.d10": {
     "core": 26,
@@ -1794,10 +1794,10 @@
     "ram": 8,
     "disk": 500
   },
-  "fabric.c26.m8.d2000": {
+  "fabric.c26.m8.d1000": {
     "core": 26,
     "ram": 8,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c26.m16.d10": {
     "core": 26,
@@ -1814,10 +1814,10 @@
     "ram": 16,
     "disk": 500
   },
-  "fabric.c26.m16.d2000": {
+  "fabric.c26.m16.d1000": {
     "core": 26,
     "ram": 16,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c26.m32.d10": {
     "core": 26,
@@ -1834,10 +1834,10 @@
     "ram": 32,
     "disk": 500
   },
-  "fabric.c26.m32.d2000": {
+  "fabric.c26.m32.d1000": {
     "core": 26,
     "ram": 32,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c26.m64.d10": {
     "core": 26,
@@ -1854,10 +1854,10 @@
     "ram": 64,
     "disk": 500
   },
-  "fabric.c26.m64.d2000": {
+  "fabric.c26.m64.d1000": {
     "core": 26,
     "ram": 64,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c26.m128.d10": {
     "core": 26,
@@ -1874,10 +1874,10 @@
     "ram": 128,
     "disk": 500
   },
-  "fabric.c26.m128.d2000": {
+  "fabric.c26.m128.d1000": {
     "core": 26,
     "ram": 128,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c26.m256.d10": {
     "core": 26,
@@ -1894,10 +1894,10 @@
     "ram": 256,
     "disk": 500
   },
-  "fabric.c26.m256.d2000": {
+  "fabric.c26.m256.d1000": {
     "core": 26,
     "ram": 256,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c26.m384.d10": {
     "core": 26,
@@ -1914,10 +1914,10 @@
     "ram": 384,
     "disk": 500
   },
-  "fabric.c26.m384.d2000": {
+  "fabric.c26.m384.d1000": {
     "core": 26,
     "ram": 384,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c28.m4.d10": {
     "core": 28,
@@ -1934,10 +1934,10 @@
     "ram": 4,
     "disk": 500
   },
-  "fabric.c28.m4.d2000": {
+  "fabric.c28.m4.d1000": {
     "core": 28,
     "ram": 4,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c28.m8.d10": {
     "core": 28,
@@ -1954,10 +1954,10 @@
     "ram": 8,
     "disk": 500
   },
-  "fabric.c28.m8.d2000": {
+  "fabric.c28.m8.d1000": {
     "core": 28,
     "ram": 8,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c28.m16.d10": {
     "core": 28,
@@ -1974,10 +1974,10 @@
     "ram": 16,
     "disk": 500
   },
-  "fabric.c28.m16.d2000": {
+  "fabric.c28.m16.d1000": {
     "core": 28,
     "ram": 16,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c28.m32.d10": {
     "core": 28,
@@ -1994,10 +1994,10 @@
     "ram": 32,
     "disk": 500
   },
-  "fabric.c28.m32.d2000": {
+  "fabric.c28.m32.d1000": {
     "core": 28,
     "ram": 32,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c28.m64.d10": {
     "core": 28,
@@ -2014,10 +2014,10 @@
     "ram": 64,
     "disk": 500
   },
-  "fabric.c28.m64.d2000": {
+  "fabric.c28.m64.d1000": {
     "core": 28,
     "ram": 64,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c28.m128.d10": {
     "core": 28,
@@ -2034,10 +2034,10 @@
     "ram": 128,
     "disk": 500
   },
-  "fabric.c28.m128.d2000": {
+  "fabric.c28.m128.d1000": {
     "core": 28,
     "ram": 128,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c28.m256.d10": {
     "core": 28,
@@ -2054,10 +2054,10 @@
     "ram": 256,
     "disk": 500
   },
-  "fabric.c28.m256.d2000": {
+  "fabric.c28.m256.d1000": {
     "core": 28,
     "ram": 256,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c28.m384.d10": {
     "core": 28,
@@ -2074,10 +2074,10 @@
     "ram": 384,
     "disk": 500
   },
-  "fabric.c28.m384.d2000": {
+  "fabric.c28.m384.d1000": {
     "core": 28,
     "ram": 384,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c30.m4.d10": {
     "core": 30,
@@ -2094,10 +2094,10 @@
     "ram": 4,
     "disk": 500
   },
-  "fabric.c30.m4.d2000": {
+  "fabric.c30.m4.d1000": {
     "core": 30,
     "ram": 4,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c30.m8.d10": {
     "core": 30,
@@ -2114,10 +2114,10 @@
     "ram": 8,
     "disk": 500
   },
-  "fabric.c30.m8.d2000": {
+  "fabric.c30.m8.d1000": {
     "core": 30,
     "ram": 8,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c30.m16.d10": {
     "core": 30,
@@ -2134,10 +2134,10 @@
     "ram": 16,
     "disk": 500
   },
-  "fabric.c30.m16.d2000": {
+  "fabric.c30.m16.d1000": {
     "core": 30,
     "ram": 16,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c30.m32.d10": {
     "core": 30,
@@ -2154,10 +2154,10 @@
     "ram": 32,
     "disk": 500
   },
-  "fabric.c30.m32.d2000": {
+  "fabric.c30.m32.d1000": {
     "core": 30,
     "ram": 32,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c30.m64.d10": {
     "core": 30,
@@ -2174,10 +2174,10 @@
     "ram": 64,
     "disk": 500
   },
-  "fabric.c30.m64.d2000": {
+  "fabric.c30.m64.d1000": {
     "core": 30,
     "ram": 64,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c30.m128.d10": {
     "core": 30,
@@ -2194,10 +2194,10 @@
     "ram": 128,
     "disk": 500
   },
-  "fabric.c30.m128.d2000": {
+  "fabric.c30.m128.d1000": {
     "core": 30,
     "ram": 128,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c30.m256.d10": {
     "core": 30,
@@ -2214,10 +2214,10 @@
     "ram": 256,
     "disk": 500
   },
-  "fabric.c30.m256.d2000": {
+  "fabric.c30.m256.d1000": {
     "core": 30,
     "ram": 256,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c30.m384.d10": {
     "core": 30,
@@ -2234,10 +2234,10 @@
     "ram": 384,
     "disk": 500
   },
-  "fabric.c30.m384.d2000": {
+  "fabric.c30.m384.d1000": {
     "core": 30,
     "ram": 384,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c32.m4.d10": {
     "core": 32,
@@ -2254,10 +2254,10 @@
     "ram": 4,
     "disk": 500
   },
-  "fabric.c32.m4.d2000": {
+  "fabric.c32.m4.d1000": {
     "core": 32,
     "ram": 4,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c32.m8.d10": {
     "core": 32,
@@ -2274,10 +2274,10 @@
     "ram": 8,
     "disk": 500
   },
-  "fabric.c32.m8.d2000": {
+  "fabric.c32.m8.d1000": {
     "core": 32,
     "ram": 8,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c32.m16.d10": {
     "core": 32,
@@ -2294,10 +2294,10 @@
     "ram": 16,
     "disk": 500
   },
-  "fabric.c32.m16.d2000": {
+  "fabric.c32.m16.d1000": {
     "core": 32,
     "ram": 16,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c32.m32.d10": {
     "core": 32,
@@ -2314,10 +2314,10 @@
     "ram": 32,
     "disk": 500
   },
-  "fabric.c32.m32.d2000": {
+  "fabric.c32.m32.d1000": {
     "core": 32,
     "ram": 32,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c32.m64.d10": {
     "core": 32,
@@ -2334,10 +2334,10 @@
     "ram": 64,
     "disk": 500
   },
-  "fabric.c32.m64.d2000": {
+  "fabric.c32.m64.d1000": {
     "core": 32,
     "ram": 64,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c32.m128.d10": {
     "core": 32,
@@ -2354,10 +2354,10 @@
     "ram": 128,
     "disk": 500
   },
-  "fabric.c32.m128.d2000": {
+  "fabric.c32.m128.d1000": {
     "core": 32,
     "ram": 128,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c32.m256.d10": {
     "core": 32,
@@ -2374,10 +2374,10 @@
     "ram": 256,
     "disk": 500
   },
-  "fabric.c32.m256.d2000": {
+  "fabric.c32.m256.d1000": {
     "core": 32,
     "ram": 256,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c32.m384.d10": {
     "core": 32,
@@ -2394,10 +2394,10 @@
     "ram": 384,
     "disk": 500
   },
-  "fabric.c32.m384.d2000": {
+  "fabric.c32.m384.d1000": {
     "core": 32,
     "ram": 384,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c34.m4.d10": {
     "core": 34,
@@ -2414,10 +2414,10 @@
     "ram": 4,
     "disk": 500
   },
-  "fabric.c34.m4.d2000": {
+  "fabric.c34.m4.d1000": {
     "core": 34,
     "ram": 4,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c34.m8.d10": {
     "core": 34,
@@ -2434,10 +2434,10 @@
     "ram": 8,
     "disk": 500
   },
-  "fabric.c34.m8.d2000": {
+  "fabric.c34.m8.d1000": {
     "core": 34,
     "ram": 8,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c34.m16.d10": {
     "core": 34,
@@ -2454,10 +2454,10 @@
     "ram": 16,
     "disk": 500
   },
-  "fabric.c34.m16.d2000": {
+  "fabric.c34.m16.d1000": {
     "core": 34,
     "ram": 16,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c34.m32.d10": {
     "core": 34,
@@ -2474,10 +2474,10 @@
     "ram": 32,
     "disk": 500
   },
-  "fabric.c34.m32.d2000": {
+  "fabric.c34.m32.d1000": {
     "core": 34,
     "ram": 32,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c34.m64.d10": {
     "core": 34,
@@ -2494,10 +2494,10 @@
     "ram": 64,
     "disk": 500
   },
-  "fabric.c34.m64.d2000": {
+  "fabric.c34.m64.d1000": {
     "core": 34,
     "ram": 64,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c34.m128.d10": {
     "core": 34,
@@ -2514,10 +2514,10 @@
     "ram": 128,
     "disk": 500
   },
-  "fabric.c34.m128.d2000": {
+  "fabric.c34.m128.d1000": {
     "core": 34,
     "ram": 128,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c34.m256.d10": {
     "core": 34,
@@ -2534,10 +2534,10 @@
     "ram": 256,
     "disk": 500
   },
-  "fabric.c34.m256.d2000": {
+  "fabric.c34.m256.d1000": {
     "core": 34,
     "ram": 256,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c34.m384.d10": {
     "core": 34,
@@ -2554,10 +2554,10 @@
     "ram": 384,
     "disk": 500
   },
-  "fabric.c34.m384.d2000": {
+  "fabric.c34.m384.d1000": {
     "core": 34,
     "ram": 384,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c36.m4.d10": {
     "core": 36,
@@ -2574,10 +2574,10 @@
     "ram": 4,
     "disk": 500
   },
-  "fabric.c36.m4.d2000": {
+  "fabric.c36.m4.d1000": {
     "core": 36,
     "ram": 4,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c36.m8.d10": {
     "core": 36,
@@ -2594,10 +2594,10 @@
     "ram": 8,
     "disk": 500
   },
-  "fabric.c36.m8.d2000": {
+  "fabric.c36.m8.d1000": {
     "core": 36,
     "ram": 8,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c36.m16.d10": {
     "core": 36,
@@ -2614,10 +2614,10 @@
     "ram": 16,
     "disk": 500
   },
-  "fabric.c36.m16.d2000": {
+  "fabric.c36.m16.d1000": {
     "core": 36,
     "ram": 16,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c36.m32.d10": {
     "core": 36,
@@ -2634,10 +2634,10 @@
     "ram": 32,
     "disk": 500
   },
-  "fabric.c36.m32.d2000": {
+  "fabric.c36.m32.d1000": {
     "core": 36,
     "ram": 32,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c36.m64.d10": {
     "core": 36,
@@ -2654,10 +2654,10 @@
     "ram": 64,
     "disk": 500
   },
-  "fabric.c36.m64.d2000": {
+  "fabric.c36.m64.d1000": {
     "core": 36,
     "ram": 64,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c36.m128.d10": {
     "core": 36,
@@ -2674,10 +2674,10 @@
     "ram": 128,
     "disk": 500
   },
-  "fabric.c36.m128.d2000": {
+  "fabric.c36.m128.d1000": {
     "core": 36,
     "ram": 128,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c36.m256.d10": {
     "core": 36,
@@ -2694,10 +2694,10 @@
     "ram": 256,
     "disk": 500
   },
-  "fabric.c36.m256.d2000": {
+  "fabric.c36.m256.d1000": {
     "core": 36,
     "ram": 256,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c36.m384.d10": {
     "core": 36,
@@ -2714,10 +2714,10 @@
     "ram": 384,
     "disk": 500
   },
-  "fabric.c36.m384.d2000": {
+  "fabric.c36.m384.d1000": {
     "core": 36,
     "ram": 384,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c38.m4.d10": {
     "core": 38,
@@ -2734,10 +2734,10 @@
     "ram": 4,
     "disk": 500
   },
-  "fabric.c38.m4.d2000": {
+  "fabric.c38.m4.d1000": {
     "core": 38,
     "ram": 4,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c38.m8.d10": {
     "core": 38,
@@ -2754,10 +2754,10 @@
     "ram": 8,
     "disk": 500
   },
-  "fabric.c38.m8.d2000": {
+  "fabric.c38.m8.d1000": {
     "core": 38,
     "ram": 8,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c38.m16.d10": {
     "core": 38,
@@ -2774,10 +2774,10 @@
     "ram": 16,
     "disk": 500
   },
-  "fabric.c38.m16.d2000": {
+  "fabric.c38.m16.d1000": {
     "core": 38,
     "ram": 16,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c38.m32.d10": {
     "core": 38,
@@ -2794,10 +2794,10 @@
     "ram": 32,
     "disk": 500
   },
-  "fabric.c38.m32.d2000": {
+  "fabric.c38.m32.d1000": {
     "core": 38,
     "ram": 32,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c38.m64.d10": {
     "core": 38,
@@ -2814,10 +2814,10 @@
     "ram": 64,
     "disk": 500
   },
-  "fabric.c38.m64.d2000": {
+  "fabric.c38.m64.d1000": {
     "core": 38,
     "ram": 64,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c38.m128.d10": {
     "core": 38,
@@ -2834,10 +2834,10 @@
     "ram": 128,
     "disk": 500
   },
-  "fabric.c38.m128.d2000": {
+  "fabric.c38.m128.d1000": {
     "core": 38,
     "ram": 128,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c38.m256.d10": {
     "core": 38,
@@ -2854,10 +2854,10 @@
     "ram": 256,
     "disk": 500
   },
-  "fabric.c38.m256.d2000": {
+  "fabric.c38.m256.d1000": {
     "core": 38,
     "ram": 256,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c38.m384.d10": {
     "core": 38,
@@ -2874,10 +2874,10 @@
     "ram": 384,
     "disk": 500
   },
-  "fabric.c38.m384.d2000": {
+  "fabric.c38.m384.d1000": {
     "core": 38,
     "ram": 384,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c40.m4.d10": {
     "core": 40,
@@ -2894,10 +2894,10 @@
     "ram": 4,
     "disk": 500
   },
-  "fabric.c40.m4.d2000": {
+  "fabric.c40.m4.d1000": {
     "core": 40,
     "ram": 4,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c40.m8.d10": {
     "core": 40,
@@ -2914,10 +2914,10 @@
     "ram": 8,
     "disk": 500
   },
-  "fabric.c40.m8.d2000": {
+  "fabric.c40.m8.d1000": {
     "core": 40,
     "ram": 8,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c40.m16.d10": {
     "core": 40,
@@ -2934,10 +2934,10 @@
     "ram": 16,
     "disk": 500
   },
-  "fabric.c40.m16.d2000": {
+  "fabric.c40.m16.d1000": {
     "core": 40,
     "ram": 16,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c40.m32.d10": {
     "core": 40,
@@ -2954,10 +2954,10 @@
     "ram": 32,
     "disk": 500
   },
-  "fabric.c40.m32.d2000": {
+  "fabric.c40.m32.d1000": {
     "core": 40,
     "ram": 32,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c40.m64.d10": {
     "core": 40,
@@ -2974,10 +2974,10 @@
     "ram": 64,
     "disk": 500
   },
-  "fabric.c40.m64.d2000": {
+  "fabric.c40.m64.d1000": {
     "core": 40,
     "ram": 64,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c40.m128.d10": {
     "core": 40,
@@ -2994,10 +2994,10 @@
     "ram": 128,
     "disk": 500
   },
-  "fabric.c40.m128.d2000": {
+  "fabric.c40.m128.d1000": {
     "core": 40,
     "ram": 128,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c40.m256.d10": {
     "core": 40,
@@ -3014,10 +3014,10 @@
     "ram": 256,
     "disk": 500
   },
-  "fabric.c40.m256.d2000": {
+  "fabric.c40.m256.d1000": {
     "core": 40,
     "ram": 256,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c40.m384.d10": {
     "core": 40,
@@ -3034,10 +3034,10 @@
     "ram": 384,
     "disk": 500
   },
-  "fabric.c40.m384.d2000": {
+  "fabric.c40.m384.d1000": {
     "core": 40,
     "ram": 384,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c42.m4.d10": {
     "core": 42,
@@ -3054,10 +3054,10 @@
     "ram": 4,
     "disk": 500
   },
-  "fabric.c42.m4.d2000": {
+  "fabric.c42.m4.d1000": {
     "core": 42,
     "ram": 4,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c42.m8.d10": {
     "core": 42,
@@ -3074,10 +3074,10 @@
     "ram": 8,
     "disk": 500
   },
-  "fabric.c42.m8.d2000": {
+  "fabric.c42.m8.d1000": {
     "core": 42,
     "ram": 8,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c42.m16.d10": {
     "core": 42,
@@ -3094,10 +3094,10 @@
     "ram": 16,
     "disk": 500
   },
-  "fabric.c42.m16.d2000": {
+  "fabric.c42.m16.d1000": {
     "core": 42,
     "ram": 16,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c42.m32.d10": {
     "core": 42,
@@ -3114,10 +3114,10 @@
     "ram": 32,
     "disk": 500
   },
-  "fabric.c42.m32.d2000": {
+  "fabric.c42.m32.d1000": {
     "core": 42,
     "ram": 32,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c42.m64.d10": {
     "core": 42,
@@ -3134,10 +3134,10 @@
     "ram": 64,
     "disk": 500
   },
-  "fabric.c42.m64.d2000": {
+  "fabric.c42.m64.d1000": {
     "core": 42,
     "ram": 64,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c42.m128.d10": {
     "core": 42,
@@ -3154,10 +3154,10 @@
     "ram": 128,
     "disk": 500
   },
-  "fabric.c42.m128.d2000": {
+  "fabric.c42.m128.d1000": {
     "core": 42,
     "ram": 128,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c42.m256.d10": {
     "core": 42,
@@ -3174,10 +3174,10 @@
     "ram": 256,
     "disk": 500
   },
-  "fabric.c42.m256.d2000": {
+  "fabric.c42.m256.d1000": {
     "core": 42,
     "ram": 256,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c42.m384.d10": {
     "core": 42,
@@ -3194,10 +3194,10 @@
     "ram": 384,
     "disk": 500
   },
-  "fabric.c42.m384.d2000": {
+  "fabric.c42.m384.d1000": {
     "core": 42,
     "ram": 384,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c44.m4.d10": {
     "core": 44,
@@ -3214,10 +3214,10 @@
     "ram": 4,
     "disk": 500
   },
-  "fabric.c44.m4.d2000": {
+  "fabric.c44.m4.d1000": {
     "core": 44,
     "ram": 4,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c44.m8.d10": {
     "core": 44,
@@ -3234,10 +3234,10 @@
     "ram": 8,
     "disk": 500
   },
-  "fabric.c44.m8.d2000": {
+  "fabric.c44.m8.d1000": {
     "core": 44,
     "ram": 8,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c44.m16.d10": {
     "core": 44,
@@ -3254,10 +3254,10 @@
     "ram": 16,
     "disk": 500
   },
-  "fabric.c44.m16.d2000": {
+  "fabric.c44.m16.d1000": {
     "core": 44,
     "ram": 16,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c44.m32.d10": {
     "core": 44,
@@ -3274,10 +3274,10 @@
     "ram": 32,
     "disk": 500
   },
-  "fabric.c44.m32.d2000": {
+  "fabric.c44.m32.d1000": {
     "core": 44,
     "ram": 32,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c44.m64.d10": {
     "core": 44,
@@ -3294,10 +3294,10 @@
     "ram": 64,
     "disk": 500
   },
-  "fabric.c44.m64.d2000": {
+  "fabric.c44.m64.d1000": {
     "core": 44,
     "ram": 64,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c44.m128.d10": {
     "core": 44,
@@ -3314,10 +3314,10 @@
     "ram": 128,
     "disk": 500
   },
-  "fabric.c44.m128.d2000": {
+  "fabric.c44.m128.d1000": {
     "core": 44,
     "ram": 128,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c44.m256.d10": {
     "core": 44,
@@ -3334,10 +3334,10 @@
     "ram": 256,
     "disk": 500
   },
-  "fabric.c44.m256.d2000": {
+  "fabric.c44.m256.d1000": {
     "core": 44,
     "ram": 256,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c44.m384.d10": {
     "core": 44,
@@ -3354,10 +3354,10 @@
     "ram": 384,
     "disk": 500
   },
-  "fabric.c44.m384.d2000": {
+  "fabric.c44.m384.d1000": {
     "core": 44,
     "ram": 384,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c46.m4.d10": {
     "core": 46,
@@ -3374,10 +3374,10 @@
     "ram": 4,
     "disk": 500
   },
-  "fabric.c46.m4.d2000": {
+  "fabric.c46.m4.d1000": {
     "core": 46,
     "ram": 4,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c46.m8.d10": {
     "core": 46,
@@ -3394,10 +3394,10 @@
     "ram": 8,
     "disk": 500
   },
-  "fabric.c46.m8.d2000": {
+  "fabric.c46.m8.d1000": {
     "core": 46,
     "ram": 8,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c46.m16.d10": {
     "core": 46,
@@ -3414,10 +3414,10 @@
     "ram": 16,
     "disk": 500
   },
-  "fabric.c46.m16.d2000": {
+  "fabric.c46.m16.d1000": {
     "core": 46,
     "ram": 16,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c46.m32.d10": {
     "core": 46,
@@ -3434,10 +3434,10 @@
     "ram": 32,
     "disk": 500
   },
-  "fabric.c46.m32.d2000": {
+  "fabric.c46.m32.d1000": {
     "core": 46,
     "ram": 32,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c46.m64.d10": {
     "core": 46,
@@ -3454,10 +3454,10 @@
     "ram": 64,
     "disk": 500
   },
-  "fabric.c46.m64.d2000": {
+  "fabric.c46.m64.d1000": {
     "core": 46,
     "ram": 64,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c46.m128.d10": {
     "core": 46,
@@ -3474,10 +3474,10 @@
     "ram": 128,
     "disk": 500
   },
-  "fabric.c46.m128.d2000": {
+  "fabric.c46.m128.d1000": {
     "core": 46,
     "ram": 128,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c46.m256.d10": {
     "core": 46,
@@ -3494,10 +3494,10 @@
     "ram": 256,
     "disk": 500
   },
-  "fabric.c46.m256.d2000": {
+  "fabric.c46.m256.d1000": {
     "core": 46,
     "ram": 256,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c46.m384.d10": {
     "core": 46,
@@ -3514,10 +3514,10 @@
     "ram": 384,
     "disk": 500
   },
-  "fabric.c46.m384.d2000": {
+  "fabric.c46.m384.d1000": {
     "core": 46,
     "ram": 384,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c48.m4.d10": {
     "core": 48,
@@ -3534,10 +3534,10 @@
     "ram": 4,
     "disk": 500
   },
-  "fabric.c48.m4.d2000": {
+  "fabric.c48.m4.d1000": {
     "core": 48,
     "ram": 4,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c48.m8.d10": {
     "core": 48,
@@ -3554,10 +3554,10 @@
     "ram": 8,
     "disk": 500
   },
-  "fabric.c48.m8.d2000": {
+  "fabric.c48.m8.d1000": {
     "core": 48,
     "ram": 8,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c48.m16.d10": {
     "core": 48,
@@ -3574,10 +3574,10 @@
     "ram": 16,
     "disk": 500
   },
-  "fabric.c48.m16.d2000": {
+  "fabric.c48.m16.d1000": {
     "core": 48,
     "ram": 16,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c48.m32.d10": {
     "core": 48,
@@ -3594,10 +3594,10 @@
     "ram": 32,
     "disk": 500
   },
-  "fabric.c48.m32.d2000": {
+  "fabric.c48.m32.d1000": {
     "core": 48,
     "ram": 32,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c48.m64.d10": {
     "core": 48,
@@ -3614,10 +3614,10 @@
     "ram": 64,
     "disk": 500
   },
-  "fabric.c48.m64.d2000": {
+  "fabric.c48.m64.d1000": {
     "core": 48,
     "ram": 64,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c48.m128.d10": {
     "core": 48,
@@ -3634,10 +3634,10 @@
     "ram": 128,
     "disk": 500
   },
-  "fabric.c48.m128.d2000": {
+  "fabric.c48.m128.d1000": {
     "core": 48,
     "ram": 128,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c48.m256.d10": {
     "core": 48,
@@ -3654,10 +3654,10 @@
     "ram": 256,
     "disk": 500
   },
-  "fabric.c48.m256.d2000": {
+  "fabric.c48.m256.d1000": {
     "core": 48,
     "ram": 256,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c48.m384.d10": {
     "core": 48,
@@ -3674,10 +3674,10 @@
     "ram": 384,
     "disk": 500
   },
-  "fabric.c48.m384.d2000": {
+  "fabric.c48.m384.d1000": {
     "core": 48,
     "ram": 384,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c50.m4.d10": {
     "core": 50,
@@ -3694,10 +3694,10 @@
     "ram": 4,
     "disk": 500
   },
-  "fabric.c50.m4.d2000": {
+  "fabric.c50.m4.d1000": {
     "core": 50,
     "ram": 4,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c50.m8.d10": {
     "core": 50,
@@ -3714,10 +3714,10 @@
     "ram": 8,
     "disk": 500
   },
-  "fabric.c50.m8.d2000": {
+  "fabric.c50.m8.d1000": {
     "core": 50,
     "ram": 8,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c50.m16.d10": {
     "core": 50,
@@ -3734,10 +3734,10 @@
     "ram": 16,
     "disk": 500
   },
-  "fabric.c50.m16.d2000": {
+  "fabric.c50.m16.d1000": {
     "core": 50,
     "ram": 16,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c50.m32.d10": {
     "core": 50,
@@ -3754,10 +3754,10 @@
     "ram": 32,
     "disk": 500
   },
-  "fabric.c50.m32.d2000": {
+  "fabric.c50.m32.d1000": {
     "core": 50,
     "ram": 32,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c50.m64.d10": {
     "core": 50,
@@ -3774,10 +3774,10 @@
     "ram": 64,
     "disk": 500
   },
-  "fabric.c50.m64.d2000": {
+  "fabric.c50.m64.d1000": {
     "core": 50,
     "ram": 64,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c50.m128.d10": {
     "core": 50,
@@ -3794,10 +3794,10 @@
     "ram": 128,
     "disk": 500
   },
-  "fabric.c50.m128.d2000": {
+  "fabric.c50.m128.d1000": {
     "core": 50,
     "ram": 128,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c50.m256.d10": {
     "core": 50,
@@ -3814,10 +3814,10 @@
     "ram": 256,
     "disk": 500
   },
-  "fabric.c50.m256.d2000": {
+  "fabric.c50.m256.d1000": {
     "core": 50,
     "ram": 256,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c50.m384.d10": {
     "core": 50,
@@ -3834,10 +3834,10 @@
     "ram": 384,
     "disk": 500
   },
-  "fabric.c50.m384.d2000": {
+  "fabric.c50.m384.d1000": {
     "core": 50,
     "ram": 384,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c52.m4.d10": {
     "core": 52,
@@ -3854,10 +3854,10 @@
     "ram": 4,
     "disk": 500
   },
-  "fabric.c52.m4.d2000": {
+  "fabric.c52.m4.d1000": {
     "core": 52,
     "ram": 4,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c52.m8.d10": {
     "core": 52,
@@ -3874,10 +3874,10 @@
     "ram": 8,
     "disk": 500
   },
-  "fabric.c52.m8.d2000": {
+  "fabric.c52.m8.d1000": {
     "core": 52,
     "ram": 8,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c52.m16.d10": {
     "core": 52,
@@ -3894,10 +3894,10 @@
     "ram": 16,
     "disk": 500
   },
-  "fabric.c52.m16.d2000": {
+  "fabric.c52.m16.d1000": {
     "core": 52,
     "ram": 16,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c52.m32.d10": {
     "core": 52,
@@ -3914,10 +3914,10 @@
     "ram": 32,
     "disk": 500
   },
-  "fabric.c52.m32.d2000": {
+  "fabric.c52.m32.d1000": {
     "core": 52,
     "ram": 32,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c52.m64.d10": {
     "core": 52,
@@ -3934,10 +3934,10 @@
     "ram": 64,
     "disk": 500
   },
-  "fabric.c52.m64.d2000": {
+  "fabric.c52.m64.d1000": {
     "core": 52,
     "ram": 64,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c52.m128.d10": {
     "core": 52,
@@ -3954,10 +3954,10 @@
     "ram": 128,
     "disk": 500
   },
-  "fabric.c52.m128.d2000": {
+  "fabric.c52.m128.d1000": {
     "core": 52,
     "ram": 128,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c52.m256.d10": {
     "core": 52,
@@ -3974,10 +3974,10 @@
     "ram": 256,
     "disk": 500
   },
-  "fabric.c52.m256.d2000": {
+  "fabric.c52.m256.d1000": {
     "core": 52,
     "ram": 256,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c52.m384.d10": {
     "core": 52,
@@ -3994,10 +3994,10 @@
     "ram": 384,
     "disk": 500
   },
-  "fabric.c52.m384.d2000": {
+  "fabric.c52.m384.d1000": {
     "core": 52,
     "ram": 384,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c54.m4.d10": {
     "core": 54,
@@ -4014,10 +4014,10 @@
     "ram": 4,
     "disk": 500
   },
-  "fabric.c54.m4.d2000": {
+  "fabric.c54.m4.d1000": {
     "core": 54,
     "ram": 4,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c54.m8.d10": {
     "core": 54,
@@ -4034,10 +4034,10 @@
     "ram": 8,
     "disk": 500
   },
-  "fabric.c54.m8.d2000": {
+  "fabric.c54.m8.d1000": {
     "core": 54,
     "ram": 8,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c54.m16.d10": {
     "core": 54,
@@ -4054,10 +4054,10 @@
     "ram": 16,
     "disk": 500
   },
-  "fabric.c54.m16.d2000": {
+  "fabric.c54.m16.d1000": {
     "core": 54,
     "ram": 16,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c54.m32.d10": {
     "core": 54,
@@ -4074,10 +4074,10 @@
     "ram": 32,
     "disk": 500
   },
-  "fabric.c54.m32.d2000": {
+  "fabric.c54.m32.d1000": {
     "core": 54,
     "ram": 32,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c54.m64.d10": {
     "core": 54,
@@ -4094,10 +4094,10 @@
     "ram": 64,
     "disk": 500
   },
-  "fabric.c54.m64.d2000": {
+  "fabric.c54.m64.d1000": {
     "core": 54,
     "ram": 64,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c54.m128.d10": {
     "core": 54,
@@ -4114,10 +4114,10 @@
     "ram": 128,
     "disk": 500
   },
-  "fabric.c54.m128.d2000": {
+  "fabric.c54.m128.d1000": {
     "core": 54,
     "ram": 128,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c54.m256.d10": {
     "core": 54,
@@ -4134,10 +4134,10 @@
     "ram": 256,
     "disk": 500
   },
-  "fabric.c54.m256.d2000": {
+  "fabric.c54.m256.d1000": {
     "core": 54,
     "ram": 256,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c54.m384.d10": {
     "core": 54,
@@ -4154,10 +4154,10 @@
     "ram": 384,
     "disk": 500
   },
-  "fabric.c54.m384.d2000": {
+  "fabric.c54.m384.d1000": {
     "core": 54,
     "ram": 384,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c56.m4.d10": {
     "core": 56,
@@ -4174,10 +4174,10 @@
     "ram": 4,
     "disk": 500
   },
-  "fabric.c56.m4.d2000": {
+  "fabric.c56.m4.d1000": {
     "core": 56,
     "ram": 4,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c56.m8.d10": {
     "core": 56,
@@ -4194,10 +4194,10 @@
     "ram": 8,
     "disk": 500
   },
-  "fabric.c56.m8.d2000": {
+  "fabric.c56.m8.d1000": {
     "core": 56,
     "ram": 8,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c56.m16.d10": {
     "core": 56,
@@ -4214,10 +4214,10 @@
     "ram": 16,
     "disk": 500
   },
-  "fabric.c56.m16.d2000": {
+  "fabric.c56.m16.d1000": {
     "core": 56,
     "ram": 16,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c56.m32.d10": {
     "core": 56,
@@ -4234,10 +4234,10 @@
     "ram": 32,
     "disk": 500
   },
-  "fabric.c56.m32.d2000": {
+  "fabric.c56.m32.d1000": {
     "core": 56,
     "ram": 32,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c56.m64.d10": {
     "core": 56,
@@ -4254,10 +4254,10 @@
     "ram": 64,
     "disk": 500
   },
-  "fabric.c56.m64.d2000": {
+  "fabric.c56.m64.d1000": {
     "core": 56,
     "ram": 64,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c56.m128.d10": {
     "core": 56,
@@ -4274,10 +4274,10 @@
     "ram": 128,
     "disk": 500
   },
-  "fabric.c56.m128.d2000": {
+  "fabric.c56.m128.d1000": {
     "core": 56,
     "ram": 128,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c56.m256.d10": {
     "core": 56,
@@ -4294,10 +4294,10 @@
     "ram": 256,
     "disk": 500
   },
-  "fabric.c56.m256.d2000": {
+  "fabric.c56.m256.d1000": {
     "core": 56,
     "ram": 256,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c56.m384.d10": {
     "core": 56,
@@ -4314,10 +4314,10 @@
     "ram": 384,
     "disk": 500
   },
-  "fabric.c56.m384.d2000": {
+  "fabric.c56.m384.d1000": {
     "core": 56,
     "ram": 384,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c58.m4.d10": {
     "core": 58,
@@ -4334,10 +4334,10 @@
     "ram": 4,
     "disk": 500
   },
-  "fabric.c58.m4.d2000": {
+  "fabric.c58.m4.d1000": {
     "core": 58,
     "ram": 4,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c58.m8.d10": {
     "core": 58,
@@ -4354,10 +4354,10 @@
     "ram": 8,
     "disk": 500
   },
-  "fabric.c58.m8.d2000": {
+  "fabric.c58.m8.d1000": {
     "core": 58,
     "ram": 8,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c58.m16.d10": {
     "core": 58,
@@ -4374,10 +4374,10 @@
     "ram": 16,
     "disk": 500
   },
-  "fabric.c58.m16.d2000": {
+  "fabric.c58.m16.d1000": {
     "core": 58,
     "ram": 16,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c58.m32.d10": {
     "core": 58,
@@ -4394,10 +4394,10 @@
     "ram": 32,
     "disk": 500
   },
-  "fabric.c58.m32.d2000": {
+  "fabric.c58.m32.d1000": {
     "core": 58,
     "ram": 32,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c58.m64.d10": {
     "core": 58,
@@ -4414,10 +4414,10 @@
     "ram": 64,
     "disk": 500
   },
-  "fabric.c58.m64.d2000": {
+  "fabric.c58.m64.d1000": {
     "core": 58,
     "ram": 64,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c58.m128.d10": {
     "core": 58,
@@ -4434,10 +4434,10 @@
     "ram": 128,
     "disk": 500
   },
-  "fabric.c58.m128.d2000": {
+  "fabric.c58.m128.d1000": {
     "core": 58,
     "ram": 128,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c58.m256.d10": {
     "core": 58,
@@ -4454,10 +4454,10 @@
     "ram": 256,
     "disk": 500
   },
-  "fabric.c58.m256.d2000": {
+  "fabric.c58.m256.d1000": {
     "core": 58,
     "ram": 256,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c58.m384.d10": {
     "core": 58,
@@ -4474,10 +4474,10 @@
     "ram": 384,
     "disk": 500
   },
-  "fabric.c58.m384.d2000": {
+  "fabric.c58.m384.d1000": {
     "core": 58,
     "ram": 384,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c60.m4.d10": {
     "core": 60,
@@ -4494,10 +4494,10 @@
     "ram": 4,
     "disk": 500
   },
-  "fabric.c60.m4.d2000": {
+  "fabric.c60.m4.d1000": {
     "core": 60,
     "ram": 4,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c60.m8.d10": {
     "core": 60,
@@ -4514,10 +4514,10 @@
     "ram": 8,
     "disk": 500
   },
-  "fabric.c60.m8.d2000": {
+  "fabric.c60.m8.d1000": {
     "core": 60,
     "ram": 8,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c60.m16.d10": {
     "core": 60,
@@ -4534,10 +4534,10 @@
     "ram": 16,
     "disk": 500
   },
-  "fabric.c60.m16.d2000": {
+  "fabric.c60.m16.d1000": {
     "core": 60,
     "ram": 16,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c60.m32.d10": {
     "core": 60,
@@ -4554,10 +4554,10 @@
     "ram": 32,
     "disk": 500
   },
-  "fabric.c60.m32.d2000": {
+  "fabric.c60.m32.d1000": {
     "core": 60,
     "ram": 32,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c60.m64.d10": {
     "core": 60,
@@ -4574,10 +4574,10 @@
     "ram": 64,
     "disk": 500
   },
-  "fabric.c60.m64.d2000": {
+  "fabric.c60.m64.d1000": {
     "core": 60,
     "ram": 64,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c60.m128.d10": {
     "core": 60,
@@ -4594,10 +4594,10 @@
     "ram": 128,
     "disk": 500
   },
-  "fabric.c60.m128.d2000": {
+  "fabric.c60.m128.d1000": {
     "core": 60,
     "ram": 128,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c60.m256.d10": {
     "core": 60,
@@ -4614,10 +4614,10 @@
     "ram": 256,
     "disk": 500
   },
-  "fabric.c60.m256.d2000": {
+  "fabric.c60.m256.d1000": {
     "core": 60,
     "ram": 256,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c60.m384.d10": {
     "core": 60,
@@ -4634,10 +4634,10 @@
     "ram": 384,
     "disk": 500
   },
-  "fabric.c60.m384.d2000": {
+  "fabric.c60.m384.d1000": {
     "core": 60,
     "ram": 384,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c62.m4.d10": {
     "core": 62,
@@ -4654,10 +4654,10 @@
     "ram": 4,
     "disk": 500
   },
-  "fabric.c62.m4.d2000": {
+  "fabric.c62.m4.d1000": {
     "core": 62,
     "ram": 4,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c62.m8.d10": {
     "core": 62,
@@ -4674,10 +4674,10 @@
     "ram": 8,
     "disk": 500
   },
-  "fabric.c62.m8.d2000": {
+  "fabric.c62.m8.d1000": {
     "core": 62,
     "ram": 8,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c62.m16.d10": {
     "core": 62,
@@ -4694,10 +4694,10 @@
     "ram": 16,
     "disk": 500
   },
-  "fabric.c62.m16.d2000": {
+  "fabric.c62.m16.d1000": {
     "core": 62,
     "ram": 16,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c62.m32.d10": {
     "core": 62,
@@ -4714,10 +4714,10 @@
     "ram": 32,
     "disk": 500
   },
-  "fabric.c62.m32.d2000": {
+  "fabric.c62.m32.d1000": {
     "core": 62,
     "ram": 32,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c62.m64.d10": {
     "core": 62,
@@ -4734,10 +4734,10 @@
     "ram": 64,
     "disk": 500
   },
-  "fabric.c62.m64.d2000": {
+  "fabric.c62.m64.d1000": {
     "core": 62,
     "ram": 64,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c62.m128.d10": {
     "core": 62,
@@ -4754,10 +4754,10 @@
     "ram": 128,
     "disk": 500
   },
-  "fabric.c62.m128.d2000": {
+  "fabric.c62.m128.d1000": {
     "core": 62,
     "ram": 128,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c62.m256.d10": {
     "core": 62,
@@ -4774,10 +4774,10 @@
     "ram": 256,
     "disk": 500
   },
-  "fabric.c62.m256.d2000": {
+  "fabric.c62.m256.d1000": {
     "core": 62,
     "ram": 256,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c62.m384.d10": {
     "core": 62,
@@ -4794,10 +4794,10 @@
     "ram": 384,
     "disk": 500
   },
-  "fabric.c62.m384.d2000": {
+  "fabric.c62.m384.d1000": {
     "core": 62,
     "ram": 384,
-    "disk": 2000
+    "disk": 1000
   },
   "fabric.c1.m2.d10": {
     "core": 1,
@@ -4819,10 +4819,30 @@
     "ram": 4,
     "disk": 500
   },
-  "fabric.c1.m4.d2000": {
+  "fabric.c1.m8.d10": {
     "core": 1,
-    "ram": 4,
-    "disk": 2000
+    "ram": 8,
+    "disk": 10
+  },
+  "fabric.c1.m8.d50": {
+    "core": 1,
+    "ram": 8,
+    "disk": 50
+  },
+  "fabric.c1.m16.d10": {
+    "core": 1,
+    "ram": 16,
+    "disk": 10
+  },
+  "fabric.c1.m16.d50": {
+    "core": 1,
+    "ram": 16,
+    "disk": 50
+  },
+  "fabric.c1.m32.d50": {
+    "core": 1,
+    "ram": 32,
+    "disk": 50
   },
   "fabric.c2.m2.d10": {
     "core": 2,
@@ -4859,14 +4879,14 @@
     "ram": 8,
     "disk": 500
   },
-  "fabric.c2.m8.d2000": {
+  "fabric.c2.m8.d1000": {
     "core": 2,
     "ram": 8,
-    "disk": 2000
+    "disk": 1000
   },
-  "fabric.c64.m384.d4000": {
+  "fabric.c64.m384.d1000": {
     "core": 64,
     "ram": 384,
-    "disk": 4000
+    "disk": 1000
   }
 }
diff --git a/fim/slivers/network_service.py b/fim/slivers/network_service.py
index ce39947..77bba5e 100644
--- a/fim/slivers/network_service.py
+++ b/fim/slivers/network_service.py
@@ -111,7 +111,7 @@ def __str__(self):
                                        'min_interfaces',
                                        'num_interfaces',
                                        'num_sites',
-                                       'num_instances',
+                                       'num_instances', # instances **per site**
                                        'required_properties',
                                        'forbidden_properties',
                                        'required_interface_types'])
@@ -276,7 +276,6 @@ def __init__(self):
         self.mirror_port = None
         self.mirror_direction = None
 
-
     #
     # Setters are only needed for things we want users to be able to set
     #
diff --git a/fim/user/composite_node.py b/fim/user/composite_node.py
index c80a67c..8cacc97 100644
--- a/fim/user/composite_node.py
+++ b/fim/user/composite_node.py
@@ -120,6 +120,23 @@ def __list_of_interfaces(self) -> Tuple[Interface]:
             direct_interfaces.append(i)
         return tuple(direct_interfaces)
 
+    def __dict_of_children(self) -> ViewOnlyDict:
+        """
+        List of children Node objects that are connected to CompositeNode
+        representing site in ABQM via 'has' relationship
+        """
+        node_id_list = self.topo.graph_model.get_first_neighbor(node_id=self.node_id, rel=ABCPropertyGraph.REL_HAS,
+                                                                node_label=ABCPropertyGraph.CLASS_NetworkNode)
+        ret = dict()
+        for nid in node_id_list:
+            _, node_props = self.topo.graph_model.get_node_properties(node_id=nid)
+            n = Node(name=node_props[ABCPropertyGraph.PROP_NAME], node_id=nid, topo=self.topo)
+            # exclude Facility nodes
+            from fim.user import NodeType
+            if n.type != NodeType.Facility:
+                ret[n.name] = n
+        return ViewOnlyDict(ret)
+
     @property
     def components(self):
         return self.__list_components()
@@ -132,6 +149,13 @@ def interfaces(self):
     def interface_list(self):
         return self.__list_of_interfaces()
 
+    @property
+    def children(self) -> ViewOnlyDict:
+        # Composite nodes typically are in ABQM denoting sites
+        # and have 'has' relationship to Node children
+        # representing worker nodes in a site
+        return self.__dict_of_children()
+
     def __repr__(self):
         _, node_properties = self.topo.graph_model.get_node_properties(node_id=self.node_id)
         node_sliver = self.topo.graph_model.node_sliver_from_graph_properties_dict(node_properties)
diff --git a/fim/user/network_service.py b/fim/user/network_service.py
index 7a0b882..48a8f46 100644
--- a/fim/user/network_service.py
+++ b/fim/user/network_service.py
@@ -25,6 +25,7 @@
 # Author: Ilya Baldin (ibaldin@renci.org)
 import logging
 from typing import Tuple, Any, List, Set
+from collections import defaultdict
 
 import uuid
 
@@ -213,23 +214,14 @@ def get_sliver(self) -> NetworkServiceSliver:
         """
         return self.topo.graph_model.build_deep_ns_sliver(node_id=self.node_id)
 
-    def __validate_nstype_constraints(self, nstype, interfaces) -> Set[str]:
+    def __validate_nstype_constraints(self, nstype, interfaces):
         """
         Validate service constraints as encoded for each services (number of interfaces, instances, sites).
         Note that interfaces is a list of interfaces belonging to nodes!
         :param nstype:
         :param interfaces:
-        :return: a list of sites the service covers
         """
 
-        # check the number of instances of this service
-        if NetworkServiceSliver.ServiceConstraints[nstype].num_instances != NetworkServiceSliver.NO_LIMIT:
-            services = self.topo.graph_model.get_all_nodes_by_class_and_type(label=ABCPropertyGraph.CLASS_NetworkService,
-                                                                             ntype=str(nstype))
-            if len(services) + 1 > NetworkServiceSliver.ServiceConstraints[self.type].num_instances:
-                raise TopologyException(f"Service {self.name} type {nstype} cannot have {len(services) + 1} instances. "
-                                        f"Limit: {NetworkServiceSliver.ServiceConstraints[nstype].num_instances}")
-
         # check the number of interfaces only for experiment topologies
         # in e.g. advertisements network services with no interfaces hang off dataplane switches
         if isinstance(self.topo, fim.user.topology.ExperimentTopology):
diff --git a/fim/user/topology.py b/fim/user/topology.py
index 83b5dbf..e0d7f67 100644
--- a/fim/user/topology.py
+++ b/fim/user/topology.py
@@ -37,7 +37,7 @@
 from .model_element import ModelElement, TopologyException
 from ..slivers.network_node import NodeType
 from ..slivers.network_link import LinkType
-from ..slivers.network_service import NSLayer, ServiceType, MirrorDirection
+from ..slivers.network_service import NSLayer, ServiceType, MirrorDirection, NetworkServiceSliver
 from ..graph.slices.abc_asm import ABCASMPropertyGraph
 from ..graph.slices.networkx_asm import NetworkxASM
 from ..graph.slices.neo4j_asm import Neo4jASM
@@ -48,7 +48,7 @@
 from ..graph.resources.neo4j_arm import Neo4jARMGraph
 from ..slivers.delegations import Delegation, Delegations, Pools, DelegationType, DelegationFormat
 from fim.graph.resources.networkx_abqm import NetworkXAggregateBQM, NetworkXABQMFactory
-from fim.slivers.capacities_labels import FreeCapacity, Labels
+from fim.slivers.capacities_labels import FreeCapacity, Labels, Capacities
 from fim.slivers.interface_info import InterfaceType
 from fim.slivers.topology_diff import TopologyDiff, TopologyDiffTuple, TopologyDiffModifiedTuple, WhatsModifiedFlag
 
@@ -225,8 +225,11 @@ def remove_node(self, name: str):
         self.graph_model.remove_network_node_with_components_nss_cps_and_links(
             node_id=self._get_node_by_name(name=name).node_id)
 
-    def add_facility(self, *, name: str, node_id: str = None, site: str, nstype: ServiceType = ServiceType.VLAN,
-                     nslabels: Labels or None = None, **kwargs) -> Node:
+    def add_facility(self, *, name: str, node_id: str = None, site: str,
+                     nstype: ServiceType = ServiceType.VLAN,
+                     nslabels: Labels or None = None,
+                     interfaces: List[Tuple[Any]] or None = None,
+                     **kwargs) -> Node:
         """
         Add a facility node with VLAN service and FacilityPort interface as a single construct.
         Works for aggregate topologies and experiment topologies the same way.
@@ -236,14 +239,27 @@ def add_facility(self, *, name: str, node_id: str = None, site: str, nstype: Ser
         :param site: site of the facility (must match the advertisement)
         :param nstype: alternative type of network service in Facility (defaults to VLAN)
         :param nslabels: additional labels for facility network service (defaults to None)
+        :param interfaces: definitions of interfaces - list of tuples each including (name, labels, capacities) for
+        each interface a facility will have. If a facility only has one interface it is OK to use **kwargs.
         :kwargs: parameters for the interface of the facility (bandwidth, mtu, LAN tags etc)
         """
         # should work with deep sliver reconstruction
         facn = self.add_node(name=name, node_id=node_id, site=site, ntype=NodeType.Facility)
         facs = facn.add_network_service(name=name + '-ns', node_id=node_id + '-ns' if node_id else None,
                                         nstype=nstype, labels=nslabels)
-        faci = facs.add_interface(name=name + '-int', node_id=node_id + '-int' if node_id else None,
-                                  itype=InterfaceType.FacilityPort, **kwargs)
+        if not interfaces:
+            # if no interfaces are defined, use implicit definition and kwargs
+            # this is how the code was defined originally
+            faci = facs.add_interface(name=name + '-int', node_id=node_id + '-int' if node_id else None,
+                                      itype=InterfaceType.FacilityPort, **kwargs)
+        else:
+            # if interfaces are defined, assume a list of tuples (name, labels, capacities) are present
+            # this was added to support multiple interfaces per facility
+            for iname, ilabels, icapacities in interfaces:
+                iindex = 0
+                faci = facs.add_interface(name=iname, node_id=node_id + f'-int{iindex}' if node_id else None,
+                                          itype=InterfaceType.FacilityPort, labels=ilabels, capacities=icapacities)
+                iindex += 1
 
         return facn
 
@@ -550,8 +566,14 @@ def validate(self):
         for n in self.nodes.values():
             n.validate_constraints()
 
+        check_num_instances = set()
         # check network services, interfaces, sites
         for s in self.network_services.values():
+            # check if the service type is one that requires num_instance per site validation
+            if NetworkServiceSliver.ServiceConstraints[s.type].num_instances != NetworkServiceSliver.NO_LIMIT:
+                # add this type into validation set for later
+                check_num_instances.add(s.type)
+            # perform other interface-based validations
             service_interfaces = s.interface_list
             node_interfaces = list()
             # some services like OVS have node ports, others like Bridge, STS, PTP
@@ -569,6 +591,31 @@ def validate(self):
                     node_interfaces.append(si)
             s.validate_constraints(node_interfaces)
 
+        # some constraints are for the entire model, like num_instances per site for NetworkServices
+        for nstype in check_num_instances:
+            # get services of this type in the model
+            services_of_type = set()
+            for s in self.network_services.values():
+                if s.type == nstype:
+                    services_of_type.add(s)
+            # number of services of this type per site
+            services_per_site = defaultdict(int)
+            for s in services_of_type:
+                if s.site:
+                    services_per_site[s.site] += 1
+                else:
+                    for interface in s.interfaces:
+                        owner = self.get_owner_node(interface)
+                        if owner:
+                            services_per_site[owner.site] += 1
+
+            # raise exception if needed
+            for site, count in services_per_site.items():
+                if count > NetworkServiceSliver.ServiceConstraints[nstype].num_instances:
+                    raise TopologyException(f"Services of type {nstype} cannot have more than "
+                                            f"{NetworkServiceSliver.ServiceConstraints[nstype].num_instances} instances "
+                                            f"in each site (site {site} violates that and has {count})")
+
 
 class ExperimentTopology(Topology):
     """
diff --git a/pyproject.toml b/pyproject.toml
index cf674c7..80c7c94 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -16,8 +16,8 @@ keywords = ["Neo4j"]
 dependencies = [ 
 	"matplotlib >= 3.6.0",
 	"neo4j >= 5.3.0",
-	"networkx >= 2.8.7",
-	"networkx_query >= 1.0.1",
+	"networkx >= 3.1",
+	"networkx-query >= 2.0.0",
 	"PyYAML >= 6.0",
 	"recordclass >= 0.17.5",
 	"requests >= 2.28.1",


Test patch:
diff --git a/test/slice_topology_test.py b/test/slice_topology_test.py
index 61b85fc..e117252 100644
--- a/test/slice_topology_test.py
+++ b/test/slice_topology_test.py
@@ -1,6 +1,7 @@
 import datetime
 import unittest
 import json
+import os
 
 import fim.user as f
 
@@ -512,9 +513,9 @@ def testBasicOneSiteSliceNeo4jImp(self):
 
     def testBasicTwoSiteSlice(self):
         # create a basic slice and export to GraphML and JSON
-        self.topo.add_node(name='n1', site='RENC', ntype=f.NodeType.VM, capacities=Capacities(core=4))
-        self.topo.add_node(name='n2', site='RENC')
-        self.topo.add_node(name='n3', site='UKY')
+        self.topo.add_node(name='n1', site='RENC', ntype=f.NodeType.VM, capacities=Capacities(core=4, disk=10))
+        self.topo.add_node(name='n2', site='RENC', capacities=Capacities(core=8, ram=2))
+        self.topo.add_node(name='n3', site='UKY', capacities=Capacities(core=8, ram=2))
         self.topo.nodes['n1'].add_component(model_type=f.ComponentModelType.SharedNIC_ConnectX_6, name='nic1')
         self.topo.nodes['n1'].add_component(model_type=f.ComponentModelType.NVME_P4510, name='drive1')
         self.topo.nodes['n2'].add_component(model_type=f.ComponentModelType.SmartNIC_ConnectX_6, name='nic1')
@@ -537,7 +538,7 @@ def testBasicTwoSiteSlice(self):
         self.assertIn(('L2STS', 0), lc.attributes['services'])
         self.assertIn('UKY', lc.attributes['sites'])
         self.assertIn('RENC', lc.attributes['sites'])
-        self.assertEqual(lc.attributes['core_count'], 4)
+        self.assertEqual(lc.attributes['core_count'], 20)
 
         # test log on Node
         lc = LogCollector()
@@ -598,6 +599,39 @@ def testL3Service(self):
         asm_graph.validate_graph()
         self.n4j_imp.delete_all_graphs()
 
+    def testL3ServiceFail(self):
+        """
+        Test validaton of max 1 L3 service per site of a given type
+        """
+        self.topo.add_node(name='n1', site='RENC', ntype=f.NodeType.VM)
+        self.topo.add_node(name='n2', site='RENC')
+        self.topo.add_node(name='n3', site='UKY')
+        self.topo.nodes['n1'].add_component(model_type=f.ComponentModelType.SharedNIC_ConnectX_6, name='nic1')
+        self.topo.nodes['n2'].add_component(model_type=f.ComponentModelType.SmartNIC_ConnectX_6, name='nic1')
+        self.topo.nodes['n3'].add_component(model_type=f.ComponentModelType.SmartNIC_ConnectX_5, name='nic1')
+
+        s1 = self.topo.add_network_service(name='v4UKY', nstype=f.ServiceType.FABNetv4,
+                                           interfaces=self.topo.nodes['n3'].interface_list)
+        s2 = self.topo.add_network_service(name='v4RENC', nstype=f.ServiceType.FABNetv4,
+                                           interfaces=[self.topo.nodes['n1'].interface_list[0]])
+        # this one is a no-no - should attach to s2 instead
+        s3 = self.topo.add_network_service(name='v4RENCbad', nstype=f.ServiceType.FABNetv4,
+                                           interfaces=[self.topo.nodes['n2'].interface_list[0]])
+
+        # site property is set automagically by validate
+        with self.assertRaises(TopologyException):
+            self.topo.validate()
+
+        slice_graph = self.topo.serialize()
+
+        # Import it in the neo4j as ASM
+        generic_graph = self.n4j_imp.import_graph_from_string(graph_string=slice_graph)
+        asm_graph = Neo4jASMFactory.create(generic_graph)
+        # the following validation just uses cypher or networkx_query and is not as capable
+        # as self.topo.validate() but is much faster
+        asm_graph.validate_graph()
+        self.n4j_imp.delete_all_graphs()
+
     def testPortMirrorService(self):
         t = self.topo
 
@@ -678,6 +712,34 @@ def testFPGAComponent(self):
         asm_graph = Neo4jASMFactory.create(generic_graph)
         asm_graph.validate_graph()
         self.n4j_imp.delete_all_graphs()
+        os.unlink('fpga_slice.graphml')
+
+    def testMultiConnectedFacility(self):
+        t = self.topo
+
+        n1 = t.add_node(name='n1', site='MASS')
+        n1.add_component(name='nic1', model_type=ComponentModelType.SmartNIC_ConnectX_6)
+        n2 = t.add_node(name='n2', site='RENC')
+        n2.add_component(name='nic1', model_type=ComponentModelType.SmartNIC_ConnectX_6)
+
+        # add facility
+        fac1 = self.topo.add_facility(name='RENCI-DTN', site='RENC',
+                                      interfaces=[('to_mass', f.Labels(vlan='100'), f.Capacities(bw=10)),
+                                                  ('to_renc', f.Labels(vlan='101'), f.Capacities(bw=1))])
+
+        t.add_network_service(name='ns1', nstype=ServiceType.L2PTP,
+                              interfaces=[n1.interface_list[0], fac1.interface_list[0]])
+        t.add_network_service(name='ns2', nstype=ServiceType.L2PTP,
+                              interfaces=[n2.interface_list[0], fac1.interface_list[1]])
+
+        print(f'{fac1.interface_list[0].name=}')
+        print(f'{fac1.interface_list[1].name=}')
+        self.assertEqual(fac1.interface_list[0].name, 'to_mass')
+        self.assertEqual(fac1.interface_list[1].name, 'to_renc')
+
+        t.validate()
+
+        self.n4j_imp.delete_all_graphs()
 
     def testL3VPNWithCloudService(self):
         t = self.topo