@homeflare/alchemy 0.54.0 → 0.56.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/ceph/ceph-argv-config.d.ts +6 -3
- package/dist/ceph/ceph-argv-config.d.ts.map +1 -1
- package/dist/ceph/ceph-argv.d.ts +8 -0
- package/dist/ceph/ceph-argv.d.ts.map +1 -1
- package/dist/ceph/ceph-config-option-form.d.ts +48 -0
- package/dist/ceph/ceph-config-option-form.d.ts.map +1 -0
- package/dist/ceph/ceph-config-option-reconcile.d.ts +22 -0
- package/dist/ceph/ceph-config-option-reconcile.d.ts.map +1 -0
- package/dist/ceph/ceph-config-options.d.ts +15 -6
- package/dist/ceph/ceph-config-options.d.ts.map +1 -1
- package/dist/ceph/config-option.d.ts +10 -0
- package/dist/ceph/config-option.d.ts.map +1 -0
- package/dist/ceph/index.d.ts +7 -3
- package/dist/ceph/index.d.ts.map +1 -1
- package/dist/ceph/index.js +363 -8
- package/dist/ceph/index.js.map +17 -7
- package/dist/launchd/index.js +4 -2
- package/dist/launchd/index.js.map +3 -3
- package/dist/launchd/sudo-guard-mode.d.ts +10 -4
- package/dist/launchd/sudo-guard-mode.d.ts.map +1 -1
- package/dist/linux/fake-sudo-root.d.ts.map +1 -1
- package/dist/linux/fake-sudo.d.ts +9 -1
- package/dist/linux/fake-sudo.d.ts.map +1 -1
- package/dist/linux/index.js +47 -9
- package/dist/linux/index.js.map +6 -6
- package/dist/linux/sudo-guard.d.ts +10 -1
- package/dist/linux/sudo-guard.d.ts.map +1 -1
- package/dist/linux/sudo-runner.d.ts +15 -1
- package/dist/linux/sudo-runner.d.ts.map +1 -1
- package/dist/linux/sudo-write.d.ts +4 -1
- package/dist/linux/sudo-write.d.ts.map +1 -1
- package/dist/proxmox/index.d.ts +1 -0
- package/dist/proxmox/index.d.ts.map +1 -1
- package/dist/proxmox/index.js +101 -1
- package/dist/proxmox/index.js.map +5 -4
- package/dist/proxmox/scoped-api.d.ts +49 -0
- package/dist/proxmox/scoped-api.d.ts.map +1 -0
- package/docs/linux-sudo-review-2026-09-23.md +27 -0
- package/docs/linux-sudo.md +28 -40
- package/docs/pve-scoped-api.md +23 -0
- package/package.json +1 -1
- package/src/ceph/ceph-argv-config.ts +27 -19
- package/src/ceph/ceph-argv.test.ts +37 -1
- package/src/ceph/ceph-argv.ts +25 -0
- package/src/ceph/ceph-config-option-form.ts +73 -0
- package/src/ceph/ceph-config-option-reconcile.ts +88 -0
- package/src/ceph/ceph-config-option.test.ts +213 -0
- package/src/ceph/ceph-config-options.test.ts +28 -11
- package/src/ceph/ceph-config-options.ts +29 -8
- package/src/ceph/config-option.ts +112 -0
- package/src/ceph/index.ts +7 -3
- package/src/launchd/sudo-guard-mode.ts +11 -3
- package/src/linux/fake-sudo-root.ts +15 -0
- package/src/linux/fake-sudo.ts +20 -1
- package/src/linux/sudo-guard.ts +22 -1
- package/src/linux/sudo-runner-privileged-read.test.ts +200 -0
- package/src/linux/sudo-runner.ts +59 -4
- package/src/linux/sudo-write.ts +5 -1
- package/src/proxmox/index.ts +13 -0
- package/src/proxmox/scoped-api.test.ts +52 -0
- package/src/proxmox/scoped-api.ts +148 -0
- package/src/talos/talosctl.test.ts +6 -4
|
@@ -31,6 +31,15 @@ export declare const assertGuardedChain: (base: HostRunner, prefix: string, path
|
|
|
31
31
|
* The mode/owner and read-back checks for a file write under `prefix`, plus the path chain.
|
|
32
32
|
* ★ Reads only, as the operator — the same checks run at plan time (`checkWrite`) and before the
|
|
33
33
|
* install/mv pair. `expect` is `'file-or-absent'`: a write may create or replace.
|
|
34
|
+
* ★ `privilegedReads` is the runner's exact-path elevated-read set (sudo-runner.ts): a file on it
|
|
35
|
+
* is read back through `sudo -n base64`, so it cannot be stranded by its own mode — every
|
|
36
|
+
* other refusal below applies to it unchanged.
|
|
37
|
+
* ⛔ A LISTED FILE MAY NEVER BE HANDED TO A NON-ROOT UID, whatever its mode: its read back is
|
|
38
|
+
* the elevated one, which refuses anything but a root-owned regular file, so a handoff with
|
|
39
|
+
* operator-readable other bits (0644 uid 1001) would sail through the plain read-back check,
|
|
40
|
+
* land, and die at EVERY later read — the stranding this guard exists to prevent (glm seat
|
|
41
|
+
* round, 2026-10-18). Refused up front instead. An omitted owner is root under a prefix, so
|
|
42
|
+
* plain root writes are untouched.
|
|
34
43
|
*/
|
|
35
|
-
export declare const assertInstallable: (base: HostRunner, prefix: string, path: string, options: WriteOptions, groups: readonly number[] | undefined) => Promise<void>;
|
|
44
|
+
export declare const assertInstallable: (base: HostRunner, prefix: string, path: string, options: WriteOptions, groups: readonly number[] | undefined, privilegedReads?: ReadonlySet<string>) => Promise<void>;
|
|
36
45
|
//# sourceMappingURL=sudo-guard.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sudo-guard.d.ts","sourceRoot":"","sources":["../../src/linux/sudo-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,WAAW,EACX,OAAO,EACP,WAAW,EACX,cAAc,EACf,MAAM,0BAA0B,CAAC;AAIlC,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC;AAgB5F,2EAA2E;AAC3E,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,gBAAgB,GAAG,WAAW,GAAG,QAAQ,CAAC;AAmB7E;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,SACvB,UAAU,UACR,MAAM,QACR,MAAM,UACJ,WAAW,KAClB,OAAO,CAAC,QAAQ,GAAG,SAAS,CAyC9B,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"sudo-guard.d.ts","sourceRoot":"","sources":["../../src/linux/sudo-guard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EACL,SAAS,EACT,kBAAkB,EAClB,WAAW,EACX,OAAO,EACP,WAAW,EACX,cAAc,EACf,MAAM,0BAA0B,CAAC;AAIlC,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,CAAC;AAgB5F,2EAA2E;AAC3E,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,gBAAgB,GAAG,WAAW,GAAG,QAAQ,CAAC;AAmB7E;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,SACvB,UAAU,UACR,MAAM,QACR,MAAM,UACJ,WAAW,KAClB,OAAO,CAAC,QAAQ,GAAG,SAAS,CAyC9B,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,iBAAiB,SACtB,UAAU,UACR,MAAM,QACR,MAAM,WACH,YAAY,UACb,SAAS,MAAM,EAAE,GAAG,SAAS,oBACnB,WAAW,CAAC,MAAM,CAAC,KACpC,OAAO,CAAC,IAAI,CAsBd,CAAC"}
|
|
@@ -8,7 +8,9 @@
|
|
|
8
8
|
* is the "no silent sudo" failure this exists to prevent.
|
|
9
9
|
* ⛔ EVERY PRIVILEGED ARGV IS LOGGED BEFORE IT RUNS, and a file's bytes never reach argv or the
|
|
10
10
|
* log: they travel through the staged file (sudo-stage.ts) alone.
|
|
11
|
-
* ⛔ A PLAN
|
|
11
|
+
* ⛔ A PLAN ELEVATES EXACTLY ONE KIND OF CALL: the `privilegedReads` file's own read (below) —
|
|
12
|
+
* the read a plan diff needs on a declared root-owned file. Every other read, and every
|
|
13
|
+
* `checkWrite` host probe (`id -G`, `ls`, `stat`), runs through `base` — the plain
|
|
12
14
|
* `sshRunner()` — never through sudo. Nothing here probes sudo at construction.
|
|
13
15
|
* ★ PROMISES, NOT EFFECTS, ON PURPOSE — the same divergence `../launchd/runner.ts` documents
|
|
14
16
|
* (H3 in the provider-standard skill): a consumer's own runner is a plain async implementation.
|
|
@@ -23,6 +25,14 @@ export type SshSudoRunnerOptions = SshRunnerOptions & {
|
|
|
23
25
|
readonly prefixes: readonly string[];
|
|
24
26
|
/** One line per privileged argv, before it runs. @default a line on stderr */
|
|
25
27
|
readonly log?: (line: string) => void;
|
|
28
|
+
/**
|
|
29
|
+
* ★ Exact absolute paths of root-owned files the operator cannot read but a plan must diff
|
|
30
|
+
* (a declared 0600 file). Each is read with `sudo -n -- /usr/bin/base64 -- <path>`, and ONLY
|
|
31
|
+
* when it is the exact string listed here, a regular file (lstat: never a symlink) and owned
|
|
32
|
+
* by uid 0. ⛔ Not a prefix and not a pattern: a general sudo read would be a root-read
|
|
33
|
+
* primitive reaching every credential on the host, so each file is named one by one.
|
|
34
|
+
*/
|
|
35
|
+
readonly privilegedReads?: readonly string[];
|
|
26
36
|
};
|
|
27
37
|
/** What a sudo runner is built from. ★ Split out so the tests swap the host, never the logic. */
|
|
28
38
|
export type SshSudoDeps = {
|
|
@@ -30,7 +40,11 @@ export type SshSudoDeps = {
|
|
|
30
40
|
readonly base: HostRunner;
|
|
31
41
|
readonly stage: (bytes: Uint8Array) => Promise<Staged>;
|
|
32
42
|
readonly log: (line: string) => void;
|
|
43
|
+
readonly privilegedReads?: readonly string[];
|
|
33
44
|
};
|
|
45
|
+
export declare const BASE64 = "/usr/bin/base64";
|
|
46
|
+
/** Refuses anything but a normalized absolute path: no `.`/`..` segment, no `//`, no trailing `/`. */
|
|
47
|
+
export declare const checkPrivilegedReads: (paths?: readonly string[]) => ReadonlySet<string>;
|
|
34
48
|
export declare const makeSshSudoRunner: (prefixList: readonly string[], deps: SshSudoDeps) => HostRunner;
|
|
35
49
|
/** The real sudo runner: `sshRunner()` for everything, `/usr/bin/sudo -n` for the allowlist. */
|
|
36
50
|
export declare const sshSudoRunner: (options: SshSudoRunnerOptions) => Promise<HostRunner>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sudo-runner.d.ts","sourceRoot":"","sources":["../../src/linux/sudo-runner.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"sudo-runner.d.ts","sourceRoot":"","sources":["../../src/linux/sudo-runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AACH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,OAAO,EAAE,KAAK,gBAAgB,EAAa,MAAM,iBAAiB,CAAC;AAEnE,OAAO,EAUL,gBAAgB,EAKjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,KAAK,MAAM,EAAe,MAAM,iBAAiB,CAAC;AAG3D,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAE5B,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG;IACpD,mFAAmF;IACnF,QAAQ,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IACrC,8EAA8E;IAC9E,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACtC;;;;;;OAMG;IACH,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C,CAAC;AAEF,iGAAiG;AACjG,MAAM,MAAM,WAAW,GAAG;IACxB,6FAA6F;IAC7F,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IACvD,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC9C,CAAC;AAEF,eAAO,MAAM,MAAM,oBAAoB,CAAC;AAExC,sGAAsG;AACtG,eAAO,MAAM,oBAAoB,WAAW,SAAS,MAAM,EAAE,KAAQ,WAAW,CAAC,MAAM,CActF,CAAC;AAkBF,eAAO,MAAM,iBAAiB,eAAgB,SAAS,MAAM,EAAE,QAAQ,WAAW,KAAG,UAmFpF,CAAC;AAsBF,gGAAgG;AAChG,eAAO,MAAM,aAAa,YAAmB,oBAAoB,KAAG,OAAO,CAAC,UAAU,CAarF,CAAC"}
|
|
@@ -11,8 +11,11 @@ export type Elevate = (argv: readonly string[], context?: {
|
|
|
11
11
|
* Plan-time and write-time share this: valid mode, the path chain, mode/owner refusals and the
|
|
12
12
|
* read-back — everything a write can be refused for before anything is staged or run as root.
|
|
13
13
|
* `undefined` outside every prefix, where the caller falls back to `base` directly.
|
|
14
|
+
* ★ `privilegedReads` is the runner's exact-path elevated-read set: a file on it is read back as
|
|
15
|
+
* root (sudo-runner.ts's readFile), so the read-back refusal does not apply to it — the other
|
|
16
|
+
* checks in assertInstallable still do.
|
|
14
17
|
*/
|
|
15
|
-
export declare const vetWrite: (base: HostRunner, prefixes: readonly string[], path: string, options: WriteOptions) => Promise<{
|
|
18
|
+
export declare const vetWrite: (base: HostRunner, prefixes: readonly string[], path: string, options: WriteOptions, privilegedReads?: ReadonlySet<string>) => Promise<{
|
|
16
19
|
readonly mode: string;
|
|
17
20
|
readonly prefix: string;
|
|
18
21
|
} | undefined>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sudo-write.d.ts","sourceRoot":"","sources":["../../src/linux/sudo-write.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGjF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAK9C,4FAA4F;AAC5F,eAAO,MAAM,UAAU,SAAU,MAAM,KAAG,MACoC,CAAC;AAgC/E,oGAAoG;AACpG,MAAM,MAAM,OAAO,GAAG,CACpB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EAC9D,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,KAC5B,OAAO,CAAC,UAAU,CAAC,CAAC;AAEzB
|
|
1
|
+
{"version":3,"file":"sudo-write.d.ts","sourceRoot":"","sources":["../../src/linux/sudo-write.ts"],"names":[],"mappings":"AAsBA,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAGjF,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAK9C,4FAA4F;AAC5F,eAAO,MAAM,UAAU,SAAU,MAAM,KAAG,MACoC,CAAC;AAgC/E,oGAAoG;AACpG,MAAM,MAAM,OAAO,GAAG,CACpB,IAAI,EAAE,SAAS,MAAM,EAAE,EACvB,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,EAC9D,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,KAC5B,OAAO,CAAC,UAAU,CAAC,CAAC;AAEzB;;;;;;;GAOG;AACH,eAAO,MAAM,QAAQ,SACb,UAAU,YACN,SAAS,MAAM,EAAE,QACrB,MAAM,WACH,YAAY,oBACH,WAAW,CAAC,MAAM,CAAC,KACpC,OAAO,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CASxE,CAAC;AAsBF;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,SACrB,UAAU,WACP,OAAO,SACT,CAAC,KAAK,EAAE,UAAU,KAAK,OAAO,CAAC,MAAM,CAAC,QACvC,MAAM,SACL,UAAU,WACR,YAAY,QACf,MAAM,KACX,OAAO,CAAC,IAAI,CAyCd,CAAC"}
|
package/dist/proxmox/index.d.ts
CHANGED
|
@@ -97,4 +97,5 @@ export { ProxmoxStorage, ProxmoxStorageProvider } from './storage.ts';
|
|
|
97
97
|
export { ProxmoxUser, ProxmoxUserProvider } from './user.ts';
|
|
98
98
|
export { type FromEnv } from '../secrets/write-only.ts';
|
|
99
99
|
export { ProxmoxZfsPool, ProxmoxZfsPoolProvider } from './zfs-pool.ts';
|
|
100
|
+
export { CEPH_FLAGS, CT_CONFIG_KEYS, type CephFlag, type CtConfigPatch, type ScopedCall, type ScopedTier, pveScoped, scopedCalls, scopedTarget, } from './scoped-api.ts';
|
|
100
101
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/proxmox/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/proxmox/index.ts"],"names":[],"mappings":"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"}
|
package/dist/proxmox/index.js
CHANGED
|
@@ -7383,7 +7383,104 @@ var ProxmoxZfsPoolProvider = () => Provider36.effect(ProxmoxZfsPool, Effect103.s
|
|
|
7383
7383
|
yield* destroyPool(olds);
|
|
7384
7384
|
})
|
|
7385
7385
|
})));
|
|
7386
|
+
// src/proxmox/scoped-api.ts
|
|
7387
|
+
var scopedTarget = (target, tier) => ({
|
|
7388
|
+
...target,
|
|
7389
|
+
roles: { read: tier, provision: tier }
|
|
7390
|
+
});
|
|
7391
|
+
var NODE = /^[a-z0-9][a-z0-9-]{0,62}$/;
|
|
7392
|
+
var need = (ok, what) => {
|
|
7393
|
+
if (!ok)
|
|
7394
|
+
throw new Error(`pveScoped: invalid ${what}`);
|
|
7395
|
+
};
|
|
7396
|
+
var node = (n) => (need(NODE.test(n), "node name"), n);
|
|
7397
|
+
var vmid = (v) => (need(Number.isInteger(v) && v >= 100 && v <= 999999999, "vmid"), String(v));
|
|
7398
|
+
var osd = (o) => (need(Number.isInteger(o) && o >= 0 && o < 1e5, "osd id"), String(o));
|
|
7399
|
+
var CEPH_FLAGS = [
|
|
7400
|
+
"noout",
|
|
7401
|
+
"norebalance",
|
|
7402
|
+
"norecover",
|
|
7403
|
+
"nobackfill",
|
|
7404
|
+
"noscrub",
|
|
7405
|
+
"nodeep-scrub"
|
|
7406
|
+
];
|
|
7407
|
+
var CT_CONFIG_KEYS = [
|
|
7408
|
+
"cores",
|
|
7409
|
+
"cpulimit",
|
|
7410
|
+
"memory",
|
|
7411
|
+
"swap",
|
|
7412
|
+
"onboot",
|
|
7413
|
+
"description",
|
|
7414
|
+
"tags"
|
|
7415
|
+
];
|
|
7416
|
+
var scopedCalls = {
|
|
7417
|
+
cephStatus: () => ({
|
|
7418
|
+
tier: "ceph-ops",
|
|
7419
|
+
role: "read",
|
|
7420
|
+
method: "GET",
|
|
7421
|
+
path: "/cluster/ceph/status"
|
|
7422
|
+
}),
|
|
7423
|
+
cephFlags: () => ({
|
|
7424
|
+
tier: "ceph-ops",
|
|
7425
|
+
role: "read",
|
|
7426
|
+
method: "GET",
|
|
7427
|
+
path: "/cluster/ceph/flags"
|
|
7428
|
+
}),
|
|
7429
|
+
cephSetFlag: (flag2, on) => {
|
|
7430
|
+
need(CEPH_FLAGS.includes(flag2), "ceph flag");
|
|
7431
|
+
return {
|
|
7432
|
+
tier: "ceph-ops",
|
|
7433
|
+
role: "provision",
|
|
7434
|
+
method: "PUT",
|
|
7435
|
+
path: `/cluster/ceph/flags/${flag2}`,
|
|
7436
|
+
form: { value: on ? "1" : "0" }
|
|
7437
|
+
};
|
|
7438
|
+
},
|
|
7439
|
+
cephOsd: (n, id, to) => {
|
|
7440
|
+
need(to === "in" || to === "out", "osd direction");
|
|
7441
|
+
return {
|
|
7442
|
+
tier: "ceph-ops",
|
|
7443
|
+
role: "provision",
|
|
7444
|
+
method: "POST",
|
|
7445
|
+
path: `/nodes/${node(n)}/ceph/osd/${osd(id)}/${to}`
|
|
7446
|
+
};
|
|
7447
|
+
},
|
|
7448
|
+
ctConfig: (n, id) => ({
|
|
7449
|
+
tier: "ct-config",
|
|
7450
|
+
role: "read",
|
|
7451
|
+
method: "GET",
|
|
7452
|
+
path: `/nodes/${node(n)}/lxc/${vmid(id)}/config`
|
|
7453
|
+
}),
|
|
7454
|
+
ctSetConfig: (n, id, patch) => {
|
|
7455
|
+
const keys = Object.keys(patch);
|
|
7456
|
+
need(keys.length > 0, "empty config patch");
|
|
7457
|
+
for (const k of keys)
|
|
7458
|
+
need(CT_CONFIG_KEYS.includes(k), `config key ${k}`);
|
|
7459
|
+
const form2 = {};
|
|
7460
|
+
for (const [k, v] of Object.entries(patch))
|
|
7461
|
+
form2[k] = typeof v === "boolean" ? v ? "1" : "0" : String(v);
|
|
7462
|
+
return {
|
|
7463
|
+
tier: "ct-config",
|
|
7464
|
+
role: "provision",
|
|
7465
|
+
method: "PUT",
|
|
7466
|
+
path: `/nodes/${node(n)}/lxc/${vmid(id)}/config`,
|
|
7467
|
+
form: form2
|
|
7468
|
+
};
|
|
7469
|
+
},
|
|
7470
|
+
ctPower: (n, id, action) => {
|
|
7471
|
+
need(["start", "shutdown", "reboot"].includes(action), "power action");
|
|
7472
|
+
return {
|
|
7473
|
+
tier: "ct-config",
|
|
7474
|
+
role: "provision",
|
|
7475
|
+
method: "POST",
|
|
7476
|
+
path: `/nodes/${node(n)}/lxc/${vmid(id)}/status/${action}`
|
|
7477
|
+
};
|
|
7478
|
+
}
|
|
7479
|
+
};
|
|
7480
|
+
var pveScoped = (target, call) => pve(scopedTarget(target, call.tier), call.role, call.method, call.path, call.form);
|
|
7386
7481
|
export {
|
|
7482
|
+
CEPH_FLAGS,
|
|
7483
|
+
CT_CONFIG_KEYS,
|
|
7387
7484
|
PROVISION_DEFAULTS,
|
|
7388
7485
|
PROVISION_PRIVILEGES,
|
|
7389
7486
|
PbsDatastore,
|
|
@@ -7460,8 +7557,11 @@ export {
|
|
|
7460
7557
|
formViolations,
|
|
7461
7558
|
provisionBaseline,
|
|
7462
7559
|
provisionBootstrap,
|
|
7560
|
+
pveScoped,
|
|
7561
|
+
scopedCalls,
|
|
7562
|
+
scopedTarget,
|
|
7463
7563
|
violations
|
|
7464
7564
|
};
|
|
7465
7565
|
|
|
7466
|
-
//# debugId=
|
|
7566
|
+
//# debugId=5BBCD08A51EE945964756E2164756E21
|
|
7467
7567
|
//# sourceMappingURL=index.js.map
|