@vibesdotdev/integrations-kubernetes 0.0.0-stage → 1.0.0-rc.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 +19 -2
- package/dist/helm-chart.d.ts +13 -0
- package/dist/helm-chart.d.ts.map +1 -0
- package/dist/helm-chart.js +508 -0
- package/dist/helm-chart.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/k8s-configmap.d.ts +25 -0
- package/dist/k8s-configmap.d.ts.map +1 -0
- package/dist/k8s-configmap.js +168 -0
- package/dist/k8s-configmap.js.map +1 -0
- package/dist/k8s-gpu-operator.d.ts +3 -0
- package/dist/k8s-gpu-operator.d.ts.map +1 -0
- package/dist/k8s-gpu-operator.js +53 -0
- package/dist/k8s-gpu-operator.js.map +1 -0
- package/dist/k8s-namespace.d.ts +51 -0
- package/dist/k8s-namespace.d.ts.map +1 -0
- package/dist/k8s-namespace.js +280 -0
- package/dist/k8s-namespace.js.map +1 -0
- package/dist/k8s-pod-health.d.ts +60 -0
- package/dist/k8s-pod-health.d.ts.map +1 -0
- package/dist/k8s-pod-health.js +376 -0
- package/dist/k8s-pod-health.js.map +1 -0
- package/dist/k8s-secret.d.ts +55 -0
- package/dist/k8s-secret.d.ts.map +1 -0
- package/dist/k8s-secret.js +391 -0
- package/dist/k8s-secret.js.map +1 -0
- package/dist/kind-cluster.d.ts +84 -0
- package/dist/kind-cluster.d.ts.map +1 -0
- package/dist/kind-cluster.js +694 -0
- package/dist/kind-cluster.js.map +1 -0
- package/dist/kubectl-budget.client.d.ts +13 -0
- package/dist/kubectl-budget.client.d.ts.map +1 -0
- package/dist/kubectl-budget.client.js +38 -0
- package/dist/kubectl-budget.client.js.map +1 -0
- package/dist/kubectl.d.ts +59 -0
- package/dist/kubectl.d.ts.map +1 -0
- package/dist/kubectl.js +121 -0
- package/dist/kubectl.js.map +1 -0
- package/dist/port-forward-command.d.ts +6 -0
- package/dist/port-forward-command.d.ts.map +1 -0
- package/dist/port-forward-command.js +24 -0
- package/dist/port-forward-command.js.map +1 -0
- package/dist/port-forward-compat.d.ts +11 -0
- package/dist/port-forward-compat.d.ts.map +1 -0
- package/dist/port-forward-compat.js +21 -0
- package/dist/port-forward-compat.js.map +1 -0
- package/dist/port-forward-identity.d.ts +23 -0
- package/dist/port-forward-identity.d.ts.map +1 -0
- package/dist/port-forward-identity.js +72 -0
- package/dist/port-forward-identity.js.map +1 -0
- package/dist/port-forward.consumer.plugin.d.ts +3 -0
- package/dist/port-forward.consumer.plugin.d.ts.map +1 -0
- package/dist/port-forward.consumer.plugin.js +10 -0
- package/dist/port-forward.consumer.plugin.js.map +1 -0
- package/dist/port-forward.d.ts +18 -0
- package/dist/port-forward.d.ts.map +1 -0
- package/dist/port-forward.descriptor.d.ts +7 -0
- package/dist/port-forward.descriptor.d.ts.map +1 -0
- package/dist/port-forward.descriptor.js +3 -0
- package/dist/port-forward.descriptor.js.map +1 -0
- package/dist/port-forward.impl.consumer.d.ts +22 -0
- package/dist/port-forward.impl.consumer.d.ts.map +1 -0
- package/dist/port-forward.impl.consumer.js +32 -0
- package/dist/port-forward.impl.consumer.js.map +1 -0
- package/dist/port-forward.js +26 -0
- package/dist/port-forward.js.map +1 -0
- package/dist/port-forward.kind.d.ts +13 -0
- package/dist/port-forward.kind.d.ts.map +1 -0
- package/dist/port-forward.kind.js +12 -0
- package/dist/port-forward.kind.js.map +1 -0
- package/dist/resource-providers.consumer.plugin.d.ts +3 -0
- package/dist/resource-providers.consumer.plugin.d.ts.map +1 -0
- package/dist/resource-providers.consumer.plugin.js +56 -0
- package/dist/resource-providers.consumer.plugin.js.map +1 -0
- package/dist/schemas/helm-chart.d.ts +14 -0
- package/dist/schemas/helm-chart.d.ts.map +1 -0
- package/dist/schemas/helm-chart.js +12 -0
- package/dist/schemas/helm-chart.js.map +1 -0
- package/dist/schemas/k8s-pod-health.d.ts +17 -0
- package/dist/schemas/k8s-pod-health.d.ts.map +1 -0
- package/dist/schemas/k8s-pod-health.js +21 -0
- package/dist/schemas/k8s-pod-health.js.map +1 -0
- package/dist/schemas/port-forward.d.ts +62 -0
- package/dist/schemas/port-forward.d.ts.map +1 -0
- package/dist/schemas/port-forward.js +24 -0
- package/dist/schemas/port-forward.js.map +1 -0
- package/dist/tool-env.d.ts +19 -0
- package/dist/tool-env.d.ts.map +1 -0
- package/dist/tool-env.js +32 -0
- package/dist/tool-env.js.map +1 -0
- package/package.json +80 -4
|
@@ -0,0 +1,391 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kubernetes Secret Resource Providers
|
|
3
|
+
*
|
|
4
|
+
* Three providers in one file (they share kubectl plumbing):
|
|
5
|
+
* - `k8s/secret` — Opaque secret from key/value pairs
|
|
6
|
+
* - `k8s/secret-tls` — kubernetes.io/tls secret from cert+key files
|
|
7
|
+
* - `k8s/secret-docker-registry` — kubernetes.io/dockerconfigjson secret
|
|
8
|
+
*
|
|
9
|
+
* Each replaces a slice of the prior bash-script `k8s/secret-setup` provider,
|
|
10
|
+
* which had a single readiness check ("any secret exists in namespace") that
|
|
11
|
+
* could not detect a silently-skipped TLS secret. These typed providers each
|
|
12
|
+
* verify their own secret by name (and by type, where it matters), so a
|
|
13
|
+
* partial failure surfaces at the resource that owns it.
|
|
14
|
+
*/
|
|
15
|
+
import { CapabilityError } from '@vibesdotdev/kernel';
|
|
16
|
+
import * as z from 'zod/v4';
|
|
17
|
+
import { readJsonObject, setupErrorResult, toolFailure, toolOutputExcerpt } from '@vibesdotdev/pm/resources/tool-env';
|
|
18
|
+
import { runKubeCapture } from "./tool-env.js";
|
|
19
|
+
import { attempt } from '@vibesdotdev/pm/utils/attempt';
|
|
20
|
+
import { pmFileSystem } from '@vibesdotdev/pm/helpers/runtime-files';
|
|
21
|
+
import { JsonObjectSchema } from '@vibesdotdev/kernel/schemas/json';
|
|
22
|
+
const KUBECTL_REQUEST_TIMEOUT = '5s';
|
|
23
|
+
/**
|
|
24
|
+
* Apply a Secret manifest on stdin. kubectl's rejection can echo the object it
|
|
25
|
+
* was handed, so its output reaches the failure only as a bounded excerpt with
|
|
26
|
+
* every `secrets` value (as given and base64) removed, or not at all
|
|
27
|
+
* (`'value-free'`) when the manifest holds values PM never saw.
|
|
28
|
+
*/
|
|
29
|
+
async function applyManifest(runtime, manifest, opts, secrets) {
|
|
30
|
+
const cmd = ['kubectl', 'apply', '-f', '-', '--namespace', opts.namespace];
|
|
31
|
+
if (opts.context)
|
|
32
|
+
cmd.push('--context', opts.context);
|
|
33
|
+
const outcome = await runKubeCapture(runtime, cmd[0], cmd.slice(1), { stdin: manifest });
|
|
34
|
+
if (outcome.exitCode !== 0) {
|
|
35
|
+
throw toolFailure({ tool: 'kubectl', action: 'apply', outcome, secrets });
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/** Delete a secret by name; an absent secret is the goal, any other failure is typed. */
|
|
39
|
+
async function deleteSecret(runtime, name, opts) {
|
|
40
|
+
const cmd = ['kubectl', 'delete', 'secret', name, '--namespace', opts.namespace, '--ignore-not-found=true'];
|
|
41
|
+
if (opts.context)
|
|
42
|
+
cmd.push('--context', opts.context);
|
|
43
|
+
const outcome = await runKubeCapture(runtime, cmd[0], cmd.slice(1));
|
|
44
|
+
if (outcome.exitCode !== 0)
|
|
45
|
+
throw toolFailure({ tool: 'kubectl', action: 'delete secret', outcome });
|
|
46
|
+
}
|
|
47
|
+
async function generateManifest(runtime, createArgs, opts) {
|
|
48
|
+
const cmd = ['kubectl', 'create', ...createArgs, '--namespace', opts.namespace];
|
|
49
|
+
if (opts.context)
|
|
50
|
+
cmd.push('--context', opts.context);
|
|
51
|
+
cmd.push('--dry-run=client', '-o', 'yaml');
|
|
52
|
+
const outcome = await runKubeCapture(runtime, cmd[0], cmd.slice(1));
|
|
53
|
+
if (outcome.exitCode !== 0) {
|
|
54
|
+
// The generator read the key material from files: none of its output is kept.
|
|
55
|
+
throw toolFailure({ tool: 'kubectl', action: 'create --dry-run', outcome, secrets: 'value-free' });
|
|
56
|
+
}
|
|
57
|
+
return outcome.stdout;
|
|
58
|
+
}
|
|
59
|
+
/** `value`'s UTF-8 bytes as base64 (a Secret's `data` encoding). */
|
|
60
|
+
function base64Utf8(value) {
|
|
61
|
+
let binary = '';
|
|
62
|
+
for (const byte of new TextEncoder().encode(value))
|
|
63
|
+
binary += String.fromCharCode(byte);
|
|
64
|
+
return btoa(binary);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* A Secret manifest built in-process and handed to `kubectl apply -f -` on
|
|
68
|
+
* stdin. Secret values never go on a command line, where every process on the
|
|
69
|
+
* host can read them (pm.md R2); kubectl's own `create --dry-run` generator
|
|
70
|
+
* takes them only as argv, so it is not used for literal values.
|
|
71
|
+
*/
|
|
72
|
+
export function buildSecretManifest(name, namespace, type, stringData) {
|
|
73
|
+
const data = Object.fromEntries(Object.entries(stringData).map(([key, value]) => [key, base64Utf8(value)]));
|
|
74
|
+
return JSON.stringify({ apiVersion: 'v1', kind: 'Secret', metadata: { name, namespace }, type, data });
|
|
75
|
+
}
|
|
76
|
+
/** The `.dockerconfigjson` payload `kubectl create secret docker-registry` writes. */
|
|
77
|
+
export function dockerConfigJson(server, username, password, email) {
|
|
78
|
+
const auth = base64Utf8(`${username}:${password}`);
|
|
79
|
+
return JSON.stringify({ auths: { [server]: { username, password, email, auth } } });
|
|
80
|
+
}
|
|
81
|
+
const SecretObjectSchema = z.object({ type: z.string().optional(), data: JsonObjectSchema.optional() });
|
|
82
|
+
async function inspectSecret(runtime, name, opts) {
|
|
83
|
+
const cmd = [
|
|
84
|
+
'kubectl',
|
|
85
|
+
'get',
|
|
86
|
+
'secret',
|
|
87
|
+
name,
|
|
88
|
+
'--namespace',
|
|
89
|
+
opts.namespace,
|
|
90
|
+
'--request-timeout',
|
|
91
|
+
KUBECTL_REQUEST_TIMEOUT,
|
|
92
|
+
'-o',
|
|
93
|
+
'json'
|
|
94
|
+
];
|
|
95
|
+
if (opts.context)
|
|
96
|
+
cmd.push('--context', opts.context);
|
|
97
|
+
const { exitCode, stdout, stderr } = await runKubeCapture(runtime, cmd[0], cmd.slice(1));
|
|
98
|
+
if (exitCode !== 0) {
|
|
99
|
+
if (stderr.includes('NotFound') || stderr.includes('not found')) {
|
|
100
|
+
return { exists: false, dataKeys: [] };
|
|
101
|
+
}
|
|
102
|
+
return { exists: false, dataKeys: [], error: toolOutputExcerpt(stderr) };
|
|
103
|
+
}
|
|
104
|
+
// The object kubectl printed carries the secret's data: only its type and key names are read.
|
|
105
|
+
const object = readJsonObject(SecretObjectSchema, stdout);
|
|
106
|
+
if (!object) {
|
|
107
|
+
return { exists: false, dataKeys: [], error: `kubectl get secret ${name} answered an unreadable object` };
|
|
108
|
+
}
|
|
109
|
+
return { exists: true, type: object.type, dataKeys: Object.keys(object.data ?? {}) };
|
|
110
|
+
}
|
|
111
|
+
function readyState(config, metadata) {
|
|
112
|
+
return {
|
|
113
|
+
state: {
|
|
114
|
+
id: config.id,
|
|
115
|
+
type: config.type,
|
|
116
|
+
status: 'ready',
|
|
117
|
+
createdAt: new Date(),
|
|
118
|
+
lastChecked: new Date(),
|
|
119
|
+
metadata
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
}
|
|
123
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
124
|
+
// k8s/secret — Opaque secret from key/value pairs (manifest on stdin)
|
|
125
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
126
|
+
const SecretConfigSchema = z.object({
|
|
127
|
+
name: z.string().min(1),
|
|
128
|
+
namespace: z.string().min(1),
|
|
129
|
+
context: z.string().optional(),
|
|
130
|
+
data: z.record(z.string().min(1), z.string()).refine((d) => Object.keys(d).length > 0, {
|
|
131
|
+
message: 'data must contain at least one key/value pair'
|
|
132
|
+
})
|
|
133
|
+
});
|
|
134
|
+
/** The refusal for a secret whose post-apply check failed: what is wrong, and where. */
|
|
135
|
+
function secretCheckFailed(message, reason, name, namespace) {
|
|
136
|
+
return new CapabilityError(message, 'UNAVAILABLE', { reason, retryable: true, details: { name, namespace } });
|
|
137
|
+
}
|
|
138
|
+
/** Apply the Opaque secret manifest on stdin, then verify the secret is visible with every declared key. */
|
|
139
|
+
async function applyOpaqueSecret(runtime, config, cfg) {
|
|
140
|
+
const manifest = buildSecretManifest(cfg.name, cfg.namespace, 'Opaque', cfg.data);
|
|
141
|
+
await applyManifest(runtime, manifest, cfg, Object.values(cfg.data));
|
|
142
|
+
// Verify post-apply: the secret exists with the expected keys.
|
|
143
|
+
const info = await inspectSecret(runtime, cfg.name, cfg);
|
|
144
|
+
if (!info.exists) {
|
|
145
|
+
throw secretCheckFailed(`Secret '${cfg.name}' was applied but is not visible to kubectl get`, 'pm-secret-not-visible', cfg.name, cfg.namespace);
|
|
146
|
+
}
|
|
147
|
+
const expected = new Set(Object.keys(cfg.data));
|
|
148
|
+
const missing = [...expected].filter((k) => !info.dataKeys.includes(k));
|
|
149
|
+
if (missing.length > 0) {
|
|
150
|
+
throw secretCheckFailed(`Secret '${cfg.name}' is missing expected keys: ${missing.join(', ')}`, 'pm-secret-keys-missing', cfg.name, cfg.namespace);
|
|
151
|
+
}
|
|
152
|
+
return readyState(config, {
|
|
153
|
+
name: cfg.name,
|
|
154
|
+
namespace: cfg.namespace,
|
|
155
|
+
keys: info.dataKeys
|
|
156
|
+
});
|
|
157
|
+
}
|
|
158
|
+
export const k8sSecretProvider = {
|
|
159
|
+
type: 'k8s/secret',
|
|
160
|
+
async setup(config, { runtime }) {
|
|
161
|
+
const cfg = SecretConfigSchema.parse(config.config);
|
|
162
|
+
const applied = await attempt(() => applyOpaqueSecret(runtime, config, cfg));
|
|
163
|
+
return applied.ok ? applied.value : setupErrorResult(config, applied.failure);
|
|
164
|
+
},
|
|
165
|
+
async teardown(id, _state, { runtime, config: providerConfig }) {
|
|
166
|
+
const stored = providerConfig;
|
|
167
|
+
if (!stored)
|
|
168
|
+
return;
|
|
169
|
+
const cfg = SecretConfigSchema.parse(stored.config);
|
|
170
|
+
await deleteSecret(runtime, cfg.name, cfg);
|
|
171
|
+
},
|
|
172
|
+
async status(id, { runtime, config: providerConfig }) {
|
|
173
|
+
const stored = providerConfig;
|
|
174
|
+
if (!stored)
|
|
175
|
+
return { status: 'missing' };
|
|
176
|
+
const cfg = SecretConfigSchema.parse(stored.config);
|
|
177
|
+
const info = await inspectSecret(runtime, cfg.name, cfg);
|
|
178
|
+
if (info.error)
|
|
179
|
+
return { status: 'error', error: info.error };
|
|
180
|
+
if (!info.exists)
|
|
181
|
+
return { status: 'missing' };
|
|
182
|
+
const expected = Object.keys(cfg.data);
|
|
183
|
+
const missing = expected.filter((k) => !info.dataKeys.includes(k));
|
|
184
|
+
if (missing.length > 0) {
|
|
185
|
+
return {
|
|
186
|
+
status: 'error',
|
|
187
|
+
error: `Secret exists but is missing keys: ${missing.join(', ')}`
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
return { status: 'ready', metadata: { keys: info.dataKeys } };
|
|
191
|
+
},
|
|
192
|
+
async checkReady(config, _state, { runtime }) {
|
|
193
|
+
const cfg = SecretConfigSchema.parse(config.config);
|
|
194
|
+
const info = await inspectSecret(runtime, cfg.name, cfg);
|
|
195
|
+
if (!info.exists) {
|
|
196
|
+
return { ready: false, reason: `Secret '${cfg.name}' not found in ${cfg.namespace}` };
|
|
197
|
+
}
|
|
198
|
+
const missing = Object.keys(cfg.data).filter((k) => !info.dataKeys.includes(k));
|
|
199
|
+
if (missing.length > 0) {
|
|
200
|
+
return { ready: false, reason: `Secret missing keys: ${missing.join(', ')}` };
|
|
201
|
+
}
|
|
202
|
+
return { ready: true };
|
|
203
|
+
},
|
|
204
|
+
validateConfig(config) {
|
|
205
|
+
return SecretConfigSchema.parse(config);
|
|
206
|
+
},
|
|
207
|
+
describe(config) {
|
|
208
|
+
const cfg = SecretConfigSchema.parse(config.config);
|
|
209
|
+
return `k8s Opaque secret '${cfg.name}' in ${cfg.namespace}`;
|
|
210
|
+
}
|
|
211
|
+
};
|
|
212
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
213
|
+
// k8s/secret-tls — kubernetes.io/tls from cert + key files
|
|
214
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
215
|
+
const TlsSecretConfigSchema = z.object({
|
|
216
|
+
name: z.string().min(1),
|
|
217
|
+
namespace: z.string().min(1),
|
|
218
|
+
context: z.string().optional(),
|
|
219
|
+
certPath: z.string().min(1),
|
|
220
|
+
keyPath: z.string().min(1)
|
|
221
|
+
});
|
|
222
|
+
/** Generate the TLS secret manifest from the cert and key files, apply it, then verify the secret and its type. */
|
|
223
|
+
async function applyTlsSecret(runtime, config, cfg) {
|
|
224
|
+
const files = await pmFileSystem(runtime);
|
|
225
|
+
if (!(await files.exists(cfg.certPath))) {
|
|
226
|
+
throw new CapabilityError(`Cert file not found: ${cfg.certPath}`, 'NOT_FOUND', {
|
|
227
|
+
reason: 'pm-secret-tls-cert-missing',
|
|
228
|
+
details: { path: cfg.certPath }
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
if (!(await files.exists(cfg.keyPath))) {
|
|
232
|
+
throw new CapabilityError(`Key file not found: ${cfg.keyPath}`, 'NOT_FOUND', {
|
|
233
|
+
reason: 'pm-secret-tls-key-missing',
|
|
234
|
+
details: { path: cfg.keyPath }
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
const args = ['secret', 'tls', cfg.name, `--cert=${cfg.certPath}`, `--key=${cfg.keyPath}`];
|
|
238
|
+
const manifest = await generateManifest(runtime, args, cfg);
|
|
239
|
+
await applyManifest(runtime, manifest, cfg, 'value-free');
|
|
240
|
+
const info = await inspectSecret(runtime, cfg.name, cfg);
|
|
241
|
+
if (!info.exists) {
|
|
242
|
+
throw secretCheckFailed(`TLS secret '${cfg.name}' was applied but is not visible`, 'pm-secret-not-visible', cfg.name, cfg.namespace);
|
|
243
|
+
}
|
|
244
|
+
if (info.type !== 'kubernetes.io/tls') {
|
|
245
|
+
throw secretCheckFailed(`TLS secret '${cfg.name}' has unexpected type '${info.type}' (want kubernetes.io/tls)`, 'pm-secret-type-mismatch', cfg.name, cfg.namespace);
|
|
246
|
+
}
|
|
247
|
+
return readyState(config, {
|
|
248
|
+
name: cfg.name,
|
|
249
|
+
namespace: cfg.namespace,
|
|
250
|
+
certPath: cfg.certPath,
|
|
251
|
+
keyPath: cfg.keyPath
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
export const k8sSecretTlsProvider = {
|
|
255
|
+
type: 'k8s/secret-tls',
|
|
256
|
+
async setup(config, { runtime }) {
|
|
257
|
+
const cfg = TlsSecretConfigSchema.parse(config.config);
|
|
258
|
+
const applied = await attempt(() => applyTlsSecret(runtime, config, cfg));
|
|
259
|
+
return applied.ok ? applied.value : setupErrorResult(config, applied.failure);
|
|
260
|
+
},
|
|
261
|
+
async teardown(id, _state, { runtime, config: providerConfig }) {
|
|
262
|
+
const stored = providerConfig;
|
|
263
|
+
if (!stored)
|
|
264
|
+
return;
|
|
265
|
+
const cfg = TlsSecretConfigSchema.parse(stored.config);
|
|
266
|
+
await deleteSecret(runtime, cfg.name, cfg);
|
|
267
|
+
},
|
|
268
|
+
async status(id, { runtime, config: providerConfig }) {
|
|
269
|
+
const stored = providerConfig;
|
|
270
|
+
if (!stored)
|
|
271
|
+
return { status: 'missing' };
|
|
272
|
+
const cfg = TlsSecretConfigSchema.parse(stored.config);
|
|
273
|
+
const info = await inspectSecret(runtime, cfg.name, cfg);
|
|
274
|
+
if (info.error)
|
|
275
|
+
return { status: 'error', error: info.error };
|
|
276
|
+
if (!info.exists)
|
|
277
|
+
return { status: 'missing' };
|
|
278
|
+
if (info.type !== 'kubernetes.io/tls') {
|
|
279
|
+
return {
|
|
280
|
+
status: 'error',
|
|
281
|
+
error: `Secret exists but has type '${info.type}' (want kubernetes.io/tls)`
|
|
282
|
+
};
|
|
283
|
+
}
|
|
284
|
+
return { status: 'ready', metadata: { type: info.type } };
|
|
285
|
+
},
|
|
286
|
+
async checkReady(config, _state, { runtime }) {
|
|
287
|
+
const cfg = TlsSecretConfigSchema.parse(config.config);
|
|
288
|
+
const info = await inspectSecret(runtime, cfg.name, cfg);
|
|
289
|
+
if (!info.exists) {
|
|
290
|
+
return { ready: false, reason: `TLS secret '${cfg.name}' not found in ${cfg.namespace}` };
|
|
291
|
+
}
|
|
292
|
+
if (info.type !== 'kubernetes.io/tls') {
|
|
293
|
+
return {
|
|
294
|
+
ready: false,
|
|
295
|
+
reason: `Secret has wrong type '${info.type}' (want kubernetes.io/tls)`
|
|
296
|
+
};
|
|
297
|
+
}
|
|
298
|
+
return { ready: true };
|
|
299
|
+
},
|
|
300
|
+
validateConfig(config) {
|
|
301
|
+
return TlsSecretConfigSchema.parse(config);
|
|
302
|
+
},
|
|
303
|
+
describe(config) {
|
|
304
|
+
const cfg = TlsSecretConfigSchema.parse(config.config);
|
|
305
|
+
return `k8s TLS secret '${cfg.name}' in ${cfg.namespace}`;
|
|
306
|
+
}
|
|
307
|
+
};
|
|
308
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
309
|
+
// k8s/secret-docker-registry — kubernetes.io/dockerconfigjson
|
|
310
|
+
// ──────────────────────────────────────────────────────────────────────────
|
|
311
|
+
const DockerRegistryConfigSchema = z.object({
|
|
312
|
+
name: z.string().min(1),
|
|
313
|
+
namespace: z.string().min(1),
|
|
314
|
+
context: z.string().optional(),
|
|
315
|
+
server: z.string().min(1),
|
|
316
|
+
username: z.string().min(1),
|
|
317
|
+
password: z.string().min(1),
|
|
318
|
+
email: z.string().min(1)
|
|
319
|
+
});
|
|
320
|
+
/** Apply the docker-registry secret manifest on stdin, then verify the secret and its type. */
|
|
321
|
+
async function applyRegistrySecret(runtime, config, cfg) {
|
|
322
|
+
const dockerConfig = dockerConfigJson(cfg.server, cfg.username, cfg.password, cfg.email);
|
|
323
|
+
const manifest = buildSecretManifest(cfg.name, cfg.namespace, 'kubernetes.io/dockerconfigjson', {
|
|
324
|
+
'.dockerconfigjson': dockerConfig
|
|
325
|
+
});
|
|
326
|
+
await applyManifest(runtime, manifest, cfg, [cfg.password, dockerConfig, base64Utf8(`${cfg.username}:${cfg.password}`)]);
|
|
327
|
+
const info = await inspectSecret(runtime, cfg.name, cfg);
|
|
328
|
+
if (!info.exists) {
|
|
329
|
+
throw secretCheckFailed(`Registry secret '${cfg.name}' was applied but is not visible`, 'pm-secret-not-visible', cfg.name, cfg.namespace);
|
|
330
|
+
}
|
|
331
|
+
if (info.type !== 'kubernetes.io/dockerconfigjson') {
|
|
332
|
+
throw secretCheckFailed(`Registry secret '${cfg.name}' has unexpected type '${info.type}' (want kubernetes.io/dockerconfigjson)`, 'pm-secret-type-mismatch', cfg.name, cfg.namespace);
|
|
333
|
+
}
|
|
334
|
+
return readyState(config, {
|
|
335
|
+
name: cfg.name,
|
|
336
|
+
namespace: cfg.namespace,
|
|
337
|
+
server: cfg.server
|
|
338
|
+
});
|
|
339
|
+
}
|
|
340
|
+
export const k8sSecretDockerRegistryProvider = {
|
|
341
|
+
type: 'k8s/secret-docker-registry',
|
|
342
|
+
async setup(config, { runtime }) {
|
|
343
|
+
const cfg = DockerRegistryConfigSchema.parse(config.config);
|
|
344
|
+
const applied = await attempt(() => applyRegistrySecret(runtime, config, cfg));
|
|
345
|
+
return applied.ok ? applied.value : setupErrorResult(config, applied.failure);
|
|
346
|
+
},
|
|
347
|
+
async teardown(id, _state, { runtime, config: providerConfig }) {
|
|
348
|
+
const stored = providerConfig;
|
|
349
|
+
if (!stored)
|
|
350
|
+
return;
|
|
351
|
+
const cfg = DockerRegistryConfigSchema.parse(stored.config);
|
|
352
|
+
await deleteSecret(runtime, cfg.name, cfg);
|
|
353
|
+
},
|
|
354
|
+
async status(id, { runtime, config: providerConfig }) {
|
|
355
|
+
const stored = providerConfig;
|
|
356
|
+
if (!stored)
|
|
357
|
+
return { status: 'missing' };
|
|
358
|
+
const cfg = DockerRegistryConfigSchema.parse(stored.config);
|
|
359
|
+
const info = await inspectSecret(runtime, cfg.name, cfg);
|
|
360
|
+
if (info.error)
|
|
361
|
+
return { status: 'error', error: info.error };
|
|
362
|
+
if (!info.exists)
|
|
363
|
+
return { status: 'missing' };
|
|
364
|
+
if (info.type !== 'kubernetes.io/dockerconfigjson') {
|
|
365
|
+
return {
|
|
366
|
+
status: 'error',
|
|
367
|
+
error: `Secret exists but has type '${info.type}' (want kubernetes.io/dockerconfigjson)`
|
|
368
|
+
};
|
|
369
|
+
}
|
|
370
|
+
return { status: 'ready', metadata: { type: info.type } };
|
|
371
|
+
},
|
|
372
|
+
async checkReady(config, _state, { runtime }) {
|
|
373
|
+
const cfg = DockerRegistryConfigSchema.parse(config.config);
|
|
374
|
+
const info = await inspectSecret(runtime, cfg.name, cfg);
|
|
375
|
+
if (!info.exists) {
|
|
376
|
+
return {
|
|
377
|
+
ready: false,
|
|
378
|
+
reason: `Registry secret '${cfg.name}' not found in ${cfg.namespace}`
|
|
379
|
+
};
|
|
380
|
+
}
|
|
381
|
+
return { ready: true };
|
|
382
|
+
},
|
|
383
|
+
validateConfig(config) {
|
|
384
|
+
return DockerRegistryConfigSchema.parse(config);
|
|
385
|
+
},
|
|
386
|
+
describe(config) {
|
|
387
|
+
const cfg = DockerRegistryConfigSchema.parse(config.config);
|
|
388
|
+
return `k8s docker-registry secret '${cfg.name}' in ${cfg.namespace}`;
|
|
389
|
+
}
|
|
390
|
+
};
|
|
391
|
+
//# sourceMappingURL=k8s-secret.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"k8s-secret.js","sourceRoot":"","sources":["../src/k8s-secret.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Kind Cluster Resource Provider
|
|
3
|
+
* Manages Kind (Kubernetes in Docker) cluster lifecycle including local registry
|
|
4
|
+
*
|
|
5
|
+
* Handles:
|
|
6
|
+
* - Cluster creation with local registry
|
|
7
|
+
* - Orphaned registry detection and cleanup
|
|
8
|
+
* - Cluster recovery (restart vs recreate)
|
|
9
|
+
* - Full lifecycle management
|
|
10
|
+
*/
|
|
11
|
+
import type { ResourceProviderRuntime } from '@vibesdotdev/pm/resources/provider';
|
|
12
|
+
import * as z from 'zod/v4';
|
|
13
|
+
import type { ResourceProvider, ResourceProviderContext, ResourceSetupResult, ResourceStatusResult, ResourceReadyCheckResult } from '@vibesdotdev/pm/resources/provider';
|
|
14
|
+
import type { ProviderPayload, ResourceConfig, ResourceState } from '@vibesdotdev/pm/schemas/resource';
|
|
15
|
+
/**
|
|
16
|
+
* Kind cluster provider configuration schema
|
|
17
|
+
*/
|
|
18
|
+
declare const KindClusterConfigSchema: z.ZodObject<{
|
|
19
|
+
name: z.ZodOptional<z.ZodString>;
|
|
20
|
+
registry: z.ZodDefault<z.ZodBoolean>;
|
|
21
|
+
registryPort: z.ZodDefault<z.ZodNumber>;
|
|
22
|
+
registryName: z.ZodDefault<z.ZodString>;
|
|
23
|
+
configFile: z.ZodOptional<z.ZodString>;
|
|
24
|
+
nodeImage: z.ZodOptional<z.ZodString>;
|
|
25
|
+
waitTimeout: z.ZodDefault<z.ZodNumber>;
|
|
26
|
+
}, z.core.$strip>;
|
|
27
|
+
type KindClusterConfig = z.infer<typeof KindClusterConfigSchema>;
|
|
28
|
+
/**
|
|
29
|
+
* List PersistentVolumeClaims in the cluster whose underlying storage
|
|
30
|
+
* would be lost on `kind delete cluster`. By default, kind uses the
|
|
31
|
+
* local-path-provisioner which writes data into the kind container's
|
|
32
|
+
* filesystem — NOT a host bind mount — so PVCs are destroyed with the
|
|
33
|
+
* cluster. Returns a list of `<namespace>/<name>` strings.
|
|
34
|
+
*
|
|
35
|
+
* Returns an empty list when kubectl is unavailable, the context doesn't
|
|
36
|
+
* exist, or there are no PVCs — the recreate command treats that as
|
|
37
|
+
* "no stateful data at risk".
|
|
38
|
+
*/
|
|
39
|
+
export declare function listAtRiskPVCs(runtime: ResourceProviderRuntime, clusterName: string): Promise<string[]>;
|
|
40
|
+
/**
|
|
41
|
+
* Kind Cluster Provider
|
|
42
|
+
* Creates and manages Kind clusters with local registry support
|
|
43
|
+
*/
|
|
44
|
+
export declare class KindClusterProvider implements ResourceProvider<KindClusterConfig> {
|
|
45
|
+
readonly type = "kind";
|
|
46
|
+
readonly subType = "cluster";
|
|
47
|
+
private readonly configStore;
|
|
48
|
+
/**
|
|
49
|
+
* Setup (create or ensure) a kind cluster
|
|
50
|
+
*/
|
|
51
|
+
setup(config: ResourceConfig, { runtime }: ResourceProviderContext): Promise<ResourceSetupResult>;
|
|
52
|
+
/**
|
|
53
|
+
* Create success result
|
|
54
|
+
*/
|
|
55
|
+
private createSuccessResult;
|
|
56
|
+
/**
|
|
57
|
+
* Teardown (delete) cluster and registry
|
|
58
|
+
*/
|
|
59
|
+
teardown(id: string, state: ResourceState | undefined, { runtime }: ResourceProviderContext): Promise<void>;
|
|
60
|
+
/**
|
|
61
|
+
* Get status of cluster
|
|
62
|
+
*/
|
|
63
|
+
status(id: string, { runtime }: ResourceProviderContext): Promise<ResourceStatusResult>;
|
|
64
|
+
/**
|
|
65
|
+
* Check if cluster is ready
|
|
66
|
+
*/
|
|
67
|
+
checkReady(config: ResourceConfig, _state: ResourceState, { runtime }: ResourceProviderContext): Promise<ResourceReadyCheckResult>;
|
|
68
|
+
/**
|
|
69
|
+
* Validate provider-specific configuration
|
|
70
|
+
*/
|
|
71
|
+
validateConfig(config: ProviderPayload): KindClusterConfig;
|
|
72
|
+
/**
|
|
73
|
+
* Get human-readable description
|
|
74
|
+
*/
|
|
75
|
+
describe(config: ResourceConfig): string;
|
|
76
|
+
/**
|
|
77
|
+
* Data a `kind delete cluster` would destroy: the cluster's PVCs on
|
|
78
|
+
* kind's default local-path provisioner (see {@link listAtRiskPVCs}).
|
|
79
|
+
*/
|
|
80
|
+
listAtRiskData(config: ResourceConfig, { runtime }: ResourceProviderContext): Promise<string[]>;
|
|
81
|
+
computeSourceHash(config: ResourceConfig, { runtime }: ResourceProviderContext): Promise<string | null>;
|
|
82
|
+
}
|
|
83
|
+
export {};
|
|
84
|
+
//# sourceMappingURL=kind-cluster.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kind-cluster.d.ts","sourceRoot":"","sources":["../src/kind-cluster.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAClF,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B,OAAO,KAAK,EACX,gBAAgB,EAChB,uBAAuB,EACvB,mBAAmB,EACnB,oBAAoB,EACpB,wBAAwB,EACxB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,kCAAkC,CAAC;AAUvG;;GAEG;AACH,QAAA,MAAM,uBAAuB;;;;;;;;iBAe3B,CAAC;AAEH,KAAK,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAuVjE;;;;;;;;;;GAUG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAwC7G;AA+HD;;;GAGG;AACH,qBAAa,mBAAoB,YAAW,gBAAgB,CAAC,iBAAiB,CAAC;IAC9E,QAAQ,CAAC,IAAI,UAAU;IACvB,QAAQ,CAAC,OAAO,aAAa;IAC7B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAqC;IAEjE;;OAEG;IACG,KAAK,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,EAAE,uBAAuB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAyDvG;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAsC3B;;OAEG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,aAAa,GAAG,SAAS,EAAE,EAAE,OAAO,EAAE,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BjH;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,EAAE,uBAAuB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IA0B7F;;OAEG;IACG,UAAU,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,EAAE,OAAO,EAAE,EAAE,uBAAuB,GAAG,OAAO,CAAC,wBAAwB,CAAC;IA2BxI;;OAEG;IACH,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,iBAAiB;IAI1D;;OAEG;IACH,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;IASxC;;;OAGG;IACG,cAAc,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAK/F,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,EAAE,OAAO,EAAE,EAAE,uBAAuB,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;CAwB7G"}
|