@intentius/chant-lexicon-k3s 0.56.0 → 0.58.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/integrity.json +2 -2
- package/dist/lint/audit-catalog.d.ts.map +1 -1
- package/dist/lint/audit-lineage.d.ts +10 -0
- package/dist/lint/audit-lineage.d.ts.map +1 -0
- package/dist/op/activities/index.d.ts +5 -4
- package/dist/op/activities/index.d.ts.map +1 -1
- package/dist/op/activities/k3s.d.ts +3 -3
- package/dist/op/activities/k3s.d.ts.map +1 -1
- package/dist/op/builders.d.ts +5 -3
- package/dist/op/builders.d.ts.map +1 -1
- package/dist/skills/chant-k3s.md +2 -1
- package/package.json +2 -2
- package/src/index.ts +2 -2
- package/src/lint/audit-catalog.ts +5 -0
- package/src/lint/audit-lineage.ts +14 -0
- package/src/op/activities/index.ts +5 -4
- package/src/op/activities/k3s.test.ts +6 -2
- package/src/op/activities/k3s.ts +9 -18
- package/src/op/builders.ts +5 -3
- package/src/skills/chant-k3s.md +2 -1
package/dist/integrity.json
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"manifest.json": "5208bf3cb7308fcf74bcfae5cd70e1e4c73b0b567e71ac0f593246f1d72eaef2",
|
|
5
5
|
"meta.json": "5988c37e9e93d52828d34fa043b0804fec7eb833153d387a9711333bcdff4bff",
|
|
6
6
|
"types/index.d.ts": "98f3f3175d38aa2979c57577512c554eafed49b9125967c8617c137c01358e26",
|
|
7
|
-
"skills/chant-k3s.md": "
|
|
7
|
+
"skills/chant-k3s.md": "5ea0ac56f5584913f7df3bbfa591522a470772854df58a1830ec280d44bbd77c"
|
|
8
8
|
},
|
|
9
|
-
"composite": "
|
|
9
|
+
"composite": "820d397809f6e20871fb7b8afc90f3a34a7112e7fcd530d45d01b24e41f31b77"
|
|
10
10
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"audit-catalog.d.ts","sourceRoot":"","sources":["../../src/lint/audit-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;
|
|
1
|
+
{"version":3,"file":"audit-catalog.d.ts","sourceRoot":"","sources":["../../src/lint/audit-catalog.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gCAAgC,CAAC;AAa/D,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CA2CpD,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prior art for these audit rules: the open-source tools whose checks cover the
|
|
3
|
+
* same condition, credited per rule. See packages/core/src/audit/prior-art.ts for
|
|
4
|
+
* the registry, the relation vocabulary, and why this is credit rather than
|
|
5
|
+
* authority. Kept by hand; the prior-art sweep (scripts/prior-art-sweep.ts) reports
|
|
6
|
+
* when a credited tool's index no longer lists a rule cited here.
|
|
7
|
+
*/
|
|
8
|
+
import type { Lineage } from "@intentius/chant/audit/catalog";
|
|
9
|
+
export declare const k3sAuditLineage: Record<string, Lineage[]>;
|
|
10
|
+
//# sourceMappingURL=audit-lineage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"audit-lineage.d.ts","sourceRoot":"","sources":["../../src/lint/audit-lineage.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAE9D,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,EAAE,CAIrD,CAAC"}
|
|
@@ -11,11 +11,12 @@
|
|
|
11
11
|
* as a value — only `tokenFile`, a path — see the token-boundary note on
|
|
12
12
|
* {@link k3sInstall} in ./k3s.
|
|
13
13
|
*
|
|
14
|
-
* The step builders (k3sInstall, k3sUninstall) live in core
|
|
15
|
-
*
|
|
14
|
+
* The step builders (k3sInstall, k3sUninstall) live in core and reach authors
|
|
15
|
+
* through `@intentius/chant/op` like k3dUp/k3dDown. The activities here are
|
|
16
16
|
* dependency-light — they shell out to the k3s installer/uninstall scripts and
|
|
17
|
-
* only pull in the lexicon's version pin, not its declarable surface — so
|
|
18
|
-
*
|
|
17
|
+
* only pull in the lexicon's version pin, not its declarable surface — so
|
|
18
|
+
* `loadActivities` (`packages/core/src/op/activity-registry.ts`), which imports
|
|
19
|
+
* this module at run time, pulls in nothing expensive.
|
|
19
20
|
*/
|
|
20
21
|
export { k3sInstall, k3sUninstall, k3sInstallCommand, k3sInstallEnv, k3sUninstallCommand, k3sUninstallScript, k3sVersionCommand, parseK3sVersion, } from "./k3s.js";
|
|
21
22
|
export type { K3sRole, K3sInstallArgs, K3sUninstallArgs, K3sInstallResult } from "./k3s.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/op/activities/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/op/activities/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EACL,UAAU,EACV,YAAY,EACZ,iBAAiB,EACjB,aAAa,EACb,mBAAmB,EACnB,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,GAChB,MAAM,OAAO,CAAC;AACf,YAAY,EAAE,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC"}
|
|
@@ -79,9 +79,9 @@ export declare function k3sUninstallCommand(args: K3sUninstallArgs): string;
|
|
|
79
79
|
/**
|
|
80
80
|
* Run the pinned k3s installer against a reachable host. Idempotent on an
|
|
81
81
|
* already-installed matching version: if `k3s --version` already reports the
|
|
82
|
-
* target version, the install is skipped. Uses longInfra profile
|
|
83
|
-
* timeout,
|
|
84
|
-
*
|
|
82
|
+
* target version, the install is skipped. Uses the longInfra profile: a 20m
|
|
83
|
+
* timeout, wide enough for the installer to download and start the k3s binary,
|
|
84
|
+
* and three attempts backing off from 30s.
|
|
85
85
|
*
|
|
86
86
|
* Bounded exactly as `k3dUp`/`k3dDown` were (chant#1410, epic #1598): this
|
|
87
87
|
* drives the case where the host is reachable from where the Op runs. It
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"k3s.d.ts","sourceRoot":"","sources":["../../../src/op/activities/k3s.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"k3s.d.ts","sourceRoot":"","sources":["../../../src/op/activities/k3s.ts"],"names":[],"mappings":"AAMA,8EAA8E;AAC9E,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEzC,MAAM,WAAW,cAAc;IAC7B,kFAAkF;IAClF,IAAI,EAAE,OAAO,CAAC;IACd;;;;;OAKG;IACH,UAAU,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,yEAAyE;IACzE,IAAI,EAAE,OAAO,CAAC;CACf;AAED,wCAAwC;AACxC,MAAM,WAAW,gBAAgB;IAC/B,wGAAwG;IACxG,OAAO,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,SAAS,EAAE,OAAO,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAElE;AAED,iFAAiF;AACjF,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAE9D;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAI1E;AAED,gEAAgE;AAChE,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAExD;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAGlE;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,UAAU,CAC9B,IAAI,EAAE,cAAc,EACpB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,gBAAgB,CAAC,CAyB3B;AAED;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,IAAI,EAAE,gBAAgB,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAI9F"}
|
package/dist/op/builders.d.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Typed step-builder wrappers for this lexicon's activities (chant #1288
|
|
3
3
|
* Stage 2). See `lexicons/k8s/src/op/builders.ts`'s module doc for why these
|
|
4
|
-
* live beside their `*Args` interfaces rather than in core
|
|
5
|
-
*
|
|
6
|
-
* interface
|
|
4
|
+
* live beside their `*Args` interfaces rather than in core: core cannot
|
|
5
|
+
* import a lexicon's types, so a wrapper whose `opts` IS the activity's own
|
|
6
|
+
* `*Args` interface can only sit in the lexicon that declares that
|
|
7
|
+
* interface. `opts`'s type in each wrapper below IS the activity's own
|
|
8
|
+
* `*Args` interface (via `Omit`/`WithStepRefs`) — never restated. `core`'s own
|
|
7
9
|
* `k3sInstall`/`k3sUninstall` are unchanged and produce byte-identical
|
|
8
10
|
* `ActivityStep` output; these are purely additive.
|
|
9
11
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"builders.d.ts","sourceRoot":"","sources":["../../src/op/builders.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"builders.d.ts","sourceRoot":"","sources":["../../src/op/builders.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAGL,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,YAAY,EAClB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAElF,kFAAkF;AAClF,KAAK,QAAQ,GAAG;IAAE,OAAO,CAAC,EAAE,YAAY,CAAC,SAAS,CAAC,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE;;;;;GAKG;AACH,eAAO,MAAM,UAAU,GACrB,MAAM,OAAO,EACb,MAAM,YAAY,CAAC,IAAI,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC,GAAG,QAAQ,KAC1D,iBAGF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,GACvB,MAAM,OAAO,EACb,OAAO,YAAY,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC,GAAG,QAAQ,KAC7D,iBAGF,CAAC"}
|
package/dist/skills/chant-k3s.md
CHANGED
|
@@ -78,7 +78,8 @@ host the Op runs on or can reach directly — the same boundary `k3dUp`/
|
|
|
78
78
|
Requires `"k3s"` in the project's `chant.config.ts` `lexicons`.
|
|
79
79
|
|
|
80
80
|
```typescript
|
|
81
|
-
import { Op, phase
|
|
81
|
+
import { Op, phase } from "@intentius/chant/op";
|
|
82
|
+
import { k3sInstall, k3sUninstall } from "@intentius/chant-lexicon-k3s";
|
|
82
83
|
|
|
83
84
|
export default Op({
|
|
84
85
|
name: "k3s-controlplane",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intentius/chant-lexicon-k3s",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.58.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"files": [
|
|
6
6
|
"src/",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"access": "public"
|
|
51
51
|
},
|
|
52
52
|
"peerDependencies": {
|
|
53
|
-
"@intentius/chant": "^0.
|
|
53
|
+
"@intentius/chant": "^0.58.0",
|
|
54
54
|
"typescript": "^5.9.3"
|
|
55
55
|
},
|
|
56
56
|
"description": "k3s lexicon for chant — the k3s distro's host configuration as declarable data",
|
package/src/index.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// Typed Op step-builder wrappers (chant #1288 Stage 2) — k3sInstall/
|
|
2
2
|
// k3sUninstall with authoring-time types derived from this lexicon's own
|
|
3
3
|
// *Args interfaces (see ./op/builders.ts's module doc). Opt-in:
|
|
4
|
-
// `@intentius/chant
|
|
5
|
-
//
|
|
4
|
+
// `@intentius/chant/op`'s same-named exports are core's original untyped
|
|
5
|
+
// builders, unchanged.
|
|
6
6
|
export { k3sInstall, k3sUninstall } from "./op/builders";
|
|
7
7
|
|
|
8
8
|
// Plugin
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
* role — so every entry is constructed directly with `yamlBased: false`.
|
|
10
10
|
*/
|
|
11
11
|
import type { RuleMeta } from "@intentius/chant/audit/catalog";
|
|
12
|
+
import { k3sAuditLineage } from "./audit-lineage";
|
|
13
|
+
import { applyLineage } from "@intentius/chant/audit/catalog";
|
|
12
14
|
|
|
13
15
|
function entityRule(
|
|
14
16
|
id: string,
|
|
@@ -63,3 +65,6 @@ export const k3sAuditCatalog: Record<string, RuleMeta> = {
|
|
|
63
65
|
"Remove the component's config key, or drop it from `disable`.",
|
|
64
66
|
),
|
|
65
67
|
};
|
|
68
|
+
|
|
69
|
+
// Prior art credits live beside the rules in ./audit-lineage.ts (see core audit/prior-art.ts).
|
|
70
|
+
applyLineage(k3sAuditCatalog, k3sAuditLineage);
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prior art for these audit rules: the open-source tools whose checks cover the
|
|
3
|
+
* same condition, credited per rule. See packages/core/src/audit/prior-art.ts for
|
|
4
|
+
* the registry, the relation vocabulary, and why this is credit rather than
|
|
5
|
+
* authority. Kept by hand; the prior-art sweep (scripts/prior-art-sweep.ts) reports
|
|
6
|
+
* when a credited tool's index no longer lists a rule cited here.
|
|
7
|
+
*/
|
|
8
|
+
import type { Lineage } from "@intentius/chant/audit/catalog";
|
|
9
|
+
|
|
10
|
+
export const k3sAuditLineage: Record<string, Lineage[]> = {
|
|
11
|
+
K3S104: [
|
|
12
|
+
{ tool: "kube-bench", rule: "k3s-cis-1.8 1.1.13", url: "https://raw.githubusercontent.com/aquasecurity/kube-bench/main/cfg/k3s-cis-1.8/master.yaml", relation: "overlaps" },
|
|
13
|
+
],
|
|
14
|
+
};
|
|
@@ -11,11 +11,12 @@
|
|
|
11
11
|
* as a value — only `tokenFile`, a path — see the token-boundary note on
|
|
12
12
|
* {@link k3sInstall} in ./k3s.
|
|
13
13
|
*
|
|
14
|
-
* The step builders (k3sInstall, k3sUninstall) live in core
|
|
15
|
-
*
|
|
14
|
+
* The step builders (k3sInstall, k3sUninstall) live in core and reach authors
|
|
15
|
+
* through `@intentius/chant/op` like k3dUp/k3dDown. The activities here are
|
|
16
16
|
* dependency-light — they shell out to the k3s installer/uninstall scripts and
|
|
17
|
-
* only pull in the lexicon's version pin, not its declarable surface — so
|
|
18
|
-
*
|
|
17
|
+
* only pull in the lexicon's version pin, not its declarable surface — so
|
|
18
|
+
* `loadActivities` (`packages/core/src/op/activity-registry.ts`), which imports
|
|
19
|
+
* this module at run time, pulls in nothing expensive.
|
|
19
20
|
*/
|
|
20
21
|
export {
|
|
21
22
|
k3sInstall,
|
|
@@ -18,7 +18,11 @@ const execCalls: Array<{ cmd: string; opts: unknown }> = [];
|
|
|
18
18
|
let versionReply: { stdout: string; stderr: string } | Error = new Error("k3s: command not found");
|
|
19
19
|
let uninstallReply: { stdout: string; stderr: string } = { stdout: "", stderr: "" };
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
// Partial, via `importOriginal`: `@intentius/chant/op` reaches the base
|
|
22
|
+
// activities now (chant #2114), and modules on that path promisify
|
|
23
|
+
// `execFile` at load. A wholesale replacement of node:child_process would
|
|
24
|
+
// make them fail to import rather than fail an assertion.
|
|
25
|
+
vi.mock("node:child_process", async (importOriginal) => {
|
|
22
26
|
const custom = Symbol.for("nodejs.util.promisify.custom");
|
|
23
27
|
const exec = ((_cmd: string, _opts: unknown, cb?: (...a: unknown[]) => void) => {
|
|
24
28
|
cb?.(new Error("unmocked exec path"));
|
|
@@ -32,7 +36,7 @@ vi.mock("node:child_process", () => {
|
|
|
32
36
|
if (cmd.startsWith("test -x")) return uninstallReply;
|
|
33
37
|
return { stdout: "", stderr: "" };
|
|
34
38
|
};
|
|
35
|
-
return { exec };
|
|
39
|
+
return { ...(await importOriginal<typeof import("node:child_process")>()), exec };
|
|
36
40
|
});
|
|
37
41
|
|
|
38
42
|
describe("k3sInstallCommand (#1601)", () => {
|
package/src/op/activities/k3s.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { exec } from "node:child_process";
|
|
2
2
|
import { promisify } from "node:util";
|
|
3
|
-
import { safeHeartbeat } from "@intentius/chant/op";
|
|
4
3
|
import { K3S_VERSION } from "../../spec/fetch";
|
|
5
4
|
|
|
6
5
|
const execAsync = promisify(exec);
|
|
@@ -111,9 +110,9 @@ export function k3sUninstallCommand(args: K3sUninstallArgs): string {
|
|
|
111
110
|
/**
|
|
112
111
|
* Run the pinned k3s installer against a reachable host. Idempotent on an
|
|
113
112
|
* already-installed matching version: if `k3s --version` already reports the
|
|
114
|
-
* target version, the install is skipped. Uses longInfra profile
|
|
115
|
-
* timeout,
|
|
116
|
-
*
|
|
113
|
+
* target version, the install is skipped. Uses the longInfra profile: a 20m
|
|
114
|
+
* timeout, wide enough for the installer to download and start the k3s binary,
|
|
115
|
+
* and three attempts backing off from 30s.
|
|
117
116
|
*
|
|
118
117
|
* Bounded exactly as `k3dUp`/`k3dDown` were (chant#1410, epic #1598): this
|
|
119
118
|
* drives the case where the host is reachable from where the Op runs. It
|
|
@@ -139,20 +138,12 @@ export async function k3sInstall(
|
|
|
139
138
|
// `k3s --version` errors when k3s is absent — fall through to install.
|
|
140
139
|
}
|
|
141
140
|
|
|
142
|
-
const
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
signal,
|
|
149
|
-
env: { ...process.env, ...k3sInstallEnv(args) },
|
|
150
|
-
});
|
|
151
|
-
if (stdout) console.log(stdout);
|
|
152
|
-
if (stderr) console.error(stderr);
|
|
153
|
-
} finally {
|
|
154
|
-
clearInterval(heartbeatInterval);
|
|
155
|
-
}
|
|
141
|
+
const { stdout, stderr } = await execAsync(k3sInstallCommand(args), {
|
|
142
|
+
signal,
|
|
143
|
+
env: { ...process.env, ...k3sInstallEnv(args) },
|
|
144
|
+
});
|
|
145
|
+
if (stdout) console.log(stdout);
|
|
146
|
+
if (stderr) console.error(stderr);
|
|
156
147
|
|
|
157
148
|
return { version: target, installed: true };
|
|
158
149
|
}
|
package/src/op/builders.ts
CHANGED
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Typed step-builder wrappers for this lexicon's activities (chant #1288
|
|
3
3
|
* Stage 2). See `lexicons/k8s/src/op/builders.ts`'s module doc for why these
|
|
4
|
-
* live beside their `*Args` interfaces rather than in core
|
|
5
|
-
*
|
|
6
|
-
* interface
|
|
4
|
+
* live beside their `*Args` interfaces rather than in core: core cannot
|
|
5
|
+
* import a lexicon's types, so a wrapper whose `opts` IS the activity's own
|
|
6
|
+
* `*Args` interface can only sit in the lexicon that declares that
|
|
7
|
+
* interface. `opts`'s type in each wrapper below IS the activity's own
|
|
8
|
+
* `*Args` interface (via `Omit`/`WithStepRefs`) — never restated. `core`'s own
|
|
7
9
|
* `k3sInstall`/`k3sUninstall` are unchanged and produce byte-identical
|
|
8
10
|
* `ActivityStep` output; these are purely additive.
|
|
9
11
|
*/
|
package/src/skills/chant-k3s.md
CHANGED
|
@@ -78,7 +78,8 @@ host the Op runs on or can reach directly — the same boundary `k3dUp`/
|
|
|
78
78
|
Requires `"k3s"` in the project's `chant.config.ts` `lexicons`.
|
|
79
79
|
|
|
80
80
|
```typescript
|
|
81
|
-
import { Op, phase
|
|
81
|
+
import { Op, phase } from "@intentius/chant/op";
|
|
82
|
+
import { k3sInstall, k3sUninstall } from "@intentius/chant-lexicon-k3s";
|
|
82
83
|
|
|
83
84
|
export default Op({
|
|
84
85
|
name: "k3s-controlplane",
|