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", 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