@cat-indev/catops-cli 0.0.1-alpha.5
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/LICENSE +21 -0
- package/README.md +397 -0
- package/dist/bin/devops-cli.d.ts +2 -0
- package/dist/bin/devops-cli.js +132 -0
- package/dist/bin/devops-cli.js.map +1 -0
- package/dist/core/Context.d.ts +42 -0
- package/dist/core/Context.js +153 -0
- package/dist/core/Context.js.map +1 -0
- package/dist/core/Menu.d.ts +23 -0
- package/dist/core/Menu.js +159 -0
- package/dist/core/Menu.js.map +1 -0
- package/dist/core/Notifier.d.ts +27 -0
- package/dist/core/Notifier.js +93 -0
- package/dist/core/Notifier.js.map +1 -0
- package/dist/core/classifiers.d.ts +31 -0
- package/dist/core/classifiers.js +53 -0
- package/dist/core/classifiers.js.map +1 -0
- package/dist/core/logger.d.ts +8 -0
- package/dist/core/logger.js +37 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/prompt.d.ts +10 -0
- package/dist/core/prompt.js +87 -0
- package/dist/core/prompt.js.map +1 -0
- package/dist/core/senders.d.ts +27 -0
- package/dist/core/senders.js +109 -0
- package/dist/core/senders.js.map +1 -0
- package/dist/core/types.d.ts +105 -0
- package/dist/core/types.js +3 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.js +50 -0
- package/dist/index.js.map +1 -0
- package/dist/services/ansible.d.ts +11 -0
- package/dist/services/ansible.js +35 -0
- package/dist/services/ansible.js.map +1 -0
- package/dist/services/archive.d.ts +4 -0
- package/dist/services/archive.js +16 -0
- package/dist/services/archive.js.map +1 -0
- package/dist/services/argocd.d.ts +20 -0
- package/dist/services/argocd.js +48 -0
- package/dist/services/argocd.js.map +1 -0
- package/dist/services/az.d.ts +33 -0
- package/dist/services/az.js +48 -0
- package/dist/services/az.js.map +1 -0
- package/dist/services/azdo.d.ts +13 -0
- package/dist/services/azdo.js +57 -0
- package/dist/services/azdo.js.map +1 -0
- package/dist/services/docker.d.ts +18 -0
- package/dist/services/docker.js +36 -0
- package/dist/services/docker.js.map +1 -0
- package/dist/services/git.d.ts +9 -0
- package/dist/services/git.js +36 -0
- package/dist/services/git.js.map +1 -0
- package/dist/services/helm.d.ts +4 -0
- package/dist/services/helm.js +24 -0
- package/dist/services/helm.js.map +1 -0
- package/dist/services/index.d.ts +32 -0
- package/dist/services/index.js +81 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/kubectl.d.ts +135 -0
- package/dist/services/kubectl.js +266 -0
- package/dist/services/kubectl.js.map +1 -0
- package/dist/services/npm.d.ts +5 -0
- package/dist/services/npm.js +20 -0
- package/dist/services/npm.js.map +1 -0
- package/dist/services/oc.d.ts +146 -0
- package/dist/services/oc.js +296 -0
- package/dist/services/oc.js.map +1 -0
- package/dist/services/shell.d.ts +20 -0
- package/dist/services/shell.js +195 -0
- package/dist/services/shell.js.map +1 -0
- package/dist/services/tekton.d.ts +14 -0
- package/dist/services/tekton.js +46 -0
- package/dist/services/tekton.js.map +1 -0
- package/dist/services/terraform.d.ts +26 -0
- package/dist/services/terraform.js +63 -0
- package/dist/services/terraform.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DeploymentGroupRolloutError = exports.DeploymentRolloutError = void 0;
|
|
4
|
+
exports.apply = apply;
|
|
5
|
+
exports.del = del;
|
|
6
|
+
exports.delete = del;
|
|
7
|
+
exports.get = get;
|
|
8
|
+
exports.logs = logs;
|
|
9
|
+
exports.rolloutStatus = rolloutStatus;
|
|
10
|
+
exports.setImage = setImage;
|
|
11
|
+
exports.waitForDeployment = waitForDeployment;
|
|
12
|
+
exports.waitForDeploymentGroup = waitForDeploymentGroup;
|
|
13
|
+
const shell_1 = require("./shell");
|
|
14
|
+
function isKubectlOptions(value) {
|
|
15
|
+
return Boolean(value)
|
|
16
|
+
&& typeof value === "object"
|
|
17
|
+
&& !Array.isArray(value)
|
|
18
|
+
&& ("kubeconfig" in value || "namespace" in value || Object.keys(value).length === 0);
|
|
19
|
+
}
|
|
20
|
+
function withGlobalFlags(args, options = {}) {
|
|
21
|
+
const result = [...args];
|
|
22
|
+
if (options.kubeconfig) {
|
|
23
|
+
result.push("--kubeconfig", options.kubeconfig);
|
|
24
|
+
}
|
|
25
|
+
if (options.namespace) {
|
|
26
|
+
result.push("-n", options.namespace);
|
|
27
|
+
}
|
|
28
|
+
return result;
|
|
29
|
+
}
|
|
30
|
+
function apply(file, options = {}) {
|
|
31
|
+
return shell_1.shell.exec("kubectl", ...withGlobalFlags(["apply", "-f", file], options));
|
|
32
|
+
}
|
|
33
|
+
function del(file, options = {}) {
|
|
34
|
+
return shell_1.shell.exec("kubectl", ...withGlobalFlags(["delete", "-f", file], options));
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Igual que antes (`kubectl.get("pods", "-o", "wide")`), pero ahora también
|
|
38
|
+
* acepta KubectlOptions como último argumento:
|
|
39
|
+
* kubectl.get("pods", "-o", "wide", { namespace: "prod" })
|
|
40
|
+
*/
|
|
41
|
+
function get(...rawArgs) {
|
|
42
|
+
let args = rawArgs;
|
|
43
|
+
let options = {};
|
|
44
|
+
const last = rawArgs[rawArgs.length - 1];
|
|
45
|
+
if (rawArgs.length && isKubectlOptions(last)) {
|
|
46
|
+
options = last;
|
|
47
|
+
args = rawArgs.slice(0, -1);
|
|
48
|
+
}
|
|
49
|
+
return shell_1.shell.exec("kubectl", "get", ...withGlobalFlags(args, options));
|
|
50
|
+
}
|
|
51
|
+
function logs(pod, options = {}) {
|
|
52
|
+
return shell_1.shell.exec("kubectl", ...withGlobalFlags(["logs", pod], options));
|
|
53
|
+
}
|
|
54
|
+
function rolloutStatus(deployment, options = {}) {
|
|
55
|
+
return shell_1.shell.exec("kubectl", ...withGlobalFlags(["rollout", "status", deployment], options));
|
|
56
|
+
}
|
|
57
|
+
function setImage(resource, image, options = {}) {
|
|
58
|
+
return shell_1.shell.exec("kubectl", ...withGlobalFlags(["set", "image", resource, image], options));
|
|
59
|
+
}
|
|
60
|
+
// ---------------------------------------------------------------------------
|
|
61
|
+
// waitForDeployment — validación cíclica del rollout de un Deployment
|
|
62
|
+
// ---------------------------------------------------------------------------
|
|
63
|
+
function sleep(ms) {
|
|
64
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Se lanza cuando `waitForDeployment` no llega a un rollout exitoso, ya sea
|
|
68
|
+
* por timeout global, por quedarse en estado Failed sin recuperarse, o por
|
|
69
|
+
* superar el máximo de reinicios permitido. Lleva `command: "kubectl"` para
|
|
70
|
+
* que `classifiers.byCommand({ kubectl: "kubernetes" })` lo clasifique
|
|
71
|
+
* automáticamente si usas el sistema de notificaciones.
|
|
72
|
+
*/
|
|
73
|
+
class DeploymentRolloutError extends Error {
|
|
74
|
+
constructor(message, info) {
|
|
75
|
+
super(message);
|
|
76
|
+
this.command = "kubectl";
|
|
77
|
+
this.name = "DeploymentRolloutError";
|
|
78
|
+
this.status = info.status;
|
|
79
|
+
this.deployment = info.deployment;
|
|
80
|
+
this.elapsedMs = info.elapsedMs;
|
|
81
|
+
this.restarts = info.restarts;
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
exports.DeploymentRolloutError = DeploymentRolloutError;
|
|
85
|
+
async function readDeploymentJSON(name, options) {
|
|
86
|
+
const result = await get(`deployment/${name}`, "-o", "json", options);
|
|
87
|
+
return JSON.parse(result.stdout);
|
|
88
|
+
}
|
|
89
|
+
async function countPodRestarts(matchLabels, options) {
|
|
90
|
+
if (!matchLabels || !Object.keys(matchLabels).length) {
|
|
91
|
+
return 0;
|
|
92
|
+
}
|
|
93
|
+
const selector = Object.entries(matchLabels)
|
|
94
|
+
.map(([key, value]) => `${key}=${value}`)
|
|
95
|
+
.join(",");
|
|
96
|
+
const result = await get("pods", "-l", selector, "-o", "json", options);
|
|
97
|
+
const parsed = JSON.parse(result.stdout);
|
|
98
|
+
return (parsed.items ?? []).reduce((total, pod) => {
|
|
99
|
+
const podRestarts = (pod.status?.containerStatuses ?? [])
|
|
100
|
+
.reduce((sum, container) => sum + (container.restartCount ?? 0), 0);
|
|
101
|
+
return total + podRestarts;
|
|
102
|
+
}, 0);
|
|
103
|
+
}
|
|
104
|
+
function isProgressingFailed(conditions) {
|
|
105
|
+
const progressing = conditions.find(c => c.type === "Progressing");
|
|
106
|
+
if (progressing?.status === "False")
|
|
107
|
+
return true;
|
|
108
|
+
return conditions.some(c => c.type === "ReplicaFailure" && c.status === "True");
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Valida cíclicamente el estado de un Deployment hasta que:
|
|
112
|
+
* - llega a estado exitoso (replicas listas/actualizadas == replicas deseadas) -> resuelve,
|
|
113
|
+
* - supera `maxRestarts` reinicios acumulados -> lanza DeploymentRolloutError,
|
|
114
|
+
* - se queda en estado Failed más de `failedGracePeriod` sin recuperarse -> lanza DeploymentRolloutError,
|
|
115
|
+
* - o se cumple `timeout` sin éxito -> lanza DeploymentRolloutError.
|
|
116
|
+
*
|
|
117
|
+
* En cualquier caso de error, el polling se detiene ("se mata el proceso")
|
|
118
|
+
* y el error se re-lanza, listo para que `ctx.run(...)` lo capture y lo
|
|
119
|
+
* reporte vía `ctx.notifier` si lo tienes configurado.
|
|
120
|
+
*/
|
|
121
|
+
async function waitForDeployment(options) {
|
|
122
|
+
const { deployment, timeout = 300000, pollInterval = 5000, failedGracePeriod = pollInterval * 6, maxRestarts, ...kubectlOptions } = options;
|
|
123
|
+
const startedAt = Date.now();
|
|
124
|
+
let failedSince = null;
|
|
125
|
+
while (true) {
|
|
126
|
+
const elapsedMs = Date.now() - startedAt;
|
|
127
|
+
if (elapsedMs >= timeout) {
|
|
128
|
+
const message = `Timeout esperando el rollout de "${deployment}" (${timeout}ms)`;
|
|
129
|
+
throw new DeploymentRolloutError(message, { status: "timeout", deployment, elapsedMs, restarts: -1 });
|
|
130
|
+
}
|
|
131
|
+
let json;
|
|
132
|
+
try {
|
|
133
|
+
json = await readDeploymentJSON(deployment, kubectlOptions);
|
|
134
|
+
}
|
|
135
|
+
catch {
|
|
136
|
+
// El recurso puede no existir todavía (justo después de un apply); reintenta.
|
|
137
|
+
await sleep(pollInterval);
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
const desired = json.spec?.replicas ?? 1;
|
|
141
|
+
const ready = json.status?.readyReplicas ?? 0;
|
|
142
|
+
const updated = json.status?.updatedReplicas ?? 0;
|
|
143
|
+
const conditions = json.status?.conditions ?? [];
|
|
144
|
+
const failed = isProgressingFailed(conditions);
|
|
145
|
+
const success = !failed && ready >= desired && updated >= desired;
|
|
146
|
+
let restarts = 0;
|
|
147
|
+
if (maxRestarts !== undefined) {
|
|
148
|
+
restarts = await countPodRestarts(json.spec?.selector?.matchLabels, kubectlOptions);
|
|
149
|
+
if (restarts > maxRestarts) {
|
|
150
|
+
const message = `Deployment "${deployment}" superó el máximo de reinicios permitido (${restarts} > ${maxRestarts})`;
|
|
151
|
+
throw new DeploymentRolloutError(message, { status: "failed", deployment, elapsedMs, restarts });
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
if (success) {
|
|
155
|
+
const message = `Deployment "${deployment}" alcanzó el estado esperado (${ready}/${desired} listas)`;
|
|
156
|
+
return { status: "success", deployment, elapsedMs, restarts, message };
|
|
157
|
+
}
|
|
158
|
+
if (failed) {
|
|
159
|
+
if (failedSince === null) {
|
|
160
|
+
failedSince = Date.now();
|
|
161
|
+
}
|
|
162
|
+
else if (Date.now() - failedSince >= failedGracePeriod) {
|
|
163
|
+
const message = `Deployment "${deployment}" quedó en estado Failed y no se recuperó en ${failedGracePeriod}ms`;
|
|
164
|
+
throw new DeploymentRolloutError(message, { status: "failed", deployment, elapsedMs, restarts });
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
else {
|
|
168
|
+
failedSince = null;
|
|
169
|
+
}
|
|
170
|
+
await sleep(pollInterval);
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Se lanza cuando `waitForDeploymentGroup` no logra que TODAS las instancias
|
|
175
|
+
* del grupo lleguen a estado exitoso. Lleva `command: "kubectl"` para que
|
|
176
|
+
* `classifiers.byCommand({ kubectl: "kubernetes" })` lo clasifique solo.
|
|
177
|
+
*/
|
|
178
|
+
class DeploymentGroupRolloutError extends Error {
|
|
179
|
+
constructor(message, info) {
|
|
180
|
+
super(message);
|
|
181
|
+
this.command = "kubectl";
|
|
182
|
+
this.name = "DeploymentGroupRolloutError";
|
|
183
|
+
this.label = info.label;
|
|
184
|
+
this.elapsedMs = info.elapsedMs;
|
|
185
|
+
this.succeeded = info.succeeded;
|
|
186
|
+
this.failed = info.failed;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
exports.DeploymentGroupRolloutError = DeploymentGroupRolloutError;
|
|
190
|
+
function toSelectorString(label) {
|
|
191
|
+
if (typeof label === "string")
|
|
192
|
+
return label;
|
|
193
|
+
return Object.entries(label)
|
|
194
|
+
.map(([key, value]) => `${key}=${value}`)
|
|
195
|
+
.join(",");
|
|
196
|
+
}
|
|
197
|
+
async function listDeploymentNames(selector, options) {
|
|
198
|
+
const result = await get("deployments", "-l", selector, "-o", "json", options);
|
|
199
|
+
const parsed = JSON.parse(result.stdout);
|
|
200
|
+
return (parsed.items ?? [])
|
|
201
|
+
.map(item => item.metadata?.name)
|
|
202
|
+
.filter((name) => Boolean(name));
|
|
203
|
+
}
|
|
204
|
+
/**
|
|
205
|
+
* Descubre todos los Deployments que compartan el `label` dado (p. ej.
|
|
206
|
+
* todas las instancias GitOps de un mismo repo, marcadas con
|
|
207
|
+
* `deployment-group: repository-14`) y espera a que TODAS lleguen a estado
|
|
208
|
+
* exitoso, corriendo `waitForDeployment` por cada una en paralelo con el
|
|
209
|
+
* mismo `timeout` global.
|
|
210
|
+
*
|
|
211
|
+
* Si alguna instancia falla (timeout individual, Failed sin recuperarse, o
|
|
212
|
+
* maxRestarts superado), se espera a que terminen las demás y se lanza
|
|
213
|
+
* `DeploymentGroupRolloutError` con el detalle de cuáles fallaron y cuáles sí
|
|
214
|
+
* llegaron a estado exitoso — listo para que `ctx.run(...)` lo capture y lo
|
|
215
|
+
* reporte vía `ctx.notifier`.
|
|
216
|
+
*/
|
|
217
|
+
async function waitForDeploymentGroup(options) {
|
|
218
|
+
const { label, timeout = 300000, pollInterval = 5000, failedGracePeriod = pollInterval * 6, maxRestarts, ...kubectlOptions } = options;
|
|
219
|
+
const selector = toSelectorString(label);
|
|
220
|
+
const startedAt = Date.now();
|
|
221
|
+
const names = await listDeploymentNames(selector, kubectlOptions);
|
|
222
|
+
if (!names.length) {
|
|
223
|
+
const message = `No se encontraron deployments con el label "${selector}"`;
|
|
224
|
+
throw new DeploymentGroupRolloutError(message, {
|
|
225
|
+
label: selector,
|
|
226
|
+
elapsedMs: Date.now() - startedAt,
|
|
227
|
+
succeeded: [],
|
|
228
|
+
failed: []
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
const remainingMs = () => Math.max(0, timeout - (Date.now() - startedAt));
|
|
232
|
+
const settled = await Promise.allSettled(names.map(deployment => waitForDeployment({
|
|
233
|
+
deployment,
|
|
234
|
+
timeout: remainingMs(),
|
|
235
|
+
pollInterval,
|
|
236
|
+
failedGracePeriod,
|
|
237
|
+
maxRestarts,
|
|
238
|
+
...kubectlOptions
|
|
239
|
+
})));
|
|
240
|
+
const succeeded = [];
|
|
241
|
+
const failed = [];
|
|
242
|
+
const deployments = [];
|
|
243
|
+
settled.forEach((outcome, index) => {
|
|
244
|
+
const name = names[index];
|
|
245
|
+
if (outcome.status === "fulfilled") {
|
|
246
|
+
succeeded.push(name);
|
|
247
|
+
deployments.push(outcome.value);
|
|
248
|
+
return;
|
|
249
|
+
}
|
|
250
|
+
const reason = outcome.reason;
|
|
251
|
+
failed.push({
|
|
252
|
+
deployment: name,
|
|
253
|
+
status: reason?.status ?? "failed",
|
|
254
|
+
message: reason?.message ?? String(outcome.reason)
|
|
255
|
+
});
|
|
256
|
+
});
|
|
257
|
+
const elapsedMs = Date.now() - startedAt;
|
|
258
|
+
if (failed.length) {
|
|
259
|
+
const summary = failed.map(f => `${f.deployment} (${f.status})`).join(", ");
|
|
260
|
+
const message = `${failed.length}/${names.length} deployments del grupo "${selector}" no llegaron a estado exitoso: ${summary}`;
|
|
261
|
+
throw new DeploymentGroupRolloutError(message, { label: selector, elapsedMs, succeeded, failed });
|
|
262
|
+
}
|
|
263
|
+
const message = `Los ${names.length} deployments del grupo "${selector}" alcanzaron el estado esperado`;
|
|
264
|
+
return { status: "success", label: selector, elapsedMs, deployments, message };
|
|
265
|
+
}
|
|
266
|
+
//# sourceMappingURL=kubectl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kubectl.js","sourceRoot":"","sources":["../../src/services/kubectl.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ExecResult } from "../core/types";
|
|
2
|
+
export declare function install(): Promise<ExecResult>;
|
|
3
|
+
export declare function ci(): Promise<ExecResult>;
|
|
4
|
+
export declare function run(script: string): Promise<ExecResult>;
|
|
5
|
+
export declare function publish(): Promise<ExecResult>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.install = install;
|
|
4
|
+
exports.ci = ci;
|
|
5
|
+
exports.run = run;
|
|
6
|
+
exports.publish = publish;
|
|
7
|
+
const shell_1 = require("./shell");
|
|
8
|
+
function install() {
|
|
9
|
+
return shell_1.shell.exec("npm", "install");
|
|
10
|
+
}
|
|
11
|
+
function ci() {
|
|
12
|
+
return shell_1.shell.exec("npm", "ci");
|
|
13
|
+
}
|
|
14
|
+
function run(script) {
|
|
15
|
+
return shell_1.shell.exec("npm", "run", script);
|
|
16
|
+
}
|
|
17
|
+
function publish() {
|
|
18
|
+
return shell_1.shell.exec("npm", "publish");
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=npm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npm.js","sourceRoot":"","sources":["../../src/services/npm.ts"],"names":[],"mappings":";;AAGA,0BAEC;AAED,gBAEC;AAED,kBAEC;AAED,0BAEC;AAjBD,mCAAgC;AAGhC,SAAgB,OAAO;IACnB,OAAO,aAAK,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACxC,CAAC;AAED,SAAgB,EAAE;IACd,OAAO,aAAK,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACnC,CAAC;AAED,SAAgB,GAAG,CAAC,MAAc;IAC9B,OAAO,aAAK,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED,SAAgB,OAAO;IACnB,OAAO,aAAK,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import type { ExecResult } from "../core/types";
|
|
2
|
+
export interface OcOptions {
|
|
3
|
+
/** Ruta al archivo kubeconfig. Se pasa como --kubeconfig <path>. */
|
|
4
|
+
kubeconfig?: string;
|
|
5
|
+
/** Namespace/proyecto destino. Se pasa como -n <namespace>. */
|
|
6
|
+
namespace?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface OcLoginOptions extends OcOptions {
|
|
9
|
+
server: string;
|
|
10
|
+
token?: string;
|
|
11
|
+
username?: string;
|
|
12
|
+
password?: string;
|
|
13
|
+
insecureSkipTlsVerify?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export interface OcStartBuildOptions extends OcOptions {
|
|
16
|
+
follow?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export declare function login({ server, token, username, password, insecureSkipTlsVerify, ...options }: OcLoginOptions): Promise<ExecResult>;
|
|
19
|
+
export declare function project(name: string, options?: OcOptions): Promise<ExecResult>;
|
|
20
|
+
export declare function apply(file: string, options?: OcOptions): Promise<ExecResult>;
|
|
21
|
+
/**
|
|
22
|
+
* Igual que antes (`oc.get("pods", "-o", "wide")`), pero ahora también
|
|
23
|
+
* acepta OcOptions como último argumento:
|
|
24
|
+
* oc.get("pods", "-o", "wide", { namespace: "prod" })
|
|
25
|
+
*/
|
|
26
|
+
export declare function get(...rawArgs: Array<string | OcOptions>): Promise<ExecResult>;
|
|
27
|
+
export declare function rollout(deployment: string, options?: OcOptions): Promise<ExecResult>;
|
|
28
|
+
export declare function newApp(...args: string[]): Promise<ExecResult>;
|
|
29
|
+
export declare function startBuild(buildConfig: string, { follow, ...options }?: OcStartBuildOptions): Promise<ExecResult>;
|
|
30
|
+
export declare function logs(pod: string, options?: OcOptions): Promise<ExecResult>;
|
|
31
|
+
export type DeploymentRolloutStatus = "success" | "failed" | "timeout";
|
|
32
|
+
export interface DeploymentWatchResult {
|
|
33
|
+
status: DeploymentRolloutStatus;
|
|
34
|
+
deployment: string;
|
|
35
|
+
elapsedMs: number;
|
|
36
|
+
restarts: number;
|
|
37
|
+
message: string;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Se lanza cuando `waitForDeployment` no llega a un rollout exitoso. Lleva
|
|
41
|
+
* `command: "oc"` para que `classifiers.byCommand({ oc: "kubernetes" })`
|
|
42
|
+
* lo clasifique automáticamente si usas el sistema de notificaciones.
|
|
43
|
+
*/
|
|
44
|
+
export declare class DeploymentRolloutError extends Error {
|
|
45
|
+
readonly command = "oc";
|
|
46
|
+
readonly status: DeploymentRolloutStatus;
|
|
47
|
+
readonly deployment: string;
|
|
48
|
+
readonly elapsedMs: number;
|
|
49
|
+
readonly restarts: number;
|
|
50
|
+
constructor(message: string, info: Omit<DeploymentWatchResult, "message">);
|
|
51
|
+
}
|
|
52
|
+
export interface WaitForDeploymentOptions extends OcOptions {
|
|
53
|
+
/** Nombre del deployment/deploymentconfig, sin prefijo de recurso. */
|
|
54
|
+
deployment: string;
|
|
55
|
+
/** "deployment" (k8s nativo, default) o "dc" (DeploymentConfig clásico de OpenShift). */
|
|
56
|
+
resourceType?: "deployment" | "dc";
|
|
57
|
+
/** Milisegundos totales antes de abortar y reportar error. Default: 300000 (5 min). */
|
|
58
|
+
timeout?: number;
|
|
59
|
+
/** Milisegundos entre cada chequeo. Default: 5000. */
|
|
60
|
+
pollInterval?: number;
|
|
61
|
+
/**
|
|
62
|
+
* Si el recurso entra en estado Failed, milisegundos a esperar para ver
|
|
63
|
+
* si se recupera solo antes de darlo por fallido. Default: `pollInterval * 6`.
|
|
64
|
+
*/
|
|
65
|
+
failedGracePeriod?: number;
|
|
66
|
+
/**
|
|
67
|
+
* Máximo de reinicios (sumados entre todos los pods/containers) tolerados
|
|
68
|
+
* antes de abortar inmediatamente. Si no se pasa, no se valida.
|
|
69
|
+
*/
|
|
70
|
+
maxRestarts?: number;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Valida cíclicamente el estado de un Deployment/DeploymentConfig hasta que:
|
|
74
|
+
* - llega a estado exitoso (replicas listas/actualizadas == replicas deseadas) -> resuelve,
|
|
75
|
+
* - supera `maxRestarts` reinicios acumulados -> lanza DeploymentRolloutError,
|
|
76
|
+
* - se queda en estado Failed más de `failedGracePeriod` sin recuperarse -> lanza DeploymentRolloutError,
|
|
77
|
+
* - o se cumple `timeout` sin éxito -> lanza DeploymentRolloutError.
|
|
78
|
+
*
|
|
79
|
+
* El polling se detiene ("se mata el proceso") apenas se detecta cualquiera
|
|
80
|
+
* de las condiciones de fallo, re-lanzando el error para que `ctx.run(...)`
|
|
81
|
+
* lo capture y lo reporte vía `ctx.notifier` si lo tienes configurado.
|
|
82
|
+
*/
|
|
83
|
+
export declare function waitForDeployment(options: WaitForDeploymentOptions): Promise<DeploymentWatchResult>;
|
|
84
|
+
export type DeploymentGroupStatus = "success" | "failed" | "timeout";
|
|
85
|
+
export interface DeploymentGroupFailure {
|
|
86
|
+
deployment: string;
|
|
87
|
+
status: DeploymentRolloutStatus;
|
|
88
|
+
message: string;
|
|
89
|
+
}
|
|
90
|
+
export interface DeploymentGroupWatchResult {
|
|
91
|
+
status: "success";
|
|
92
|
+
label: string;
|
|
93
|
+
elapsedMs: number;
|
|
94
|
+
deployments: DeploymentWatchResult[];
|
|
95
|
+
message: string;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Se lanza cuando `waitForDeploymentGroup` no logra que TODAS las instancias
|
|
99
|
+
* del grupo lleguen a estado exitoso. Lleva `command: "oc"` para que
|
|
100
|
+
* `classifiers.byCommand({ oc: "kubernetes" })` lo clasifique solo.
|
|
101
|
+
*/
|
|
102
|
+
export declare class DeploymentGroupRolloutError extends Error {
|
|
103
|
+
readonly command = "oc";
|
|
104
|
+
readonly label: string;
|
|
105
|
+
readonly elapsedMs: number;
|
|
106
|
+
readonly succeeded: string[];
|
|
107
|
+
readonly failed: DeploymentGroupFailure[];
|
|
108
|
+
constructor(message: string, info: {
|
|
109
|
+
label: string;
|
|
110
|
+
elapsedMs: number;
|
|
111
|
+
succeeded: string[];
|
|
112
|
+
failed: DeploymentGroupFailure[];
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
export interface WaitForDeploymentGroupOptions extends OcOptions {
|
|
116
|
+
/**
|
|
117
|
+
* Label que agrupa todas las instancias del despliegue. Puede ser el
|
|
118
|
+
* selector ya armado ("deployment-group=repository-14") o un objeto
|
|
119
|
+
* ({ "deployment-group": "repository-14" }).
|
|
120
|
+
*/
|
|
121
|
+
label: string | Record<string, string>;
|
|
122
|
+
/** "deployment" (k8s nativo, default) o "dc" (DeploymentConfig clásico de OpenShift). */
|
|
123
|
+
resourceType?: "deployment" | "dc";
|
|
124
|
+
/** Milisegundos totales antes de abortar el grupo entero. Default: 300000 (5 min). */
|
|
125
|
+
timeout?: number;
|
|
126
|
+
/** Milisegundos entre cada chequeo, por instancia. Default: 5000. */
|
|
127
|
+
pollInterval?: number;
|
|
128
|
+
/** Igual que en waitForDeployment, aplicado a cada instancia del grupo. */
|
|
129
|
+
failedGracePeriod?: number;
|
|
130
|
+
/** Igual que en waitForDeployment, aplicado a cada instancia del grupo. */
|
|
131
|
+
maxRestarts?: number;
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Descubre todos los Deployments/DeploymentConfigs que compartan el `label`
|
|
135
|
+
* dado (p. ej. todas las instancias GitOps de un mismo repo, marcadas con
|
|
136
|
+
* `deployment-group: repository-14`) y espera a que TODAS lleguen a estado
|
|
137
|
+
* exitoso, corriendo `waitForDeployment` por cada una en paralelo con el
|
|
138
|
+
* mismo `timeout` global.
|
|
139
|
+
*
|
|
140
|
+
* Si alguna instancia falla (timeout individual, Failed sin recuperarse, o
|
|
141
|
+
* maxRestarts superado), se espera a que terminen las demás y se lanza
|
|
142
|
+
* `DeploymentGroupRolloutError` con el detalle de cuáles fallaron y cuáles sí
|
|
143
|
+
* llegaron a estado exitoso — listo para que `ctx.run(...)` lo capture y lo
|
|
144
|
+
* reporte vía `ctx.notifier`.
|
|
145
|
+
*/
|
|
146
|
+
export declare function waitForDeploymentGroup(options: WaitForDeploymentGroupOptions): Promise<DeploymentGroupWatchResult>;
|