@calltelemetry/ct-lab-mcp 0.8.85 → 0.8.87
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 +1 -0
- package/dist/src/access-auth.d.ts +19 -0
- package/dist/src/access-auth.d.ts.map +1 -0
- package/dist/src/access-auth.js +52 -0
- package/dist/src/access-auth.js.map +1 -0
- package/dist/src/agent.d.ts +7 -0
- package/dist/src/agent.d.ts.map +1 -0
- package/dist/src/agent.js +14 -0
- package/dist/src/agent.js.map +1 -0
- package/dist/src/provenance.d.ts.map +1 -1
- package/dist/src/provenance.js +24 -15
- package/dist/src/provenance.js.map +1 -1
- package/dist/src/proxmox/client.d.ts.map +1 -1
- package/dist/src/proxmox/client.js +36 -10
- package/dist/src/proxmox/client.js.map +1 -1
- package/dist/src/tools/appliance-candidate-retire.d.ts +6 -6
- package/dist/src/tools/appliance-claim-tools.d.ts.map +1 -1
- package/dist/src/tools/appliance-claim-tools.js +57 -181
- package/dist/src/tools/appliance-claim-tools.js.map +1 -1
- package/dist/src/tools/appliance-exec.d.ts +2 -2
- package/dist/src/tools/canonical-guard.d.ts +1 -1
- package/dist/src/tools/claim-creation-projection.d.ts.map +1 -1
- package/dist/src/tools/claim-creation-projection.js +14 -4
- package/dist/src/tools/claim-creation-projection.js.map +1 -1
- package/dist/src/tools/cucm-emulator-tool.d.ts +2 -2
- package/dist/src/tools/factory-reset.d.ts +2 -2
- package/dist/src/tools/kubernetes-backend.d.ts +32 -0
- package/dist/src/tools/kubernetes-backend.d.ts.map +1 -0
- package/dist/src/tools/kubernetes-backend.js +156 -0
- package/dist/src/tools/kubernetes-backend.js.map +1 -0
- package/dist/src/tools/lab-dev.d.ts +2 -2
- package/dist/src/tools/license-tools.d.ts +4 -4
- package/dist/src/tools/list-inventory.d.ts +1 -1
- package/dist/src/tools/renewal-claim.d.ts.map +1 -1
- package/dist/src/tools/renewal-claim.js +4 -6
- package/dist/src/tools/renewal-claim.js.map +1 -1
- package/dist/src/tools/server-management.d.ts +2 -2
- package/dist/src/tools/slot-kubernetes.d.ts +0 -2
- package/dist/src/tools/slot-kubernetes.d.ts.map +1 -1
- package/dist/src/tools/slot-kubernetes.js +21 -49
- package/dist/src/tools/slot-kubernetes.js.map +1 -1
- package/dist/src/tools/slot-tools.d.ts +4 -4
- package/dist/src/tools/vm-action.d.ts +8 -8
- package/dist/src/tools/vm-cleanup.d.ts +1 -1
- package/dist/src/worker-adapter.d.ts +10 -0
- package/dist/src/worker-adapter.d.ts.map +1 -0
- package/dist/src/worker-adapter.js +94 -0
- package/dist/src/worker-adapter.js.map +1 -0
- package/dist/src/worker.d.ts +36 -0
- package/dist/src/worker.d.ts.map +1 -0
- package/dist/src/worker.js +151 -0
- package/dist/src/worker.js.map +1 -0
- package/package.json +13 -4
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export type LabKubernetesBackend = {
|
|
2
|
+
mode: "in-cluster";
|
|
3
|
+
context: string;
|
|
4
|
+
server: string;
|
|
5
|
+
tokenPath: string;
|
|
6
|
+
caPath: string;
|
|
7
|
+
} | {
|
|
8
|
+
mode: "kubeconfig";
|
|
9
|
+
context: string;
|
|
10
|
+
server: string;
|
|
11
|
+
kubeconfigPath: string;
|
|
12
|
+
};
|
|
13
|
+
export declare class KubernetesCommandError extends Error {
|
|
14
|
+
readonly status: number | null;
|
|
15
|
+
constructor(status: number | null, reason?: string);
|
|
16
|
+
}
|
|
17
|
+
export interface KubernetesCommandOptions {
|
|
18
|
+
input?: string | Buffer;
|
|
19
|
+
timeoutMs?: number;
|
|
20
|
+
maxBufferBytes?: number;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Select exactly one backend. Local tools must receive the LAB_CLAIM_* tuple;
|
|
24
|
+
* KUBECONFIG, ~/.kube/config, and an embedded DOKS endpoint are never defaults.
|
|
25
|
+
*/
|
|
26
|
+
export declare function resolveLabKubernetesBackend(env?: NodeJS.ProcessEnv, existsSync?: (path: string) => boolean): LabKubernetesBackend;
|
|
27
|
+
/** Run a local kubectl operation only after the selected kubeconfig is proven to match LAB_CLAIM_K8S_SERVER. */
|
|
28
|
+
export declare function runLabKubectl(args: string[], options?: KubernetesCommandOptions): Promise<{
|
|
29
|
+
stdout: string;
|
|
30
|
+
stderr: string;
|
|
31
|
+
}>;
|
|
32
|
+
//# sourceMappingURL=kubernetes-backend.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kubernetes-backend.d.ts","sourceRoot":"","sources":["../../../src/tools/kubernetes-backend.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,oBAAoB,GAC5B;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAC1F;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpF,qBAAa,sBAAuB,SAAQ,KAAK;aACnB,MAAM,EAAE,MAAM,GAAG,IAAI;gBAArB,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,MAAM,SAAmB;CAG7E;AAED,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAsBD;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,UAAU,GAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAuB,GACpD,oBAAoB,CAmBtB;AAsFD,gHAAgH;AAChH,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAY7C"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/** Shared, fail-closed Kubernetes target for claim CRUD and physical-slot custody. */
|
|
2
|
+
import { execFile } from "node:child_process";
|
|
3
|
+
import * as fs from "node:fs";
|
|
4
|
+
import { isAbsolute } from "node:path";
|
|
5
|
+
const SERVICE_ACCOUNT_TOKEN = "/var/run/secrets/kubernetes.io/serviceaccount/token";
|
|
6
|
+
const SERVICE_ACCOUNT_CA = "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt";
|
|
7
|
+
const MAX_CONFIG_BYTES = 1_048_576;
|
|
8
|
+
const DEFAULT_TIMEOUT_MS = 10_000;
|
|
9
|
+
export class KubernetesCommandError extends Error {
|
|
10
|
+
status;
|
|
11
|
+
constructor(status, reason = "request failed") {
|
|
12
|
+
super(`Kubernetes command ${reason} (${status ?? "unknown"})`);
|
|
13
|
+
this.status = status;
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
function configuredContext(env) {
|
|
17
|
+
const context = env.LAB_CLAIM_K8S_CONTEXT?.trim();
|
|
18
|
+
if (!context || context.length > 128 || /[\u0000-\u0020\u007f]/.test(context)) {
|
|
19
|
+
throw new Error("LAB_CLAIM_K8S_CONTEXT is required and must be a safe context name");
|
|
20
|
+
}
|
|
21
|
+
return context;
|
|
22
|
+
}
|
|
23
|
+
function configuredServer(env) {
|
|
24
|
+
const raw = env.LAB_CLAIM_K8S_SERVER?.trim();
|
|
25
|
+
if (!raw)
|
|
26
|
+
throw new Error("LAB_CLAIM_K8S_SERVER is required; implicit Kubernetes endpoints are refused");
|
|
27
|
+
let parsed;
|
|
28
|
+
try {
|
|
29
|
+
parsed = new URL(raw);
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
throw new Error("LAB_CLAIM_K8S_SERVER must be a valid HTTPS origin");
|
|
33
|
+
}
|
|
34
|
+
if (parsed.protocol !== "https:" || !parsed.hostname || parsed.username || parsed.password
|
|
35
|
+
|| parsed.pathname !== "/" || parsed.search || parsed.hash) {
|
|
36
|
+
throw new Error("LAB_CLAIM_K8S_SERVER must be a valid HTTPS origin");
|
|
37
|
+
}
|
|
38
|
+
return parsed.origin;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Select exactly one backend. Local tools must receive the LAB_CLAIM_* tuple;
|
|
42
|
+
* KUBECONFIG, ~/.kube/config, and an embedded DOKS endpoint are never defaults.
|
|
43
|
+
*/
|
|
44
|
+
export function resolveLabKubernetesBackend(env = process.env, existsSync = fs.existsSync) {
|
|
45
|
+
const context = configuredContext(env);
|
|
46
|
+
const server = configuredServer(env);
|
|
47
|
+
const configuredKubeconfig = env.LAB_CLAIM_KUBECONFIG?.trim();
|
|
48
|
+
if (configuredKubeconfig) {
|
|
49
|
+
const kubeconfigPath = configuredKubeconfig;
|
|
50
|
+
if (!kubeconfigPath || !isAbsolute(kubeconfigPath) || !existsSync(kubeconfigPath)) {
|
|
51
|
+
throw new Error("LAB_CLAIM_KUBECONFIG must name an existing absolute kubeconfig");
|
|
52
|
+
}
|
|
53
|
+
return { mode: "kubeconfig", context, server, kubeconfigPath };
|
|
54
|
+
}
|
|
55
|
+
if (existsSync(SERVICE_ACCOUNT_TOKEN)) {
|
|
56
|
+
if (!existsSync(SERVICE_ACCOUNT_CA))
|
|
57
|
+
throw new Error("in-cluster Kubernetes CA is unavailable");
|
|
58
|
+
return { mode: "in-cluster", context, server, tokenPath: SERVICE_ACCOUNT_TOKEN, caPath: SERVICE_ACCOUNT_CA };
|
|
59
|
+
}
|
|
60
|
+
throw new Error("LAB_CLAIM_KUBECONFIG is required; ambient kubeconfig defaults are refused");
|
|
61
|
+
}
|
|
62
|
+
function cleanKubectlEnv(env) {
|
|
63
|
+
const childEnv = { ...env };
|
|
64
|
+
for (const key of [
|
|
65
|
+
"KUBECONFIG", "KUBERNETES_MASTER", "KUBECTL_KUBERC",
|
|
66
|
+
"HTTP_PROXY", "HTTPS_PROXY", "ALL_PROXY", "http_proxy", "https_proxy", "all_proxy",
|
|
67
|
+
])
|
|
68
|
+
delete childEnv[key];
|
|
69
|
+
childEnv.KUBECTL_KUBERC = "false";
|
|
70
|
+
return childEnv;
|
|
71
|
+
}
|
|
72
|
+
function kubectlPrefix(backend) {
|
|
73
|
+
return [
|
|
74
|
+
"--kubeconfig", backend.kubeconfigPath,
|
|
75
|
+
"--context", backend.context,
|
|
76
|
+
"--server", backend.server,
|
|
77
|
+
"--insecure-skip-tls-verify=false",
|
|
78
|
+
"--request-timeout=10s",
|
|
79
|
+
];
|
|
80
|
+
}
|
|
81
|
+
function classifyStatus(stderr) {
|
|
82
|
+
if (/\(NotFound\)/.test(stderr))
|
|
83
|
+
return 404;
|
|
84
|
+
if (/\(AlreadyExists\)|\(Conflict\)/.test(stderr))
|
|
85
|
+
return 409;
|
|
86
|
+
if (/\(Forbidden\)/.test(stderr))
|
|
87
|
+
return 403;
|
|
88
|
+
if (/\(Unauthorized\)/.test(stderr))
|
|
89
|
+
return 401;
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
function execFileText(args, options) {
|
|
93
|
+
return new Promise((resolve, reject) => {
|
|
94
|
+
const child = execFile("kubectl", args, {
|
|
95
|
+
env: options.env,
|
|
96
|
+
timeout: options.timeout,
|
|
97
|
+
maxBuffer: options.maxBuffer,
|
|
98
|
+
encoding: "utf8",
|
|
99
|
+
}, (error, stdout, stderr) => {
|
|
100
|
+
if (error) {
|
|
101
|
+
const errorText = Buffer.isBuffer(stderr) ? stderr.toString("utf8") : String(stderr || "");
|
|
102
|
+
const status = classifyStatus(errorText);
|
|
103
|
+
const reason = error.code === "ETIMEDOUT" ? "timed out" : error.code === "ERR_CHILD_PROCESS_STDIO_MAXBUFFER" ? "output exceeded bound" : "failed";
|
|
104
|
+
reject(new KubernetesCommandError(status, reason));
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
resolve({
|
|
108
|
+
stdout: Buffer.isBuffer(stdout) ? stdout.toString("utf8") : String(stdout || ""),
|
|
109
|
+
stderr: Buffer.isBuffer(stderr) ? stderr.toString("utf8") : String(stderr || ""),
|
|
110
|
+
});
|
|
111
|
+
});
|
|
112
|
+
if (options.input !== undefined)
|
|
113
|
+
child.stdin?.end(options.input);
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
async function verifyKubeconfigBinding(backend, env) {
|
|
117
|
+
const args = [
|
|
118
|
+
"--kubeconfig", backend.kubeconfigPath,
|
|
119
|
+
"--context", backend.context,
|
|
120
|
+
"config", "view", "--minify", "--raw", "-o", "jsonpath={.clusters[0].cluster}",
|
|
121
|
+
];
|
|
122
|
+
let cluster;
|
|
123
|
+
try {
|
|
124
|
+
const result = await execFileText(args, { env: cleanKubectlEnv(env), timeout: DEFAULT_TIMEOUT_MS, maxBuffer: MAX_CONFIG_BYTES });
|
|
125
|
+
cluster = JSON.parse(result.stdout);
|
|
126
|
+
}
|
|
127
|
+
catch (error) {
|
|
128
|
+
if (error instanceof KubernetesCommandError)
|
|
129
|
+
throw new Error("LAB_CLAIM kubeconfig context could not be validated");
|
|
130
|
+
throw new Error("LAB_CLAIM kubeconfig context could not be validated");
|
|
131
|
+
}
|
|
132
|
+
if (!cluster || typeof cluster !== "object" || cluster.server !== backend.server) {
|
|
133
|
+
throw new Error("LAB_CLAIM backend server mismatch; Kubernetes request refused before effects");
|
|
134
|
+
}
|
|
135
|
+
if (cluster["insecure-skip-tls-verify"] === true
|
|
136
|
+
|| !(cluster["certificate-authority-data"] || cluster["certificate-authority"])
|
|
137
|
+
|| cluster["proxy-url"]
|
|
138
|
+
|| (cluster["tls-server-name"] && cluster["tls-server-name"] !== new URL(backend.server).hostname)) {
|
|
139
|
+
throw new Error("LAB_CLAIM kubeconfig TLS binding refused before effects");
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/** Run a local kubectl operation only after the selected kubeconfig is proven to match LAB_CLAIM_K8S_SERVER. */
|
|
143
|
+
export async function runLabKubectl(args, options = {}) {
|
|
144
|
+
const backend = resolveLabKubernetesBackend();
|
|
145
|
+
if (backend.mode !== "kubeconfig") {
|
|
146
|
+
throw new Error("kubectl fallback is refused for in-cluster requests; the selected Kubernetes API is authoritative");
|
|
147
|
+
}
|
|
148
|
+
await verifyKubeconfigBinding(backend, process.env);
|
|
149
|
+
return execFileText([...kubectlPrefix(backend), ...args], {
|
|
150
|
+
env: cleanKubectlEnv(process.env),
|
|
151
|
+
timeout: Math.max(1, Math.min(options.timeoutMs ?? DEFAULT_TIMEOUT_MS, 30_000)),
|
|
152
|
+
maxBuffer: Math.max(1024, Math.min(options.maxBufferBytes ?? MAX_CONFIG_BYTES, MAX_CONFIG_BYTES)),
|
|
153
|
+
...(options.input !== undefined ? { input: options.input } : {}),
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=kubernetes-backend.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kubernetes-backend.js","sourceRoot":"","sources":["../../../src/tools/kubernetes-backend.ts"],"names":[],"mappings":"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"}
|
|
@@ -677,7 +677,7 @@ export declare const LabDevAdvertisedInputSchema: z.ZodObject<{
|
|
|
677
677
|
apply: z.ZodOptional<z.ZodBoolean>;
|
|
678
678
|
confirmAssetId: z.ZodOptional<z.ZodType<string, z.ZodTypeDef, string>>;
|
|
679
679
|
}, "strict", z.ZodTypeAny, {
|
|
680
|
-
action: "
|
|
680
|
+
action: "status" | "start" | "stop" | "doctor" | "plan" | "prepare" | "sync" | "cleanup";
|
|
681
681
|
linearIssue?: string | undefined;
|
|
682
682
|
leaseId?: string | undefined;
|
|
683
683
|
profile?: "ct-local-dev-v1" | undefined;
|
|
@@ -690,7 +690,7 @@ export declare const LabDevAdvertisedInputSchema: z.ZodObject<{
|
|
|
690
690
|
sourceDigest?: string | undefined;
|
|
691
691
|
planReceiptFile?: string | undefined;
|
|
692
692
|
}, {
|
|
693
|
-
action: "
|
|
693
|
+
action: "status" | "start" | "stop" | "doctor" | "plan" | "prepare" | "sync" | "cleanup";
|
|
694
694
|
linearIssue?: string | undefined;
|
|
695
695
|
leaseId?: string | undefined;
|
|
696
696
|
profile?: "ct-local-dev-v1" | undefined;
|
|
@@ -61,13 +61,13 @@ export declare const ApplyLicenseInputSchema: z.ZodObject<{
|
|
|
61
61
|
targetIp: string;
|
|
62
62
|
tier: "Demo" | "Community" | "Essentials" | "Advanced" | "Premium" | "Beta";
|
|
63
63
|
port: number;
|
|
64
|
-
targetPath: string;
|
|
65
64
|
mode: "auto" | "legacy" | "sideload";
|
|
65
|
+
targetPath: string;
|
|
66
66
|
timeoutMs: number;
|
|
67
67
|
orgId: number;
|
|
68
68
|
days: number;
|
|
69
|
-
token?: string | undefined;
|
|
70
69
|
email?: string | undefined;
|
|
70
|
+
token?: string | undefined;
|
|
71
71
|
host?: string | undefined;
|
|
72
72
|
vmId?: string | number | undefined;
|
|
73
73
|
vmName?: string | undefined;
|
|
@@ -79,8 +79,8 @@ export declare const ApplyLicenseInputSchema: z.ZodObject<{
|
|
|
79
79
|
applianceId?: string | undefined;
|
|
80
80
|
}, {
|
|
81
81
|
targetIp: string;
|
|
82
|
-
token?: string | undefined;
|
|
83
82
|
email?: string | undefined;
|
|
83
|
+
token?: string | undefined;
|
|
84
84
|
host?: string | undefined;
|
|
85
85
|
vmId?: string | number | undefined;
|
|
86
86
|
vmName?: string | undefined;
|
|
@@ -88,9 +88,9 @@ export declare const ApplyLicenseInputSchema: z.ZodObject<{
|
|
|
88
88
|
tier?: "Demo" | "Community" | "Essentials" | "Advanced" | "Premium" | "Beta" | undefined;
|
|
89
89
|
password?: string | undefined;
|
|
90
90
|
port?: number | undefined;
|
|
91
|
+
mode?: "auto" | "legacy" | "sideload" | undefined;
|
|
91
92
|
purpose?: string | undefined;
|
|
92
93
|
targetPath?: string | undefined;
|
|
93
|
-
mode?: "auto" | "legacy" | "sideload" | undefined;
|
|
94
94
|
timeoutMs?: number | undefined;
|
|
95
95
|
orgId?: number | undefined;
|
|
96
96
|
days?: number | undefined;
|
|
@@ -41,9 +41,9 @@ export declare const ListInventoryInputSchema: z.ZodObject<{
|
|
|
41
41
|
hypervisorType?: "proxmox" | "esxi" | "all" | undefined;
|
|
42
42
|
host?: string | undefined;
|
|
43
43
|
}, {
|
|
44
|
+
status?: "running" | "stopped" | "all" | "claimed" | "disposable" | undefined;
|
|
44
45
|
tags?: string | string[] | undefined;
|
|
45
46
|
filter?: string | undefined;
|
|
46
|
-
status?: "running" | "stopped" | "all" | "claimed" | "disposable" | undefined;
|
|
47
47
|
hostName?: string | undefined;
|
|
48
48
|
hypervisorType?: "proxmox" | "esxi" | "all" | undefined;
|
|
49
49
|
host?: string | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renewal-claim.d.ts","sourceRoot":"","sources":["../../../src/tools/renewal-claim.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"renewal-claim.d.ts","sourceRoot":"","sources":["../../../src/tools/renewal-claim.ts"],"names":[],"mappings":"AAmBA,oFAAoF;AACpF,MAAM,WAAW,mBAAmB;IAClC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACrC,iEAAiE;IACjE,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClG,sDAAsD;IACtD,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,GAAG,IAAI,CAAC,CAAC;CAC7C;AAED,wBAAgB,0BAA0B,IAAI,mBAAmB,CAiChE;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,UAAU,GAAG,gBAAgB,GAAG,WAAW,CAAC;IACpD,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,gBAAgB,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,EAAE;QAAE,MAAM,EAAE,OAAO,GAAG,QAAQ,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3E;AAOD,yFAAyF;AACzF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAIzF;AAiBD,mHAAmH;AACnH,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAKlG;AAED,mEAAmE;AACnE,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,SAAa,GAAG,OAAO,CAAC,cAAc,GAAG;IAAE,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAgBxL;AAED,0FAA0F;AAC1F,wBAAsB,qBAAqB,CAAC,MAAM,EAAE,mBAAmB,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,KAAK,SAAa,GAAG,OAAO,CAAC,cAAc,CAAC,CAa5J;AAED,kHAAkH;AAClH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,mBAAmB,EAAE,SAAS,EAAE,cAAc,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAOlK"}
|
|
@@ -8,11 +8,9 @@
|
|
|
8
8
|
* read-back), checks the physical-slot reservation is still bound to it, runs the canonical renewal, and puts
|
|
9
9
|
* the claim back if the canonical renewal fails. Any failure fails the renew: no partial renewals.
|
|
10
10
|
*/
|
|
11
|
-
import { execFile } from "node:child_process";
|
|
12
|
-
import { promisify } from "node:util";
|
|
13
11
|
import { claimPhysicalSlot, slotLeaseName } from "./physical-slot.js";
|
|
14
12
|
import { queryKubernetesApi } from "./appliance-claim-tools.js";
|
|
15
|
-
|
|
13
|
+
import { KubernetesCommandError, runLabKubectl } from "./kubernetes-backend.js";
|
|
16
14
|
const NS = "ct-lab";
|
|
17
15
|
const CLAIMS = `/apis/calltelemetry.com/v1alpha1/namespaces/${NS}/applianceclaims`;
|
|
18
16
|
const LEASES = `/apis/coordination.k8s.io/v1/namespaces/${NS}/leases`;
|
|
@@ -23,12 +21,12 @@ export function defaultOperatorClaimClient() {
|
|
|
23
21
|
return await queryKubernetesApi(path, options);
|
|
24
22
|
}
|
|
25
23
|
catch (error) {
|
|
26
|
-
if (String(error?.message).includes("(404)"))
|
|
24
|
+
if (error instanceof KubernetesCommandError ? error.status === 404 : String(error?.message).includes("(404)"))
|
|
27
25
|
return { __notFound: true };
|
|
28
26
|
throw error;
|
|
29
27
|
}
|
|
30
28
|
};
|
|
31
|
-
const kubectl = async (args) => (await
|
|
29
|
+
const kubectl = async (args) => (await runLabKubectl(args, { timeoutMs: 20_000 })).stdout;
|
|
32
30
|
return {
|
|
33
31
|
async listClaims() {
|
|
34
32
|
const api = await viaApi(CLAIMS);
|
|
@@ -59,7 +57,7 @@ export function defaultOperatorClaimClient() {
|
|
|
59
57
|
return JSON.parse(await kubectl(["get", "leases.coordination.k8s.io", name, "-n", NS, "-o", "json"]));
|
|
60
58
|
}
|
|
61
59
|
catch (error) {
|
|
62
|
-
if (
|
|
60
|
+
if (error instanceof KubernetesCommandError && error.status === 404)
|
|
63
61
|
return null;
|
|
64
62
|
throw error;
|
|
65
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"renewal-claim.js","sourceRoot":"","sources":["../../../src/tools/renewal-claim.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"renewal-claim.js","sourceRoot":"","sources":["../../../src/tools/renewal-claim.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,11 +39,11 @@ export declare const ManageMcpServerInputSchema: z.ZodObject<{
|
|
|
39
39
|
targetVersion: z.ZodDefault<z.ZodOptional<z.ZodString>>;
|
|
40
40
|
hardRestart: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
|
|
41
41
|
}, "strip", z.ZodTypeAny, {
|
|
42
|
-
action: "status" | "
|
|
42
|
+
action: "status" | "reload" | "upgrade" | "check_updates" | "restart";
|
|
43
43
|
targetVersion: string;
|
|
44
44
|
hardRestart: boolean;
|
|
45
45
|
}, {
|
|
46
|
-
action?: "status" | "
|
|
46
|
+
action?: "status" | "reload" | "upgrade" | "check_updates" | "restart" | undefined;
|
|
47
47
|
targetVersion?: string | undefined;
|
|
48
48
|
hardRestart?: boolean | undefined;
|
|
49
49
|
}>;
|
|
@@ -6,8 +6,6 @@ export declare class SlotApiError extends Error {
|
|
|
6
6
|
readonly status: number | null;
|
|
7
7
|
constructor(status: number | null, message: string);
|
|
8
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
9
|
export declare function assertSlotPath(path: string, method: SlotMethod): void;
|
|
12
10
|
/** Names the denied operation from the request itself. Remote error text is never echoed. */
|
|
13
11
|
export declare function describeSlotRequest(path: string, method: SlotMethod): string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slot-kubernetes.d.ts","sourceRoot":"","sources":["../../../src/tools/slot-kubernetes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"slot-kubernetes.d.ts","sourceRoot":"","sources":["../../../src/tools/slot-kubernetes.ts"],"names":[],"mappings":"AAKA,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,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI,CAUrE;AACD,6FAA6F;AAC7F,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM,CAO5E;AACD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM,CAIlG;AAOD,wBAAgB,aAAa,IAAI,OAAO,CAgCvC"}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
/**
|
|
2
|
-
import { execFile } from "node:child_process";
|
|
1
|
+
/** Shared configured Kubernetes transport for physical-slot custody. Never retry an unknown write. */
|
|
3
2
|
import * as fs from "node:fs";
|
|
4
|
-
import { userInfo } from "node:os";
|
|
5
|
-
import { join } from "node:path";
|
|
6
3
|
import { fetch, Agent } from "undici";
|
|
4
|
+
import { KubernetesCommandError, resolveLabKubernetesBackend, runLabKubectl } from "./kubernetes-backend.js";
|
|
7
5
|
export class SlotApiError extends Error {
|
|
8
6
|
status;
|
|
9
7
|
constructor(status, message) {
|
|
@@ -11,10 +9,6 @@ export class SlotApiError extends Error {
|
|
|
11
9
|
this.status = status;
|
|
12
10
|
}
|
|
13
11
|
}
|
|
14
|
-
const TOKEN = "/var/run/secrets/kubernetes.io/serviceaccount/token";
|
|
15
|
-
const CA = "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt";
|
|
16
|
-
export const SLOT_CONTEXT = "do-nyc1-cluster-ny1";
|
|
17
|
-
export const SLOT_SERVER = "https://28a6e4a4-fbff-4b51-a9bd-6073ffd8cdb2.k8s.ondigitalocean.com";
|
|
18
12
|
const MAX_BYTES = 1_048_576;
|
|
19
13
|
const COLLECTIONS = ["/apis/coordination.k8s.io/v1/namespaces/ct-lab/leases", "/apis/calltelemetry.com/v1alpha1/namespaces/ct-lab/applianceclaims"];
|
|
20
14
|
export function assertSlotPath(path, method) {
|
|
@@ -57,42 +51,17 @@ function parse(text) {
|
|
|
57
51
|
throw new Error("physical slot response is not an object");
|
|
58
52
|
return value;
|
|
59
53
|
}
|
|
60
|
-
function kubectl(args, body, env, request) {
|
|
61
|
-
return new Promise((resolve, reject) => {
|
|
62
|
-
const child = execFile("kubectl", args, { env, timeout: 10_000, maxBuffer: MAX_BYTES }, (err, stdout, stderr) => {
|
|
63
|
-
if (err) {
|
|
64
|
-
// kubectl has no machine-readable HTTP code. Only exact NotFound is absence.
|
|
65
|
-
const status = /\(NotFound\)/.test(stderr) ? 404 : /\(AlreadyExists\)|\(Conflict\)/.test(stderr) ? 409 : /\(Forbidden\)/.test(stderr) ? 403 : null;
|
|
66
|
-
reject(new SlotApiError(status, request ? slotFailureMessage(status, request.path, request.method) : `physical slot Kubernetes request failed (${status ?? "unknown"}); retain custody`));
|
|
67
|
-
}
|
|
68
|
-
else
|
|
69
|
-
resolve(stdout);
|
|
70
|
-
});
|
|
71
|
-
if (body !== undefined)
|
|
72
|
-
child.stdin?.end(JSON.stringify(body));
|
|
73
|
-
});
|
|
74
|
-
}
|
|
75
54
|
export function createSlotApi() {
|
|
76
|
-
// The selected transport cannot change after a timeout or failed mutation.
|
|
77
|
-
const inCluster = fs.existsSync(TOKEN);
|
|
78
|
-
let localReady;
|
|
79
|
-
const env = { ...process.env };
|
|
80
|
-
for (const key of ["KUBECONFIG", "KUBERNETES_MASTER", "KUBECTL_KUBERC", "HTTP_PROXY", "HTTPS_PROXY", "ALL_PROXY", "http_proxy", "https_proxy", "all_proxy"])
|
|
81
|
-
delete env[key];
|
|
82
|
-
env.KUBECTL_KUBERC = "false";
|
|
83
|
-
const base = ["--kubeconfig", join(userInfo().homedir, ".kube", "config"), "--context", SLOT_CONTEXT, "--server", SLOT_SERVER, "--insecure-skip-tls-verify=false", "--request-timeout=10s"];
|
|
84
55
|
return { async request(path, method, body) {
|
|
85
56
|
assertSlotPath(path, method);
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
const port = process.env.KUBERNETES_SERVICE_PORT || "443";
|
|
91
|
-
if (!/^[a-zA-Z0-9.-]+$/.test(host) || !/^\d{1,5}$/.test(port))
|
|
57
|
+
const backend = resolveLabKubernetesBackend();
|
|
58
|
+
if (backend.mode === "in-cluster") {
|
|
59
|
+
const token = fs.readFileSync(backend.tokenPath, "utf8").trim();
|
|
60
|
+
if (!token)
|
|
92
61
|
throw new Error("physical slot Kubernetes service identity refused");
|
|
93
|
-
const agent = new Agent({ connect: { ca: fs.readFileSync(
|
|
62
|
+
const agent = new Agent({ connect: { ca: fs.readFileSync(backend.caPath), rejectUnauthorized: true } });
|
|
94
63
|
try {
|
|
95
|
-
const response = await fetch(
|
|
64
|
+
const response = await fetch(`${backend.server}${path}`, { method, headers: { Authorization: `Bearer ${token}`, "Content-Type": "application/json" }, body: body === undefined ? undefined : JSON.stringify(body), dispatcher: agent, signal: AbortSignal.timeout(10_000) });
|
|
96
65
|
if (response.status === 404 && method === "GET")
|
|
97
66
|
return null;
|
|
98
67
|
if (!response.ok)
|
|
@@ -103,20 +72,23 @@ export function createSlotApi() {
|
|
|
103
72
|
await agent.close();
|
|
104
73
|
}
|
|
105
74
|
}
|
|
106
|
-
localReady ??= (async () => {
|
|
107
|
-
const cluster = parse(await kubectl([...base, "config", "view", "--minify", "--raw", "-o", "jsonpath={.clusters[0].cluster}"], undefined, env));
|
|
108
|
-
if (cluster.server !== SLOT_SERVER || cluster["insecure-skip-tls-verify"] === true || !(cluster["certificate-authority-data"] || cluster["certificate-authority"]) || cluster["proxy-url"] || cluster["tls-server-name"] && cluster["tls-server-name"] !== new URL(SLOT_SERVER).hostname)
|
|
109
|
-
throw new Error("physical slot fixed cluster TLS binding refused");
|
|
110
|
-
})();
|
|
111
|
-
await localReady;
|
|
112
75
|
const command = method === "GET" ? "get" : method === "POST" ? "create" : method === "PUT" ? "replace" : "delete";
|
|
113
76
|
try {
|
|
114
|
-
|
|
77
|
+
const result = await runLabKubectl([command, "--raw", path, ...(body === undefined ? [] : ["-f", "-"])], {
|
|
78
|
+
...(body === undefined ? {} : { input: JSON.stringify(body) }),
|
|
79
|
+
timeoutMs: 10_000,
|
|
80
|
+
maxBufferBytes: MAX_BYTES,
|
|
81
|
+
});
|
|
82
|
+
return parse(result.stdout);
|
|
115
83
|
}
|
|
116
|
-
catch (
|
|
117
|
-
|
|
84
|
+
catch (error) {
|
|
85
|
+
const status = error instanceof KubernetesCommandError ? error.status : null;
|
|
86
|
+
if (method === "GET" && status === 404)
|
|
118
87
|
return null;
|
|
119
|
-
|
|
88
|
+
if (error instanceof KubernetesCommandError) {
|
|
89
|
+
throw new SlotApiError(status, slotFailureMessage(status, path, method));
|
|
90
|
+
}
|
|
91
|
+
throw error;
|
|
120
92
|
}
|
|
121
93
|
} };
|
|
122
94
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slot-kubernetes.js","sourceRoot":"","sources":["../../../src/tools/slot-kubernetes.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"slot-kubernetes.js","sourceRoot":"","sources":["../../../src/tools/slot-kubernetes.ts"],"names":[],"mappings":"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"}
|
|
@@ -260,13 +260,13 @@ export declare const ReleaseSlotInputSchema: z.ZodEffects<z.ZodObject<{
|
|
|
260
260
|
destroyVm: boolean;
|
|
261
261
|
apply: boolean;
|
|
262
262
|
recoverMissingCoordinator: boolean;
|
|
263
|
+
reason?: string | undefined;
|
|
263
264
|
slotId?: string | undefined;
|
|
264
265
|
claimId?: string | undefined;
|
|
265
266
|
tag?: string | undefined;
|
|
266
267
|
linearIssue?: string | undefined;
|
|
267
268
|
requester?: string | undefined;
|
|
268
269
|
sessionId?: string | undefined;
|
|
269
|
-
reason?: string | undefined;
|
|
270
270
|
leaseId?: string | undefined;
|
|
271
271
|
assetId?: string | undefined;
|
|
272
272
|
operationId?: string | undefined;
|
|
@@ -274,6 +274,7 @@ export declare const ReleaseSlotInputSchema: z.ZodEffects<z.ZodObject<{
|
|
|
274
274
|
artifactReceipt?: string | undefined;
|
|
275
275
|
receiptFile?: string | undefined;
|
|
276
276
|
}, {
|
|
277
|
+
reason?: string | undefined;
|
|
277
278
|
slotId?: string | undefined;
|
|
278
279
|
claimId?: string | undefined;
|
|
279
280
|
tag?: string | undefined;
|
|
@@ -281,7 +282,6 @@ export declare const ReleaseSlotInputSchema: z.ZodEffects<z.ZodObject<{
|
|
|
281
282
|
format?: "table" | "json" | undefined;
|
|
282
283
|
requester?: string | undefined;
|
|
283
284
|
sessionId?: string | undefined;
|
|
284
|
-
reason?: string | undefined;
|
|
285
285
|
leaseId?: string | undefined;
|
|
286
286
|
destroyVm?: boolean | undefined;
|
|
287
287
|
assetId?: string | undefined;
|
|
@@ -296,13 +296,13 @@ export declare const ReleaseSlotInputSchema: z.ZodEffects<z.ZodObject<{
|
|
|
296
296
|
destroyVm: boolean;
|
|
297
297
|
apply: boolean;
|
|
298
298
|
recoverMissingCoordinator: boolean;
|
|
299
|
+
reason?: string | undefined;
|
|
299
300
|
slotId?: string | undefined;
|
|
300
301
|
claimId?: string | undefined;
|
|
301
302
|
tag?: string | undefined;
|
|
302
303
|
linearIssue?: string | undefined;
|
|
303
304
|
requester?: string | undefined;
|
|
304
305
|
sessionId?: string | undefined;
|
|
305
|
-
reason?: string | undefined;
|
|
306
306
|
leaseId?: string | undefined;
|
|
307
307
|
assetId?: string | undefined;
|
|
308
308
|
operationId?: string | undefined;
|
|
@@ -310,6 +310,7 @@ export declare const ReleaseSlotInputSchema: z.ZodEffects<z.ZodObject<{
|
|
|
310
310
|
artifactReceipt?: string | undefined;
|
|
311
311
|
receiptFile?: string | undefined;
|
|
312
312
|
}, {
|
|
313
|
+
reason?: string | undefined;
|
|
313
314
|
slotId?: string | undefined;
|
|
314
315
|
claimId?: string | undefined;
|
|
315
316
|
tag?: string | undefined;
|
|
@@ -317,7 +318,6 @@ export declare const ReleaseSlotInputSchema: z.ZodEffects<z.ZodObject<{
|
|
|
317
318
|
format?: "table" | "json" | undefined;
|
|
318
319
|
requester?: string | undefined;
|
|
319
320
|
sessionId?: string | undefined;
|
|
320
|
-
reason?: string | undefined;
|
|
321
321
|
leaseId?: string | undefined;
|
|
322
322
|
destroyVm?: boolean | undefined;
|
|
323
323
|
assetId?: string | undefined;
|