@calltelemetry/ct-lab-mcp 0.8.69 → 0.8.70
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/README.md +5 -1
- package/dist/src/appliance/executor.d.ts.map +1 -1
- package/dist/src/appliance/executor.js +3 -172
- package/dist/src/appliance/executor.js.map +1 -1
- package/dist/src/hypervisors/esxi/client.d.ts.map +1 -1
- package/dist/src/hypervisors/esxi/client.js +5 -0
- package/dist/src/hypervisors/esxi/client.js.map +1 -1
- package/dist/src/proxmox/client.d.ts.map +1 -1
- package/dist/src/proxmox/client.js +17 -0
- package/dist/src/proxmox/client.js.map +1 -1
- package/dist/src/slot/purge-controller.d.ts +1 -0
- package/dist/src/slot/purge-controller.d.ts.map +1 -1
- package/dist/src/slot/purge-controller.js +4 -33
- package/dist/src/slot/purge-controller.js.map +1 -1
- package/dist/src/tools/appliance-claim-tools.d.ts +11 -7
- package/dist/src/tools/appliance-claim-tools.d.ts.map +1 -1
- package/dist/src/tools/appliance-claim-tools.js +28 -81
- package/dist/src/tools/appliance-claim-tools.js.map +1 -1
- package/dist/src/tools/appliance-exec.d.ts +4 -4
- package/dist/src/tools/claim-creation-projection.d.ts +7 -0
- package/dist/src/tools/claim-creation-projection.d.ts.map +1 -0
- package/dist/src/tools/claim-creation-projection.js +112 -0
- package/dist/src/tools/claim-creation-projection.js.map +1 -0
- package/dist/src/tools/claim-first.d.ts.map +1 -1
- package/dist/src/tools/claim-first.js +19 -15
- package/dist/src/tools/claim-first.js.map +1 -1
- package/dist/src/tools/claimed-import-qcow.d.ts +2 -2
- package/dist/src/tools/import-qcow.d.ts +6 -6
- package/dist/src/tools/index.d.ts.map +1 -1
- package/dist/src/tools/index.js +5 -1
- package/dist/src/tools/index.js.map +1 -1
- package/dist/src/tools/legacy-guest-guard.d.ts +4 -0
- package/dist/src/tools/legacy-guest-guard.d.ts.map +1 -0
- package/dist/src/tools/legacy-guest-guard.js +26 -0
- package/dist/src/tools/legacy-guest-guard.js.map +1 -0
- package/dist/src/tools/license-tools.d.ts +2 -2
- package/dist/src/tools/physical-slot-claim-spec-schema.v1.json +1 -0
- package/dist/src/tools/physical-slot.d.ts +205 -0
- package/dist/src/tools/physical-slot.d.ts.map +1 -0
- package/dist/src/tools/physical-slot.js +295 -0
- package/dist/src/tools/physical-slot.js.map +1 -0
- package/dist/src/tools/provision-tools.d.ts +16 -16
- package/dist/src/tools/sandbox-tools.d.ts +2 -2
- package/dist/src/tools/slot-kubernetes.d.ts +13 -0
- package/dist/src/tools/slot-kubernetes.d.ts.map +1 -0
- package/dist/src/tools/slot-kubernetes.js +108 -0
- package/dist/src/tools/slot-kubernetes.js.map +1 -0
- package/dist/src/tools/vm-action.d.ts +4 -4
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"physical-slot.d.ts","sourceRoot":"","sources":["../../../src/tools/physical-slot.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAiB,KAAK,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAEnE,eAAO,MAAM,eAAe,oCAAoC,CAAC;AACjE,eAAO,MAAM,UAAU,oDAAoD,CAAC;AAC5E,eAAO,MAAM,YAAY,mDAAmD,CAAC;AAO7E,QAAA,MAAM,UAAU;;;;;;;;;;;;EAA2G,CAAC;AAC5H,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,UAAU,CAAC,CAAC;AAOtD,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAOnB,CAAC;AACZ,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAK5D,wBAAgB,aAAa,CAAC,KAAK,EAAE,GAAG,GAAG,MAAM,CAIhD;AAED,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,YAAY,CAE1F;AACD,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,aAAa,EAAE,IAAI,EAAE,YAAY,GAAG,MAAM,CAIvF;AACD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAG5D;AACD,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,GAAG,GAAG,YAAY,CAK1D;AAiDD,2FAA2F;AAC3F,MAAM,WAAW,QAAQ;IAAG,GAAG,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,MAAM,CAAC;CAAE;AAyFnF,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,GAAG,EAAE,IAAI,WAAa,GAAG,OAAO,CAAC;IAAE,KAAK,EAAE,GAAG,CAAC;IAAC,WAAW,EAAE,GAAG,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC,CAmDtI;AACD,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,WAAa,GAAG,OAAO,CAAC,GAAG,CAAC,CAsB5G"}
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
/** Shared physical-slot authority (REL-1564). Durable records never expire or auto-clear. */
|
|
2
|
+
import { createHash, randomUUID } from "node:crypto";
|
|
3
|
+
import { z } from "zod";
|
|
4
|
+
import { load as yamlLoad, JSON_SCHEMA } from "js-yaml";
|
|
5
|
+
import { actualClaimIssue, claimCreationSha256, effectiveClaimSpec } from "./claim-creation-projection.js";
|
|
6
|
+
import { createSlotApi } from "./slot-kubernetes.js";
|
|
7
|
+
export const SLOT_ANNOTATION = "calltelemetry.com/physical-slot";
|
|
8
|
+
export const SLOT_NONCE = "calltelemetry.com/physical-slot-operation-nonce";
|
|
9
|
+
export const SLOT_REQUEST = "calltelemetry.com/physical-slot-request-sha256";
|
|
10
|
+
const LEASES = "/apis/coordination.k8s.io/v1/namespaces/ct-lab/leases";
|
|
11
|
+
const CLAIMS = "/apis/calltelemetry.com/v1alpha1/namespaces/ct-lab/applianceclaims";
|
|
12
|
+
const printable = z.string().min(1).max(256).regex(/^[\x20-\x7e]+$/);
|
|
13
|
+
const uuid = z.string().uuid().refine(value => value === value.toLowerCase(), "UUID must be canonical lowercase");
|
|
14
|
+
const sha = z.string().regex(/^[0-9a-f]{64}$/);
|
|
15
|
+
const objectName = z.string().min(1).max(253).refine(name => name.split(".").every(label => /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/.test(label)), "DNS subdomain labels must be nonempty and at most63 characters");
|
|
16
|
+
const SlotSchema = z.object({ hostAssetId: printable, node: printable, vmid: z.number().safe().int().positive() }).strict();
|
|
17
|
+
const ClaimIdentitySchema = z.object({ namespace: z.literal("ct-lab"), name: objectName, uid: uuid }).strict();
|
|
18
|
+
const ContextSchema = z.discriminatedUnion("kind", [
|
|
19
|
+
z.object({ kind: z.literal("mcp"), issueKey: printable.optional() }).strict(),
|
|
20
|
+
z.object({ kind: z.literal("operator"), issueKey: printable.optional() }).strict(),
|
|
21
|
+
z.object({ kind: z.literal("ct-meta"), logicalAssetId: printable, issueKey: printable, importOperationId: printable }).strict(),
|
|
22
|
+
]);
|
|
23
|
+
export const ReservationSchema = z.object({
|
|
24
|
+
schema: z.literal("physical-slot-reservation/v1"), slot: SlotSchema,
|
|
25
|
+
phase: z.enum(["provisional", "bound", "provider-bound", "retiring", "released"]),
|
|
26
|
+
operationNonce: uuid, requestSha256: sha,
|
|
27
|
+
intendedClaim: z.object({ namespace: z.literal("ct-lab"), name: objectName }).strict(), context: ContextSchema,
|
|
28
|
+
claim: ClaimIdentitySchema.nullable(),
|
|
29
|
+
provider: z.object({ uuid, vmName: printable, managedOwnershipSha256: sha, volumes: z.array(z.string().min(1).max(512).regex(/^[\x20-\x7e]+$/)).max(256) }).strict().nullable(),
|
|
30
|
+
}).strict();
|
|
31
|
+
const MutexSchema = z.object({ schema: z.literal("physical-slot-mutex/v1"), slot: SlotSchema, ownerNonce: uuid, token: uuid }).strict();
|
|
32
|
+
function requireSlot(ok, message) {
|
|
33
|
+
if (!ok)
|
|
34
|
+
throw new Error(`physical slot ${message}; retain reservation`);
|
|
35
|
+
}
|
|
36
|
+
export function canonicalJson(value) {
|
|
37
|
+
if (Array.isArray(value))
|
|
38
|
+
return `[${value.map(canonicalJson).join(",")}]`;
|
|
39
|
+
if (value !== null && typeof value === "object")
|
|
40
|
+
return `{${Object.keys(value).sort().map(k => `${JSON.stringify(k)}:${canonicalJson(value[k])}`).join(",")}}`;
|
|
41
|
+
return JSON.stringify(value);
|
|
42
|
+
}
|
|
43
|
+
const digest = (value) => createHash("sha256").update(canonicalJson(value), "utf8").digest("hex");
|
|
44
|
+
export function physicalSlot(hostAssetId, node, vmid) {
|
|
45
|
+
return SlotSchema.parse({ hostAssetId, node, vmid });
|
|
46
|
+
}
|
|
47
|
+
export function slotLeaseName(role, slot) {
|
|
48
|
+
SlotSchema.parse(slot);
|
|
49
|
+
const hash = digest([slot.hostAssetId, slot.node, slot.vmid]);
|
|
50
|
+
return `ct-physical-slot-${role}.${hash.slice(0, 32)}.${hash.slice(32)}`;
|
|
51
|
+
}
|
|
52
|
+
export function creationOwnerSha(record) {
|
|
53
|
+
const { schema, slot, operationNonce, requestSha256, intendedClaim, context } = ReservationSchema.parse(record);
|
|
54
|
+
return digest({ schema, slot, operationNonce, requestSha256, intendedClaim, context });
|
|
55
|
+
}
|
|
56
|
+
export function claimPhysicalSlot(claim) {
|
|
57
|
+
const node = claim?.spec?.node;
|
|
58
|
+
requireSlot(node === "minis" || node === "proxmox", "requires a canonical Proxmox node");
|
|
59
|
+
requireSlot(Number.isSafeInteger(claim.spec.vmid) && claim.spec.vmid >= 100 && claim.spec.vmid <= 8999, "requires an explicit provider VMID");
|
|
60
|
+
return physicalSlot(node === "minis" ? "proxmox-minis-lab" : "proxmox-lab", node, claim.spec.vmid);
|
|
61
|
+
}
|
|
62
|
+
function leaseEnvelope(lease, name) {
|
|
63
|
+
requireSlot(lease?.apiVersion === "coordination.k8s.io/v1" && lease.kind === "Lease"
|
|
64
|
+
&& lease.metadata?.namespace === "ct-lab" && lease.metadata.name === name
|
|
65
|
+
&& uuid.safeParse(lease.metadata.uid).success && typeof lease.metadata.resourceVersion === "string"
|
|
66
|
+
&& lease.metadata.resourceVersion.length > 0 && !lease.metadata.deletionTimestamp, "Lease identity or CAS version differs");
|
|
67
|
+
}
|
|
68
|
+
function annotationJson(text) {
|
|
69
|
+
requireSlot(typeof text === "string" && Buffer.byteLength(text) <= 65_536, "annotation JSON unavailable or oversized");
|
|
70
|
+
const value = JSON.parse(text); // Accept only JSON syntax, not YAML extensions.
|
|
71
|
+
yamlLoad(text, { schema: JSON_SCHEMA, json: false }); // Reject duplicate/escaped duplicate keys.
|
|
72
|
+
return value;
|
|
73
|
+
}
|
|
74
|
+
function reservation(lease, slot) {
|
|
75
|
+
leaseEnvelope(lease, slotLeaseName("reservation", slot));
|
|
76
|
+
const record = ReservationSchema.parse(annotationJson(lease.metadata.annotations?.[SLOT_ANNOTATION]));
|
|
77
|
+
requireSlot(canonicalJson(record.slot) === canonicalJson(slot), "stored full tuple differs");
|
|
78
|
+
requireSlot(lease.spec && Object.keys(lease.spec).length === 0, "durable reservation has expiring lease semantics");
|
|
79
|
+
requireSlot(record.phase === "provisional" ? record.claim === null && record.provider === null : record.claim !== null, "phase and claim binding differ");
|
|
80
|
+
if (record.claim)
|
|
81
|
+
requireSlot(record.claim.namespace === record.intendedClaim.namespace && record.claim.name === record.intendedClaim.name, "bound claim differs from original intent");
|
|
82
|
+
if (record.provider)
|
|
83
|
+
requireSlot(canonicalJson(record.provider.volumes) === canonicalJson([...new Set(record.provider.volumes)].sort()), "provider volumes are not sorted and unique");
|
|
84
|
+
requireSlot(record.phase !== "provider-bound" || record.provider !== null, "provider phase lacks immutable provider binding");
|
|
85
|
+
return record;
|
|
86
|
+
}
|
|
87
|
+
function verifyClaim(live, record, expectedUid) {
|
|
88
|
+
requireSlot(live?.apiVersion === "calltelemetry.com/v1alpha1" && live.kind === "ApplianceClaim"
|
|
89
|
+
&& live.metadata?.namespace === record.intendedClaim.namespace && live.metadata.name === record.intendedClaim.name
|
|
90
|
+
&& uuid.safeParse(live.metadata.uid).success && (!expectedUid || live.metadata.uid === expectedUid)
|
|
91
|
+
&& typeof live.metadata.resourceVersion === "string" && live.metadata.resourceVersion.length > 0
|
|
92
|
+
&& canonicalJson(claimPhysicalSlot(live)) === canonicalJson(record.slot)
|
|
93
|
+
&& live.metadata.annotations?.[SLOT_NONCE] === record.operationNonce
|
|
94
|
+
&& live.metadata.annotations?.[SLOT_REQUEST] === record.requestSha256
|
|
95
|
+
&& (actualClaimIssue(live) ?? null) === (record.context.issueKey ?? null)
|
|
96
|
+
&& claimCreationSha256(live) === record.requestSha256, "independent claim UID, tuple or source lineage differs");
|
|
97
|
+
}
|
|
98
|
+
const MUTEX_FIELDS = ["holderIdentity", "leaseDurationSeconds", "acquireTime", "renewTime", "leaseTransitions"].sort();
|
|
99
|
+
function wireTime(milliseconds) { return new Date(milliseconds).toISOString().replace(/Z$/, "000Z"); }
|
|
100
|
+
function timeValue(value) {
|
|
101
|
+
requireSlot(typeof value === "string" && /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{6}Z$/.test(value), "mutex timestamp is not canonical UTC microseconds");
|
|
102
|
+
const parsed = Date.parse(value);
|
|
103
|
+
requireSlot(Number.isFinite(parsed) && new Date(parsed).toISOString() === value.slice(0, 23) + "Z", "mutex timestamp is invalid");
|
|
104
|
+
return parsed;
|
|
105
|
+
}
|
|
106
|
+
function leaseBody(name, record, existing, spec = {}) {
|
|
107
|
+
return { apiVersion: "coordination.k8s.io/v1", kind: "Lease", metadata: {
|
|
108
|
+
...(existing?.metadata || {}), name, namespace: "ct-lab",
|
|
109
|
+
annotations: { ...(existing?.metadata?.annotations || {}), [SLOT_ANNOTATION]: canonicalJson(record) },
|
|
110
|
+
}, spec };
|
|
111
|
+
}
|
|
112
|
+
const defaults = () => ({ api: createSlotApi(), now: Date.now, nonce: randomUUID });
|
|
113
|
+
class Mutex {
|
|
114
|
+
deps;
|
|
115
|
+
slot;
|
|
116
|
+
lease;
|
|
117
|
+
owner;
|
|
118
|
+
timer;
|
|
119
|
+
tail = Promise.resolve();
|
|
120
|
+
failure;
|
|
121
|
+
constructor(deps, slot) {
|
|
122
|
+
this.deps = deps;
|
|
123
|
+
this.slot = slot;
|
|
124
|
+
this.owner = MutexSchema.parse({ schema: "physical-slot-mutex/v1", slot, ownerNonce: deps.nonce(), token: deps.nonce() });
|
|
125
|
+
}
|
|
126
|
+
name() { return slotLeaseName("mutex", this.slot); }
|
|
127
|
+
queue(fn) {
|
|
128
|
+
const run = this.tail.then(fn);
|
|
129
|
+
this.tail = run.catch(() => { });
|
|
130
|
+
return run;
|
|
131
|
+
}
|
|
132
|
+
validate(value) {
|
|
133
|
+
leaseEnvelope(value, this.name());
|
|
134
|
+
const wire = MutexSchema.parse(annotationJson(value.metadata.annotations?.[SLOT_ANNOTATION]));
|
|
135
|
+
requireSlot(canonicalJson(wire.slot) === canonicalJson(this.slot) && value.spec?.holderIdentity === wire.token
|
|
136
|
+
&& value.spec.leaseDurationSeconds === 120 && Number.isSafeInteger(value.spec.leaseTransitions) && value.spec.leaseTransitions >= 0
|
|
137
|
+
&& canonicalJson(Object.keys(value.spec).sort()) === canonicalJson(MUTEX_FIELDS)
|
|
138
|
+
&& Number.isFinite(timeValue(value.spec.acquireTime)) && Number.isFinite(timeValue(value.spec.renewTime)), "mutex tuple, holder or duration differs");
|
|
139
|
+
return wire;
|
|
140
|
+
}
|
|
141
|
+
async enter() {
|
|
142
|
+
const path = `${LEASES}/${this.name()}`;
|
|
143
|
+
const previous = await this.deps.api.request(path, "GET");
|
|
144
|
+
if (previous) {
|
|
145
|
+
this.validate(previous);
|
|
146
|
+
requireSlot(Date.parse(previous.spec.renewTime) + 120_000 <= this.deps.now(), "mutex is occupied");
|
|
147
|
+
}
|
|
148
|
+
const transitions = previous ? previous.spec.leaseTransitions + 1 : 0;
|
|
149
|
+
requireSlot(Number.isSafeInteger(transitions), "mutex transition counter overflow");
|
|
150
|
+
const spec = { holderIdentity: this.owner.token, leaseDurationSeconds: 120, acquireTime: wireTime(this.deps.now()), renewTime: wireTime(this.deps.now()), leaseTransitions: transitions };
|
|
151
|
+
this.lease = await this.deps.api.request(previous ? path : LEASES, previous ? "PUT" : "POST", leaseBody(this.name(), this.owner, previous, spec));
|
|
152
|
+
this.validate(this.lease);
|
|
153
|
+
requireSlot(canonicalJson(this.validate(this.lease)) === canonicalJson(this.owner), "mutex creation returned another holder");
|
|
154
|
+
this.timer = setInterval(() => { void this.touch().catch(err => { this.failure = err; }); }, 20_000);
|
|
155
|
+
this.timer.unref();
|
|
156
|
+
}
|
|
157
|
+
async touch() {
|
|
158
|
+
return this.queue(async () => {
|
|
159
|
+
if (this.failure)
|
|
160
|
+
throw this.failure;
|
|
161
|
+
const path = `${LEASES}/${this.name()}`;
|
|
162
|
+
const live = await this.deps.api.request(path, "GET");
|
|
163
|
+
const wire = this.validate(live);
|
|
164
|
+
requireSlot(live.metadata.uid === this.lease.metadata.uid && canonicalJson(wire) === canonicalJson(this.owner)
|
|
165
|
+
&& Date.parse(live.spec.renewTime) + 120_000 > this.deps.now(), "mutex ownership expired or changed");
|
|
166
|
+
this.lease = await this.deps.api.request(path, "PUT", leaseBody(this.name(), this.owner, live, { ...live.spec, renewTime: wireTime(this.deps.now()) }));
|
|
167
|
+
this.validate(this.lease);
|
|
168
|
+
requireSlot(this.lease.metadata.uid === live.metadata.uid && canonicalJson(this.validate(this.lease)) === canonicalJson(this.owner) && Date.parse(this.lease.spec.renewTime) + 120_000 > this.deps.now(), "mutex renewal did not preserve ownership");
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
async exit() {
|
|
172
|
+
if (this.timer)
|
|
173
|
+
clearInterval(this.timer);
|
|
174
|
+
await this.tail;
|
|
175
|
+
if (!this.lease || this.failure)
|
|
176
|
+
return;
|
|
177
|
+
try {
|
|
178
|
+
await this.queue(async () => {
|
|
179
|
+
const path = `${LEASES}/${this.name()}`;
|
|
180
|
+
const live = await this.deps.api.request(path, "GET");
|
|
181
|
+
requireSlot(live?.metadata?.uid === this.lease.metadata.uid && canonicalJson(this.validate(live)) === canonicalJson(this.owner), "mutex release owner differs");
|
|
182
|
+
await this.deps.api.request(path, "PUT", leaseBody(this.name(), this.owner, live, { ...live.spec, renewTime: "1970-01-01T00:00:00.000000Z" }));
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
catch { /* Unknown release never removes durable reservation; mutex expires naturally. */ }
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
async function withMutex(deps, slot, action) {
|
|
189
|
+
const mutex = new Mutex(deps, slot);
|
|
190
|
+
try {
|
|
191
|
+
await mutex.enter();
|
|
192
|
+
return await action(mutex);
|
|
193
|
+
}
|
|
194
|
+
finally {
|
|
195
|
+
await mutex.exit();
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
async function noOtherClaim(deps, slot, ownUid) {
|
|
199
|
+
let next = "";
|
|
200
|
+
for (let page = 0; page < 10; page++) {
|
|
201
|
+
const result = await deps.api.request(`${CLAIMS}?limit=500${next ? `&continue=${encodeURIComponent(next)}` : ""}`, "GET");
|
|
202
|
+
requireSlot(result?.kind === "ApplianceClaimList" && result.apiVersion === "calltelemetry.com/v1alpha1" && Array.isArray(result.items), "claim occupancy list unavailable");
|
|
203
|
+
for (const claim of result.items) {
|
|
204
|
+
if (claim.metadata?.uid === ownUid)
|
|
205
|
+
continue;
|
|
206
|
+
const id = claim.spec?.vmid;
|
|
207
|
+
const node = claim.spec?.node;
|
|
208
|
+
const alias = node === "proxmox-lab" ? "proxmox" : ["proxmox-mini", "proxmox-minis-lab"].includes(node) ? "minis" : node;
|
|
209
|
+
if (String(id) === String(slot.vmid) && (alias === slot.node || !["minis", "proxmox", "esxi"].includes(alias)))
|
|
210
|
+
throw new Error("physical slot has another existing ApplianceClaim; retain reservation");
|
|
211
|
+
}
|
|
212
|
+
next = result.metadata?.continue || "";
|
|
213
|
+
requireSlot(typeof next === "string", "claim occupancy pagination malformed");
|
|
214
|
+
if (!next)
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
throw new Error("physical slot claim occupancy scan incomplete; retain reservation");
|
|
218
|
+
}
|
|
219
|
+
export async function createPhysicalClaim(manifest, deps = defaults()) {
|
|
220
|
+
requireSlot(manifest.metadata?.namespace === "ct-lab", "namespace must be ct-lab");
|
|
221
|
+
objectName.parse(manifest.metadata.name);
|
|
222
|
+
manifest = { ...manifest, spec: effectiveClaimSpec(manifest.spec) };
|
|
223
|
+
const slot = claimPhysicalSlot(manifest);
|
|
224
|
+
requireSlot(typeof manifest.spec.vmName === "string" && manifest.spec.vmName.length > 0, "constructor must provide the actual VM name before claim POST");
|
|
225
|
+
requireSlot(Number.isInteger(manifest.spec?.ttlHours) && manifest.spec.ttlHours > 0 && manifest.spec.ttlHours <= 8760, "dynamic claim requires finite TTL");
|
|
226
|
+
const context = ContextSchema.parse({ kind: "mcp", ...(actualClaimIssue(manifest) ? { issueKey: actualClaimIssue(manifest) } : {}) });
|
|
227
|
+
const requestSha256 = claimCreationSha256(manifest);
|
|
228
|
+
return withMutex(deps, slot, async (mutex) => {
|
|
229
|
+
const path = `${LEASES}/${slotLeaseName("reservation", slot)}`;
|
|
230
|
+
let existing = await deps.api.request(path, "GET");
|
|
231
|
+
if (existing) {
|
|
232
|
+
const held = reservation(existing, slot);
|
|
233
|
+
requireSlot(["bound", "provider-bound"].includes(held.phase) && held.requestSha256 === requestSha256
|
|
234
|
+
&& canonicalJson(held.context) === canonicalJson(context) && held.intendedClaim.name === manifest.metadata.name, "durable reservation is occupied");
|
|
235
|
+
const live = await deps.api.request(`${CLAIMS}/${manifest.metadata.name}`, "GET");
|
|
236
|
+
verifyClaim(live, held, held.claim.uid);
|
|
237
|
+
requireSlot(!live.metadata.deletionTimestamp && live.spec?.closed !== true && live.spec?.state !== "Closed" && live.status?.phase !== "Closed", "bound claim is retiring");
|
|
238
|
+
requireSlot(Number.isInteger(live.spec?.ttlHours) && live.spec.ttlHours >= manifest.spec.ttlHours && live.spec.ttlHours <= 8760 && live.spec.claimType !== "fixture", "bound claim finite TTL differs");
|
|
239
|
+
if (live.status?.phase === "Ready" || live.status?.completionTime) {
|
|
240
|
+
const baseline = Date.parse(live.status?.completionTime || "");
|
|
241
|
+
requireSlot(Number.isFinite(baseline) && baseline + live.spec.ttlHours * 3_600_000 > deps.now(), "bound claim expired or Ready TTL baseline unavailable");
|
|
242
|
+
}
|
|
243
|
+
await noOtherClaim(deps, slot, live.metadata.uid);
|
|
244
|
+
await mutex.touch();
|
|
245
|
+
const current = await deps.api.request(path, "GET");
|
|
246
|
+
requireSlot(current?.metadata?.uid === existing.metadata.uid && canonicalJson(reservation(current, slot)) === canonicalJson(held), "bound reservation changed during retry");
|
|
247
|
+
return { claim: live, reservation: { uid: existing.metadata.uid, creationOwnerSha256: creationOwnerSha(held), record: held }, reused: true };
|
|
248
|
+
}
|
|
249
|
+
await noOtherClaim(deps, slot);
|
|
250
|
+
const record = ReservationSchema.parse({ schema: "physical-slot-reservation/v1", slot, phase: "provisional", operationNonce: deps.nonce(), requestSha256,
|
|
251
|
+
intendedClaim: { namespace: "ct-lab", name: manifest.metadata.name }, context, claim: null, provider: null });
|
|
252
|
+
await mutex.touch();
|
|
253
|
+
existing = await deps.api.request(LEASES, "POST", leaseBody(slotLeaseName("reservation", slot), record));
|
|
254
|
+
requireSlot(canonicalJson(reservation(existing, slot)) === canonicalJson(record), "reservation creation returned another owner");
|
|
255
|
+
const protectedManifest = { ...manifest, metadata: { ...manifest.metadata, annotations: { ...(manifest.metadata.annotations || {}), [SLOT_NONCE]: record.operationNonce, [SLOT_REQUEST]: requestSha256 } } };
|
|
256
|
+
await mutex.touch();
|
|
257
|
+
const response = await deps.api.request(CLAIMS, "POST", protectedManifest);
|
|
258
|
+
requireSlot(uuid.safeParse(response?.metadata?.uid).success, "claim creation response lacks actual UID");
|
|
259
|
+
const live = await deps.api.request(`${CLAIMS}/${manifest.metadata.name}`, "GET");
|
|
260
|
+
verifyClaim(live, record, response.metadata.uid);
|
|
261
|
+
requireSlot(!live.metadata.deletionTimestamp, "new claim is already deleting");
|
|
262
|
+
const bound = { ...record, phase: "bound", claim: { ...record.intendedClaim, uid: live.metadata.uid } };
|
|
263
|
+
await mutex.touch();
|
|
264
|
+
const current = await deps.api.request(path, "GET");
|
|
265
|
+
requireSlot(current?.metadata?.uid === existing.metadata.uid && canonicalJson(reservation(current, slot)) === canonicalJson(record), "provisional reservation changed before UID binding");
|
|
266
|
+
existing = await deps.api.request(path, "PUT", leaseBody(slotLeaseName("reservation", slot), bound, current));
|
|
267
|
+
requireSlot(existing?.metadata?.uid === current.metadata.uid && canonicalJson(reservation(existing, slot)) === canonicalJson(bound), "UID binding not independently confirmed");
|
|
268
|
+
return { claim: live, reservation: { uid: existing.metadata.uid, creationOwnerSha256: creationOwnerSha(bound), record: bound }, reused: false };
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
export async function deletePhysicalClaim(name, expectedUid, deps = defaults()) {
|
|
272
|
+
objectName.parse(name);
|
|
273
|
+
uuid.parse(expectedUid);
|
|
274
|
+
const live = await deps.api.request(`${CLAIMS}/${name}`, "GET");
|
|
275
|
+
requireSlot(live?.metadata?.uid === expectedUid, "original selected claim UID differs or is absent");
|
|
276
|
+
const slot = claimPhysicalSlot(live);
|
|
277
|
+
return withMutex(deps, slot, async (mutex) => {
|
|
278
|
+
const path = `${LEASES}/${slotLeaseName("reservation", slot)}`;
|
|
279
|
+
let lease = await deps.api.request(path, "GET");
|
|
280
|
+
const held = reservation(lease, slot);
|
|
281
|
+
requireSlot(["bound", "provider-bound", "retiring"].includes(held.phase) && held.claim?.uid === expectedUid && held.intendedClaim.name === name, "claim does not own the bound reservation");
|
|
282
|
+
let selected = await deps.api.request(`${CLAIMS}/${name}`, "GET");
|
|
283
|
+
verifyClaim(selected, held, expectedUid);
|
|
284
|
+
const retiring = { ...held, phase: "retiring" };
|
|
285
|
+
await mutex.touch();
|
|
286
|
+
lease = await deps.api.request(path, "PUT", leaseBody(slotLeaseName("reservation", slot), retiring, lease));
|
|
287
|
+
requireSlot(canonicalJson(reservation(lease, slot)) === canonicalJson(retiring), "retiring reservation write failed");
|
|
288
|
+
await mutex.touch();
|
|
289
|
+
selected = await deps.api.request(`${CLAIMS}/${name}`, "GET");
|
|
290
|
+
verifyClaim(selected, retiring, expectedUid);
|
|
291
|
+
await deps.api.request(`${CLAIMS}/${name}`, "DELETE", { apiVersion: "v1", kind: "DeleteOptions", preconditions: { uid: expectedUid, resourceVersion: selected.metadata.resourceVersion } });
|
|
292
|
+
return { requested: true, expectedUid, reservationRetained: true, phase: "retiring", next: "The governed operator/controller must prove original claim, provider and owned-volume absence before releasing physical-slot custody." };
|
|
293
|
+
});
|
|
294
|
+
}
|
|
295
|
+
//# sourceMappingURL=physical-slot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"physical-slot.js","sourceRoot":"","sources":["../../../src/tools/physical-slot.ts"],"names":[],"mappings":"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"}
|
|
@@ -137,8 +137,8 @@ export declare const ProvisionVmInputSchema: z.ZodEffects<z.ZodEffects<z.ZodObje
|
|
|
137
137
|
}, "strip", z.ZodTypeAny, {
|
|
138
138
|
hypervisorType: "proxmox" | "esxi" | "any";
|
|
139
139
|
format: "table" | "json";
|
|
140
|
-
apply: boolean;
|
|
141
140
|
source: "template" | "alma97-cloud" | "alma97-iso";
|
|
141
|
+
apply: boolean;
|
|
142
142
|
recoverIncomplete: boolean;
|
|
143
143
|
finalizeInstalled: boolean;
|
|
144
144
|
startOnDeploy: boolean;
|
|
@@ -165,8 +165,8 @@ export declare const ProvisionVmInputSchema: z.ZodEffects<z.ZodEffects<z.ZodObje
|
|
|
165
165
|
requester?: string | undefined;
|
|
166
166
|
purpose?: string | undefined;
|
|
167
167
|
ttlHours?: number | undefined;
|
|
168
|
-
assetId?: string | undefined;
|
|
169
168
|
hostAssetId?: string | undefined;
|
|
169
|
+
assetId?: string | undefined;
|
|
170
170
|
operationId?: string | undefined;
|
|
171
171
|
networkBridge?: string | undefined;
|
|
172
172
|
templateAssetId?: string | undefined;
|
|
@@ -220,8 +220,9 @@ export declare const ProvisionVmInputSchema: z.ZodEffects<z.ZodEffects<z.ZodObje
|
|
|
220
220
|
requester?: string | undefined;
|
|
221
221
|
purpose?: string | undefined;
|
|
222
222
|
ttlHours?: number | undefined;
|
|
223
|
-
assetId?: string | undefined;
|
|
224
223
|
hostAssetId?: string | undefined;
|
|
224
|
+
source?: "template" | "alma97-cloud" | "alma97-iso" | undefined;
|
|
225
|
+
assetId?: string | undefined;
|
|
225
226
|
operationId?: string | undefined;
|
|
226
227
|
networkBridge?: string | undefined;
|
|
227
228
|
templateAssetId?: string | undefined;
|
|
@@ -232,7 +233,6 @@ export declare const ProvisionVmInputSchema: z.ZodEffects<z.ZodEffects<z.ZodObje
|
|
|
232
233
|
confirmAssetId?: string | undefined;
|
|
233
234
|
targetHost?: string | undefined;
|
|
234
235
|
outputFile?: string | undefined;
|
|
235
|
-
source?: "template" | "alma97-cloud" | "alma97-iso" | undefined;
|
|
236
236
|
webImage?: string | undefined;
|
|
237
237
|
baseVersion?: string | undefined;
|
|
238
238
|
nativeCliDir?: string | undefined;
|
|
@@ -263,8 +263,8 @@ export declare const ProvisionVmInputSchema: z.ZodEffects<z.ZodEffects<z.ZodObje
|
|
|
263
263
|
}>, {
|
|
264
264
|
hypervisorType: "proxmox" | "esxi" | "any";
|
|
265
265
|
format: "table" | "json";
|
|
266
|
-
apply: boolean;
|
|
267
266
|
source: "template" | "alma97-cloud" | "alma97-iso";
|
|
267
|
+
apply: boolean;
|
|
268
268
|
recoverIncomplete: boolean;
|
|
269
269
|
finalizeInstalled: boolean;
|
|
270
270
|
startOnDeploy: boolean;
|
|
@@ -291,8 +291,8 @@ export declare const ProvisionVmInputSchema: z.ZodEffects<z.ZodEffects<z.ZodObje
|
|
|
291
291
|
requester?: string | undefined;
|
|
292
292
|
purpose?: string | undefined;
|
|
293
293
|
ttlHours?: number | undefined;
|
|
294
|
-
assetId?: string | undefined;
|
|
295
294
|
hostAssetId?: string | undefined;
|
|
295
|
+
assetId?: string | undefined;
|
|
296
296
|
operationId?: string | undefined;
|
|
297
297
|
networkBridge?: string | undefined;
|
|
298
298
|
templateAssetId?: string | undefined;
|
|
@@ -346,8 +346,9 @@ export declare const ProvisionVmInputSchema: z.ZodEffects<z.ZodEffects<z.ZodObje
|
|
|
346
346
|
requester?: string | undefined;
|
|
347
347
|
purpose?: string | undefined;
|
|
348
348
|
ttlHours?: number | undefined;
|
|
349
|
-
assetId?: string | undefined;
|
|
350
349
|
hostAssetId?: string | undefined;
|
|
350
|
+
source?: "template" | "alma97-cloud" | "alma97-iso" | undefined;
|
|
351
|
+
assetId?: string | undefined;
|
|
351
352
|
operationId?: string | undefined;
|
|
352
353
|
networkBridge?: string | undefined;
|
|
353
354
|
templateAssetId?: string | undefined;
|
|
@@ -358,7 +359,6 @@ export declare const ProvisionVmInputSchema: z.ZodEffects<z.ZodEffects<z.ZodObje
|
|
|
358
359
|
confirmAssetId?: string | undefined;
|
|
359
360
|
targetHost?: string | undefined;
|
|
360
361
|
outputFile?: string | undefined;
|
|
361
|
-
source?: "template" | "alma97-cloud" | "alma97-iso" | undefined;
|
|
362
362
|
webImage?: string | undefined;
|
|
363
363
|
baseVersion?: string | undefined;
|
|
364
364
|
nativeCliDir?: string | undefined;
|
|
@@ -389,8 +389,8 @@ export declare const ProvisionVmInputSchema: z.ZodEffects<z.ZodEffects<z.ZodObje
|
|
|
389
389
|
}>, {
|
|
390
390
|
hypervisorType: "proxmox" | "esxi" | "any";
|
|
391
391
|
format: "table" | "json";
|
|
392
|
-
apply: boolean;
|
|
393
392
|
source: "template" | "alma97-cloud" | "alma97-iso";
|
|
393
|
+
apply: boolean;
|
|
394
394
|
recoverIncomplete: boolean;
|
|
395
395
|
finalizeInstalled: boolean;
|
|
396
396
|
startOnDeploy: boolean;
|
|
@@ -417,8 +417,8 @@ export declare const ProvisionVmInputSchema: z.ZodEffects<z.ZodEffects<z.ZodObje
|
|
|
417
417
|
requester?: string | undefined;
|
|
418
418
|
purpose?: string | undefined;
|
|
419
419
|
ttlHours?: number | undefined;
|
|
420
|
-
assetId?: string | undefined;
|
|
421
420
|
hostAssetId?: string | undefined;
|
|
421
|
+
assetId?: string | undefined;
|
|
422
422
|
operationId?: string | undefined;
|
|
423
423
|
networkBridge?: string | undefined;
|
|
424
424
|
templateAssetId?: string | undefined;
|
|
@@ -472,8 +472,9 @@ export declare const ProvisionVmInputSchema: z.ZodEffects<z.ZodEffects<z.ZodObje
|
|
|
472
472
|
requester?: string | undefined;
|
|
473
473
|
purpose?: string | undefined;
|
|
474
474
|
ttlHours?: number | undefined;
|
|
475
|
-
assetId?: string | undefined;
|
|
476
475
|
hostAssetId?: string | undefined;
|
|
476
|
+
source?: "template" | "alma97-cloud" | "alma97-iso" | undefined;
|
|
477
|
+
assetId?: string | undefined;
|
|
477
478
|
operationId?: string | undefined;
|
|
478
479
|
networkBridge?: string | undefined;
|
|
479
480
|
templateAssetId?: string | undefined;
|
|
@@ -484,7 +485,6 @@ export declare const ProvisionVmInputSchema: z.ZodEffects<z.ZodEffects<z.ZodObje
|
|
|
484
485
|
confirmAssetId?: string | undefined;
|
|
485
486
|
targetHost?: string | undefined;
|
|
486
487
|
outputFile?: string | undefined;
|
|
487
|
-
source?: "template" | "alma97-cloud" | "alma97-iso" | undefined;
|
|
488
488
|
webImage?: string | undefined;
|
|
489
489
|
baseVersion?: string | undefined;
|
|
490
490
|
nativeCliDir?: string | undefined;
|
|
@@ -653,9 +653,9 @@ export declare const AutoProvisionVmInputSchema: z.ZodObject<{
|
|
|
653
653
|
hypervisorType: "proxmox" | "esxi" | "any";
|
|
654
654
|
ttlMinutes: number;
|
|
655
655
|
format: "table" | "json";
|
|
656
|
+
source: "template" | "alma97-cloud" | "alma97-iso";
|
|
656
657
|
apply: boolean;
|
|
657
658
|
purgeIfFull: boolean;
|
|
658
|
-
source: "template" | "alma97-cloud" | "alma97-iso";
|
|
659
659
|
recoverIncomplete: boolean;
|
|
660
660
|
finalizeInstalled: boolean;
|
|
661
661
|
fullClone: boolean;
|
|
@@ -682,8 +682,8 @@ export declare const AutoProvisionVmInputSchema: z.ZodObject<{
|
|
|
682
682
|
requester?: string | undefined;
|
|
683
683
|
purpose?: string | undefined;
|
|
684
684
|
ttlHours?: number | undefined;
|
|
685
|
-
assetId?: string | undefined;
|
|
686
685
|
hostAssetId?: string | undefined;
|
|
686
|
+
assetId?: string | undefined;
|
|
687
687
|
operationId?: string | undefined;
|
|
688
688
|
networkBridge?: string | undefined;
|
|
689
689
|
templateAssetId?: string | undefined;
|
|
@@ -740,8 +740,9 @@ export declare const AutoProvisionVmInputSchema: z.ZodObject<{
|
|
|
740
740
|
requester?: string | undefined;
|
|
741
741
|
purpose?: string | undefined;
|
|
742
742
|
ttlHours?: number | undefined;
|
|
743
|
-
assetId?: string | undefined;
|
|
744
743
|
hostAssetId?: string | undefined;
|
|
744
|
+
source?: "template" | "alma97-cloud" | "alma97-iso" | undefined;
|
|
745
|
+
assetId?: string | undefined;
|
|
745
746
|
operationId?: string | undefined;
|
|
746
747
|
networkBridge?: string | undefined;
|
|
747
748
|
templateAssetId?: string | undefined;
|
|
@@ -755,7 +756,6 @@ export declare const AutoProvisionVmInputSchema: z.ZodObject<{
|
|
|
755
756
|
targetHost?: string | undefined;
|
|
756
757
|
purgeIfFull?: boolean | undefined;
|
|
757
758
|
outputFile?: string | undefined;
|
|
758
|
-
source?: "template" | "alma97-cloud" | "alma97-iso" | undefined;
|
|
759
759
|
webImage?: string | undefined;
|
|
760
760
|
baseVersion?: string | undefined;
|
|
761
761
|
nativeCliDir?: string | undefined;
|
|
@@ -162,8 +162,8 @@ export declare const SandboxResetInputSchema: z.ZodEffects<z.ZodObject<{
|
|
|
162
162
|
receiptFile: z.ZodOptional<z.ZodString>;
|
|
163
163
|
}, "strip", z.ZodTypeAny, {
|
|
164
164
|
linearIssue: string;
|
|
165
|
-
assetId: string;
|
|
166
165
|
hostAssetId: "proxmox-lab" | "proxmox-mini" | "proxmox-minis-lab";
|
|
166
|
+
assetId: string;
|
|
167
167
|
operationId: string;
|
|
168
168
|
apply: boolean;
|
|
169
169
|
snapshotName: string;
|
|
@@ -186,8 +186,8 @@ export declare const SandboxResetInputSchema: z.ZodEffects<z.ZodObject<{
|
|
|
186
186
|
waitAgent?: boolean | undefined;
|
|
187
187
|
}>, {
|
|
188
188
|
linearIssue: string;
|
|
189
|
-
assetId: string;
|
|
190
189
|
hostAssetId: "proxmox-lab" | "proxmox-mini" | "proxmox-minis-lab";
|
|
190
|
+
assetId: string;
|
|
191
191
|
operationId: string;
|
|
192
192
|
apply: boolean;
|
|
193
193
|
snapshotName: string;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export type SlotMethod = "GET" | "POST" | "PUT" | "DELETE";
|
|
2
|
+
export interface SlotApi {
|
|
3
|
+
request(path: string, method: SlotMethod, body?: unknown): Promise<any | null>;
|
|
4
|
+
}
|
|
5
|
+
export declare class SlotApiError extends Error {
|
|
6
|
+
readonly status: number | null;
|
|
7
|
+
constructor(status: number | null, message: string);
|
|
8
|
+
}
|
|
9
|
+
export declare const SLOT_CONTEXT = "do-nyc1-cluster-ny1";
|
|
10
|
+
export declare const SLOT_SERVER = "https://28a6e4a4-fbff-4b51-a9bd-6073ffd8cdb2.k8s.ondigitalocean.com";
|
|
11
|
+
export declare function assertSlotPath(path: string, method: SlotMethod): void;
|
|
12
|
+
export declare function createSlotApi(): SlotApi;
|
|
13
|
+
//# sourceMappingURL=slot-kubernetes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slot-kubernetes.d.ts","sourceRoot":"","sources":["../../../src/tools/slot-kubernetes.ts"],"names":[],"mappings":"AAOA,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;AAC3D,MAAM,WAAW,OAAO;IAAG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;CAAE;AAC5G,qBAAa,YAAa,SAAQ,KAAK;aACT,MAAM,EAAE,MAAM,GAAG,IAAI;gBAArB,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,EAAE,MAAM;CACnE;AAGD,eAAO,MAAM,YAAY,wBAAwB,CAAC;AAClD,eAAO,MAAM,WAAW,wEAAwE,CAAC;AAGjG,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAUrE;AAmBD,wBAAgB,aAAa,IAAI,OAAO,CAgCvC"}
|