@generacy-ai/control-plane 0.2.0 → 0.4.0
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/errors.d.ts +1 -1
- package/dist/src/errors.d.ts.map +1 -1
- package/dist/src/errors.js +1 -0
- package/dist/src/errors.js.map +1 -1
- package/dist/src/index.d.ts +3 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +4 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/routes/app-config.d.ts +1 -1
- package/dist/src/routes/app-config.d.ts.map +1 -1
- package/dist/src/routes/app-config.js +5 -16
- package/dist/src/routes/app-config.js.map +1 -1
- package/dist/src/routes/lifecycle.d.ts.map +1 -1
- package/dist/src/routes/lifecycle.js +98 -7
- package/dist/src/routes/lifecycle.js.map +1 -1
- package/dist/src/schemas.d.ts +73 -4
- package/dist/src/schemas.d.ts.map +1 -1
- package/dist/src/schemas.js +24 -0
- package/dist/src/schemas.js.map +1 -1
- package/dist/src/services/docker-engine-client.d.ts +57 -0
- package/dist/src/services/docker-engine-client.d.ts.map +1 -0
- package/dist/src/services/docker-engine-client.js +326 -0
- package/dist/src/services/docker-engine-client.js.map +1 -0
- package/dist/src/services/docker-engine-types.d.ts +152 -0
- package/dist/src/services/docker-engine-types.d.ts.map +1 -0
- package/dist/src/services/docker-engine-types.js +37 -0
- package/dist/src/services/docker-engine-types.js.map +1 -0
- package/dist/src/services/vscode-tunnel-manager.d.ts +23 -0
- package/dist/src/services/vscode-tunnel-manager.d.ts.map +1 -1
- package/dist/src/services/vscode-tunnel-manager.js +118 -15
- package/dist/src/services/vscode-tunnel-manager.js.map +1 -1
- package/dist/src/services/wizard-env-writer.d.ts +7 -0
- package/dist/src/services/wizard-env-writer.d.ts.map +1 -1
- package/dist/src/services/wizard-env-writer.js +4 -3
- package/dist/src/services/wizard-env-writer.js.map +1 -1
- package/dist/src/services/worker-enumeration.d.ts +31 -0
- package/dist/src/services/worker-enumeration.d.ts.map +1 -0
- package/dist/src/services/worker-enumeration.js +71 -0
- package/dist/src/services/worker-enumeration.js.map +1 -0
- package/dist/src/services/worker-scaler.d.ts +128 -0
- package/dist/src/services/worker-scaler.d.ts.map +1 -0
- package/dist/src/services/worker-scaler.js +405 -0
- package/dist/src/services/worker-scaler.js.map +1 -0
- package/package.json +2 -1
|
@@ -7,23 +7,35 @@ const DEVICE_CODE_PATTERN = /([A-Z0-9]{4}-[A-Z0-9]{4})/;
|
|
|
7
7
|
const VERIFICATION_URI_PATTERN = /https:\/\/github\.com\/login\/device/;
|
|
8
8
|
const CONNECTED_PATTERN = /https:\/\/vscode\.dev\/tunnel\/[\w-]+|is connected|tunnel is ready/i;
|
|
9
9
|
const TUNNEL_URL_PATTERN = /(https:\/\/vscode\.dev\/tunnel\/[\w-]+[\w\-/]*)/;
|
|
10
|
+
/**
|
|
11
|
+
* Derive a VS Code tunnel name from a cluster UUID.
|
|
12
|
+
*
|
|
13
|
+
* Microsoft's tunnel service requires names to satisfy
|
|
14
|
+
* `/^[a-z][a-z0-9-]{0,19}$/` (≤20 chars, lowercase, letter-initial,
|
|
15
|
+
* `[a-z0-9-]`). UUIDs are 36 chars and hyphens are stripped before slicing.
|
|
16
|
+
*
|
|
17
|
+
* Per-cluster derivation is required for multi-cluster support (#744 FR-001).
|
|
18
|
+
* Using the stable project id (the #618 fix) collided whenever a single
|
|
19
|
+
* project had more than one cluster; cloud-side per-cluster persistence
|
|
20
|
+
* (generacy-cloud#792, merge:true #563) makes the cluster UUID the right key.
|
|
21
|
+
*/
|
|
10
22
|
export function deriveTunnelName(clusterId) {
|
|
11
23
|
const compact = clusterId.replace(/-/g, "");
|
|
12
|
-
|
|
24
|
+
const out = `g-${compact.slice(0, 18)}`;
|
|
25
|
+
if (!/^[a-z][a-z0-9-]{0,19}$/.test(out)) {
|
|
26
|
+
throw new Error(`Derived tunnel name "${out}" violates Microsoft tunnel constraints`);
|
|
27
|
+
}
|
|
28
|
+
return out;
|
|
13
29
|
}
|
|
14
30
|
export function loadOptionsFromEnv(env = process.env) {
|
|
15
|
-
//
|
|
16
|
-
//
|
|
17
|
-
//
|
|
18
|
-
//
|
|
19
|
-
//
|
|
20
|
-
|
|
21
|
-
// project id keeps the tunnel name stable across all activations of the
|
|
22
|
-
// same project; the persisted value is always correct, and dashboard URLs
|
|
23
|
-
// resolve to the actually-running tunnel. See #618.
|
|
24
|
-
const id = env["GENERACY_PROJECT_ID"];
|
|
31
|
+
// Cluster UUID source (reverted from #618). Multi-cluster per project
|
|
32
|
+
// (#744 FR-001/FR-002) requires per-cluster tunnel names; project-id
|
|
33
|
+
// derivation collided across siblings. Cloud-side per-cluster persistence
|
|
34
|
+
// (generacy-cloud#792 + merge:true #563) keeps each cluster's tunnel name
|
|
35
|
+
// stable across activations of THAT cluster.
|
|
36
|
+
const id = env["GENERACY_CLUSTER_ID"];
|
|
25
37
|
if (!id)
|
|
26
|
-
throw new Error("
|
|
38
|
+
throw new Error("GENERACY_CLUSTER_ID is required for VS Code tunnel");
|
|
27
39
|
return {
|
|
28
40
|
binPath: env["VSCODE_CLI_BIN"] ?? DEFAULT_VSCODE_CLI_BIN,
|
|
29
41
|
tunnelName: deriveTunnelName(id),
|
|
@@ -44,10 +56,21 @@ export class VsCodeTunnelProcessManager {
|
|
|
44
56
|
deviceCode = null;
|
|
45
57
|
verificationUri = null;
|
|
46
58
|
tunnelUrl = null;
|
|
59
|
+
// The name `code tunnel` actually registered. It can differ from the
|
|
60
|
+
// requested `opts.tunnelName`: if that name is already taken (e.g. a stale
|
|
61
|
+
// registration left behind by a previously-deleted Droplet for the same
|
|
62
|
+
// project — the name is derived from the stable project id, see #618), the
|
|
63
|
+
// CLI silently falls back to a random name. We must report THIS name so the
|
|
64
|
+
// cloud/UI deep-links to the tunnel that's actually running, not the dead one.
|
|
65
|
+
actualTunnelName = null;
|
|
47
66
|
stopping = false;
|
|
48
67
|
constructor(opts) {
|
|
49
68
|
this.opts = opts;
|
|
50
69
|
}
|
|
70
|
+
/** Extract the registered tunnel name from a `https://vscode.dev/tunnel/<name>/…` URL. */
|
|
71
|
+
tunnelNameFromUrl(url) {
|
|
72
|
+
return url?.match(/vscode\.dev\/tunnel\/([\w-]+)/)?.[1] ?? null;
|
|
73
|
+
}
|
|
51
74
|
getStatus() {
|
|
52
75
|
return this.status;
|
|
53
76
|
}
|
|
@@ -64,11 +87,14 @@ export class VsCodeTunnelProcessManager {
|
|
|
64
87
|
else if (this.status === "connected") {
|
|
65
88
|
emitTunnelEvent({
|
|
66
89
|
status: "connected",
|
|
67
|
-
tunnelName: this.opts.tunnelName,
|
|
90
|
+
tunnelName: this.actualTunnelName ?? this.opts.tunnelName,
|
|
68
91
|
tunnelUrl: this.tunnelUrl ?? undefined,
|
|
69
92
|
});
|
|
70
93
|
}
|
|
71
|
-
return {
|
|
94
|
+
return {
|
|
95
|
+
status: this.status,
|
|
96
|
+
tunnelName: this.actualTunnelName ?? this.opts.tunnelName,
|
|
97
|
+
};
|
|
72
98
|
}
|
|
73
99
|
this.status = "starting";
|
|
74
100
|
this.stdoutBuffer = [];
|
|
@@ -93,6 +119,7 @@ export class VsCodeTunnelProcessManager {
|
|
|
93
119
|
this.deviceCode = null;
|
|
94
120
|
this.verificationUri = null;
|
|
95
121
|
this.tunnelUrl = null;
|
|
122
|
+
this.actualTunnelName = null;
|
|
96
123
|
if (stopInitiated) {
|
|
97
124
|
this.status = "stopped";
|
|
98
125
|
}
|
|
@@ -188,6 +215,65 @@ export class VsCodeTunnelProcessManager {
|
|
|
188
215
|
async shutdown() {
|
|
189
216
|
await this.stop();
|
|
190
217
|
}
|
|
218
|
+
/**
|
|
219
|
+
* Release the cluster's tunnel name from Microsoft's tunnel service so the
|
|
220
|
+
* name can be reused after `generacy destroy`. Best-effort: spawns
|
|
221
|
+
* `code tunnel unregister --name <tunnelName>` with a 10s timeout. On
|
|
222
|
+
* timeout or non-zero exit, emits a warning event and resolves; never throws.
|
|
223
|
+
*/
|
|
224
|
+
async unregister() {
|
|
225
|
+
const args = ["tunnel", "unregister", "--name", this.opts.tunnelName];
|
|
226
|
+
const child = spawn(this.opts.binPath, args, {
|
|
227
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
228
|
+
detached: false,
|
|
229
|
+
});
|
|
230
|
+
child.stdout?.on("data", () => { });
|
|
231
|
+
child.stderr?.on("data", () => { });
|
|
232
|
+
await new Promise((resolve) => {
|
|
233
|
+
let settled = false;
|
|
234
|
+
const settle = () => {
|
|
235
|
+
if (settled)
|
|
236
|
+
return;
|
|
237
|
+
settled = true;
|
|
238
|
+
clearTimeout(killTimer);
|
|
239
|
+
resolve();
|
|
240
|
+
};
|
|
241
|
+
const killTimer = setTimeout(() => {
|
|
242
|
+
emitTunnelEvent({
|
|
243
|
+
status: "error",
|
|
244
|
+
error: "tunnel unregister timed out",
|
|
245
|
+
tunnelName: this.opts.tunnelName,
|
|
246
|
+
});
|
|
247
|
+
try {
|
|
248
|
+
child.kill("SIGKILL");
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
// already gone
|
|
252
|
+
}
|
|
253
|
+
settle();
|
|
254
|
+
}, 10_000);
|
|
255
|
+
if (typeof killTimer.unref === "function")
|
|
256
|
+
killTimer.unref();
|
|
257
|
+
child.once("exit", (code) => {
|
|
258
|
+
if (code !== 0) {
|
|
259
|
+
emitTunnelEvent({
|
|
260
|
+
status: "error",
|
|
261
|
+
error: `tunnel unregister exited with code ${code}`,
|
|
262
|
+
tunnelName: this.opts.tunnelName,
|
|
263
|
+
});
|
|
264
|
+
}
|
|
265
|
+
settle();
|
|
266
|
+
});
|
|
267
|
+
child.once("error", (err) => {
|
|
268
|
+
emitTunnelEvent({
|
|
269
|
+
status: "error",
|
|
270
|
+
error: `tunnel unregister failed: ${err.message}`,
|
|
271
|
+
tunnelName: this.opts.tunnelName,
|
|
272
|
+
});
|
|
273
|
+
settle();
|
|
274
|
+
});
|
|
275
|
+
});
|
|
276
|
+
}
|
|
191
277
|
handleStdoutLine(line, child) {
|
|
192
278
|
this.stdoutBuffer.push(line);
|
|
193
279
|
// Keep buffer bounded
|
|
@@ -223,11 +309,28 @@ export class VsCodeTunnelProcessManager {
|
|
|
223
309
|
this.verificationUri = null;
|
|
224
310
|
const urlMatch = line.match(TUNNEL_URL_PATTERN);
|
|
225
311
|
this.tunnelUrl = urlMatch?.[1] ?? null;
|
|
312
|
+
// Prefer the name parsed from the actual tunnel URL — `code tunnel` may
|
|
313
|
+
// have fallen back to a random name when the requested name was taken.
|
|
314
|
+
this.actualTunnelName = this.tunnelNameFromUrl(this.tunnelUrl);
|
|
226
315
|
emitTunnelEvent({
|
|
227
316
|
status: "connected",
|
|
228
|
-
tunnelName: this.opts.tunnelName,
|
|
317
|
+
tunnelName: this.actualTunnelName ?? this.opts.tunnelName,
|
|
229
318
|
tunnelUrl: this.tunnelUrl ?? undefined,
|
|
230
319
|
});
|
|
320
|
+
// Observational: surface tunnel-name collisions (#744 FR-012).
|
|
321
|
+
// `g-<uuid18>` collisions are vanishingly rare (~2^-72) but possible via
|
|
322
|
+
// a stale registration of the same cluster id. We emit a clear error
|
|
323
|
+
// event with both names so the cloud/UI can resolve to the actual
|
|
324
|
+
// running tunnel. Does NOT abort the tunnel.
|
|
325
|
+
if (this.actualTunnelName &&
|
|
326
|
+
this.actualTunnelName !== this.opts.tunnelName) {
|
|
327
|
+
emitTunnelEvent({
|
|
328
|
+
status: "error",
|
|
329
|
+
error: "tunnel name collision",
|
|
330
|
+
tunnelName: this.actualTunnelName,
|
|
331
|
+
details: `requested=${this.opts.tunnelName} actual=${this.actualTunnelName}`,
|
|
332
|
+
});
|
|
333
|
+
}
|
|
231
334
|
}
|
|
232
335
|
}
|
|
233
336
|
clearDeviceCodeTimer() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vscode-tunnel-manager.js","sourceRoot":"","sources":["../../../src/services/vscode-tunnel-manager.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"vscode-tunnel-manager.js","sourceRoot":"","sources":["../../../src/services/vscode-tunnel-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,6 +9,13 @@ export interface WriteWizardEnvFileResult {
|
|
|
9
9
|
written: string[];
|
|
10
10
|
/** Credential IDs that failed to unseal */
|
|
11
11
|
failed: string[];
|
|
12
|
+
/**
|
|
13
|
+
* True when a usable `GH_TOKEN` was emitted to the env file. Callers gate the
|
|
14
|
+
* early post-activation clone on this — without a GitHub token the deferred
|
|
15
|
+
* clone of a private repo can't authenticate, so firing the (one-shot)
|
|
16
|
+
* post-activation sentinel before the token is sealed clones nothing.
|
|
17
|
+
*/
|
|
18
|
+
hasGitHubToken: boolean;
|
|
12
19
|
}
|
|
13
20
|
interface EnvEntry {
|
|
14
21
|
key: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wizard-env-writer.d.ts","sourceRoot":"","sources":["../../../src/services/wizard-env-writer.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,yBAAyB;IACxC,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,uFAAuF;IACvF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACvC,sDAAsD;IACtD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,2CAA2C;IAC3C,MAAM,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"wizard-env-writer.d.ts","sourceRoot":"","sources":["../../../src/services/wizard-env-writer.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,yBAAyB;IACxC,4DAA4D;IAC5D,SAAS,EAAE,MAAM,CAAC;IAClB,uFAAuF;IACvF,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,wBAAwB;IACvC,sDAAsD;IACtD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,2CAA2C;IAC3C,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB;;;;;OAKG;IACH,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,UAAU,QAAQ;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;CACf;AAID,wBAAgB,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,wBAAgB,yBAAyB,CACvC,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACZ,QAAQ,EAAE,CAwBZ;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,CAGzD;AAED,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,yBAAyB,GACjC,OAAO,CAAC,wBAAwB,CAAC,CAwDnC"}
|
|
@@ -53,14 +53,14 @@ export async function writeWizardEnvFile(options) {
|
|
|
53
53
|
if (err.code === 'ENOENT') {
|
|
54
54
|
// No credentials.yaml — write empty env file, no error
|
|
55
55
|
await fs.writeFile(envFilePath, '', { mode: 0o600 });
|
|
56
|
-
return { written: [], failed: [] };
|
|
56
|
+
return { written: [], failed: [], hasGitHubToken: false };
|
|
57
57
|
}
|
|
58
58
|
throw err;
|
|
59
59
|
}
|
|
60
60
|
const credentialIds = Object.keys(credentialsMap);
|
|
61
61
|
if (credentialIds.length === 0) {
|
|
62
62
|
await fs.writeFile(envFilePath, '', { mode: 0o600 });
|
|
63
|
-
return { written: [], failed: [] };
|
|
63
|
+
return { written: [], failed: [], hasGitHubToken: false };
|
|
64
64
|
}
|
|
65
65
|
const backend = getCredentialBackend();
|
|
66
66
|
if (!backend) {
|
|
@@ -86,6 +86,7 @@ export async function writeWizardEnvFile(options) {
|
|
|
86
86
|
}
|
|
87
87
|
// Write env file (mode 0600) — partial file on partial failure
|
|
88
88
|
await fs.writeFile(envFilePath, formatEnvFile(entries), { mode: 0o600 });
|
|
89
|
-
|
|
89
|
+
const hasGitHubToken = entries.some((e) => e.key === 'GH_TOKEN' && e.value.length > 0);
|
|
90
|
+
return { written, failed, hasGitHubToken };
|
|
90
91
|
}
|
|
91
92
|
//# sourceMappingURL=wizard-env-writer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wizard-env-writer.js","sourceRoot":"","sources":["../../../src/services/wizard-env-writer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"wizard-env-writer.js","sourceRoot":"","sources":["../../../src/services/wizard-env-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker enumeration helpers: discover the compose project name and list
|
|
3
|
+
* worker replicas via the Docker Engine API.
|
|
4
|
+
*
|
|
5
|
+
* Extracted from worker-scaler.ts (#714) so both the scaler and the
|
|
6
|
+
* orchestrator's RelayBridge can enumerate workers without dragging in the
|
|
7
|
+
* scale-write paths, env-file rewriting, etc. Pure move — no behavior change.
|
|
8
|
+
*/
|
|
9
|
+
import { DockerEngineClient } from './docker-engine-client.js';
|
|
10
|
+
import type { ContainerState } from './docker-engine-types.js';
|
|
11
|
+
export interface WorkerReplica {
|
|
12
|
+
id: string;
|
|
13
|
+
number: number;
|
|
14
|
+
name: string;
|
|
15
|
+
state: ContainerState;
|
|
16
|
+
networkIds: string[];
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Discover the compose project name by inspecting the orchestrator's own
|
|
20
|
+
* container. Falls back to COMPOSE_PROJECT_NAME env var. Throws if neither
|
|
21
|
+
* resolves — happens when running outside compose (dev mode, raw docker run).
|
|
22
|
+
*/
|
|
23
|
+
export declare function computeProjectName(client: DockerEngineClient): Promise<string>;
|
|
24
|
+
/**
|
|
25
|
+
* Enumerate worker containers for the given compose project. Includes
|
|
26
|
+
* stopped/exited replicas. Containers with missing or non-numeric
|
|
27
|
+
* `com.docker.compose.container-number` labels are skipped with a warning —
|
|
28
|
+
* defensive against manually-added containers.
|
|
29
|
+
*/
|
|
30
|
+
export declare function enumerateWorkers(client: DockerEngineClient, project: string): Promise<WorkerReplica[]>;
|
|
31
|
+
//# sourceMappingURL=worker-enumeration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-enumeration.d.ts","sourceRoot":"","sources":["../../../src/services/worker-enumeration.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAC/D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE/D,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,cAAc,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC,CAcpF;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,kBAAkB,EAC1B,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,aAAa,EAAE,CAAC,CAqC1B"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Worker enumeration helpers: discover the compose project name and list
|
|
3
|
+
* worker replicas via the Docker Engine API.
|
|
4
|
+
*
|
|
5
|
+
* Extracted from worker-scaler.ts (#714) so both the scaler and the
|
|
6
|
+
* orchestrator's RelayBridge can enumerate workers without dragging in the
|
|
7
|
+
* scale-write paths, env-file rewriting, etc. Pure move — no behavior change.
|
|
8
|
+
*/
|
|
9
|
+
import { hostname } from 'node:os';
|
|
10
|
+
/**
|
|
11
|
+
* Discover the compose project name by inspecting the orchestrator's own
|
|
12
|
+
* container. Falls back to COMPOSE_PROJECT_NAME env var. Throws if neither
|
|
13
|
+
* resolves — happens when running outside compose (dev mode, raw docker run).
|
|
14
|
+
*/
|
|
15
|
+
export async function computeProjectName(client) {
|
|
16
|
+
const selfHostname = hostname();
|
|
17
|
+
try {
|
|
18
|
+
const inspect = await client.inspectContainer(selfHostname);
|
|
19
|
+
const project = inspect.Config.Labels?.['com.docker.compose.project'];
|
|
20
|
+
if (project)
|
|
21
|
+
return project;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// Hostname may not be the container ID (e.g. when overridden in compose).
|
|
25
|
+
}
|
|
26
|
+
const envProject = process.env['COMPOSE_PROJECT_NAME'];
|
|
27
|
+
if (envProject)
|
|
28
|
+
return envProject;
|
|
29
|
+
throw new Error('ORCHESTRATOR_NOT_COMPOSE_MANAGED');
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Enumerate worker containers for the given compose project. Includes
|
|
33
|
+
* stopped/exited replicas. Containers with missing or non-numeric
|
|
34
|
+
* `com.docker.compose.container-number` labels are skipped with a warning —
|
|
35
|
+
* defensive against manually-added containers.
|
|
36
|
+
*/
|
|
37
|
+
export async function enumerateWorkers(client, project) {
|
|
38
|
+
const summaries = await client.listContainers({
|
|
39
|
+
all: true,
|
|
40
|
+
filters: {
|
|
41
|
+
label: [
|
|
42
|
+
`com.docker.compose.project=${project}`,
|
|
43
|
+
'com.docker.compose.service=worker',
|
|
44
|
+
],
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
const replicas = [];
|
|
48
|
+
for (const summary of summaries) {
|
|
49
|
+
const numberLabel = summary.Labels?.['com.docker.compose.container-number'];
|
|
50
|
+
const parsedNumber = numberLabel ? parseInt(numberLabel, 10) : NaN;
|
|
51
|
+
if (!Number.isInteger(parsedNumber) || parsedNumber < 1) {
|
|
52
|
+
console.warn(`[worker-scaler] skipping container ${summary.Id} with missing/invalid container-number label: ${numberLabel ?? '<none>'}`);
|
|
53
|
+
continue;
|
|
54
|
+
}
|
|
55
|
+
const networkIds = summary.NetworkSettings?.Networks
|
|
56
|
+
? Object.values(summary.NetworkSettings.Networks).map((n) => n.NetworkID)
|
|
57
|
+
: [];
|
|
58
|
+
// `Names` arrives with a leading '/' from Engine — strip for readability.
|
|
59
|
+
const rawName = summary.Names[0] ?? '';
|
|
60
|
+
const name = rawName.startsWith('/') ? rawName.slice(1) : rawName;
|
|
61
|
+
replicas.push({
|
|
62
|
+
id: summary.Id,
|
|
63
|
+
number: parsedNumber,
|
|
64
|
+
name,
|
|
65
|
+
state: summary.State,
|
|
66
|
+
networkIds,
|
|
67
|
+
});
|
|
68
|
+
}
|
|
69
|
+
return replicas;
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=worker-enumeration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-enumeration.js","sourceRoot":"","sources":["../../../src/services/worker-enumeration.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAYnC;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,MAA0B;IACjE,MAAM,YAAY,GAAG,QAAQ,EAAE,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,YAAY,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,4BAA4B,CAAC,CAAC;QACtE,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,0EAA0E;IAC5E,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACvD,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAElC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;AACtD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAA0B,EAC1B,OAAe;IAEf,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC;QAC5C,GAAG,EAAE,IAAI;QACT,OAAO,EAAE;YACP,KAAK,EAAE;gBACL,8BAA8B,OAAO,EAAE;gBACvC,mCAAmC;aACpC;SACF;KACF,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,KAAK,MAAM,OAAO,IAAI,SAAS,EAAE,CAAC;QAChC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,qCAAqC,CAAC,CAAC;QAC5E,MAAM,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACnE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,YAAY,CAAC,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACxD,OAAO,CAAC,IAAI,CACV,sCAAsC,OAAO,CAAC,EAAE,iDAAiD,WAAW,IAAI,QAAQ,EAAE,CAC3H,CAAC;YACF,SAAS;QACX,CAAC;QACD,MAAM,UAAU,GAAG,OAAO,CAAC,eAAe,EAAE,QAAQ;YAClD,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YACzE,CAAC,CAAC,EAAE,CAAC;QACP,0EAA0E;QAC1E,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAClE,QAAQ,CAAC,IAAI,CAAC;YACZ,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,MAAM,EAAE,YAAY;YACpB,IAAI;YACJ,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,UAAU;SACX,CAAC,CAAC;IACL,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { DockerEngineClient } from './docker-engine-client.js';
|
|
2
|
+
import { type ContainerInspect, type ContainerCreateBody, DockerEngineError } from './docker-engine-types.js';
|
|
3
|
+
import { type WorkerReplica, computeProjectName, enumerateWorkers } from './worker-enumeration.js';
|
|
4
|
+
export { computeProjectName, enumerateWorkers, type WorkerReplica };
|
|
5
|
+
export interface ScaleOptions {
|
|
6
|
+
/** Target worker count. Must be >= 1 (validated upstream in lifecycle route). */
|
|
7
|
+
count: number;
|
|
8
|
+
/** Override orchestrator URL for metadata-refresh callback. */
|
|
9
|
+
orchestratorUrl?: string;
|
|
10
|
+
/** Override orchestrator internal API key. */
|
|
11
|
+
orchestratorApiKey?: string;
|
|
12
|
+
/** Override Docker socket. Default: env DOCKER_HOST or unix:///var/run/docker-host.sock. */
|
|
13
|
+
dockerHost?: string;
|
|
14
|
+
/** Override engine client (test seam — production wires the default). */
|
|
15
|
+
engineClient?: DockerEngineClient;
|
|
16
|
+
}
|
|
17
|
+
export interface ScaleResult {
|
|
18
|
+
/** Worker count observed before scaling (from Engine API enumeration, not .env). */
|
|
19
|
+
previousCount: number;
|
|
20
|
+
/** Target count from ScaleOptions.count. */
|
|
21
|
+
requestedCount: number;
|
|
22
|
+
/** Actual achieved count after the operation. Equals requestedCount on success. */
|
|
23
|
+
actualCount: number;
|
|
24
|
+
}
|
|
25
|
+
export declare class PartialScaleError extends Error {
|
|
26
|
+
readonly name = "PartialScaleError";
|
|
27
|
+
readonly requested: number;
|
|
28
|
+
readonly actual: number;
|
|
29
|
+
readonly previousCount: number;
|
|
30
|
+
readonly cause: Error;
|
|
31
|
+
constructor(requested: number, actual: number, previousCount: number, cause: Error);
|
|
32
|
+
}
|
|
33
|
+
export interface ScalePlan {
|
|
34
|
+
toCreate: number[];
|
|
35
|
+
toRemove: string[];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Plan container-number assignment for a scale operation.
|
|
39
|
+
*
|
|
40
|
+
* Scale up: gap-fill ascending in [1..max(existing)], then append.
|
|
41
|
+
* Scale down: sort exited (highest-numbered first), then running (highest-numbered first),
|
|
42
|
+
* take the first (current - target) IDs.
|
|
43
|
+
* No-op: returns `{ toCreate: [], toRemove: [] }`.
|
|
44
|
+
*
|
|
45
|
+
* Pure function — unit-tested independently. FR-006, SC-003, SC-011.
|
|
46
|
+
*/
|
|
47
|
+
export declare function assignContainerNumbers(existing: WorkerReplica[], target: number): ScalePlan;
|
|
48
|
+
/**
|
|
49
|
+
* Clone a source replica's inspect response into a create body for a new replica.
|
|
50
|
+
*
|
|
51
|
+
* Strips orchestrator-set fields (Id, Created, State, Status, Hostname, populated
|
|
52
|
+
* NetworkSettings) and keeps Image, Cmd, Env, Entrypoint, WorkingDir, User, Labels,
|
|
53
|
+
* Healthcheck, StopSignal, StopTimeout, ExposedPorts, and all of HostConfig.
|
|
54
|
+
*
|
|
55
|
+
* Overwrites the `com.docker.compose.container-number` label with the new number —
|
|
56
|
+
* preserves all other labels (project, service, config-hash, etc.) per FR-007.
|
|
57
|
+
*
|
|
58
|
+
* Builds NetworkingConfig with **first network only** from source.NetworkSettings.Networks
|
|
59
|
+
* in insertion order. Caller is responsible for `connectNetwork` calls for remaining
|
|
60
|
+
* networks before `startContainer` (Q1=A multi-network sequencing).
|
|
61
|
+
*
|
|
62
|
+
* Throws `Error('SOURCE_REPLICA_HAS_NO_NETWORKS')` if source has zero networks.
|
|
63
|
+
*/
|
|
64
|
+
export declare function cloneInspectToCreate(inspect: ContainerInspect, newNumber: number, _newName: string): ContainerCreateBody;
|
|
65
|
+
interface ScaleUpResult {
|
|
66
|
+
created: number[];
|
|
67
|
+
failed?: {
|
|
68
|
+
number: number;
|
|
69
|
+
error: Error;
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
interface ScaleDownResult {
|
|
73
|
+
removed: string[];
|
|
74
|
+
failed?: {
|
|
75
|
+
id: string;
|
|
76
|
+
error: Error;
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Create + connect-extra-networks + start, repeated per toCreate slot.
|
|
81
|
+
*
|
|
82
|
+
* Per-slot sequencing (Q1=A):
|
|
83
|
+
* 1. Pre-check gap-fill name collision (FR-015, Q5=A) — if any container
|
|
84
|
+
* already holds `<project>-worker-<n>`, force-remove it first. Edge
|
|
85
|
+
* case after manual `docker rm` of a running worker; normal operation
|
|
86
|
+
* doesn't trigger it because exited replicas are counted by FR-002.
|
|
87
|
+
* 2. POST /containers/create with the first network in NetworkingConfig.
|
|
88
|
+
* 3. POST /networks/<id>/connect per additional network from source.
|
|
89
|
+
* 4. POST /containers/<id>/start.
|
|
90
|
+
*
|
|
91
|
+
* On the first error, stop the loop and return `{ created, failed }`. Do NOT
|
|
92
|
+
* roll back already-created replicas (Q2=B: commit what succeeded).
|
|
93
|
+
*/
|
|
94
|
+
export declare function scaleUp(client: DockerEngineClient, project: string, source: ContainerInspect, toCreate: number[]): Promise<ScaleUpResult>;
|
|
95
|
+
/**
|
|
96
|
+
* Stop + remove per ID, in the caller-provided order (already sorted by
|
|
97
|
+
* `assignContainerNumbers`: exited first, then running, highest-numbered first).
|
|
98
|
+
* On the first error, stop and return `{ removed, failed }`. (FR-004)
|
|
99
|
+
*/
|
|
100
|
+
export declare function scaleDown(client: DockerEngineClient, toRemoveIds: string[]): Promise<ScaleDownResult>;
|
|
101
|
+
/**
|
|
102
|
+
* Scale worker replicas to the requested count via the Docker Engine API.
|
|
103
|
+
*
|
|
104
|
+
* Replaces the previous `docker compose --scale` shell-out: enumerates workers
|
|
105
|
+
* by `com.docker.compose.*` labels, clones an existing replica's config, and
|
|
106
|
+
* issues create/connect/start or stop/remove directly on the daemon. Removes
|
|
107
|
+
* the host compose-file dependency entirely.
|
|
108
|
+
*
|
|
109
|
+
* Concurrent invocations are serialized by an in-process async mutex (FR-014).
|
|
110
|
+
*
|
|
111
|
+
* Stale clone drift case (FR-013): if a user edits the host compose file and
|
|
112
|
+
* rebuilds without `docker compose up -d`, scale-up clones a stale source
|
|
113
|
+
* replica's config — same behavior as compose itself when scaling from an
|
|
114
|
+
* older replica. Documented here per the spec; not actionable in this code path.
|
|
115
|
+
*/
|
|
116
|
+
export declare function scaleWorkers(options: ScaleOptions): Promise<ScaleResult>;
|
|
117
|
+
/**
|
|
118
|
+
* Update the `workers` field in cluster.local.yaml atomically.
|
|
119
|
+
* Creates the file if absent. Preserves any other top-level fields already
|
|
120
|
+
* present.
|
|
121
|
+
*/
|
|
122
|
+
export declare function updateClusterLocalYaml(localYamlPath: string, count: number): Promise<void>;
|
|
123
|
+
/**
|
|
124
|
+
* POST to orchestrator /internal/refresh-metadata to trigger immediate metadata push.
|
|
125
|
+
*/
|
|
126
|
+
export declare function triggerMetadataRefresh(orchestratorUrl: string, apiKey: string): Promise<void>;
|
|
127
|
+
export { DockerEngineError };
|
|
128
|
+
//# sourceMappingURL=worker-scaler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worker-scaler.d.ts","sourceRoot":"","sources":["../../../src/services/worker-scaler.ts"],"names":[],"mappings":"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"}
|