typekro 0.25.0 → 0.27.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/.tsbuildinfo +1 -1
- package/dist/alchemy/kro-delete.d.ts +8 -0
- package/dist/alchemy/kro-delete.d.ts.map +1 -1
- package/dist/alchemy/kro-delete.js +34 -35
- package/dist/alchemy/kro-delete.js.map +1 -1
- package/dist/alchemy/resource-registration.d.ts +60 -0
- package/dist/alchemy/resource-registration.d.ts.map +1 -1
- package/dist/alchemy/resource-registration.js +290 -11
- package/dist/alchemy/resource-registration.js.map +1 -1
- package/dist/alchemy/types.d.ts +44 -0
- package/dist/alchemy/types.d.ts.map +1 -1
- package/dist/core/deployment/direct-factory.d.ts +8 -1
- package/dist/core/deployment/direct-factory.d.ts.map +1 -1
- package/dist/core/deployment/direct-factory.js +80 -61
- package/dist/core/deployment/direct-factory.js.map +1 -1
- package/dist/core/deployment/engine.d.ts +2 -0
- package/dist/core/deployment/engine.d.ts.map +1 -1
- package/dist/core/deployment/engine.js +22 -1
- package/dist/core/deployment/engine.js.map +1 -1
- package/dist/core/deployment/k8s-helpers.d.ts +12 -0
- package/dist/core/deployment/k8s-helpers.d.ts.map +1 -1
- package/dist/core/deployment/k8s-helpers.js +26 -1
- package/dist/core/deployment/k8s-helpers.js.map +1 -1
- package/dist/core/deployment/kro-factory.d.ts +248 -1
- package/dist/core/deployment/kro-factory.d.ts.map +1 -1
- package/dist/core/deployment/kro-factory.js +1060 -180
- package/dist/core/deployment/kro-factory.js.map +1 -1
- package/dist/core/deployment/kro-instance-safety.d.ts +209 -0
- package/dist/core/deployment/kro-instance-safety.d.ts.map +1 -1
- package/dist/core/deployment/kro-instance-safety.js +506 -24
- package/dist/core/deployment/kro-instance-safety.js.map +1 -1
- package/dist/core/deployment/kro-namespace-teardown.d.ts +248 -0
- package/dist/core/deployment/kro-namespace-teardown.d.ts.map +1 -0
- package/dist/core/deployment/kro-namespace-teardown.js +459 -0
- package/dist/core/deployment/kro-namespace-teardown.js.map +1 -0
- package/dist/core/deployment/readiness-waiter.d.ts.map +1 -1
- package/dist/core/deployment/readiness-waiter.js +6 -2
- package/dist/core/deployment/readiness-waiter.js.map +1 -1
- package/dist/core/deployment/rollback-manager.d.ts +33 -1
- package/dist/core/deployment/rollback-manager.d.ts.map +1 -1
- package/dist/core/deployment/rollback-manager.js +85 -30
- package/dist/core/deployment/rollback-manager.js.map +1 -1
- package/dist/core/serialization/core.d.ts.map +1 -1
- package/dist/core/serialization/core.js +82 -8
- package/dist/core/serialization/core.js.map +1 -1
- package/dist/core/types/deployment.d.ts +20 -0
- package/dist/core/types/deployment.d.ts.map +1 -1
- package/dist/factories/index.d.ts +1 -0
- package/dist/factories/index.d.ts.map +1 -1
- package/dist/factories/index.js +4 -0
- package/dist/factories/index.js.map +1 -1
- package/dist/factories/nats/compositions/index.d.ts +2 -0
- package/dist/factories/nats/compositions/index.d.ts.map +1 -0
- package/dist/factories/nats/compositions/index.js +2 -0
- package/dist/factories/nats/compositions/index.js.map +1 -0
- package/dist/factories/nats/compositions/nats-bootstrap.d.ts +49 -0
- package/dist/factories/nats/compositions/nats-bootstrap.d.ts.map +1 -0
- package/dist/factories/nats/compositions/nats-bootstrap.js +135 -0
- package/dist/factories/nats/compositions/nats-bootstrap.js.map +1 -0
- package/dist/factories/nats/index.d.ts +5 -0
- package/dist/factories/nats/index.d.ts.map +1 -0
- package/dist/factories/nats/index.js +5 -0
- package/dist/factories/nats/index.js.map +1 -0
- package/dist/factories/nats/resources/helm.d.ts +28 -0
- package/dist/factories/nats/resources/helm.d.ts.map +1 -0
- package/dist/factories/nats/resources/helm.js +39 -0
- package/dist/factories/nats/resources/helm.js.map +1 -0
- package/dist/factories/nats/resources/index.d.ts +3 -0
- package/dist/factories/nats/resources/index.d.ts.map +1 -0
- package/dist/factories/nats/resources/index.js +3 -0
- package/dist/factories/nats/resources/index.js.map +1 -0
- package/dist/factories/nats/resources/jetstream.d.ts +13 -0
- package/dist/factories/nats/resources/jetstream.d.ts.map +1 -0
- package/dist/factories/nats/resources/jetstream.js +105 -0
- package/dist/factories/nats/resources/jetstream.js.map +1 -0
- package/dist/factories/nats/types.d.ts +91 -0
- package/dist/factories/nats/types.d.ts.map +1 -0
- package/dist/factories/nats/types.js +72 -0
- package/dist/factories/nats/types.js.map +1 -0
- package/dist/factories/rook/types.d.ts +1 -1
- package/dist/utils/string.d.ts +14 -0
- package/dist/utils/string.d.ts.map +1 -1
- package/dist/utils/string.js +22 -0
- package/dist/utils/string.js.map +1 -1
- package/package.json +5 -1
|
@@ -0,0 +1,459 @@
|
|
|
1
|
+
import { ensureError } from '../errors.js';
|
|
2
|
+
import { createBunCompatibleApiClient, createBunCompatibleKubernetesObjectApi, } from '../kubernetes/bun-api-client.js';
|
|
3
|
+
import { getComponentLogger } from '../logging/index.js';
|
|
4
|
+
import { isConflictError } from './k8s-helpers.js';
|
|
5
|
+
import { createRollbackManager } from './rollback-manager.js';
|
|
6
|
+
/**
|
|
7
|
+
* Annotation stamped on a hoisted workload Namespace at CREATE time, recording
|
|
8
|
+
* the RGD that created it — the durable ownership RECORD used by teardown. A
|
|
9
|
+
* Namespace is a deletion candidate ONLY if it carries this annotation set to
|
|
10
|
+
* THIS composition's RGD name (i.e. typekro created it for this composition);
|
|
11
|
+
* an adopted/pre-existing Namespace never carries it and is never deleted.
|
|
12
|
+
*/
|
|
13
|
+
export const NAMESPACE_OWNER_ANNOTATION = 'typekro.io/created-by-rgd';
|
|
14
|
+
/**
|
|
15
|
+
* Annotation stamped on the instance CR at DEPLOY time recording the CONCRETE names
|
|
16
|
+
* of every Namespace this instance hoisted out of the RGD graph (finding #4). Value is
|
|
17
|
+
* a JSON array of names (e.g. `["team-a","team-a-monitoring"]`). Teardown + the pre-hoist
|
|
18
|
+
* guard read it back EXACTLY so a hoisted name derived from an ARBITRARY spec field (e.g.
|
|
19
|
+
* `spec.targetNamespace`) round-trips without re-deriving it from `metadata.namespace` /
|
|
20
|
+
* `spec.namespace` (which can be wrong for non-1:1 hoists).
|
|
21
|
+
*/
|
|
22
|
+
export const HOISTED_NAMESPACES_ANNOTATION = 'typekro.io/hoisted-namespaces';
|
|
23
|
+
/**
|
|
24
|
+
* Parse the {@link HOISTED_NAMESPACES_ANNOTATION} value back into a list of namespace
|
|
25
|
+
* names. Tolerant: a missing/blank value yields `[]`; a malformed value yields `[]`
|
|
26
|
+
* (callers decide the fallback). Only string entries are returned.
|
|
27
|
+
*/
|
|
28
|
+
export function parseHoistedNamespacesAnnotation(value) {
|
|
29
|
+
if (typeof value !== 'string' || value.trim().length === 0)
|
|
30
|
+
return [];
|
|
31
|
+
try {
|
|
32
|
+
const parsed = JSON.parse(value);
|
|
33
|
+
if (!Array.isArray(parsed))
|
|
34
|
+
return [];
|
|
35
|
+
return parsed.filter((n) => typeof n === 'string' && n.length > 0);
|
|
36
|
+
}
|
|
37
|
+
catch {
|
|
38
|
+
return [];
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export function readHoistedNamespacesRecord(value) {
|
|
42
|
+
if (typeof value !== 'string' || value.trim().length === 0)
|
|
43
|
+
return { status: 'missing' };
|
|
44
|
+
let parsed;
|
|
45
|
+
try {
|
|
46
|
+
parsed = JSON.parse(value);
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
return { status: 'malformed' };
|
|
50
|
+
}
|
|
51
|
+
if (!Array.isArray(parsed))
|
|
52
|
+
return { status: 'malformed' };
|
|
53
|
+
// STRICT: reject the ENTIRE array (→ fail closed) unless EVERY element is a non-empty string.
|
|
54
|
+
// Filtering junk out (e.g. [42] or [""] → []) would masquerade as a valid empty record and let
|
|
55
|
+
// the guard proceed WITHOUT protecting the intended namespace. An empty [] is vacuously valid.
|
|
56
|
+
if (!parsed.every((n) => typeof n === 'string' && n.length > 0)) {
|
|
57
|
+
return { status: 'malformed' };
|
|
58
|
+
}
|
|
59
|
+
return { status: 'present', names: parsed };
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* List the NAMES of every Namespace carrying {@link NAMESPACE_OWNER_ANNOTATION} == `rgdName`
|
|
63
|
+
* — the DURABLE, cluster-side record of every workload Namespace typekro created for this RGD.
|
|
64
|
+
*
|
|
65
|
+
* Unlike the CR's {@link HOISTED_NAMESPACES_ANNOTATION} (which dies WITH the instance CR), this
|
|
66
|
+
* record survives the CR, so:
|
|
67
|
+
* - a teardown RETRY after the CR is already gone can still FIND + clean the owned
|
|
68
|
+
* namespace(s) (and gate the RGD/CRD delete on their cleanup), and
|
|
69
|
+
* - the pre-hoist guard can resolve an existing instance's namespaces EXACTLY without
|
|
70
|
+
* approximating from `metadata.namespace` / `spec.namespace`.
|
|
71
|
+
*
|
|
72
|
+
* Lists cluster-wide (small N in practice) and filters client-side by the ownership
|
|
73
|
+
* annotation, FOLLOWING the list continuation token so an owned namespace beyond the first
|
|
74
|
+
* page is never hidden by a silent cap. A list error PROPAGATES (callers fail closed /
|
|
75
|
+
* preserve): an unreadable list is not proof that no owned namespace exists.
|
|
76
|
+
*/
|
|
77
|
+
export async function listNamespacesOwnedByRgd(kubeConfig, rgdName, options = {}) {
|
|
78
|
+
const k8sApi = options.k8sApi ?? createBunCompatibleKubernetesObjectApi(kubeConfig);
|
|
79
|
+
const owned = [];
|
|
80
|
+
let continueToken;
|
|
81
|
+
do {
|
|
82
|
+
const result = (await k8sApi.list('v1', 'Namespace', undefined, // namespace (cluster-scoped)
|
|
83
|
+
undefined, // pretty
|
|
84
|
+
undefined, // exact
|
|
85
|
+
undefined, // export
|
|
86
|
+
undefined, // fieldSelector
|
|
87
|
+
undefined, // labelSelector
|
|
88
|
+
100, // limit
|
|
89
|
+
continueToken // continue
|
|
90
|
+
));
|
|
91
|
+
for (const item of result.items ?? []) {
|
|
92
|
+
const name = item.metadata?.name;
|
|
93
|
+
if (typeof name === 'string' &&
|
|
94
|
+
name.length > 0 &&
|
|
95
|
+
item.metadata?.annotations?.[NAMESPACE_OWNER_ANNOTATION] === rgdName) {
|
|
96
|
+
owned.push(name);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
const next = result.metadata?.continue;
|
|
100
|
+
continueToken = typeof next === 'string' && next.length > 0 ? next : undefined;
|
|
101
|
+
} while (continueToken);
|
|
102
|
+
return owned;
|
|
103
|
+
}
|
|
104
|
+
/** Default bound for the gated Namespace delete (poll to a real 404, then throw). */
|
|
105
|
+
const DEFAULT_NAMESPACE_DELETE_TIMEOUT_MS = 120_000;
|
|
106
|
+
/** The API group of a `group/version` (or `v1` core, whose group is `""`). */
|
|
107
|
+
function groupOfApiVersion(apiVersion) {
|
|
108
|
+
return apiVersion.includes('/') ? (apiVersion.split('/')[0] ?? '') : '';
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Whether an object found in a namespace is a k8s AUTO-PROVISIONED default that does
|
|
112
|
+
* NOT count as "occupied" — every namespace has these regardless of what a
|
|
113
|
+
* user/stack put in it:
|
|
114
|
+
* - the `default` ServiceAccount,
|
|
115
|
+
* - the `kube-root-ca.crt` ConfigMap (the injected cluster CA bundle),
|
|
116
|
+
* - `default-token-*` Secrets (older k8s auto-mounted the SA token this way).
|
|
117
|
+
*
|
|
118
|
+
* `Event` objects are handled at DISCOVERY time ({@link isEventType}) — they are
|
|
119
|
+
* transient, controller-generated bookkeeping (a just-drained namespace still holds
|
|
120
|
+
* deletion Events for up to the event TTL), never a resource a user/stack owns, so
|
|
121
|
+
* they must not pin an otherwise-empty namespace open. Treating them as occupants
|
|
122
|
+
* would make the gate almost never fire. This is a deliberate, documented extension
|
|
123
|
+
* of the brief's three-item default list.
|
|
124
|
+
*
|
|
125
|
+
* Keyed by GROUP + kind + name (finding #5): the built-in defaults all live in the
|
|
126
|
+
* CORE group (`""`). Keying by kind/name alone would wrongly exempt an unrelated CRD
|
|
127
|
+
* whose kind happened to be `ServiceAccount` / `ConfigMap` / `Secret` in some OTHER
|
|
128
|
+
* group — a real occupant — from the emptiness gate.
|
|
129
|
+
*/
|
|
130
|
+
export function isAutoProvisionedDefault(group, kind, name) {
|
|
131
|
+
if (group !== '')
|
|
132
|
+
return false; // only genuine CORE-group built-ins are defaults
|
|
133
|
+
if (kind === 'ServiceAccount' && name === 'default')
|
|
134
|
+
return true;
|
|
135
|
+
if (kind === 'ConfigMap' && name === 'kube-root-ca.crt')
|
|
136
|
+
return true;
|
|
137
|
+
if (kind === 'Secret' && name.startsWith('default-token-'))
|
|
138
|
+
return true;
|
|
139
|
+
return false;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Event types — transient, never counted as occupants. Keyed by GROUP + kind (finding
|
|
143
|
+
* #5): only the CORE-group (`""`) `Event` and the `events.k8s.io` `Event` are exempted,
|
|
144
|
+
* so an unrelated CRD named `Event` in some OTHER group is still treated as an occupant.
|
|
145
|
+
*/
|
|
146
|
+
export function isEventType(group, kind) {
|
|
147
|
+
return kind === 'Event' && (group === '' || group === 'events.k8s.io');
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Classify whether `namespace` is EMPTY (safe to delete) by enumerating every
|
|
151
|
+
* namespaced resource type via discovery and listing each in the namespace. Returns
|
|
152
|
+
* `empty: true` ONLY when nothing but k8s auto-provisioned defaults is present.
|
|
153
|
+
*
|
|
154
|
+
* FAIL SAFE (finding #3 + #4): on ANY uncertainty — discovery error, a per-type list
|
|
155
|
+
* error, or an unexpected occupant — the verdict is `empty: false` (RETAIN). Deleting
|
|
156
|
+
* an occupied namespace is high harm; retaining an empty one is low harm, so every
|
|
157
|
+
* ambiguity resolves toward RETAIN.
|
|
158
|
+
*/
|
|
159
|
+
export async function classifyNamespaceEmptiness(inventory, namespace, logger = getComponentLogger('kro-namespace-teardown')) {
|
|
160
|
+
let types;
|
|
161
|
+
try {
|
|
162
|
+
types = await inventory.discoverNamespacedTypes();
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
return {
|
|
166
|
+
empty: false,
|
|
167
|
+
reason: `API discovery of namespaced types failed (retaining to be safe): ${ensureError(error).message}`,
|
|
168
|
+
};
|
|
169
|
+
}
|
|
170
|
+
for (const type of types) {
|
|
171
|
+
const group = groupOfApiVersion(type.apiVersion);
|
|
172
|
+
if (isEventType(group, type.kind))
|
|
173
|
+
continue; // transient bookkeeping — never an occupant
|
|
174
|
+
let names;
|
|
175
|
+
try {
|
|
176
|
+
names = await inventory.listObjectNames(type, namespace);
|
|
177
|
+
}
|
|
178
|
+
catch (error) {
|
|
179
|
+
// Fail toward RETAIN: we could not prove this type is absent.
|
|
180
|
+
return {
|
|
181
|
+
empty: false,
|
|
182
|
+
reason: `could not list ${type.apiVersion}/${type.kind} in "${namespace}" (retaining to be safe): ${ensureError(error).message}`,
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
for (const name of names) {
|
|
186
|
+
if (!isAutoProvisionedDefault(group, type.kind, name)) {
|
|
187
|
+
return {
|
|
188
|
+
empty: false,
|
|
189
|
+
reason: `namespace "${namespace}" still contains ${type.apiVersion}/${type.kind} "${name}" (another stack or user owns resources here)`,
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
logger.debug('Emptiness check: type clear', {
|
|
194
|
+
namespace,
|
|
195
|
+
type: `${type.apiVersion}/${type.kind}`,
|
|
196
|
+
count: names.length,
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
return { empty: true };
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* The OWNERSHIP-gated + EMPTY-gated delete (findings #3 + #4), shared by BOTH the
|
|
203
|
+
* imperative `deleteInstance` path and the Alchemy teardown handler.
|
|
204
|
+
*
|
|
205
|
+
* ORDER: this runs AFTER the instance CR is gone (KRO has graph-deleted every child)
|
|
206
|
+
* but BEFORE the RGD/CRD teardown — the current teardown order is CR → namespace →
|
|
207
|
+
* RGD → CRD (the generated CRD is torn down LAST). Deleting the namespace while the
|
|
208
|
+
* RGD + CRD are still HEALTHY/Active is deliberate: the namespace controller confirms
|
|
209
|
+
* emptiness instantly and can never terminate against a *Terminating* CRD (upstream
|
|
210
|
+
* kro #1171). Never scans-and-deletes arbitrary namespaces: the caller passes exactly
|
|
211
|
+
* the namespace THIS instance declared/hoisted.
|
|
212
|
+
*
|
|
213
|
+
* TWO GATES, ownership PRIMARY: with `ownedByRgd` set (both callers pass it), the
|
|
214
|
+
* namespace is deleted ONLY if it carries {@link NAMESPACE_OWNER_ANNOTATION} equal to
|
|
215
|
+
* this RGD (typekro CREATED it) AND is empty. An ADOPTED/undeclared namespace (no
|
|
216
|
+
* matching stamp) is RETAINED — never deleted — as is one another stack/user still
|
|
217
|
+
* OCCUPIES (non-empty) or one that cannot be read (fail-safe retain).
|
|
218
|
+
*
|
|
219
|
+
* GATED (not best-effort): a pre-delete 404 is benign (already gone), but the delete
|
|
220
|
+
* itself polls to a real 404 and THROWS {@link DeploymentTimeoutError} on timeout — a
|
|
221
|
+
* stuck namespace finalizer surfaces as an error, never a silently-abandoned
|
|
222
|
+
* Terminating namespace. (The generated-CRD delete, a LATER step in `deleteInstance`,
|
|
223
|
+
* is the only best-effort deletion — see {@link KroResourceFactoryImpl.deleteInstance}.)
|
|
224
|
+
*/
|
|
225
|
+
export async function deleteNamespaceIfEmpty(kubeConfig, namespace, options = {}) {
|
|
226
|
+
const logger = options.logger ?? getComponentLogger('kro-namespace-teardown');
|
|
227
|
+
const context = options.context ?? {};
|
|
228
|
+
const k8sApi = options.k8sApi ?? createBunCompatibleKubernetesObjectApi(kubeConfig);
|
|
229
|
+
// Early existence + OWNERSHIP check FIRST — one read serves both. A 404 means the
|
|
230
|
+
// namespace is already gone (skip discovery entirely). Any OTHER read error →
|
|
231
|
+
// fail-safe RETAIN. When `ownedByRgd` is set, the same read proves ownership: only a
|
|
232
|
+
// namespace typekro created for THIS RGD (matching annotation) is a candidate; an
|
|
233
|
+
// adopted/undeclared namespace is retained (finding #3/#4).
|
|
234
|
+
let live;
|
|
235
|
+
try {
|
|
236
|
+
live = (await k8sApi.read({
|
|
237
|
+
apiVersion: 'v1',
|
|
238
|
+
kind: 'Namespace',
|
|
239
|
+
metadata: { name: namespace },
|
|
240
|
+
}));
|
|
241
|
+
}
|
|
242
|
+
catch (error) {
|
|
243
|
+
const k8sErr = error;
|
|
244
|
+
const code = k8sErr.statusCode ?? k8sErr.code ?? k8sErr.body?.code;
|
|
245
|
+
if (code === 404) {
|
|
246
|
+
logger.debug('Namespace already gone before empty-gate; nothing to do', {
|
|
247
|
+
namespace,
|
|
248
|
+
...context,
|
|
249
|
+
});
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
logger.info('Retaining namespace after teardown — could not read it (ownership unproven)', {
|
|
253
|
+
namespace,
|
|
254
|
+
error: ensureError(error).message,
|
|
255
|
+
...context,
|
|
256
|
+
});
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
if (options.ownedByRgd !== undefined) {
|
|
260
|
+
const owner = live.metadata?.annotations?.[NAMESPACE_OWNER_ANNOTATION];
|
|
261
|
+
if (owner !== options.ownedByRgd) {
|
|
262
|
+
logger.info('Retaining namespace after teardown — not owned by this composition (adopted/undeclared)', { namespace, expectedOwner: options.ownedByRgd, actualOwner: owner ?? '(none)', ...context });
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
const inventory = options.inventory ?? createClusterNamespaceInventory(kubeConfig);
|
|
267
|
+
const verdict = await classifyNamespaceEmptiness(inventory, namespace, logger);
|
|
268
|
+
if (!verdict.empty) {
|
|
269
|
+
logger.info('Retaining namespace after teardown — not empty (or emptiness unproven)', {
|
|
270
|
+
namespace,
|
|
271
|
+
reason: verdict.reason,
|
|
272
|
+
...context,
|
|
273
|
+
});
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
// GATED delete via the engine's ONE deletion primitive: delete, then poll to a real
|
|
277
|
+
// 404 and THROW on timeout (finding #1). Because teardown already waited for the CRD
|
|
278
|
+
// to 404, an empty owned namespace should drain promptly; if it does NOT, a stuck
|
|
279
|
+
// finalizer surfaces as an error rather than a silently-abandoned Terminating
|
|
280
|
+
// namespace. A pre-delete 404 is benign (handled by the primitive).
|
|
281
|
+
const rollback = createRollbackManager(k8sApi);
|
|
282
|
+
await rollback.deleteResourceAndWait({ apiVersion: 'v1', kind: 'Namespace', name: namespace }, { timeout: options.timeoutMs ?? DEFAULT_NAMESPACE_DELETE_TIMEOUT_MS });
|
|
283
|
+
logger.debug('Deleted the empty owned namespace after teardown', { namespace, ...context });
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* ATOMIC ownership decision via CREATE-FIRST (finding #3), shared by the imperative and
|
|
287
|
+
* alchemy deploy paths. The old GET→(if 404)→SSA-patch-with-owner-stamp was raceable:
|
|
288
|
+
* another actor creating the namespace between the GET and the patch let typekro ADOPT
|
|
289
|
+
* it yet stamp it owned — and later DELETE it. Instead:
|
|
290
|
+
*
|
|
291
|
+
* 1. Attempt to CREATE the namespace (POST) WITH the ownership stamp. A 201 is proof
|
|
292
|
+
* WE created it → we own it (ownership is atomic: owned IFF we created it).
|
|
293
|
+
* 2. On 409 (already exists) it is NOT ours to claim by this call. READ it and treat
|
|
294
|
+
* it as owned ONLY if it already carries THIS RGD's stamp (a prior create by us);
|
|
295
|
+
* otherwise it is ADOPTED (`owned: false`). This 409-read is race-free for the
|
|
296
|
+
* ownership decision because ownership was fixed at the original 201-create.
|
|
297
|
+
* 3. Any OTHER create error is rethrown for the caller to handle (fail loud).
|
|
298
|
+
*
|
|
299
|
+
* `manifestWithStamp` MUST already carry {@link NAMESPACE_OWNER_ANNOTATION} = `ownerRgd`
|
|
300
|
+
* plus the complete declared namespace config, so a 201 lands the full config atomically.
|
|
301
|
+
*/
|
|
302
|
+
export async function decideNamespaceOwnershipCreateFirst(api, manifestWithStamp, ownerRgd, fieldManager = 'typekro') {
|
|
303
|
+
try {
|
|
304
|
+
await api.create(manifestWithStamp, undefined, undefined, fieldManager);
|
|
305
|
+
return { created: true, owned: true };
|
|
306
|
+
}
|
|
307
|
+
catch (error) {
|
|
308
|
+
// Use the project's CENTRALIZED 409 classifier so EVERY conflict shape the
|
|
309
|
+
// @kubernetes/client-node stack surfaces (statusCode / response.statusCode /
|
|
310
|
+
// body.code / bare code) is recognized as AlreadyExists — the old hand-rolled
|
|
311
|
+
// check missed `response.statusCode === 409`.
|
|
312
|
+
if (!isConflictError(error))
|
|
313
|
+
throw error; // non-conflict create failure — caller decides
|
|
314
|
+
}
|
|
315
|
+
// 409: the namespace already exists. Owned only if a prior create by THIS RGD stamped it.
|
|
316
|
+
const name = manifestWithStamp.metadata?.name;
|
|
317
|
+
const live = (await api.read({
|
|
318
|
+
apiVersion: 'v1',
|
|
319
|
+
kind: 'Namespace',
|
|
320
|
+
metadata: { name: typeof name === 'string' ? name : '' },
|
|
321
|
+
}));
|
|
322
|
+
const owned = live.metadata?.annotations?.[NAMESPACE_OWNER_ANNOTATION] === ownerRgd;
|
|
323
|
+
return { created: false, owned };
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Metrics-only aggregated API groups. Their served resources (`pods`, `nodes`) are
|
|
327
|
+
* EPHEMERAL, read-only metrics samples — never persistent occupants that a stack/user
|
|
328
|
+
* "owns" — so an APIService backing one of these must NOT trip the coverage
|
|
329
|
+
* uncertainty check below (that would make the secondary emptiness gate RETAIN on
|
|
330
|
+
* essentially every cluster with metrics-server installed). Any OTHER aggregated
|
|
331
|
+
* APIService group is treated as UNCERTAINTY → RETAIN.
|
|
332
|
+
*/
|
|
333
|
+
const METRICS_AGGREGATION_GROUPS = new Set([
|
|
334
|
+
'metrics.k8s.io',
|
|
335
|
+
'custom.metrics.k8s.io',
|
|
336
|
+
'external.metrics.k8s.io',
|
|
337
|
+
]);
|
|
338
|
+
/**
|
|
339
|
+
* Default {@link NamespaceInventory} backed by the live cluster. Discovery enumerates
|
|
340
|
+
* EVERY served API group DYNAMICALLY — the core group via `CoreV1Api.getAPIResources()`
|
|
341
|
+
* and every other served group via `CustomObjectsApi.getAPIResources(group, version)`
|
|
342
|
+
* (the generic per-group discovery endpoint, `GET /apis/{group}/{version}`) — all
|
|
343
|
+
* through the Bun-compatible client wrappers (no raw HTTP; identical under Bun and Node).
|
|
344
|
+
* This covers built-in AND custom (CRD) namespaced kinds uniformly, since a CRD's group
|
|
345
|
+
* appears in the served-group list. Listing uses `KubernetesObjectApi.list(apiVersion,
|
|
346
|
+
* kind, namespace)` and FOLLOWS the list continuation token so a namespace with more
|
|
347
|
+
* objects than one page never hides an occupant behind a silent cap (finding #5b).
|
|
348
|
+
*
|
|
349
|
+
* COVERAGE / UNCERTAINTY (finding #5a): the emptiness gate is a SECONDARY backstop
|
|
350
|
+
* (ownership is the PRIMARY teardown guard), so it must never misclassify occupied as
|
|
351
|
+
* empty. If the cluster serves a namespaced group this inventory CANNOT enumerate — for
|
|
352
|
+
* ANY reason: a native group whose discovery call fails, or an aggregated APIService
|
|
353
|
+
* whose external backend is unreachable — discovery THROWS an uncertainty error, which
|
|
354
|
+
* {@link classifyNamespaceEmptiness} turns into a fail-safe RETAIN. The ONLY groups
|
|
355
|
+
* deliberately skipped are the ephemeral metrics aggregation groups (their samples are
|
|
356
|
+
* never persistent occupants). There is no native-vs-aggregated distinction: anything we
|
|
357
|
+
* can't enumerate is uncertainty.
|
|
358
|
+
*/
|
|
359
|
+
export function createClusterNamespaceInventory(kubeConfig) {
|
|
360
|
+
const objectApi = createBunCompatibleKubernetesObjectApi(kubeConfig);
|
|
361
|
+
return {
|
|
362
|
+
async discoverNamespacedTypes() {
|
|
363
|
+
// Deduplicate by apiVersion/kind — a kind can surface via more than one path.
|
|
364
|
+
const seen = new Map();
|
|
365
|
+
const add = (apiVersion, kind) => {
|
|
366
|
+
const key = `${apiVersion}/${kind}`;
|
|
367
|
+
if (!seen.has(key))
|
|
368
|
+
seen.set(key, { apiVersion, kind });
|
|
369
|
+
};
|
|
370
|
+
// Add every NAMESPACED, LISTABLE (non-subresource) kind from a discovered
|
|
371
|
+
// V1APIResourceList served at `groupVersion`.
|
|
372
|
+
const addFromList = (groupVersion, list) => {
|
|
373
|
+
for (const resource of list.resources ?? []) {
|
|
374
|
+
if (resource.namespaced !== true)
|
|
375
|
+
continue;
|
|
376
|
+
if (resource.name.includes('/'))
|
|
377
|
+
continue; // subresource
|
|
378
|
+
if (!(resource.verbs ?? []).includes('list'))
|
|
379
|
+
continue;
|
|
380
|
+
const apiVersion = resource.group && resource.version
|
|
381
|
+
? `${resource.group}/${resource.version}`
|
|
382
|
+
: groupVersion;
|
|
383
|
+
add(apiVersion, resource.kind);
|
|
384
|
+
}
|
|
385
|
+
};
|
|
386
|
+
const k8sClient = await import('@kubernetes/client-node');
|
|
387
|
+
// 1. Core group (`/api/v1`) — no group name, so use the core client directly.
|
|
388
|
+
const coreClient = createBunCompatibleApiClient(kubeConfig, k8sClient.CoreV1Api);
|
|
389
|
+
addFromList('v1', await coreClient.getAPIResources());
|
|
390
|
+
// 2. EVERY other served API group, enumerated dynamically. `getAPIVersions` lists
|
|
391
|
+
// all served groups; for each we discover its preferred version's resources via
|
|
392
|
+
// the GENERIC per-group endpoint. A group we cannot enumerate (discovery failure,
|
|
393
|
+
// or an unreachable aggregated backend) is UNCERTAINTY → RETAIN (throw).
|
|
394
|
+
const apisApi = createBunCompatibleApiClient(kubeConfig, k8sClient.ApisApi);
|
|
395
|
+
const groupList = await apisApi.getAPIVersions();
|
|
396
|
+
// Cast to the CustomObjectsApi shape whose generic `getAPIResources({group, version})`
|
|
397
|
+
// hits `GET /apis/{group}/{version}` for ANY group (built-in or CRD-backed).
|
|
398
|
+
const customApi = createBunCompatibleApiClient(kubeConfig, k8sClient.CustomObjectsApi);
|
|
399
|
+
for (const group of groupList.groups ?? []) {
|
|
400
|
+
const groupName = group.name;
|
|
401
|
+
if (typeof groupName !== 'string' || groupName.length === 0)
|
|
402
|
+
continue;
|
|
403
|
+
// Metrics groups are ephemeral read-only samples — never persistent occupants —
|
|
404
|
+
// so they are deliberately skipped rather than treated as uncertainty.
|
|
405
|
+
if (METRICS_AGGREGATION_GROUPS.has(groupName))
|
|
406
|
+
continue;
|
|
407
|
+
// Enumerate EVERY SERVED version of the group, not just the preferred one
|
|
408
|
+
// (finding #5): resources are published per group-VERSION, so a kind served
|
|
409
|
+
// ONLY on a non-preferred version (a common CRD conversion pattern) would be
|
|
410
|
+
// MISSED if we discovered the preferred version alone — and a missed kind lets
|
|
411
|
+
// the gate false-"empty" over a real occupant.
|
|
412
|
+
const versions = (group.versions ?? [])
|
|
413
|
+
.map((v) => v?.version)
|
|
414
|
+
.filter((v) => typeof v === 'string' && v.length > 0);
|
|
415
|
+
if (versions.length === 0) {
|
|
416
|
+
// A served group with no discoverable version — cannot enumerate it → RETAIN.
|
|
417
|
+
throw new Error(`served API group "${groupName}" reports no discoverable version; cannot prove the namespace is empty`);
|
|
418
|
+
}
|
|
419
|
+
for (const version of versions) {
|
|
420
|
+
try {
|
|
421
|
+
addFromList(`${groupName}/${version}`, await customApi.getAPIResources({ group: groupName, version }));
|
|
422
|
+
}
|
|
423
|
+
catch (error) {
|
|
424
|
+
// Cannot enumerate this served namespaced group-version (native OR
|
|
425
|
+
// aggregated) → UNCERTAINTY → fail-safe RETAIN (finding #5).
|
|
426
|
+
throw new Error(`cannot enumerate served API group "${groupName}/${version}" ` +
|
|
427
|
+
`(${ensureError(error).message}); cannot prove the namespace is empty`);
|
|
428
|
+
}
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
return [...seen.values()];
|
|
432
|
+
},
|
|
433
|
+
async listObjectNames(type, namespace) {
|
|
434
|
+
// FOLLOW the continuation token so an occupant beyond the first page is never
|
|
435
|
+
// hidden by a silent cap (finding #5b). `list` returns the body directly in
|
|
436
|
+
// @kubernetes/client-node 1.x; `metadata.continue` drives the next page.
|
|
437
|
+
const names = [];
|
|
438
|
+
let continueToken;
|
|
439
|
+
do {
|
|
440
|
+
const result = (await objectApi.list(type.apiVersion, type.kind, namespace, undefined, // pretty
|
|
441
|
+
undefined, // exact
|
|
442
|
+
undefined, // export
|
|
443
|
+
undefined, // fieldSelector
|
|
444
|
+
undefined, // labelSelector
|
|
445
|
+
100, // limit
|
|
446
|
+
continueToken // continue
|
|
447
|
+
));
|
|
448
|
+
for (const item of result.items ?? []) {
|
|
449
|
+
if (typeof item.metadata?.name === 'string')
|
|
450
|
+
names.push(item.metadata.name);
|
|
451
|
+
}
|
|
452
|
+
const next = result.metadata?.continue;
|
|
453
|
+
continueToken = typeof next === 'string' && next.length > 0 ? next : undefined;
|
|
454
|
+
} while (continueToken);
|
|
455
|
+
return names;
|
|
456
|
+
},
|
|
457
|
+
};
|
|
458
|
+
}
|
|
459
|
+
//# sourceMappingURL=kro-namespace-teardown.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kro-namespace-teardown.js","sourceRoot":"","sources":["../../../src/core/deployment/kro-namespace-teardown.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readiness-waiter.d.ts","sourceRoot":"","sources":["../../../src/core/deployment/readiness-waiter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,GAAG,MAAM,yBAAyB,CAAC;AAGpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,KAAK,EAAE,gBAAgB,EAAkB,MAAM,aAAa,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,eAAe,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAChF,SAAS,EAAE,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;CACzE;AAED;;GAEG;AACH,qBAAa,eAAe;IAExB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,WAAW,CAAC;IACpB,OAAO,CAAC,IAAI,CAAC;gBALL,MAAM,EAAE,GAAG,CAAC,mBAAmB,EAC/B,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,EAC3B,gBAAgB,EAAE,wBAAwB,EAC1C,MAAM,EAAE,aAAa,EACrB,WAAW,CAAC,EAAE,WAAW,YAAA,EACzB,IAAI,CAAC,EAAE,mBAAmB,YAAA;IAGpC;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAI9C;;OAEG;IACG,uBAAuB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAuEnF;;;;;OAKG;IACG,oBAAoB,CACxB,gBAAgB,EAAE,gBAAgB,EAClC,OAAO,EAAE,iBAAiB,EAC1B,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"readiness-waiter.d.ts","sourceRoot":"","sources":["../../../src/core/deployment/readiness-waiter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,GAAG,MAAM,yBAAyB,CAAC;AAGpD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEzD,OAAO,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AACjF,OAAO,KAAK,EAAE,gBAAgB,EAAkB,MAAM,aAAa,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAE/D;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,cAAc,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACpE,eAAe,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;IAChF,SAAS,EAAE,CAAC,OAAO,EAAE,iBAAiB,EAAE,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC;CACzE;AAED;;GAEG;AACH,qBAAa,eAAe;IAExB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,cAAc;IACtB,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,WAAW,CAAC;IACpB,OAAO,CAAC,IAAI,CAAC;gBALL,MAAM,EAAE,GAAG,CAAC,mBAAmB,EAC/B,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,EAC3B,gBAAgB,EAAE,wBAAwB,EAC1C,MAAM,EAAE,aAAa,EACrB,WAAW,CAAC,EAAE,WAAW,YAAA,EACzB,IAAI,CAAC,EAAE,mBAAmB,YAAA;IAGpC;;OAEG;IACH,cAAc,CAAC,WAAW,EAAE,WAAW,GAAG,IAAI;IAI9C;;OAEG;IACG,uBAAuB,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC;IAuEnF;;;;;OAKG;IACG,oBAAoB,CACxB,gBAAgB,EAAE,gBAAgB,EAClC,OAAO,EAAE,iBAAiB,EAC1B,WAAW,CAAC,EAAE,WAAW,GACxB,OAAO,CAAC,IAAI,CAAC;IA6LhB;;OAEG;IACH,OAAO,CAAC,cAAc;IAOtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAOvB;;OAEG;IACH,OAAO,CAAC,SAAS;CAKlB"}
|
|
@@ -99,8 +99,12 @@ export class ReadinessWaiter {
|
|
|
99
99
|
*/
|
|
100
100
|
async waitForResourceReady(deployedResource, options, abortSignal) {
|
|
101
101
|
const resourceKey = `${deployedResource.kind}/${deployedResource.name}/${deployedResource.namespace}`;
|
|
102
|
-
//
|
|
103
|
-
|
|
102
|
+
// A deployed-resource record marked ready is immutable evidence for this
|
|
103
|
+
// deployment attempt. The process-wide readyResources set is diagnostic
|
|
104
|
+
// state only: the same Kubernetes identity may have just been updated, so
|
|
105
|
+
// reusing an earlier readiness result would skip observedGeneration and
|
|
106
|
+
// other post-update convergence checks.
|
|
107
|
+
if (deployedResource.status === 'ready') {
|
|
104
108
|
this.logger.debug('Resource already marked as ready', { resourceKey });
|
|
105
109
|
return;
|
|
106
110
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"readiness-waiter.js","sourceRoot":"","sources":["../../../src/core/deployment/readiness-waiter.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"readiness-waiter.js","sourceRoot":"","sources":["../../../src/core/deployment/readiness-waiter.ts"],"names":[],"mappings":"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"}
|
|
@@ -39,6 +39,38 @@ export declare class ResourceRollbackManager {
|
|
|
39
39
|
* Wait for a resource to be deleted
|
|
40
40
|
*/
|
|
41
41
|
private waitForResourceDeletion;
|
|
42
|
+
/**
|
|
43
|
+
* The ONE gating wait shared by every deletion path: poll `read` until the
|
|
44
|
+
* resource returns a real 404, and THROW {@link DeploymentTimeoutError} if it
|
|
45
|
+
* does not within `timeout`. Unlike a best-effort wait it NEVER returns
|
|
46
|
+
* silently on timeout — a stuck finalizer surfaces as an error so the caller
|
|
47
|
+
* does not proceed to a dependent step (e.g. deleting a Namespace while its
|
|
48
|
+
* generated CRD is still Terminating). Transient non-404 read errors are
|
|
49
|
+
* retried until the deadline.
|
|
50
|
+
*/
|
|
51
|
+
private waitForDeletionByHeader;
|
|
52
|
+
/**
|
|
53
|
+
* Delete a single resource by header and GATE on its real 404, throwing
|
|
54
|
+
* {@link DeploymentTimeoutError} if it does not disappear within `timeout`.
|
|
55
|
+
*
|
|
56
|
+
* This is the engine's ONE gating deletion primitive, reused by the KRO
|
|
57
|
+
* teardown sequence (CR → RGD → CRD → Namespace) and the Alchemy KRO delete
|
|
58
|
+
* path so there is a single, real gate everywhere — replacing the hand-rolled
|
|
59
|
+
* "poll then silently return on timeout" waits that let a slow teardown
|
|
60
|
+
* proceed to the next step while the previous resource was still Terminating.
|
|
61
|
+
*
|
|
62
|
+
* A 404 on the delete itself is treated as success (already gone). Any other
|
|
63
|
+
* delete error propagates. On success, the read gate runs to a real 404.
|
|
64
|
+
*/
|
|
65
|
+
deleteResourceAndWait(target: {
|
|
66
|
+
apiVersion: string;
|
|
67
|
+
kind: string;
|
|
68
|
+
name: string;
|
|
69
|
+
namespace?: string;
|
|
70
|
+
}, options?: {
|
|
71
|
+
timeout?: number;
|
|
72
|
+
gracePeriod?: number;
|
|
73
|
+
}): Promise<void>;
|
|
42
74
|
/**
|
|
43
75
|
* Extract string value from potentially complex metadata field
|
|
44
76
|
*/
|
|
@@ -80,7 +112,7 @@ export declare class ResourceRollbackManager {
|
|
|
80
112
|
* should be deleted. Filtering at this level would silently drop
|
|
81
113
|
* resources that the caller explicitly targeted for deletion.
|
|
82
114
|
*/
|
|
83
|
-
deleteDeployedResource(resource: DeployedResource): Promise<void>;
|
|
115
|
+
deleteDeployedResource(resource: DeployedResource, timeout?: number): Promise<void>;
|
|
84
116
|
/**
|
|
85
117
|
* Emit an event if callback is provided (for RollbackConfig)
|
|
86
118
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rollback-manager.d.ts","sourceRoot":"","sources":["../../../src/core/deployment/rollback-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,GAAG,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"rollback-manager.d.ts","sourceRoot":"","sources":["../../../src/core/deployment/rollback-manager.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,KAAK,GAAG,MAAM,yBAAyB,CAAC;AAUpD,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,eAAe,EACf,iBAAiB,EACjB,cAAc,EACf,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EACV,QAAQ,EAGT,MAAM,wBAAwB,CAAC;AAIhC;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACjC,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAC5B,SAAS,CAAC,EAAE,CAAC,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC;CAC5D;AAED;;GAEG;AACH,qBAAa,uBAAuB;IAGtB,OAAO,CAAC,MAAM;IAF1B,OAAO,CAAC,MAAM,CAA0C;gBAEpC,MAAM,EAAE,GAAG,CAAC,mBAAmB;IAEnD;;OAEG;IACG,iBAAiB,CACrB,SAAS,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,EACvC,MAAM,GAAE,cAAmB,GAC1B,OAAO,CAAC,cAAc,CAAC;IAmE1B;;OAEG;YACW,sBAAsB;IA6DpC;;OAEG;YACW,mBAAmB;IA8BjC;;OAEG;YACW,uBAAuB;IA2BrC;;;;;;;;OAQG;YACW,uBAAuB;IAsCrC;;;;;;;;;;;;OAYG;IACG,qBAAqB,CACzB,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,EAC9E,OAAO,GAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAO,GACvD,OAAO,CAAC,IAAI,CAAC;IA2BhB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAU1B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAM7B;;;;OAIG;IACG,wBAAwB,CAC5B,iBAAiB,EAAE,gBAAgB,EAAE,EACrC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC;QAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,eAAe,EAAE,CAAA;KAAE,CAAC;IAIxE;;;;;OAKG;IACG,yBAAyB,CAC7B,iBAAiB,EAAE,gBAAgB,EAAE,EACrC,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC;QAAE,mBAAmB,EAAE,MAAM,EAAE,CAAC;QAAC,MAAM,EAAE,eAAe,EAAE,CAAA;KAAE,CAAC;IAoBxE;;;OAGG;YACW,kBAAkB;IAwChC;;;;;;;;OAQG;IACG,sBAAsB,CAAC,QAAQ,EAAE,gBAAgB,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2EzF;;OAEG;IACH,OAAO,CAAC,SAAS;IAMjB;;OAEG;IACH,OAAO,CAAC,mBAAmB;CAK5B;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,GAAG,CAAC,mBAAmB,GAAG,uBAAuB,CAE9F;AAED;;;GAGG;AACH,wBAAgB,mCAAmC,CACjD,UAAU,EAAE,GAAG,CAAC,UAAU,GACzB,uBAAuB,CAKzB"}
|