@calltelemetry/ct-lab-mcp 0.8.72 → 0.8.74
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/slot/manager.d.ts +5 -1
- package/dist/src/slot/manager.d.ts.map +1 -1
- package/dist/src/slot/manager.js +57 -79
- package/dist/src/slot/manager.js.map +1 -1
- package/dist/src/slot/types.d.ts +1 -1
- package/dist/src/slot/types.d.ts.map +1 -1
- package/dist/src/tools/cube-provision.js +3 -3
- package/dist/src/tools/cube-provision.js.map +1 -1
- package/dist/src/tools/cube-tools.js +5 -5
- package/dist/src/tools/cube-tools.js.map +1 -1
- package/dist/src/tools/fleet-metrics.d.ts +4 -4
- package/dist/src/tools/fleet-metrics.js +1 -1
- package/dist/src/tools/fleet-metrics.js.map +1 -1
- package/dist/src/tools/host-migrate-vm.d.ts +12 -12
- package/dist/src/tools/index.js +1 -1
- package/dist/src/tools/index.js.map +1 -1
- package/dist/src/tools/list-hosts.d.ts +4 -4
- package/dist/src/tools/list-hosts.d.ts.map +1 -1
- package/dist/src/tools/list-hosts.js +7 -2
- package/dist/src/tools/list-hosts.js.map +1 -1
- package/dist/src/tools/list-inventory.d.ts.map +1 -1
- package/dist/src/tools/list-inventory.js +3 -1
- package/dist/src/tools/list-inventory.js.map +1 -1
- package/dist/src/tools/proxmox-host-policy.d.ts +4 -4
- package/dist/src/tools/proxmox-host-policy.d.ts.map +1 -1
- package/dist/src/tools/proxmox-host-policy.js +6 -0
- package/dist/src/tools/proxmox-host-policy.js.map +1 -1
- package/dist/src/tools/prune-untracked-vms.js +1 -1
- package/dist/src/tools/prune-untracked-vms.js.map +1 -1
- package/dist/src/tools/purge-slots.d.ts +4 -4
- package/dist/src/tools/purge-slots.js +1 -1
- package/dist/src/tools/purge-slots.js.map +1 -1
- package/dist/src/tools/sandbox-tools.d.ts +12 -12
- package/dist/src/tools/storage-tools.d.ts +42 -42
- package/dist/src/tools/storage-tools.d.ts.map +1 -1
- package/dist/src/tools/storage-tools.js +9 -8
- package/dist/src/tools/storage-tools.js.map +1 -1
- package/dist/src/tools/thin-storage-policy.js +1 -1
- package/dist/src/tools/thin-storage-policy.js.map +1 -1
- package/package.json +1 -1
|
@@ -50,7 +50,6 @@ export interface SlotManagerOptions {
|
|
|
50
50
|
capacityReader?: (hostId: HostId) => Promise<HostCapacity>;
|
|
51
51
|
}
|
|
52
52
|
export declare const DEFAULT_ESXI_HOST_CONFIG: SlotManagerHostConfig;
|
|
53
|
-
export declare const DEFAULT_CUBES: CubeDefinition[];
|
|
54
53
|
export declare class SlotManager implements ISlotManager {
|
|
55
54
|
private hosts;
|
|
56
55
|
private slots;
|
|
@@ -193,6 +192,11 @@ export declare class SlotManager implements ISlotManager {
|
|
|
193
192
|
* Internal sweep for expired CUBE leases.
|
|
194
193
|
*/
|
|
195
194
|
private sweepExpiredCubesInternal;
|
|
195
|
+
/**
|
|
196
|
+
* Register a CUBE router guest that a claim just created (provision_cube).
|
|
197
|
+
* The catalog holds nothing else: there is no static seed.
|
|
198
|
+
*/
|
|
199
|
+
registerCube(cube: CubeDefinition): void;
|
|
196
200
|
/**
|
|
197
201
|
* List all CUBE routers with live status and claim leases.
|
|
198
202
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/slot/manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,MAAM,EACN,cAAc,EAEd,kBAAkB,EAClB,qBAAqB,EACrB,kBAAkB,EAClB,gBAAgB,EAEhB,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAGhB,yBAAyB,EACzB,wBAAwB,EAExB,YAAY,EASZ,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,eAAe,EAKf,cAAc,EACd,cAAc,EACd,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EAExB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,cAAc,EAAqB,MAAM,yBAAyB,CAAC;AAG1F,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAC9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,qBAAqB,EAAgC,MAAM,yBAAyB,CAAC;AAC9F,OAAO,EAAa,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAGrE,cAAc,YAAY,CAAC;AAE3B,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACpC,aAAa,EAAE,MAAM,CAAC;IACtB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,0EAA0E;IAC1E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE;IAC1C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,GAAG,MAAM,CAST;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,qBAAqB,EAAE,CAAC;IAChC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,cAAc,CAAC,EAAE,uBAAuB,CAAC;IACzC,iBAAiB,CAAC,EAAE,sBAAsB,CAAC;IAC3C,eAAe,CAAC,EAAE,qBAAqB,CAAC;IACxC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,4EAA4E;IAC5E,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;CAC5D;AAqBD,eAAO,MAAM,wBAAwB,EAAE,qBAOtC,CAAC;
|
|
1
|
+
{"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../../src/slot/manager.ts"],"names":[],"mappings":"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"}
|
package/dist/src/slot/manager.js
CHANGED
|
@@ -52,46 +52,12 @@ export const DEFAULT_ESXI_HOST_CONFIG = {
|
|
|
52
52
|
reservedHeadroomMb: 0,
|
|
53
53
|
slotSizeMb: 8192,
|
|
54
54
|
};
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
vmid: 200,
|
|
62
|
-
ipAddress: "192.168.125.60",
|
|
63
|
-
model: "Cat8000v",
|
|
64
|
-
status: "stopped",
|
|
65
|
-
wsapiOnline: false,
|
|
66
|
-
claimState: "AVAILABLE",
|
|
67
|
-
claimId: null,
|
|
68
|
-
claimedAt: null,
|
|
69
|
-
expiresAt: null,
|
|
70
|
-
durationMinutes: null,
|
|
71
|
-
linearIssue: null,
|
|
72
|
-
requester: null,
|
|
73
|
-
licenseLevel: "network-advantage addon dna-advantage"
|
|
74
|
-
},
|
|
75
|
-
{
|
|
76
|
-
cubeId: "cube-pstn",
|
|
77
|
-
name: "CUBE-8000V-PMX-VERIZON-PSTN",
|
|
78
|
-
hostName: "proxmox-lab",
|
|
79
|
-
hypervisor: "proxmox",
|
|
80
|
-
vmid: 201,
|
|
81
|
-
ipAddress: "192.168.123.94",
|
|
82
|
-
model: "Cat8000v",
|
|
83
|
-
status: "stopped",
|
|
84
|
-
wsapiOnline: false,
|
|
85
|
-
claimState: "AVAILABLE",
|
|
86
|
-
claimId: null,
|
|
87
|
-
claimedAt: null,
|
|
88
|
-
expiresAt: null,
|
|
89
|
-
durationMinutes: null,
|
|
90
|
-
linearIssue: null,
|
|
91
|
-
requester: null,
|
|
92
|
-
licenseLevel: "network-advantage addon dna-advantage"
|
|
93
|
-
}
|
|
94
|
-
];
|
|
55
|
+
/** A CUBE router guest by naming convention or tag. Not an ownership signal. */
|
|
56
|
+
function isCubeGuest(vm) {
|
|
57
|
+
if (vm.isTemplate)
|
|
58
|
+
return false;
|
|
59
|
+
return /cube/i.test(vm.name) || vm.tags.some((t) => ["cube", "cat8000v"].includes(t.toLowerCase()));
|
|
60
|
+
}
|
|
95
61
|
export class SlotManager {
|
|
96
62
|
hosts = new Map();
|
|
97
63
|
slots = new Map();
|
|
@@ -145,9 +111,9 @@ export class SlotManager {
|
|
|
145
111
|
for (const host of hostConfigs) {
|
|
146
112
|
this.registerHost(host);
|
|
147
113
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
114
|
+
// No static CUBE catalog (REL-1600). CUBE routers are per-claim guests cloned
|
|
115
|
+
// from the CUBE template by provision_cube (registerCube) or rediscovered from
|
|
116
|
+
// claim-backed inventory on refresh; nothing is seeded by name or VMID.
|
|
151
117
|
}
|
|
152
118
|
/**
|
|
153
119
|
* Set or update hypervisor manager reference.
|
|
@@ -2079,6 +2045,13 @@ export class SlotManager {
|
|
|
2079
2045
|
}
|
|
2080
2046
|
}
|
|
2081
2047
|
}
|
|
2048
|
+
/**
|
|
2049
|
+
* Register a CUBE router guest that a claim just created (provision_cube).
|
|
2050
|
+
* The catalog holds nothing else: there is no static seed.
|
|
2051
|
+
*/
|
|
2052
|
+
registerCube(cube) {
|
|
2053
|
+
this.cubes.set(cube.cubeId, { ...cube });
|
|
2054
|
+
}
|
|
2082
2055
|
/**
|
|
2083
2056
|
* List all CUBE routers with live status and claim leases.
|
|
2084
2057
|
*/
|
|
@@ -2088,46 +2061,48 @@ export class SlotManager {
|
|
|
2088
2061
|
if (refresh && this.hypervisorManager) {
|
|
2089
2062
|
try {
|
|
2090
2063
|
const vms = await this.hypervisorManager.listUnifiedInventory();
|
|
2091
|
-
// 1.
|
|
2092
|
-
|
|
2064
|
+
// 1. Reconcile registered CUBEs with live inventory. The inventory
|
|
2065
|
+
// excludes templates, so a CUBE whose guest is gone (destroyed, retired,
|
|
2066
|
+
// or never existed) is dropped rather than kept as a ghost entry.
|
|
2067
|
+
for (const [cubeId, cube] of Array.from(this.cubes.entries())) {
|
|
2093
2068
|
const match = vms.find((v) => v.hostName === cube.hostName && (v.id === String(cube.vmid) || v.name === cube.name));
|
|
2094
|
-
if (match) {
|
|
2095
|
-
|
|
2096
|
-
|
|
2097
|
-
|
|
2098
|
-
|
|
2069
|
+
if (!match) {
|
|
2070
|
+
this.cubes.delete(cubeId);
|
|
2071
|
+
continue;
|
|
2072
|
+
}
|
|
2073
|
+
cube.status = match.status;
|
|
2074
|
+
if (match.ipAddresses && match.ipAddresses.length > 0) {
|
|
2075
|
+
cube.ipAddress = match.ipAddresses[0];
|
|
2099
2076
|
}
|
|
2100
2077
|
}
|
|
2101
|
-
// 2.
|
|
2078
|
+
// 2. Discover CUBE guests that are backed by a live claim. A CUBE-named
|
|
2079
|
+
// guest with no claim is not a catalog entry, and templates are clone
|
|
2080
|
+
// sources only (never claimable), so naming alone discovers nothing.
|
|
2102
2081
|
for (const vm of vms) {
|
|
2103
|
-
|
|
2104
|
-
|
|
2105
|
-
|
|
2106
|
-
|
|
2107
|
-
|
|
2108
|
-
|
|
2109
|
-
|
|
2110
|
-
|
|
2111
|
-
|
|
2112
|
-
|
|
2113
|
-
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
|
|
2117
|
-
|
|
2118
|
-
|
|
2119
|
-
|
|
2120
|
-
|
|
2121
|
-
|
|
2122
|
-
|
|
2123
|
-
|
|
2124
|
-
|
|
2125
|
-
|
|
2126
|
-
|
|
2127
|
-
licenseLevel: "network-advantage addon dna-advantage"
|
|
2128
|
-
});
|
|
2129
|
-
}
|
|
2130
|
-
}
|
|
2082
|
+
if (!isCubeGuest(vm) || !vm.claim || vm.claim.isExpired)
|
|
2083
|
+
continue;
|
|
2084
|
+
const existing = Array.from(this.cubes.values()).find((c) => c.hostName === vm.hostName && (String(c.vmid) === vm.id || c.name === vm.name));
|
|
2085
|
+
if (existing)
|
|
2086
|
+
continue;
|
|
2087
|
+
const autoId = vm.name.toLowerCase().replace(/[^a-z0-9-_]/g, "-");
|
|
2088
|
+
this.cubes.set(autoId, {
|
|
2089
|
+
cubeId: autoId,
|
|
2090
|
+
name: vm.name,
|
|
2091
|
+
hostName: vm.hostName,
|
|
2092
|
+
hypervisor: vm.hypervisor,
|
|
2093
|
+
vmid: vm.id,
|
|
2094
|
+
ipAddress: vm.ipAddresses && vm.ipAddresses.length > 0 ? vm.ipAddresses[0] : undefined,
|
|
2095
|
+
model: "Cat8000v",
|
|
2096
|
+
status: vm.status,
|
|
2097
|
+
claimState: "CLAIMED",
|
|
2098
|
+
claimId: vm.claim.claimId,
|
|
2099
|
+
claimedAt: null,
|
|
2100
|
+
expiresAt: vm.claim.expiresAt,
|
|
2101
|
+
durationMinutes: null,
|
|
2102
|
+
linearIssue: vm.claim.linearIssue ?? vm.linearIssue ?? null,
|
|
2103
|
+
requester: vm.claim.requester,
|
|
2104
|
+
licenseLevel: "network-advantage addon dna-advantage"
|
|
2105
|
+
});
|
|
2131
2106
|
}
|
|
2132
2107
|
}
|
|
2133
2108
|
catch (err) {
|
|
@@ -2179,6 +2154,9 @@ export class SlotManager {
|
|
|
2179
2154
|
targetCube = Array.from(this.cubes.values()).find((c) => c.claimState === "AVAILABLE");
|
|
2180
2155
|
if (!targetCube) {
|
|
2181
2156
|
const firstClaimed = Array.from(this.cubes.values())[0];
|
|
2157
|
+
if (!firstClaimed) {
|
|
2158
|
+
throw new CubeNotFoundError("No CUBE is registered. CUBE routers are per-claim guests: run provision_cube (clones the CUBE template) or list_cubes with refresh=true to rediscover claim-backed CUBEs.");
|
|
2159
|
+
}
|
|
2182
2160
|
throw new CubeAlreadyClaimedError(firstClaimed?.cubeId || "all-cubes", firstClaimed?.linearIssue || undefined, firstClaimed?.expiresAt || undefined);
|
|
2183
2161
|
}
|
|
2184
2162
|
}
|