@intentic/providers 1.240.0 → 1.243.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/README.md +5 -0
- package/dist/auth/authentik.d.ts +1 -1
- package/dist/auth/authentik.d.ts.map +1 -1
- package/dist/auth/authentik.js +28 -99
- package/dist/auth/authentik.js.map +1 -1
- package/dist/backings/garage-bucket.d.ts +1 -1
- package/dist/backings/garage-bucket.d.ts.map +1 -1
- package/dist/backings/garage-bucket.js +18 -63
- package/dist/backings/garage-bucket.js.map +1 -1
- package/dist/backings/garage.d.ts +1 -1
- package/dist/backings/garage.d.ts.map +1 -1
- package/dist/backings/garage.js +19 -87
- package/dist/backings/garage.js.map +1 -1
- package/dist/backings/postgres-database.d.ts +1 -1
- package/dist/backings/postgres-database.d.ts.map +1 -1
- package/dist/backings/postgres-database.js +20 -72
- package/dist/backings/postgres-database.js.map +1 -1
- package/dist/backings/postgres.d.ts +1 -1
- package/dist/backings/postgres.d.ts.map +1 -1
- package/dist/backings/postgres.js +15 -98
- package/dist/backings/postgres.js.map +1 -1
- package/dist/backings/valkey-namespace.d.ts +1 -1
- package/dist/backings/valkey-namespace.d.ts.map +1 -1
- package/dist/backings/valkey-namespace.js +15 -60
- package/dist/backings/valkey-namespace.js.map +1 -1
- package/dist/backings/valkey.d.ts +1 -1
- package/dist/backings/valkey.d.ts.map +1 -1
- package/dist/backings/valkey.js +18 -98
- package/dist/backings/valkey.js.map +1 -1
- package/dist/core/backing-provider.d.ts +33 -0
- package/dist/core/backing-provider.d.ts.map +1 -0
- package/dist/core/backing-provider.js +97 -0
- package/dist/core/backing-provider.js.map +1 -0
- package/dist/core/backing-ssh.d.ts +2 -0
- package/dist/core/backing-ssh.d.ts.map +1 -1
- package/dist/core/backing-ssh.js +2 -0
- package/dist/core/backing-ssh.js.map +1 -1
- package/dist/core/host-files.d.ts +13 -0
- package/dist/core/host-files.d.ts.map +1 -0
- package/dist/core/host-files.js +27 -0
- package/dist/core/host-files.js.map +1 -0
- package/dist/core/instance-binding.d.ts +24 -0
- package/dist/core/instance-binding.d.ts.map +1 -0
- package/dist/core/instance-binding.js +68 -0
- package/dist/core/instance-binding.js.map +1 -0
- package/dist/observability/signoz.d.ts +1 -1
- package/dist/observability/signoz.d.ts.map +1 -1
- package/dist/observability/signoz.js +25 -127
- package/dist/observability/signoz.js.map +1 -1
- package/dist/services/compose-service.d.ts +3 -5
- package/dist/services/compose-service.d.ts.map +1 -1
- package/dist/services/compose-service.js +4 -22
- package/dist/services/compose-service.js.map +1 -1
- package/package.json +8 -8
|
@@ -1,17 +1,14 @@
|
|
|
1
1
|
import { shellQuote, sqlIdentifier, sqlLiteral } from "@intentic/sandbox-run/quote";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
import {
|
|
4
|
-
import { hasPendingRef, parseInputs, sshSchema, sshTarget } from "../core/inputs.js";
|
|
3
|
+
import { bindingSchema, createInstanceBindingProvider } from "../core/instance-binding.js";
|
|
5
4
|
import { sshExecutor } from "../core/ssh.js";
|
|
6
|
-
const databaseSchema =
|
|
7
|
-
instance: z.string(),
|
|
5
|
+
const databaseSchema = bindingSchema.extend({
|
|
8
6
|
instanceHost: z.string(),
|
|
9
7
|
instancePort: z.string(),
|
|
10
8
|
database: z.string(),
|
|
11
9
|
role: z.string(),
|
|
12
10
|
password: z.string(),
|
|
13
11
|
});
|
|
14
|
-
const parse = (inputs) => parseInputs(databaseSchema, inputs, "postgres-database");
|
|
15
12
|
const url = (parsed) => `postgres://${parsed.role}:${parsed.password}@${parsed.instanceHost}:${parsed.instancePort}/${parsed.database}`;
|
|
16
13
|
const psql = async (session, cid, sql) => {
|
|
17
14
|
const result = await session.exec(`docker exec ${cid} psql -U postgres -tAc ${shellQuote(sql)}`);
|
|
@@ -20,73 +17,24 @@ const psql = async (session, cid, sql) => {
|
|
|
20
17
|
}
|
|
21
18
|
return result.stdout.trim();
|
|
22
19
|
};
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
}
|
|
37
|
-
try {
|
|
38
|
-
const cid = await containerId(session, parsed.instance);
|
|
39
|
-
if (cid === "") {
|
|
40
|
-
return undefined;
|
|
41
|
-
}
|
|
42
|
-
const exists = await psql(session, cid, `SELECT 1 FROM pg_database WHERE datname=${sqlLiteral(parsed.database)}`);
|
|
43
|
-
return exists === "1" ? { outputs: { url: url(parsed) } } : undefined;
|
|
44
|
-
}
|
|
45
|
-
finally {
|
|
46
|
-
await session.dispose();
|
|
47
|
-
}
|
|
20
|
+
const databaseExists = async (session, cid, parsed) => (await psql(session, cid, `SELECT 1 FROM pg_database WHERE datname=${sqlLiteral(parsed.database)}`)) === "1";
|
|
21
|
+
export const createPostgresDatabaseProvider = (executor = sshExecutor) => createInstanceBindingProvider({
|
|
22
|
+
kind: "postgres-database",
|
|
23
|
+
schema: databaseSchema,
|
|
24
|
+
pendingRefs: ["instanceHost", "instancePort"],
|
|
25
|
+
present: async (session, cid, parsed) => ((await databaseExists(session, cid, parsed)) ? { url: url(parsed) } : undefined),
|
|
26
|
+
create: async (session, cid, parsed) => {
|
|
27
|
+
const roleExists = await psql(session, cid, `SELECT 1 FROM pg_roles WHERE rolname=${sqlLiteral(parsed.role)}`);
|
|
28
|
+
const verb = roleExists === "1" ? "ALTER" : "CREATE";
|
|
29
|
+
await psql(session, cid, `${verb} ROLE ${sqlIdentifier(parsed.role)} LOGIN PASSWORD ${sqlLiteral(parsed.password)}`);
|
|
30
|
+
if (!(await databaseExists(session, cid, parsed))) {
|
|
31
|
+
await psql(session, cid, `CREATE DATABASE ${sqlIdentifier(parsed.database)} OWNER ${sqlIdentifier(parsed.role)}`);
|
|
32
|
+
}
|
|
33
|
+
return { url: url(parsed) };
|
|
48
34
|
},
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
const session = await executor.connect(sshTarget(parsed));
|
|
53
|
-
try {
|
|
54
|
-
const cid = await containerId(session, parsed.instance);
|
|
55
|
-
if (cid === "") {
|
|
56
|
-
throw new Error(`postgres-database "${ctx.id}": instance "${parsed.instance}" is not running`);
|
|
57
|
-
}
|
|
58
|
-
const roleExists = await psql(session, cid, `SELECT 1 FROM pg_roles WHERE rolname=${sqlLiteral(parsed.role)}`);
|
|
59
|
-
if (roleExists !== "1") {
|
|
60
|
-
await psql(session, cid, `CREATE ROLE ${sqlIdentifier(parsed.role)} LOGIN PASSWORD ${sqlLiteral(parsed.password)}`);
|
|
61
|
-
}
|
|
62
|
-
else {
|
|
63
|
-
await psql(session, cid, `ALTER ROLE ${sqlIdentifier(parsed.role)} LOGIN PASSWORD ${sqlLiteral(parsed.password)}`);
|
|
64
|
-
}
|
|
65
|
-
const dbExists = await psql(session, cid, `SELECT 1 FROM pg_database WHERE datname=${sqlLiteral(parsed.database)}`);
|
|
66
|
-
if (dbExists !== "1") {
|
|
67
|
-
await psql(session, cid, `CREATE DATABASE ${sqlIdentifier(parsed.database)} OWNER ${sqlIdentifier(parsed.role)}`);
|
|
68
|
-
}
|
|
69
|
-
return { url: url(parsed) };
|
|
70
|
-
}
|
|
71
|
-
finally {
|
|
72
|
-
await session.dispose();
|
|
73
|
-
}
|
|
35
|
+
drop: async (session, cid, parsed) => {
|
|
36
|
+
await psql(session, cid, `DROP DATABASE IF EXISTS ${sqlIdentifier(parsed.database)}`);
|
|
37
|
+
await psql(session, cid, `DROP ROLE IF EXISTS ${sqlIdentifier(parsed.role)}`);
|
|
74
38
|
},
|
|
75
|
-
|
|
76
|
-
const parsed = parse(inputs);
|
|
77
|
-
const session = await executor.connect(sshTarget(parsed));
|
|
78
|
-
try {
|
|
79
|
-
const cid = await containerId(session, parsed.instance);
|
|
80
|
-
if (cid === "") {
|
|
81
|
-
ctx.log(`postgres-database "${ctx.id}": instance "${parsed.instance}" already gone; nothing to drop`);
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
await psql(session, cid, `DROP DATABASE IF EXISTS ${sqlIdentifier(parsed.database)}`);
|
|
85
|
-
await psql(session, cid, `DROP ROLE IF EXISTS ${sqlIdentifier(parsed.role)}`);
|
|
86
|
-
}
|
|
87
|
-
finally {
|
|
88
|
-
await session.dispose();
|
|
89
|
-
}
|
|
90
|
-
},
|
|
91
|
-
});
|
|
39
|
+
}, executor);
|
|
92
40
|
//# sourceMappingURL=postgres-database.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-database.js","sourceRoot":"","sources":["../../src/backings/postgres-database.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACpF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"postgres-database.js","sourceRoot":"","sources":["../../src/backings/postgres-database.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { Provider } from "@intentic/engine";
|
|
2
|
-
import {
|
|
2
|
+
import type { SshExecutor } from "../core/ssh.js";
|
|
3
3
|
export declare const createPostgresProvider: (executor?: SshExecutor) => Provider;
|
|
4
4
|
//# sourceMappingURL=postgres.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/backings/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"postgres.d.ts","sourceRoot":"","sources":["../../src/backings/postgres.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAIjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAsClD,eAAO,MAAM,sBAAsB,cAAc,WAAW,KAAiB,QAgBxE,CAAC"}
|
|
@@ -1,25 +1,12 @@
|
|
|
1
|
-
import { HASH_KEY } from "@intentic/graph";
|
|
2
|
-
import { envLine, shellQuote } from "@intentic/sandbox-run/quote";
|
|
3
1
|
import { z } from "zod";
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import { listStampedContainers } from "../core/list-stamped.js";
|
|
2
|
+
import { backingSchema, createBackingProvider } from "../core/backing-provider.js";
|
|
3
|
+
import { execProbe, stampLabels } from "../core/backing-ssh.js";
|
|
7
4
|
import { sshExecutor } from "../core/ssh.js";
|
|
8
5
|
const KIND = "postgres";
|
|
9
|
-
const
|
|
10
|
-
const postgresSchema = sshSchema.extend({
|
|
11
|
-
internalIp: z.string(),
|
|
12
|
-
publishPort: z.number(),
|
|
6
|
+
const postgresSchema = backingSchema.extend({
|
|
13
7
|
adminPassword: z.string(),
|
|
14
|
-
image: z.string(),
|
|
15
|
-
protect: z.boolean().default(false),
|
|
16
8
|
});
|
|
17
|
-
const
|
|
18
|
-
const outputsFor = (parsed) => ({
|
|
19
|
-
internalHost: parsed.internalIp,
|
|
20
|
-
port: String(parsed.publishPort),
|
|
21
|
-
});
|
|
22
|
-
const composeYaml = (id, hash, parsed) => [
|
|
9
|
+
const composeYaml = (parsed, id, hash) => [
|
|
23
10
|
"services:",
|
|
24
11
|
" postgres:",
|
|
25
12
|
` image: ${parsed.image}`,
|
|
@@ -27,7 +14,7 @@ const composeYaml = (id, hash, parsed) => [
|
|
|
27
14
|
" environment: { POSTGRES_USER: postgres, POSTGRES_PASSWORD: $POSTGRES_PASSWORD, POSTGRES_DB: postgres }",
|
|
28
15
|
" volumes: [ data:/var/lib/postgresql ]",
|
|
29
16
|
` ports: [ "${parsed.publishPort}:5432" ]`,
|
|
30
|
-
|
|
17
|
+
stampLabels(KIND, id, hash, parsed.protect),
|
|
31
18
|
" healthcheck:",
|
|
32
19
|
" test: [ CMD-SHELL, pg_isready -U postgres ]",
|
|
33
20
|
" interval: 10s",
|
|
@@ -36,84 +23,14 @@ const composeYaml = (id, hash, parsed) => [
|
|
|
36
23
|
"volumes: { data: {} }",
|
|
37
24
|
"",
|
|
38
25
|
].join("\n");
|
|
39
|
-
const
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
if (hasPendingRef(inputs, "internalIp")) {
|
|
50
|
-
return undefined;
|
|
51
|
-
}
|
|
52
|
-
const parsed = parse(inputs);
|
|
53
|
-
let session;
|
|
54
|
-
try {
|
|
55
|
-
session = await executor.connect(sshTarget(parsed));
|
|
56
|
-
}
|
|
57
|
-
catch (error) {
|
|
58
|
-
ctx.log(`postgres "${ctx.id}": host not reachable over SSH, treating as not-yet-created: ${String(error)}`);
|
|
59
|
-
return undefined;
|
|
60
|
-
}
|
|
61
|
-
try {
|
|
62
|
-
const probe = await session.exec(readyProbe(ctx.id));
|
|
63
|
-
if (probe.code !== 0) {
|
|
64
|
-
return undefined;
|
|
65
|
-
}
|
|
66
|
-
const stampHash = await containerLabel(session, ctx.id, HASH_KEY);
|
|
67
|
-
return {
|
|
68
|
-
outputs: outputsFor(parsed),
|
|
69
|
-
detail: { image: await containerImage(session, ctx.id) },
|
|
70
|
-
...(stampHash === "" ? {} : { stampHash }),
|
|
71
|
-
};
|
|
72
|
-
}
|
|
73
|
-
finally {
|
|
74
|
-
await session.dispose();
|
|
75
|
-
}
|
|
76
|
-
},
|
|
77
|
-
diff: (inputs, observed) => {
|
|
78
|
-
const parsed = parse(inputs);
|
|
79
|
-
const image = (observed.detail?.["image"] ?? "");
|
|
80
|
-
return image === parsed.image
|
|
81
|
-
? { action: "noop" }
|
|
82
|
-
: { action: "update", reason: `postgres image differs (running ${image}, want ${parsed.image})` };
|
|
83
|
-
},
|
|
84
|
-
apply: async (inputs, _observed, ctx) => {
|
|
85
|
-
const parsed = parse(inputs);
|
|
86
|
-
const session = await executor.connect(sshTarget(parsed));
|
|
87
|
-
try {
|
|
88
|
-
await ensureFiles(session, ctx.id, ctx.inputsHash ?? "", parsed);
|
|
89
|
-
await composeUp(session, KIND, ctx.id);
|
|
90
|
-
await waitReady(session, KIND, ctx.id, readyProbe(ctx.id), READY_TIMEOUT_MS);
|
|
91
|
-
return outputsFor(parsed);
|
|
92
|
-
}
|
|
93
|
-
finally {
|
|
94
|
-
await session.dispose();
|
|
95
|
-
}
|
|
96
|
-
},
|
|
97
|
-
delete: async (inputs, ctx) => {
|
|
98
|
-
const session = await executor.connect(sshTarget(parseInputs(sshSchema, inputs, KIND)));
|
|
99
|
-
try {
|
|
100
|
-
await composeDown(session, KIND, ctx.id);
|
|
101
|
-
}
|
|
102
|
-
finally {
|
|
103
|
-
await session.dispose();
|
|
104
|
-
}
|
|
105
|
-
},
|
|
106
|
-
list: (sources, ctx) => listStampedContainers(executor, KIND, sources, ctx.log),
|
|
107
|
-
restamp: async (oldId, inputs, ctx) => {
|
|
108
|
-
const target = sshTarget(parseInputs(sshSchema, inputs, KIND));
|
|
109
|
-
const image = typeof inputs["image"] === "string" ? inputs["image"] : "busybox";
|
|
110
|
-
const session = await executor.connect(target);
|
|
111
|
-
try {
|
|
112
|
-
await restampBacking(session, KIND, oldId, ctx.id, image);
|
|
113
|
-
}
|
|
114
|
-
finally {
|
|
115
|
-
await session.dispose();
|
|
116
|
-
}
|
|
117
|
-
},
|
|
118
|
-
});
|
|
26
|
+
export const createPostgresProvider = (executor = sshExecutor) => createBackingProvider({
|
|
27
|
+
kind: KIND,
|
|
28
|
+
schema: postgresSchema,
|
|
29
|
+
readyTimeoutMs: 120_000,
|
|
30
|
+
outputs: (parsed) => ({ internalHost: parsed.internalIp, port: String(parsed.publishPort) }),
|
|
31
|
+
files: (parsed, id, hash) => ({ "compose.yaml": composeYaml(parsed, id, hash) }),
|
|
32
|
+
env: (parsed) => [{ key: "POSTGRES_PASSWORD", value: parsed.adminPassword }],
|
|
33
|
+
probe: (_parsed, id) => execProbe(id, "pg_isready -U postgres -q"),
|
|
34
|
+
restamp: true,
|
|
35
|
+
}, executor);
|
|
119
36
|
//# sourceMappingURL=postgres.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/backings/postgres.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"postgres.js","sourceRoot":"","sources":["../../src/backings/postgres.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,IAAI,GAAG,UAAU,CAAC;AAExB,MAAM,cAAc,GAAG,aAAa,CAAC,MAAM,CAAC;IAGxC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;CAC5B,CAAC,CAAC;AAMH,MAAM,WAAW,GAAG,CAAC,MAAsB,EAAE,EAAU,EAAE,IAAY,EAAU,EAAE,CAC7E;IACI,WAAW;IACX,aAAa;IACb,cAAc,MAAM,CAAC,KAAK,EAAE;IAC5B,6BAA6B;IAC7B,4GAA4G;IAC5G,2CAA2C;IAC3C,iBAAiB,MAAM,CAAC,WAAW,UAAU;IAC7C,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC;IAC3C,kBAAkB;IAClB,mDAAmD;IACnD,qBAAqB;IACrB,mBAAmB;IACnB,mBAAmB;IACnB,uBAAuB;IACvB,EAAE;CACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAMjB,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,QAAQ,GAAgB,WAAW,EAAY,EAAE,CACpF,qBAAqB,CACjB;IACI,IAAI,EAAE,IAAI;IACV,MAAM,EAAE,cAAc;IACtB,cAAc,EAAE,OAAO;IACvB,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;IAC5F,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,CAAC;IAGhF,GAAG,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,mBAAmB,EAAE,KAAK,EAAE,MAAM,CAAC,aAAa,EAAE,CAAC;IAC5E,KAAK,EAAE,CAAC,OAAO,EAAE,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,2BAA2B,CAAC;IAElE,OAAO,EAAE,IAAI;CAChB,EACD,QAAQ,CACX,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { Provider } from "@intentic/engine";
|
|
2
|
-
import {
|
|
2
|
+
import type { SshExecutor } from "../core/ssh.js";
|
|
3
3
|
export declare const createValkeyNamespaceProvider: (executor?: SshExecutor) => Provider;
|
|
4
4
|
//# sourceMappingURL=valkey-namespace.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"valkey-namespace.d.ts","sourceRoot":"","sources":["../../src/backings/valkey-namespace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"valkey-namespace.d.ts","sourceRoot":"","sources":["../../src/backings/valkey-namespace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAIjD,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,gBAAgB,CAAC;AAkC9D,eAAO,MAAM,6BAA6B,cAAc,WAAW,KAAiB,QAoB/E,CAAC"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
1
|
import { shellQuote } from "@intentic/sandbox-run/quote";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
import {
|
|
4
|
-
import { hasPendingRef, parseInputs, sshSchema, sshTarget } from "../core/inputs.js";
|
|
3
|
+
import { bindingSchema, createInstanceBindingProvider } from "../core/instance-binding.js";
|
|
5
4
|
import { sshExecutor } from "../core/ssh.js";
|
|
6
|
-
const namespaceSchema =
|
|
7
|
-
instance: z.string(),
|
|
5
|
+
const namespaceSchema = bindingSchema.extend({
|
|
8
6
|
instanceHost: z.string(),
|
|
9
7
|
instancePort: z.string(),
|
|
10
8
|
adminPassword: z.string(),
|
|
@@ -12,7 +10,6 @@ const namespaceSchema = sshSchema.extend({
|
|
|
12
10
|
password: z.string(),
|
|
13
11
|
keyPrefix: z.string(),
|
|
14
12
|
});
|
|
15
|
-
const parse = (inputs) => parseInputs(namespaceSchema, inputs, "valkey-namespace");
|
|
16
13
|
const url = (parsed) => `redis://${parsed.username}:${parsed.password}@${parsed.instanceHost}:${parsed.instancePort}/0`;
|
|
17
14
|
const cli = async (session, cid, parsed, args) => {
|
|
18
15
|
const result = await session.exec(`docker exec ${cid} valkey-cli -a ${shellQuote(parsed.adminPassword)} --no-auth-warning ${args}`);
|
|
@@ -21,62 +18,20 @@ const cli = async (session, cid, parsed, args) => {
|
|
|
21
18
|
}
|
|
22
19
|
return result.stdout.trim();
|
|
23
20
|
};
|
|
24
|
-
export const createValkeyNamespaceProvider = (executor = sshExecutor) => ({
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
try {
|
|
32
|
-
session = await executor.connect(sshTarget(parsed));
|
|
33
|
-
}
|
|
34
|
-
catch (error) {
|
|
35
|
-
ctx.log(`valkey-namespace "${ctx.id}": host not reachable over SSH, treating as not-yet-created: ${String(error)}`);
|
|
36
|
-
return undefined;
|
|
37
|
-
}
|
|
38
|
-
try {
|
|
39
|
-
const cid = await containerId(session, parsed.instance);
|
|
40
|
-
if (cid === "") {
|
|
41
|
-
return undefined;
|
|
42
|
-
}
|
|
43
|
-
const user = await cli(session, cid, parsed, `ACL GETUSER ${parsed.username}`);
|
|
44
|
-
return user === "" ? undefined : { outputs: { url: url(parsed) } };
|
|
45
|
-
}
|
|
46
|
-
finally {
|
|
47
|
-
await session.dispose();
|
|
48
|
-
}
|
|
21
|
+
export const createValkeyNamespaceProvider = (executor = sshExecutor) => createInstanceBindingProvider({
|
|
22
|
+
kind: "valkey-namespace",
|
|
23
|
+
schema: namespaceSchema,
|
|
24
|
+
pendingRefs: ["instanceHost", "instancePort"],
|
|
25
|
+
present: async (session, cid, parsed) => {
|
|
26
|
+
const user = await cli(session, cid, parsed, `ACL GETUSER ${parsed.username}`);
|
|
27
|
+
return user === "" ? undefined : { url: url(parsed) };
|
|
49
28
|
},
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
const session = await executor.connect(sshTarget(parsed));
|
|
54
|
-
try {
|
|
55
|
-
const cid = await containerId(session, parsed.instance);
|
|
56
|
-
if (cid === "") {
|
|
57
|
-
throw new Error(`valkey-namespace "${ctx.id}": instance "${parsed.instance}" is not running`);
|
|
58
|
-
}
|
|
59
|
-
await cli(session, cid, parsed, `ACL SETUSER ${parsed.username} on '>${parsed.password}' '~${parsed.keyPrefix}:*' +@all`);
|
|
60
|
-
return { url: url(parsed) };
|
|
61
|
-
}
|
|
62
|
-
finally {
|
|
63
|
-
await session.dispose();
|
|
64
|
-
}
|
|
29
|
+
create: async (session, cid, parsed) => {
|
|
30
|
+
await cli(session, cid, parsed, `ACL SETUSER ${parsed.username} on '>${parsed.password}' '~${parsed.keyPrefix}:*' +@all`);
|
|
31
|
+
return { url: url(parsed) };
|
|
65
32
|
},
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
const session = await executor.connect(sshTarget(parsed));
|
|
69
|
-
try {
|
|
70
|
-
const cid = await containerId(session, parsed.instance);
|
|
71
|
-
if (cid === "") {
|
|
72
|
-
ctx.log(`valkey-namespace "${ctx.id}": instance "${parsed.instance}" already gone; nothing to drop`);
|
|
73
|
-
return;
|
|
74
|
-
}
|
|
75
|
-
await cli(session, cid, parsed, `ACL DELUSER ${parsed.username}`);
|
|
76
|
-
}
|
|
77
|
-
finally {
|
|
78
|
-
await session.dispose();
|
|
79
|
-
}
|
|
33
|
+
drop: async (session, cid, parsed) => {
|
|
34
|
+
await cli(session, cid, parsed, `ACL DELUSER ${parsed.username}`);
|
|
80
35
|
},
|
|
81
|
-
});
|
|
36
|
+
}, executor);
|
|
82
37
|
//# sourceMappingURL=valkey-namespace.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"valkey-namespace.js","sourceRoot":"","sources":["../../src/backings/valkey-namespace.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"valkey-namespace.js","sourceRoot":"","sources":["../../src/backings/valkey-namespace.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAE3F,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,eAAe,GAAG,aAAa,CAAC,MAAM,CAAC;IACzC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IACxB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE;IAExB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;IAEzB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;CACxB,CAAC,CAAC;AAGH,MAAM,GAAG,GAAG,CAAC,MAAuB,EAAU,EAAE,CAAC,WAAW,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,YAAY,IAAI,MAAM,CAAC,YAAY,IAAI,CAAC;AAIjJ,MAAM,GAAG,GAAG,KAAK,EAAE,OAAmB,EAAE,GAAW,EAAE,MAAuB,EAAE,IAAY,EAAmB,EAAE;IAI3G,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,eAAe,GAAG,kBAAkB,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;IACpI,IAAI,MAAM,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CAAC,sBAAsB,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;AAChC,CAAC,CAAC;AAMF,MAAM,CAAC,MAAM,6BAA6B,GAAG,CAAC,QAAQ,GAAgB,WAAW,EAAY,EAAE,CAC3F,6BAA6B,CACzB;IACI,IAAI,EAAE,kBAAkB;IACxB,MAAM,EAAE,eAAe;IACvB,WAAW,EAAE,CAAC,cAAc,EAAE,cAAc,CAAC;IAC7C,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;QACpC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,eAAe,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC/E,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;IAC1D,CAAC;IACD,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;QAEnC,MAAM,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,eAAe,MAAM,CAAC,QAAQ,SAAS,MAAM,CAAC,QAAQ,OAAO,MAAM,CAAC,SAAS,WAAW,CAAC,CAAC;QAC1H,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;IAChC,CAAC;IACD,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE;QACjC,MAAM,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,eAAe,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtE,CAAC;CACJ,EACD,QAAQ,CACX,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { Provider } from "@intentic/engine";
|
|
2
|
-
import {
|
|
2
|
+
import type { SshExecutor } from "../core/ssh.js";
|
|
3
3
|
export declare const createValkeyProvider: (executor?: SshExecutor) => Provider;
|
|
4
4
|
//# sourceMappingURL=valkey.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"valkey.d.ts","sourceRoot":"","sources":["../../src/backings/valkey.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"valkey.d.ts","sourceRoot":"","sources":["../../src/backings/valkey.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAKjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAsClD,eAAO,MAAM,oBAAoB,cAAc,WAAW,KAAiB,QAgBtE,CAAC"}
|
package/dist/backings/valkey.js
CHANGED
|
@@ -1,25 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { shellQuote } from "@intentic/sandbox-run/quote";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { listStampedContainers } from "../core/list-stamped.js";
|
|
3
|
+
import { backingSchema, createBackingProvider } from "../core/backing-provider.js";
|
|
4
|
+
import { execProbe, stampLabels } from "../core/backing-ssh.js";
|
|
6
5
|
import { sshExecutor } from "../core/ssh.js";
|
|
7
|
-
import { shellQuote } from "@intentic/sandbox-run/quote";
|
|
8
6
|
const KIND = "valkey";
|
|
9
|
-
const
|
|
10
|
-
const valkeySchema = sshSchema.extend({
|
|
11
|
-
internalIp: z.string(),
|
|
12
|
-
publishPort: z.number(),
|
|
7
|
+
const valkeySchema = backingSchema.extend({
|
|
13
8
|
adminPassword: z.string(),
|
|
14
|
-
image: z.string(),
|
|
15
|
-
protect: z.boolean().default(false),
|
|
16
9
|
});
|
|
17
|
-
const
|
|
18
|
-
const outputsFor = (parsed) => ({
|
|
19
|
-
internalHost: parsed.internalIp,
|
|
20
|
-
port: String(parsed.publishPort),
|
|
21
|
-
});
|
|
22
|
-
const composeYaml = (id, hash, parsed) => [
|
|
10
|
+
const composeYaml = (parsed, id, hash) => [
|
|
23
11
|
"services:",
|
|
24
12
|
" valkey:",
|
|
25
13
|
` image: ${parsed.image}`,
|
|
@@ -29,89 +17,21 @@ const composeYaml = (id, hash, parsed) => [
|
|
|
29
17
|
" - data:/data",
|
|
30
18
|
" - ./valkey.conf:/etc/valkey/valkey.conf:ro",
|
|
31
19
|
` ports: [ "${parsed.publishPort}:6379" ]`,
|
|
32
|
-
|
|
20
|
+
stampLabels(KIND, id, hash, parsed.protect),
|
|
33
21
|
"volumes: { data: {} }",
|
|
34
22
|
"",
|
|
35
23
|
].join("\n");
|
|
36
24
|
const valkeyConf = (parsed) => [`requirepass ${parsed.adminPassword}`, "appendonly yes", ""].join("\n");
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
const parsed = parse(inputs);
|
|
51
|
-
let session;
|
|
52
|
-
try {
|
|
53
|
-
session = await executor.connect(sshTarget(parsed));
|
|
54
|
-
}
|
|
55
|
-
catch (error) {
|
|
56
|
-
ctx.log(`valkey "${ctx.id}": host not reachable over SSH, treating as not-yet-created: ${String(error)}`);
|
|
57
|
-
return undefined;
|
|
58
|
-
}
|
|
59
|
-
try {
|
|
60
|
-
const probe = await session.exec(readyProbe(ctx.id, parsed));
|
|
61
|
-
if (probe.code !== 0) {
|
|
62
|
-
return undefined;
|
|
63
|
-
}
|
|
64
|
-
const stampHash = await containerLabel(session, ctx.id, HASH_KEY);
|
|
65
|
-
return {
|
|
66
|
-
outputs: outputsFor(parsed),
|
|
67
|
-
detail: { image: await containerImage(session, ctx.id) },
|
|
68
|
-
...(stampHash === "" ? {} : { stampHash }),
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
finally {
|
|
72
|
-
await session.dispose();
|
|
73
|
-
}
|
|
74
|
-
},
|
|
75
|
-
diff: (inputs, observed) => {
|
|
76
|
-
const parsed = parse(inputs);
|
|
77
|
-
const image = (observed.detail?.["image"] ?? "");
|
|
78
|
-
return image === parsed.image
|
|
79
|
-
? { action: "noop" }
|
|
80
|
-
: { action: "update", reason: `valkey image differs (running ${image}, want ${parsed.image})` };
|
|
81
|
-
},
|
|
82
|
-
apply: async (inputs, _observed, ctx) => {
|
|
83
|
-
const parsed = parse(inputs);
|
|
84
|
-
const session = await executor.connect(sshTarget(parsed));
|
|
85
|
-
try {
|
|
86
|
-
await ensureFiles(session, ctx.id, ctx.inputsHash ?? "", parsed);
|
|
87
|
-
await composeUp(session, KIND, ctx.id);
|
|
88
|
-
await waitReady(session, KIND, ctx.id, readyProbe(ctx.id, parsed), READY_TIMEOUT_MS);
|
|
89
|
-
return outputsFor(parsed);
|
|
90
|
-
}
|
|
91
|
-
finally {
|
|
92
|
-
await session.dispose();
|
|
93
|
-
}
|
|
94
|
-
},
|
|
95
|
-
delete: async (inputs, ctx) => {
|
|
96
|
-
const session = await executor.connect(sshTarget(parseInputs(sshSchema, inputs, KIND)));
|
|
97
|
-
try {
|
|
98
|
-
await composeDown(session, KIND, ctx.id);
|
|
99
|
-
}
|
|
100
|
-
finally {
|
|
101
|
-
await session.dispose();
|
|
102
|
-
}
|
|
103
|
-
},
|
|
104
|
-
list: (sources, ctx) => listStampedContainers(executor, KIND, sources, ctx.log),
|
|
105
|
-
restamp: async (oldId, inputs, ctx) => {
|
|
106
|
-
const target = sshTarget(parseInputs(sshSchema, inputs, KIND));
|
|
107
|
-
const image = typeof inputs["image"] === "string" ? inputs["image"] : "busybox";
|
|
108
|
-
const session = await executor.connect(target);
|
|
109
|
-
try {
|
|
110
|
-
await restampBacking(session, KIND, oldId, ctx.id, image);
|
|
111
|
-
}
|
|
112
|
-
finally {
|
|
113
|
-
await session.dispose();
|
|
114
|
-
}
|
|
115
|
-
},
|
|
116
|
-
});
|
|
25
|
+
export const createValkeyProvider = (executor = sshExecutor) => createBackingProvider({
|
|
26
|
+
kind: KIND,
|
|
27
|
+
schema: valkeySchema,
|
|
28
|
+
readyTimeoutMs: 60_000,
|
|
29
|
+
outputs: (parsed) => ({ internalHost: parsed.internalIp, port: String(parsed.publishPort) }),
|
|
30
|
+
files: (parsed, id, hash) => ({
|
|
31
|
+
"compose.yaml": composeYaml(parsed, id, hash),
|
|
32
|
+
"valkey.conf": { content: valkeyConf(parsed), secret: true },
|
|
33
|
+
}),
|
|
34
|
+
probe: (parsed, id) => execProbe(id, `valkey-cli -a ${shellQuote(parsed.adminPassword)} ping | grep -q PONG`),
|
|
35
|
+
restamp: true,
|
|
36
|
+
}, executor);
|
|
117
37
|
//# sourceMappingURL=valkey.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"valkey.js","sourceRoot":"","sources":["../../src/backings/valkey.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"valkey.js","sourceRoot":"","sources":["../../src/backings/valkey.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,aAAa,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACnF,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAEhE,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,MAAM,IAAI,GAAG,QAAQ,CAAC;AAEtB,MAAM,YAAY,GAAG,aAAa,CAAC,MAAM,CAAC;IAGtC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE;CAC5B,CAAC,CAAC;AAMH,MAAM,WAAW,GAAG,CAAC,MAAoB,EAAE,EAAU,EAAE,IAAY,EAAU,EAAE,CAC3E;IACI,WAAW;IACX,WAAW;IACX,cAAc,MAAM,CAAC,KAAK,EAAE;IAC5B,6BAA6B;IAC7B,yDAAyD;IACzD,cAAc;IACd,oBAAoB;IACpB,kDAAkD;IAClD,iBAAiB,MAAM,CAAC,WAAW,UAAU;IAC7C,WAAW,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC;IAC3C,uBAAuB;IACvB,EAAE;CACL,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAIjB,MAAM,UAAU,GAAG,CAAC,MAAoB,EAAU,EAAE,CAAC,CAAC,eAAe,MAAM,CAAC,aAAa,EAAE,EAAE,gBAAgB,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAK9H,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,QAAQ,GAAgB,WAAW,EAAY,EAAE,CAClF,qBAAqB,CACjB;IACI,IAAI,EAAE,IAAI;IACV,MAAM,EAAE,YAAY;IACpB,cAAc,EAAE,MAAM;IACtB,OAAO,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,UAAU,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC;IAC5F,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1B,cAAc,EAAE,WAAW,CAAC,MAAM,EAAE,EAAE,EAAE,IAAI,CAAC;QAC7C,aAAa,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE;KAC/D,CAAC;IACF,KAAK,EAAE,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,iBAAiB,UAAU,CAAC,MAAM,CAAC,aAAa,CAAC,sBAAsB,CAAC;IAE7G,OAAO,EAAE,IAAI;CAChB,EACD,QAAQ,CACX,CAAC"}
|