@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
package/README.md
CHANGED
|
@@ -15,6 +15,11 @@ The real **Provider SPI implementations** the engine reconciles against: the onl
|
|
|
15
15
|
- `src/<kind>.ts`, one provider per kind: e.g. [src/cloudflare.ts](src/cloudflare.ts), [src/forgejo.ts](src/forgejo.ts), [src/komodo.ts](src/komodo.ts), [src/deployment.ts](src/deployment.ts), [src/cf-route.ts](src/cf-route.ts), [src/ci.ts](src/ci.ts).
|
|
16
16
|
- `src/<system>-api.ts`, HTTP adapters: [src/forgejo-api.ts](src/forgejo-api.ts), [src/komodo-api.ts](src/komodo-api.ts), [src/cloudflare-api.ts](src/cloudflare-api.ts), [src/authentik-api.ts](src/authentik-api.ts); fakes like [src/forgejo-api.fake.ts](src/forgejo-api.fake.ts).
|
|
17
17
|
- [src/backings](src/backings): `sshExecutor` (+ `SshExecutor`/`SshSession`); [src/api-validation.test.ts](src/api-validation.test.ts), input-validation coverage.
|
|
18
|
+
- The three **skeletons** every Docker-deploying provider is built from, so a new one is a spec rather than another copy of `read`/`diff`/`apply`/`delete`/`list`:
|
|
19
|
+
- [src/core/backing-provider.ts](src/core/backing-provider.ts) — one container per node id (postgres, valkey, garage, authentik): a schema, a compose file, a readiness probe.
|
|
20
|
+
- [src/core/instance-binding.ts](src/core/instance-binding.ts) — an app's slice INSIDE a backing (a database, an ACL user, a bucket), reached with `docker exec`.
|
|
21
|
+
- [src/services/compose-service.ts](src/services/compose-service.ts) — one singleton stack per kind (the catalog services, signoz), diffed per compose service.
|
|
22
|
+
- [src/core/host-files.ts](src/core/host-files.ts) is the writing the three share: rewritten config files, and the write-once `.env` whose two quoting layers are the part that used to be got wrong.
|
|
18
23
|
|
|
19
24
|
## How it fits
|
|
20
25
|
|
package/dist/auth/authentik.d.ts
CHANGED
|
@@ -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 createAuthentikProvider: (executor?: SshExecutor) => Provider;
|
|
4
4
|
//# sourceMappingURL=authentik.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authentik.d.ts","sourceRoot":"","sources":["../../src/auth/authentik.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"authentik.d.ts","sourceRoot":"","sources":["../../src/auth/authentik.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAIjD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AA6DlD,eAAO,MAAM,uBAAuB,cAAc,WAAW,KAAiB,QAgCzE,CAAC"}
|
package/dist/auth/authentik.js
CHANGED
|
@@ -1,33 +1,19 @@
|
|
|
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 { stampLabels } from "../core/backing-ssh.js";
|
|
7
4
|
import { sshExecutor } from "../core/ssh.js";
|
|
8
5
|
const KIND = "authentik";
|
|
9
|
-
const
|
|
10
|
-
const authentikSchema = sshSchema.extend({
|
|
11
|
-
internalIp: z.string(),
|
|
12
|
-
publishPort: z.number(),
|
|
6
|
+
const authentikSchema = backingSchema.extend({
|
|
13
7
|
domain: z.string(),
|
|
14
8
|
secretKey: z.string(),
|
|
15
9
|
bootstrapToken: z.string(),
|
|
16
10
|
bootstrapPassword: z.string(),
|
|
17
11
|
dbPassword: z.string(),
|
|
18
|
-
image: z.string(),
|
|
19
12
|
pgImage: z.string(),
|
|
20
13
|
redisImage: z.string(),
|
|
21
|
-
protect: z.boolean().default(false),
|
|
22
14
|
});
|
|
23
|
-
const parse = (inputs) => parseInputs(authentikSchema, inputs, KIND);
|
|
24
15
|
const internalUrl = (parsed) => `http://${parsed.internalIp}:${parsed.publishPort}`;
|
|
25
|
-
const
|
|
26
|
-
url: `https://${parsed.domain}`,
|
|
27
|
-
issuerUrl: `https://${parsed.domain}/application/o/`,
|
|
28
|
-
internalUrl: internalUrl(parsed),
|
|
29
|
-
});
|
|
30
|
-
const composeYaml = (id, hash, parsed) => [
|
|
16
|
+
const composeYaml = (parsed, id, hash) => [
|
|
31
17
|
"services:",
|
|
32
18
|
" postgresql:",
|
|
33
19
|
` image: ${parsed.pgImage}`,
|
|
@@ -49,7 +35,7 @@ const composeYaml = (id, hash, parsed) => [
|
|
|
49
35
|
` ports: [ "${parsed.publishPort}:9000" ]`,
|
|
50
36
|
" volumes: [ media:/media, templates:/templates ]",
|
|
51
37
|
" depends_on: { postgresql: { condition: service_healthy }, redis: { condition: service_healthy } }",
|
|
52
|
-
|
|
38
|
+
stampLabels(KIND, id, hash, parsed.protect),
|
|
53
39
|
" worker:",
|
|
54
40
|
` image: ${parsed.image}`,
|
|
55
41
|
" restart: unless-stopped",
|
|
@@ -60,84 +46,27 @@ const composeYaml = (id, hash, parsed) => [
|
|
|
60
46
|
"volumes: { database: {}, redis: {}, media: {}, certs: {}, templates: {} }",
|
|
61
47
|
"",
|
|
62
48
|
].join("\n");
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
const parsed = parse(inputs);
|
|
88
|
-
let session;
|
|
89
|
-
try {
|
|
90
|
-
session = await executor.connect(sshTarget(parsed));
|
|
91
|
-
}
|
|
92
|
-
catch (error) {
|
|
93
|
-
ctx.log(`authentik "${ctx.id}": host not reachable over SSH, treating as not-yet-created: ${String(error)}`);
|
|
94
|
-
return undefined;
|
|
95
|
-
}
|
|
96
|
-
try {
|
|
97
|
-
const probe = await session.exec(readyProbe(parsed));
|
|
98
|
-
if (probe.code !== 0) {
|
|
99
|
-
return undefined;
|
|
100
|
-
}
|
|
101
|
-
const stampHash = await containerLabel(session, ctx.id, HASH_KEY);
|
|
102
|
-
return {
|
|
103
|
-
outputs: outputsFor(parsed),
|
|
104
|
-
detail: { image: await containerImage(session, ctx.id) },
|
|
105
|
-
...(stampHash === "" ? {} : { stampHash }),
|
|
106
|
-
};
|
|
107
|
-
}
|
|
108
|
-
finally {
|
|
109
|
-
await session.dispose();
|
|
110
|
-
}
|
|
111
|
-
},
|
|
112
|
-
diff: (inputs, observed) => {
|
|
113
|
-
const parsed = parse(inputs);
|
|
114
|
-
const image = (observed.detail?.["image"] ?? "");
|
|
115
|
-
return image === parsed.image
|
|
116
|
-
? { action: "noop" }
|
|
117
|
-
: { action: "update", reason: `authentik image differs (running ${image}, want ${parsed.image})` };
|
|
118
|
-
},
|
|
119
|
-
apply: async (inputs, _observed, ctx) => {
|
|
120
|
-
const parsed = parse(inputs);
|
|
121
|
-
const session = await executor.connect(sshTarget(parsed));
|
|
122
|
-
try {
|
|
123
|
-
await ensureFiles(session, ctx.id, ctx.inputsHash ?? "", parsed);
|
|
124
|
-
await composeUp(session, KIND, ctx.id);
|
|
125
|
-
await waitReady(session, KIND, ctx.id, readyProbe(parsed), READY_TIMEOUT_MS);
|
|
126
|
-
return outputsFor(parsed);
|
|
127
|
-
}
|
|
128
|
-
finally {
|
|
129
|
-
await session.dispose();
|
|
130
|
-
}
|
|
131
|
-
},
|
|
132
|
-
delete: async (inputs, ctx) => {
|
|
133
|
-
const session = await executor.connect(sshTarget(parseInputs(sshSchema, inputs, KIND)));
|
|
134
|
-
try {
|
|
135
|
-
await composeDown(session, KIND, ctx.id);
|
|
136
|
-
}
|
|
137
|
-
finally {
|
|
138
|
-
await session.dispose();
|
|
139
|
-
}
|
|
140
|
-
},
|
|
141
|
-
list: (sources, ctx) => listStampedContainers(executor, KIND, sources, ctx.log),
|
|
142
|
-
});
|
|
49
|
+
export const createAuthentikProvider = (executor = sshExecutor) => createBackingProvider({
|
|
50
|
+
kind: KIND,
|
|
51
|
+
schema: authentikSchema,
|
|
52
|
+
readyTimeoutMs: 300_000,
|
|
53
|
+
outputs: (parsed) => ({
|
|
54
|
+
url: `https://${parsed.domain}`,
|
|
55
|
+
issuerUrl: `https://${parsed.domain}/application/o/`,
|
|
56
|
+
internalUrl: internalUrl(parsed),
|
|
57
|
+
}),
|
|
58
|
+
files: (parsed, id, hash) => ({ "compose.yaml": composeYaml(parsed, id, hash) }),
|
|
59
|
+
env: (parsed) => [
|
|
60
|
+
{ key: "AUTHENTIK_POSTGRESQL__HOST", value: "postgresql" },
|
|
61
|
+
{ key: "AUTHENTIK_POSTGRESQL__USER", value: "authentik" },
|
|
62
|
+
{ key: "AUTHENTIK_POSTGRESQL__NAME", value: "authentik" },
|
|
63
|
+
{ key: "AUTHENTIK_REDIS__HOST", value: "redis" },
|
|
64
|
+
{ key: "AUTHENTIK_BOOTSTRAP_EMAIL", value: `akadmin@${parsed.domain}` },
|
|
65
|
+
{ key: "AUTHENTIK_SECRET_KEY", value: parsed.secretKey },
|
|
66
|
+
{ key: "AUTHENTIK_POSTGRESQL__PASSWORD", value: parsed.dbPassword },
|
|
67
|
+
{ key: "AUTHENTIK_BOOTSTRAP_PASSWORD", value: parsed.bootstrapPassword },
|
|
68
|
+
{ key: "AUTHENTIK_BOOTSTRAP_TOKEN", value: parsed.bootstrapToken },
|
|
69
|
+
],
|
|
70
|
+
probe: (parsed) => `wget -q -T 10 -O /dev/null ${internalUrl(parsed)}/-/health/ready/`,
|
|
71
|
+
}, executor);
|
|
143
72
|
//# sourceMappingURL=authentik.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"authentik.js","sourceRoot":"","sources":["../../src/auth/authentik.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"authentik.js","sourceRoot":"","sources":["../../src/auth/authentik.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 createGarageBucketProvider: (executor?: SshExecutor) => Provider;
|
|
4
4
|
//# sourceMappingURL=garage-bucket.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"garage-bucket.d.ts","sourceRoot":"","sources":["../../src/backings/garage-bucket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"garage-bucket.d.ts","sourceRoot":"","sources":["../../src/backings/garage-bucket.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGjD,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,gBAAgB,CAAC;AA0C9D,eAAO,MAAM,0BAA0B,cAAc,WAAW,KAAiB,QAyB5E,CAAC"}
|
|
@@ -1,15 +1,12 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
-
import {
|
|
3
|
-
import { parseInputs, sshSchema, sshTarget } from "../core/inputs.js";
|
|
2
|
+
import { bindingSchema, createInstanceBindingProvider } from "../core/instance-binding.js";
|
|
4
3
|
import { sshExecutor } from "../core/ssh.js";
|
|
5
4
|
const BIN = "/garage";
|
|
6
|
-
const bucketSchema =
|
|
7
|
-
instance: z.string(),
|
|
5
|
+
const bucketSchema = bindingSchema.extend({
|
|
8
6
|
endpoint: z.string(),
|
|
9
7
|
bucket: z.string(),
|
|
10
8
|
keyName: z.string(),
|
|
11
9
|
});
|
|
12
|
-
const parse = (inputs) => parseInputs(bucketSchema, inputs, "garage-bucket");
|
|
13
10
|
const garage = async (session, cid, args) => {
|
|
14
11
|
const result = await session.exec(`docker exec ${cid} ${BIN} ${args}`);
|
|
15
12
|
if (result.code !== 0) {
|
|
@@ -28,65 +25,23 @@ const outputsFor = (parsed, key) => ({
|
|
|
28
25
|
secretKey: key.secretKey,
|
|
29
26
|
bucket: parsed.bucket,
|
|
30
27
|
});
|
|
31
|
-
export const createGarageBucketProvider = (executor = sshExecutor) => ({
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
catch (error) {
|
|
39
|
-
ctx.log(`garage-bucket "${ctx.id}": host not reachable over SSH, treating as not-yet-created: ${String(error)}`);
|
|
40
|
-
return undefined;
|
|
41
|
-
}
|
|
42
|
-
try {
|
|
43
|
-
const cid = await containerId(session, parsed.instance);
|
|
44
|
-
if (cid === "") {
|
|
45
|
-
return undefined;
|
|
46
|
-
}
|
|
47
|
-
const info = await session.exec(`docker exec ${cid} ${BIN} bucket info ${parsed.bucket}`);
|
|
48
|
-
if (info.code !== 0) {
|
|
49
|
-
return undefined;
|
|
50
|
-
}
|
|
51
|
-
return { outputs: outputsFor(parsed, await readKey(session, cid, parsed.keyName)) };
|
|
52
|
-
}
|
|
53
|
-
finally {
|
|
54
|
-
await session.dispose();
|
|
55
|
-
}
|
|
28
|
+
export const createGarageBucketProvider = (executor = sshExecutor) => createInstanceBindingProvider({
|
|
29
|
+
kind: "garage-bucket",
|
|
30
|
+
schema: bucketSchema,
|
|
31
|
+
pendingRefs: ["endpoint"],
|
|
32
|
+
present: async (session, cid, parsed) => {
|
|
33
|
+
const info = await session.exec(`docker exec ${cid} ${BIN} bucket info ${parsed.bucket}`);
|
|
34
|
+
return info.code === 0 ? outputsFor(parsed, await readKey(session, cid, parsed.keyName)) : undefined;
|
|
56
35
|
},
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
const cid = await containerId(session, parsed.instance);
|
|
63
|
-
if (cid === "") {
|
|
64
|
-
throw new Error(`garage-bucket "${ctx.id}": instance "${parsed.instance}" is not running`);
|
|
65
|
-
}
|
|
66
|
-
await session.exec(`docker exec ${cid} ${BIN} bucket create ${parsed.bucket} 2>/dev/null || true`);
|
|
67
|
-
await session.exec(`docker exec ${cid} ${BIN} key create ${parsed.keyName} 2>/dev/null || true`);
|
|
68
|
-
await garage(session, cid, `bucket allow --read --write ${parsed.bucket} --key ${parsed.keyName}`);
|
|
69
|
-
return outputsFor(parsed, await readKey(session, cid, parsed.keyName));
|
|
70
|
-
}
|
|
71
|
-
finally {
|
|
72
|
-
await session.dispose();
|
|
73
|
-
}
|
|
36
|
+
create: async (session, cid, parsed) => {
|
|
37
|
+
await session.exec(`docker exec ${cid} ${BIN} bucket create ${parsed.bucket} 2>/dev/null || true`);
|
|
38
|
+
await session.exec(`docker exec ${cid} ${BIN} key create ${parsed.keyName} 2>/dev/null || true`);
|
|
39
|
+
await garage(session, cid, `bucket allow --read --write ${parsed.bucket} --key ${parsed.keyName}`);
|
|
40
|
+
return outputsFor(parsed, await readKey(session, cid, parsed.keyName));
|
|
74
41
|
},
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
try {
|
|
79
|
-
const cid = await containerId(session, parsed.instance);
|
|
80
|
-
if (cid === "") {
|
|
81
|
-
ctx.log(`garage-bucket "${ctx.id}": instance "${parsed.instance}" already gone; nothing to drop`);
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
await session.exec(`docker exec ${cid} ${BIN} bucket delete --yes ${parsed.bucket} 2>/dev/null || true`);
|
|
85
|
-
await session.exec(`docker exec ${cid} ${BIN} key delete --yes ${parsed.keyName} 2>/dev/null || true`);
|
|
86
|
-
}
|
|
87
|
-
finally {
|
|
88
|
-
await session.dispose();
|
|
89
|
-
}
|
|
42
|
+
drop: async (session, cid, parsed) => {
|
|
43
|
+
await session.exec(`docker exec ${cid} ${BIN} bucket delete --yes ${parsed.bucket} 2>/dev/null || true`);
|
|
44
|
+
await session.exec(`docker exec ${cid} ${BIN} key delete --yes ${parsed.keyName} 2>/dev/null || true`);
|
|
90
45
|
},
|
|
91
|
-
});
|
|
46
|
+
}, executor);
|
|
92
47
|
//# sourceMappingURL=garage-bucket.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"garage-bucket.js","sourceRoot":"","sources":["../../src/backings/garage-bucket.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"garage-bucket.js","sourceRoot":"","sources":["../../src/backings/garage-bucket.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 createGarageProvider: (executor?: SshExecutor) => Provider;
|
|
4
4
|
//# sourceMappingURL=garage.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"garage.d.ts","sourceRoot":"","sources":["../../src/backings/garage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"garage.d.ts","sourceRoot":"","sources":["../../src/backings/garage.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAIjD,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,gBAAgB,CAAC;AAsE9D,eAAO,MAAM,oBAAoB,cAAc,WAAW,KAAiB,QAoBtE,CAAC"}
|
package/dist/backings/garage.js
CHANGED
|
@@ -1,27 +1,15 @@
|
|
|
1
|
-
import { HASH_KEY } from "@intentic/graph";
|
|
2
1
|
import { z } from "zod";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { listStampedContainers } from "../core/list-stamped.js";
|
|
2
|
+
import { backingSchema, createBackingProvider } from "../core/backing-provider.js";
|
|
3
|
+
import { containerId, execProbe, stampLabels } from "../core/backing-ssh.js";
|
|
6
4
|
import { sshExecutor } from "../core/ssh.js";
|
|
7
5
|
const KIND = "garage";
|
|
8
|
-
const READY_TIMEOUT_MS = 120_000;
|
|
9
6
|
const BIN = "/garage";
|
|
10
|
-
const garageSchema =
|
|
11
|
-
internalIp: z.string(),
|
|
12
|
-
publishPort: z.number(),
|
|
7
|
+
const garageSchema = backingSchema.extend({
|
|
13
8
|
region: z.string(),
|
|
14
|
-
image: z.string(),
|
|
15
9
|
domain: z.string().optional(),
|
|
16
|
-
protect: z.boolean().default(false),
|
|
17
10
|
});
|
|
18
|
-
const parse = (inputs) => parseInputs(garageSchema, inputs, KIND);
|
|
19
11
|
const internalEndpoint = (parsed) => `http://${parsed.internalIp}:${parsed.publishPort}`;
|
|
20
|
-
const
|
|
21
|
-
internalEndpoint: internalEndpoint(parsed),
|
|
22
|
-
endpoint: parsed.domain !== undefined ? `https://${parsed.domain}` : internalEndpoint(parsed),
|
|
23
|
-
});
|
|
24
|
-
const composeYaml = (id, hash, parsed) => [
|
|
12
|
+
const composeYaml = (parsed, id, hash) => [
|
|
25
13
|
"services:",
|
|
26
14
|
" garage:",
|
|
27
15
|
` image: ${parsed.image}`,
|
|
@@ -32,7 +20,7 @@ const composeYaml = (id, hash, parsed) => [
|
|
|
32
20
|
" - ./garage.toml:/etc/garage.toml:ro",
|
|
33
21
|
" - ./rpc_secret:/etc/garage/rpc_secret:ro",
|
|
34
22
|
` ports: [ "${parsed.publishPort}:3900" ]`,
|
|
35
|
-
|
|
23
|
+
stampLabels(KIND, id, hash, parsed.protect),
|
|
36
24
|
"volumes: { meta: {}, data: {} }",
|
|
37
25
|
"",
|
|
38
26
|
].join("\n");
|
|
@@ -48,15 +36,6 @@ const garageToml = (parsed) => [
|
|
|
48
36
|
'api_bind_addr = "[::]:3900"',
|
|
49
37
|
"",
|
|
50
38
|
].join("\n");
|
|
51
|
-
const ensureFiles = async (session, id, hash, parsed) => {
|
|
52
|
-
const dir = stateDir(KIND, id);
|
|
53
|
-
await session.exec(`mkdir -p ${dir}`);
|
|
54
|
-
await session.exec(`cat > ${dir}/compose.yaml <<'COMPOSE_EOF'\n${composeYaml(id, hash, parsed)}COMPOSE_EOF`);
|
|
55
|
-
await session.exec(`cat > ${dir}/garage.toml <<'GARAGE_EOF'\n${garageToml(parsed)}GARAGE_EOF`);
|
|
56
|
-
await session.exec(`test -f ${dir}/.env || printf 'TZ=Etc/UTC\\n' > ${dir}/.env`);
|
|
57
|
-
await session.exec(`test -f ${dir}/rpc_secret || { openssl rand -hex 32 > ${dir}/rpc_secret && chmod 600 ${dir}/rpc_secret; }`);
|
|
58
|
-
};
|
|
59
|
-
const readyProbe = (id) => `cid=$(docker ps -q --filter "label=intentic.id=${id}"); [ -n "$cid" ] && docker exec "$cid" ${BIN} status`;
|
|
60
39
|
const ensureLayout = async (session, id) => {
|
|
61
40
|
const cid = await containerId(session, id);
|
|
62
41
|
const nodeId = (await session.exec(`docker exec ${cid} ${BIN} node id -q`)).stdout.trim().split("@")[0] ?? "";
|
|
@@ -70,66 +49,19 @@ const ensureLayout = async (session, id) => {
|
|
|
70
49
|
await session.exec(`docker exec ${cid} ${BIN} layout assign -z dc1 -c 1G ${nodeId}`);
|
|
71
50
|
await session.exec(`docker exec ${cid} ${BIN} layout apply --version 1`);
|
|
72
51
|
};
|
|
73
|
-
export const createGarageProvider = (executor = sshExecutor) => ({
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
ctx.log(`garage "${ctx.id}": host not reachable over SSH, treating as not-yet-created: ${String(error)}`);
|
|
85
|
-
return undefined;
|
|
86
|
-
}
|
|
87
|
-
try {
|
|
88
|
-
const probe = await session.exec(readyProbe(ctx.id));
|
|
89
|
-
if (probe.code !== 0) {
|
|
90
|
-
return undefined;
|
|
91
|
-
}
|
|
92
|
-
const stampHash = await containerLabel(session, ctx.id, HASH_KEY);
|
|
93
|
-
return {
|
|
94
|
-
outputs: outputsFor(parsed),
|
|
95
|
-
detail: { image: await containerImage(session, ctx.id) },
|
|
96
|
-
...(stampHash === "" ? {} : { stampHash }),
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
finally {
|
|
100
|
-
await session.dispose();
|
|
101
|
-
}
|
|
102
|
-
},
|
|
103
|
-
diff: (inputs, observed) => {
|
|
104
|
-
const parsed = parse(inputs);
|
|
105
|
-
const image = (observed.detail?.["image"] ?? "");
|
|
106
|
-
return image === parsed.image
|
|
107
|
-
? { action: "noop" }
|
|
108
|
-
: { action: "update", reason: `garage image differs (running ${image}, want ${parsed.image})` };
|
|
52
|
+
export const createGarageProvider = (executor = sshExecutor) => createBackingProvider({
|
|
53
|
+
kind: KIND,
|
|
54
|
+
schema: garageSchema,
|
|
55
|
+
readyTimeoutMs: 120_000,
|
|
56
|
+
outputs: (parsed) => ({
|
|
57
|
+
internalEndpoint: internalEndpoint(parsed),
|
|
58
|
+
endpoint: parsed.domain !== undefined ? `https://${parsed.domain}` : internalEndpoint(parsed),
|
|
59
|
+
}),
|
|
60
|
+
files: (parsed, id, hash) => ({ "compose.yaml": composeYaml(parsed, id, hash), "garage.toml": garageToml(parsed) }),
|
|
61
|
+
prepare: async (session, _parsed, dir) => {
|
|
62
|
+
await session.exec(`test -f ${dir}/rpc_secret || { openssl rand -hex 32 > ${dir}/rpc_secret && chmod 600 ${dir}/rpc_secret; }`);
|
|
109
63
|
},
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
try {
|
|
114
|
-
await ensureFiles(session, ctx.id, ctx.inputsHash ?? "", parsed);
|
|
115
|
-
await composeUp(session, KIND, ctx.id);
|
|
116
|
-
await waitReady(session, KIND, ctx.id, readyProbe(ctx.id), READY_TIMEOUT_MS);
|
|
117
|
-
await ensureLayout(session, ctx.id);
|
|
118
|
-
return outputsFor(parsed);
|
|
119
|
-
}
|
|
120
|
-
finally {
|
|
121
|
-
await session.dispose();
|
|
122
|
-
}
|
|
123
|
-
},
|
|
124
|
-
delete: async (inputs, ctx) => {
|
|
125
|
-
const session = await executor.connect(sshTarget(parseInputs(sshSchema, inputs, KIND)));
|
|
126
|
-
try {
|
|
127
|
-
await composeDown(session, KIND, ctx.id);
|
|
128
|
-
}
|
|
129
|
-
finally {
|
|
130
|
-
await session.dispose();
|
|
131
|
-
}
|
|
132
|
-
},
|
|
133
|
-
list: (sources, ctx) => listStampedContainers(executor, KIND, sources, ctx.log),
|
|
134
|
-
});
|
|
64
|
+
probe: (_parsed, id) => execProbe(id, `${BIN} status`),
|
|
65
|
+
ready: (session, _parsed, id) => ensureLayout(session, id),
|
|
66
|
+
}, executor);
|
|
135
67
|
//# sourceMappingURL=garage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"garage.js","sourceRoot":"","sources":["../../src/backings/garage.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"garage.js","sourceRoot":"","sources":["../../src/backings/garage.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 createPostgresDatabaseProvider: (executor?: SshExecutor) => Provider;
|
|
4
4
|
//# sourceMappingURL=postgres-database.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"postgres-database.d.ts","sourceRoot":"","sources":["../../src/backings/postgres-database.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"postgres-database.d.ts","sourceRoot":"","sources":["../../src/backings/postgres-database.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAIjD,OAAO,KAAK,EAAE,WAAW,EAAc,MAAM,gBAAgB,CAAC;AAqC9D,eAAO,MAAM,8BAA8B,cAAc,WAAW,KAAiB,QAwBhF,CAAC"}
|