@fractal_cloud/sdk 1.5.3 → 2.0.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 +210 -383
- package/dist/custom_workloads-DdYOZg-e.cjs +1971 -0
- package/dist/index.cjs +119 -17689
- package/dist/index.d.cts +2 -8513
- package/dist/index.d.mts +2 -8513
- package/dist/index.mjs +2 -16657
- package/dist/model/index.cjs +119 -0
- package/dist/model/index.d.cts +767 -0
- package/dist/model/index.d.mts +767 -0
- package/dist/model/index.mjs +1248 -0
- package/package.json +11 -1
|
@@ -0,0 +1,1971 @@
|
|
|
1
|
+
//#region \0rolldown/runtime.js
|
|
2
|
+
var __create = Object.create;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
5
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __copyProps = (to, from, except, desc) => {
|
|
9
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
10
|
+
for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
11
|
+
key = keys[i];
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except) {
|
|
13
|
+
__defProp(to, key, {
|
|
14
|
+
get: ((k) => from[k]).bind(null, key),
|
|
15
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return to;
|
|
21
|
+
};
|
|
22
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
23
|
+
value: mod,
|
|
24
|
+
enumerable: true
|
|
25
|
+
}) : target, mod));
|
|
26
|
+
|
|
27
|
+
//#endregion
|
|
28
|
+
let superagent = require("superagent");
|
|
29
|
+
superagent = __toESM(superagent);
|
|
30
|
+
|
|
31
|
+
//#region src/model/core.ts
|
|
32
|
+
/** Build an offer constructor (pure). Default instantiate merges neutral params + vendor config. */
|
|
33
|
+
const defineOffer = (spec) => (config) => ({
|
|
34
|
+
satisfies: spec.satisfies,
|
|
35
|
+
offerType: spec.offerType,
|
|
36
|
+
provider: spec.provider,
|
|
37
|
+
deliveryModel: spec.deliveryModel,
|
|
38
|
+
config,
|
|
39
|
+
instantiate: (ctx) => spec.instantiate ? spec.instantiate(ctx, config) : [{
|
|
40
|
+
id: ctx.id,
|
|
41
|
+
type: spec.offerType,
|
|
42
|
+
provider: spec.provider,
|
|
43
|
+
deliveryModel: spec.deliveryModel,
|
|
44
|
+
parameters: {
|
|
45
|
+
...ctx.parameters,
|
|
46
|
+
...config
|
|
47
|
+
},
|
|
48
|
+
dependencies: ctx.dependencies,
|
|
49
|
+
links: ctx.links
|
|
50
|
+
}]
|
|
51
|
+
});
|
|
52
|
+
/** Authoring primitive: create a fresh node for a Component factory. */
|
|
53
|
+
const newNode = (id, component) => ({
|
|
54
|
+
id,
|
|
55
|
+
component,
|
|
56
|
+
parameters: {},
|
|
57
|
+
locked: /* @__PURE__ */ new Set(),
|
|
58
|
+
dependencies: []
|
|
59
|
+
});
|
|
60
|
+
/** Authoring primitive: set a neutral param AND lock it (guardrail, design time). */
|
|
61
|
+
const guardrail = (s, key, value) => ({
|
|
62
|
+
...s,
|
|
63
|
+
parameters: {
|
|
64
|
+
...s.parameters,
|
|
65
|
+
[key]: value
|
|
66
|
+
},
|
|
67
|
+
locked: new Set([...s.locked, key])
|
|
68
|
+
});
|
|
69
|
+
/** Authoring primitive: declare a structural dependency on another node. */
|
|
70
|
+
const addDependency = (s, depId) => ({
|
|
71
|
+
...s,
|
|
72
|
+
dependencies: [...s.dependencies, depId]
|
|
73
|
+
});
|
|
74
|
+
/** Collect the links a component is the source of, in wire shape. */
|
|
75
|
+
const linksFor = (st, sourceId) => st.links.filter((l) => l.sourceId === sourceId).map((l) => ({
|
|
76
|
+
componentId: l.targetId,
|
|
77
|
+
settings: l.settings
|
|
78
|
+
}));
|
|
79
|
+
const ensureUnlocked = (node, key) => {
|
|
80
|
+
if (node.locked.has(key)) throw new Error(`Parameter '${key}' on '${node.id}' is a locked guardrail and cannot be changed.`);
|
|
81
|
+
};
|
|
82
|
+
const setOpen = (st, id, key, value) => {
|
|
83
|
+
const node = st.nodes[id];
|
|
84
|
+
ensureUnlocked(node, key);
|
|
85
|
+
return {
|
|
86
|
+
...st,
|
|
87
|
+
nodes: {
|
|
88
|
+
...st.nodes,
|
|
89
|
+
[id]: {
|
|
90
|
+
...node,
|
|
91
|
+
parameters: {
|
|
92
|
+
...node.parameters,
|
|
93
|
+
[key]: value
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
const appendOpen = (st, id, key, value) => {
|
|
100
|
+
const node = st.nodes[id];
|
|
101
|
+
ensureUnlocked(node, key);
|
|
102
|
+
const prev = node.parameters[key] ?? [];
|
|
103
|
+
return {
|
|
104
|
+
...st,
|
|
105
|
+
nodes: {
|
|
106
|
+
...st.nodes,
|
|
107
|
+
[id]: {
|
|
108
|
+
...node,
|
|
109
|
+
parameters: {
|
|
110
|
+
...node.parameters,
|
|
111
|
+
[key]: [...prev, value]
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
};
|
|
117
|
+
const addChild = (st, parentId, child) => ({
|
|
118
|
+
...st,
|
|
119
|
+
children: {
|
|
120
|
+
...st.children,
|
|
121
|
+
[parentId]: [...st.children[parentId] ?? [], child]
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
const slotOps = (id) => ({
|
|
125
|
+
set: (k, v) => (st) => setOpen(st, id, k, v),
|
|
126
|
+
append: (k, v) => (st) => appendOpen(st, id, k, v),
|
|
127
|
+
addChild: (child) => (st) => addChild(st, id, child.state)
|
|
128
|
+
});
|
|
129
|
+
/** Collect a parent's child components in instantiation-context shape. */
|
|
130
|
+
const childrenFor = (st, parentId) => (st.children[parentId] ?? []).map((c) => ({
|
|
131
|
+
id: c.id,
|
|
132
|
+
parameters: { ...c.parameters },
|
|
133
|
+
dependencies: [...c.dependencies, parentId],
|
|
134
|
+
links: linksFor(st, c.id)
|
|
135
|
+
}));
|
|
136
|
+
const serialize = (st) => ({
|
|
137
|
+
fractalId: st.fractalId,
|
|
138
|
+
components: st.order.map((id) => {
|
|
139
|
+
const n = st.nodes[id];
|
|
140
|
+
return {
|
|
141
|
+
id,
|
|
142
|
+
component: n.component,
|
|
143
|
+
parameters: { ...n.parameters },
|
|
144
|
+
locked: [...n.locked],
|
|
145
|
+
dependencies: [...n.dependencies],
|
|
146
|
+
links: linksFor(st, id)
|
|
147
|
+
};
|
|
148
|
+
})
|
|
149
|
+
});
|
|
150
|
+
const toLiveSystem = (st, args) => {
|
|
151
|
+
const validIds = new Set(st.order);
|
|
152
|
+
for (const key of Object.keys(args.select)) if (!validIds.has(key)) throw new Error(`Selection key '${key}' does not match any component in the fractal. Valid components: ${st.order.join(", ")}.`);
|
|
153
|
+
const components = [];
|
|
154
|
+
for (const id of st.order) {
|
|
155
|
+
const node = st.nodes[id];
|
|
156
|
+
const offer = args.select[id];
|
|
157
|
+
if (!offer) throw new Error(`Missing offer selection for component '${id}'.`);
|
|
158
|
+
if (offer.satisfies !== node.component) throw new Error(`Offer '${offer.offerType}' does not satisfy component '${node.component}' (selected for '${id}').`);
|
|
159
|
+
const children = childrenFor(st, id);
|
|
160
|
+
const emitted = offer.instantiate({
|
|
161
|
+
id,
|
|
162
|
+
parameters: { ...node.parameters },
|
|
163
|
+
dependencies: node.dependencies,
|
|
164
|
+
links: linksFor(st, id),
|
|
165
|
+
children
|
|
166
|
+
});
|
|
167
|
+
if (children.length > 0) {
|
|
168
|
+
const emittedIds = new Set(emitted.map((c) => c.id));
|
|
169
|
+
const dropped = children.filter((c) => !emittedIds.has(c.id));
|
|
170
|
+
if (dropped.length > 0) throw new Error(`Offer '${offer.offerType}' selected for '${id}' does not emit its child component(s) [${dropped.map((c) => c.id).join(", ")}]. The selected offer must support child components (e.g. databases added via an operation).`);
|
|
171
|
+
}
|
|
172
|
+
components.push(...emitted);
|
|
173
|
+
}
|
|
174
|
+
return {
|
|
175
|
+
name: args.name,
|
|
176
|
+
fractalId: st.fractalId,
|
|
177
|
+
fractalName: st.fractalName,
|
|
178
|
+
version: st.version,
|
|
179
|
+
boundedContext: st.boundedContext,
|
|
180
|
+
environment: args.environment,
|
|
181
|
+
components
|
|
182
|
+
};
|
|
183
|
+
};
|
|
184
|
+
const fluent = (ops, st) => {
|
|
185
|
+
const api = {
|
|
186
|
+
value: st,
|
|
187
|
+
blueprint: serialize(st),
|
|
188
|
+
toLiveSystem: (args) => toLiveSystem(st, args)
|
|
189
|
+
};
|
|
190
|
+
for (const k of Object.keys(ops)) api[k] = (...args) => fluent(ops, ops[k](...args)(st));
|
|
191
|
+
return api;
|
|
192
|
+
};
|
|
193
|
+
function createFractal(def) {
|
|
194
|
+
const order = [];
|
|
195
|
+
const linkRecords = [];
|
|
196
|
+
const slots = def.blueprint({
|
|
197
|
+
add: (n) => {
|
|
198
|
+
order.push(n.state.id);
|
|
199
|
+
return n;
|
|
200
|
+
},
|
|
201
|
+
link: (source, target, settings = {}) => {
|
|
202
|
+
linkRecords.push({
|
|
203
|
+
sourceId: source.state.id,
|
|
204
|
+
targetId: target.state.id,
|
|
205
|
+
settings
|
|
206
|
+
});
|
|
207
|
+
}
|
|
208
|
+
});
|
|
209
|
+
const nodes = {};
|
|
210
|
+
const slotToId = {};
|
|
211
|
+
for (const key of Object.keys(slots)) {
|
|
212
|
+
const node = slots[key];
|
|
213
|
+
nodes[node.state.id] = node.state;
|
|
214
|
+
slotToId[key] = node.state.id;
|
|
215
|
+
}
|
|
216
|
+
const fractalId = `${def.id}:${def.version.major}.${def.version.minor}.${def.version.patch}`;
|
|
217
|
+
const state = {
|
|
218
|
+
fractalId,
|
|
219
|
+
fractalName: def.id,
|
|
220
|
+
version: def.version,
|
|
221
|
+
boundedContext: def.boundedContextId,
|
|
222
|
+
nodes,
|
|
223
|
+
order,
|
|
224
|
+
links: linkRecords,
|
|
225
|
+
children: {}
|
|
226
|
+
};
|
|
227
|
+
const slotOpsMap = {};
|
|
228
|
+
for (const key of Object.keys(slotToId)) slotOpsMap[key] = slotOps(slotToId[key]);
|
|
229
|
+
const ops = def.operations ? def.operations(slotOpsMap) : {};
|
|
230
|
+
return {
|
|
231
|
+
fractalId,
|
|
232
|
+
blueprint: serialize(state),
|
|
233
|
+
ops,
|
|
234
|
+
specialize: () => fluent(ops, state),
|
|
235
|
+
toLiveSystem: (args) => toLiveSystem(state, args)
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
//#endregion
|
|
240
|
+
//#region src/model/service.ts
|
|
241
|
+
/**
|
|
242
|
+
* service.ts — deploy a model LiveSystem to the Fractal Cloud API.
|
|
243
|
+
*
|
|
244
|
+
* Self-contained (the interim SDK service is unproven and not reused). Builds the
|
|
245
|
+
* API payload from the model LiveSystem, submits (create or update), and — in
|
|
246
|
+
* `wait` mode — polls to Active, emitting the canonical SDK wait-mode log lines
|
|
247
|
+
* (see ~/Projects/CLAUDE.md "SDK — Wait Mode Log Format").
|
|
248
|
+
*
|
|
249
|
+
* NOTE: not runtime-verified here (no Fractal Cloud credentials) — covered by
|
|
250
|
+
* mocked-HTTP unit tests in service.test.ts; smoke against the live API with real
|
|
251
|
+
* credentials before release.
|
|
252
|
+
*/
|
|
253
|
+
const FRACTAL_API_URL = "https://api.fractal.cloud";
|
|
254
|
+
const CLIENT_ID_HEADER = "X-ClientID";
|
|
255
|
+
const CLIENT_SECRET_HEADER = "X-ClientSecret";
|
|
256
|
+
const DEFAULT_POLL_INTERVAL_MS = 5e3;
|
|
257
|
+
const DEFAULT_TIMEOUT_MS = 6e5;
|
|
258
|
+
const TERMINAL_FAILURE_STATUSES = ["FailedMutation", "Error"];
|
|
259
|
+
const bcString = (bc) => `${bc.ownerType ?? "Personal"}/${bc.ownerId ?? ""}/${bc.name ?? ""}`;
|
|
260
|
+
const liveSystemId = (ls) => `${bcString(ls.boundedContext)}/${ls.name}`;
|
|
261
|
+
const fractalApiId = (ls) => `${bcString(ls.boundedContext)}/${ls.fractalName}:${ls.version.major}.${ls.version.minor}.${ls.version.patch}`;
|
|
262
|
+
const buildBody = (ls) => ({
|
|
263
|
+
liveSystemId: liveSystemId(ls),
|
|
264
|
+
fractalId: fractalApiId(ls),
|
|
265
|
+
blueprintMap: ls.components.reduce((acc, c) => {
|
|
266
|
+
acc[c.id] = {
|
|
267
|
+
type: c.type,
|
|
268
|
+
id: c.id,
|
|
269
|
+
provider: c.provider,
|
|
270
|
+
deliveryModel: c.deliveryModel,
|
|
271
|
+
parameters: c.parameters,
|
|
272
|
+
dependencies: [...c.dependencies],
|
|
273
|
+
links: c.links.map((l) => ({
|
|
274
|
+
componentId: l.componentId,
|
|
275
|
+
settings: l.settings
|
|
276
|
+
}))
|
|
277
|
+
};
|
|
278
|
+
return acc;
|
|
279
|
+
}, {}),
|
|
280
|
+
environment: {
|
|
281
|
+
id: {
|
|
282
|
+
type: ls.environment.ownerType ?? "Personal",
|
|
283
|
+
ownerId: ls.environment.ownerId ?? "",
|
|
284
|
+
shortName: ls.environment.name ?? ""
|
|
285
|
+
},
|
|
286
|
+
parameters: {}
|
|
287
|
+
}
|
|
288
|
+
});
|
|
289
|
+
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
290
|
+
const authHeaders = (c) => ({
|
|
291
|
+
[CLIENT_ID_HEADER]: c.clientId,
|
|
292
|
+
[CLIENT_SECRET_HEADER]: c.clientSecret
|
|
293
|
+
});
|
|
294
|
+
const log = (quiet, level, message, fields = {}) => {
|
|
295
|
+
if (quiet) return;
|
|
296
|
+
const ts = (/* @__PURE__ */ new Date()).toISOString();
|
|
297
|
+
const fieldStr = Object.entries(fields).map(([k, v]) => `${k}=${v}`).join(" ");
|
|
298
|
+
console.log(`[${ts}] ${level.padEnd(5)} ${message}${fieldStr ? " " + fieldStr : ""}`);
|
|
299
|
+
};
|
|
300
|
+
const elapsedSec = (startMs) => `${Math.round((Date.now() - startMs) / 1e3)}s`;
|
|
301
|
+
const submit = async (ls, creds) => {
|
|
302
|
+
const url = `${FRACTAL_API_URL}/livesystems/${liveSystemId(ls)}`;
|
|
303
|
+
const existing = await superagent.default.get(url).ok((res) => res.status === 200 || res.status === 404).set(authHeaders(creds));
|
|
304
|
+
const body = buildBody(ls);
|
|
305
|
+
if (existing.status === 200) await superagent.default.put(url).set(authHeaders(creds)).send(body);
|
|
306
|
+
else await superagent.default.post(`${FRACTAL_API_URL}/livesystems`).set(authHeaders(creds)).send(body);
|
|
307
|
+
};
|
|
308
|
+
const getStatus = async (id, creds) => {
|
|
309
|
+
return (await superagent.default.get(`${FRACTAL_API_URL}/livesystems/${id}`).set(authHeaders(creds))).body.status;
|
|
310
|
+
};
|
|
311
|
+
const pollUntilActive = async (ls, creds, opts, startMs) => {
|
|
312
|
+
const quiet = opts.quiet ?? false;
|
|
313
|
+
const interval = opts.pollIntervalMs ?? DEFAULT_POLL_INTERVAL_MS;
|
|
314
|
+
const deadline = Date.now() + (opts.timeoutMs ?? DEFAULT_TIMEOUT_MS);
|
|
315
|
+
const id = liveSystemId(ls);
|
|
316
|
+
let round = 0;
|
|
317
|
+
while (Date.now() < deadline) {
|
|
318
|
+
await sleep(interval);
|
|
319
|
+
round++;
|
|
320
|
+
let status;
|
|
321
|
+
try {
|
|
322
|
+
status = await getStatus(id, creds);
|
|
323
|
+
} catch (err) {
|
|
324
|
+
const code = err.status;
|
|
325
|
+
if (code !== void 0 && code >= 400 && code < 500) {
|
|
326
|
+
log(quiet, "ERROR", "Fatal error polling Live System status", {
|
|
327
|
+
system: id,
|
|
328
|
+
round,
|
|
329
|
+
elapsed: elapsedSec(startMs)
|
|
330
|
+
});
|
|
331
|
+
throw err;
|
|
332
|
+
}
|
|
333
|
+
log(quiet, "WARN", "Transient error polling status, retrying", {
|
|
334
|
+
system: id,
|
|
335
|
+
round,
|
|
336
|
+
elapsed: elapsedSec(startMs)
|
|
337
|
+
});
|
|
338
|
+
continue;
|
|
339
|
+
}
|
|
340
|
+
if (status === "Active") return;
|
|
341
|
+
if (TERMINAL_FAILURE_STATUSES.includes(status)) {
|
|
342
|
+
log(quiet, "ERROR", "Live System deployment failed", {
|
|
343
|
+
system: id,
|
|
344
|
+
status,
|
|
345
|
+
elapsed: elapsedSec(startMs)
|
|
346
|
+
});
|
|
347
|
+
throw new Error(`Live system deployment failed with status: ${status}`);
|
|
348
|
+
}
|
|
349
|
+
log(quiet, "CHECK", "Polling Live System status", {
|
|
350
|
+
system: id,
|
|
351
|
+
round,
|
|
352
|
+
status,
|
|
353
|
+
elapsed: elapsedSec(startMs)
|
|
354
|
+
});
|
|
355
|
+
}
|
|
356
|
+
log(quiet, "ERROR", "Live System deployment timed out", {
|
|
357
|
+
system: id,
|
|
358
|
+
elapsed: elapsedSec(startMs),
|
|
359
|
+
timeoutMs: opts.timeoutMs ?? DEFAULT_TIMEOUT_MS
|
|
360
|
+
});
|
|
361
|
+
throw new Error("Live system deployment timed out");
|
|
362
|
+
};
|
|
363
|
+
/** Deploy (create or update) a LiveSystem. `fire-and-forget` submits and returns;
|
|
364
|
+
* `wait` polls until Active (or failure/timeout) emitting wait-mode log lines. */
|
|
365
|
+
async function deploy(ls, creds, opts = { mode: "fire-and-forget" }) {
|
|
366
|
+
if (opts.mode === "fire-and-forget") {
|
|
367
|
+
await submit(ls, creds);
|
|
368
|
+
return;
|
|
369
|
+
}
|
|
370
|
+
const quiet = opts.quiet ?? false;
|
|
371
|
+
const startMs = Date.now();
|
|
372
|
+
log(quiet, "INFO", "Deploying Live System", {
|
|
373
|
+
system: liveSystemId(ls),
|
|
374
|
+
fractal: fractalApiId(ls)
|
|
375
|
+
});
|
|
376
|
+
await submit(ls, creds);
|
|
377
|
+
await pollUntilActive(ls, creds, opts, startMs);
|
|
378
|
+
log(quiet, "INFO", "Live System Active", {
|
|
379
|
+
system: liveSystemId(ls),
|
|
380
|
+
elapsed: elapsedSec(startMs)
|
|
381
|
+
});
|
|
382
|
+
}
|
|
383
|
+
/** Destroy a deployed LiveSystem. */
|
|
384
|
+
async function destroy(ls, creds) {
|
|
385
|
+
await superagent.default.delete(`${FRACTAL_API_URL}/livesystems/${liveSystemId(ls)}`).set(authHeaders(creds));
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
//#endregion
|
|
389
|
+
//#region src/model/components/network_and_compute.ts
|
|
390
|
+
/**
|
|
391
|
+
* components/network_and_compute.ts — NetworkAndCompute Component factories.
|
|
392
|
+
*
|
|
393
|
+
* Each agnostic blueprint parameter is a typed `.withXxx()` guardrail setter
|
|
394
|
+
* (locked at design time). Components that can sit under another expose
|
|
395
|
+
* `dependsOn(other)` to declare a structural dependency. Vendor knobs do NOT
|
|
396
|
+
* live here — they belong on Offers (see offers/network_and_compute.ts).
|
|
397
|
+
*/
|
|
398
|
+
const virtualNetworkNode = (s) => ({
|
|
399
|
+
state: s,
|
|
400
|
+
withCidrBlock: (v) => virtualNetworkNode(guardrail(s, "cidrBlock", v)),
|
|
401
|
+
withRegion: (v) => virtualNetworkNode(guardrail(s, "region", v)),
|
|
402
|
+
withTags: (v) => virtualNetworkNode(guardrail(s, "tags", v))
|
|
403
|
+
});
|
|
404
|
+
const VirtualNetwork = (cfg) => virtualNetworkNode(newNode(cfg.id, "NetworkAndCompute.VirtualNetwork"));
|
|
405
|
+
const subnetNode = (s) => ({
|
|
406
|
+
state: s,
|
|
407
|
+
withCidrBlock: (v) => subnetNode(guardrail(s, "cidrBlock", v)),
|
|
408
|
+
dependsOn: (other) => subnetNode(addDependency(s, other.state.id))
|
|
409
|
+
});
|
|
410
|
+
const Subnet = (cfg) => subnetNode(newNode(cfg.id, "NetworkAndCompute.Subnet"));
|
|
411
|
+
const securityGroupNode = (s) => ({
|
|
412
|
+
state: s,
|
|
413
|
+
withIngressRules: (v) => securityGroupNode(guardrail(s, "ingressRules", v)),
|
|
414
|
+
withEgressRules: (v) => securityGroupNode(guardrail(s, "egressRules", v)),
|
|
415
|
+
dependsOn: (other) => securityGroupNode(addDependency(s, other.state.id))
|
|
416
|
+
});
|
|
417
|
+
const SecurityGroup = (cfg) => securityGroupNode(newNode(cfg.id, "NetworkAndCompute.SecurityGroup"));
|
|
418
|
+
const virtualMachineNode = (s) => ({
|
|
419
|
+
state: s,
|
|
420
|
+
withOsType: (v) => virtualMachineNode(guardrail(s, "osType", v)),
|
|
421
|
+
withSize: (v) => virtualMachineNode(guardrail(s, "size", v)),
|
|
422
|
+
withTags: (v) => virtualMachineNode(guardrail(s, "tags", v)),
|
|
423
|
+
dependsOn: (other) => virtualMachineNode(addDependency(s, other.state.id))
|
|
424
|
+
});
|
|
425
|
+
const VirtualMachine = (cfg) => virtualMachineNode(newNode(cfg.id, "NetworkAndCompute.VirtualMachine"));
|
|
426
|
+
const containerPlatformNode = (s) => ({
|
|
427
|
+
state: s,
|
|
428
|
+
withNodePools: (v) => containerPlatformNode(guardrail(s, "nodePools", v)),
|
|
429
|
+
withKubernetesVersion: (v) => containerPlatformNode(guardrail(s, "kubernetesVersion", v)),
|
|
430
|
+
withNetworkPolicyProvider: (v) => containerPlatformNode(guardrail(s, "networkPolicyProvider", v)),
|
|
431
|
+
dependsOn: (other) => containerPlatformNode(addDependency(s, other.state.id))
|
|
432
|
+
});
|
|
433
|
+
const ContainerPlatform = (cfg) => containerPlatformNode(newNode(cfg.id, "NetworkAndCompute.ContainerPlatform"));
|
|
434
|
+
const loadBalancerNode = (s) => ({
|
|
435
|
+
state: s,
|
|
436
|
+
withScheme: (v) => loadBalancerNode(guardrail(s, "scheme", v)),
|
|
437
|
+
dependsOn: (other) => loadBalancerNode(addDependency(s, other.state.id))
|
|
438
|
+
});
|
|
439
|
+
const LoadBalancer = (cfg) => loadBalancerNode(newNode(cfg.id, "NetworkAndCompute.LoadBalancer"));
|
|
440
|
+
|
|
441
|
+
//#endregion
|
|
442
|
+
//#region src/model/components/storage.ts
|
|
443
|
+
/**
|
|
444
|
+
* components/storage.ts — Storage domain Component factories (Level 1).
|
|
445
|
+
*
|
|
446
|
+
* Abstract, vendor-agnostic capability contracts:
|
|
447
|
+
* - Storage.ObjectStorage
|
|
448
|
+
* - Storage.RelationalDbms
|
|
449
|
+
* - Storage.RelationalDatabase
|
|
450
|
+
*
|
|
451
|
+
* Each agnostic parameter is a typed `.withXxx()` guardrail setter (locks the
|
|
452
|
+
* key at design time). Built exclusively on the LOCKED engine in ../core.
|
|
453
|
+
*/
|
|
454
|
+
const objectStorageNode = (s) => ({
|
|
455
|
+
state: s,
|
|
456
|
+
withVersioningEnabled: (v) => objectStorageNode(guardrail(s, "versioningEnabled", v)),
|
|
457
|
+
withStorageClass: (v) => objectStorageNode(guardrail(s, "storageClass", v)),
|
|
458
|
+
withPublicAccess: (v) => objectStorageNode(guardrail(s, "publicAccess", v)),
|
|
459
|
+
withEncryption: (v) => objectStorageNode(guardrail(s, "encryption", v)),
|
|
460
|
+
withRetentionDays: (v) => objectStorageNode(guardrail(s, "retentionDays", v)),
|
|
461
|
+
withTags: (v) => objectStorageNode(guardrail(s, "tags", v))
|
|
462
|
+
});
|
|
463
|
+
const ObjectStorage = (cfg) => objectStorageNode(newNode(cfg.id, "Storage.ObjectStorage"));
|
|
464
|
+
const relationalDbmsNode = (s) => ({
|
|
465
|
+
state: s,
|
|
466
|
+
withEngineVersion: (v) => relationalDbmsNode(guardrail(s, "engineVersion", v)),
|
|
467
|
+
withSizeTier: (v) => relationalDbmsNode(guardrail(s, "sizeTier", v)),
|
|
468
|
+
withStorageGb: (v) => relationalDbmsNode(guardrail(s, "storageGb", v)),
|
|
469
|
+
withBackupRetentionDays: (v) => relationalDbmsNode(guardrail(s, "backupRetentionDays", v)),
|
|
470
|
+
withHighAvailability: (v) => relationalDbmsNode(guardrail(s, "highAvailability", v))
|
|
471
|
+
});
|
|
472
|
+
const RelationalDbms = (cfg) => relationalDbmsNode(newNode(cfg.id, "Storage.RelationalDbms"));
|
|
473
|
+
const relationalDatabaseNode = (s) => ({
|
|
474
|
+
state: s,
|
|
475
|
+
withCharset: (v) => relationalDatabaseNode(guardrail(s, "charset", v)),
|
|
476
|
+
withCollation: (v) => relationalDatabaseNode(guardrail(s, "collation", v)),
|
|
477
|
+
dependsOn: (other) => relationalDatabaseNode(addDependency(s, other.state.id))
|
|
478
|
+
});
|
|
479
|
+
const RelationalDatabase = (cfg) => relationalDatabaseNode(newNode(cfg.id, "Storage.RelationalDatabase"));
|
|
480
|
+
|
|
481
|
+
//#endregion
|
|
482
|
+
//#region src/model/components/big_data.ts
|
|
483
|
+
/**
|
|
484
|
+
* components/big_data.ts — BigData domain Component factories (Level 1, abstract).
|
|
485
|
+
*
|
|
486
|
+
* Each agnostic param is a typed `.withXxx()` guardrail setter (locked at design
|
|
487
|
+
* time via `guardrail`). Structural relationships are declared with `dependsOn`
|
|
488
|
+
* (via `addDependency`). Vendor knobs never appear here — they live on Offers.
|
|
489
|
+
*/
|
|
490
|
+
const computeClusterNode = (s) => ({
|
|
491
|
+
state: s,
|
|
492
|
+
withClusterName: (v) => computeClusterNode(guardrail(s, "clusterName", v)),
|
|
493
|
+
withSparkVersion: (v) => computeClusterNode(guardrail(s, "sparkVersion", v)),
|
|
494
|
+
withMinWorkers: (v) => computeClusterNode(guardrail(s, "minWorkers", v)),
|
|
495
|
+
withMaxWorkers: (v) => computeClusterNode(guardrail(s, "maxWorkers", v)),
|
|
496
|
+
withAutoTerminationMinutes: (v) => computeClusterNode(guardrail(s, "autoTerminationMinutes", v)),
|
|
497
|
+
withDataSecurityMode: (v) => computeClusterNode(guardrail(s, "dataSecurityMode", v))
|
|
498
|
+
});
|
|
499
|
+
const ComputeCluster = (cfg) => computeClusterNode(newNode(cfg.id, "BigData.ComputeCluster"));
|
|
500
|
+
const dataProcessingJobNode = (s) => ({
|
|
501
|
+
state: s,
|
|
502
|
+
withJobName: (v) => dataProcessingJobNode(guardrail(s, "jobName", v)),
|
|
503
|
+
withTaskType: (v) => dataProcessingJobNode(guardrail(s, "taskType", v)),
|
|
504
|
+
withCronSchedule: (v) => dataProcessingJobNode(guardrail(s, "cronSchedule", v)),
|
|
505
|
+
withMaxRetries: (v) => dataProcessingJobNode(guardrail(s, "maxRetries", v)),
|
|
506
|
+
dependsOn: (other) => dataProcessingJobNode(addDependency(s, other.state.id))
|
|
507
|
+
});
|
|
508
|
+
const DataProcessingJob = (cfg) => dataProcessingJobNode(newNode(cfg.id, "BigData.DataProcessingJob"));
|
|
509
|
+
const mlExperimentNode = (s) => ({
|
|
510
|
+
state: s,
|
|
511
|
+
withExperimentName: (v) => mlExperimentNode(guardrail(s, "experimentName", v))
|
|
512
|
+
});
|
|
513
|
+
const MlExperiment = (cfg) => mlExperimentNode(newNode(cfg.id, "BigData.MlExperiment"));
|
|
514
|
+
const datalakeNode = (s) => ({
|
|
515
|
+
state: s,
|
|
516
|
+
withRegion: (v) => datalakeNode(guardrail(s, "region", v)),
|
|
517
|
+
withVersioningEnabled: (v) => datalakeNode(guardrail(s, "versioningEnabled", v)),
|
|
518
|
+
withRetentionDays: (v) => datalakeNode(guardrail(s, "retentionDays", v))
|
|
519
|
+
});
|
|
520
|
+
const Datalake = (cfg) => datalakeNode(newNode(cfg.id, "BigData.Datalake"));
|
|
521
|
+
const distributedDataProcessingNode = (s) => ({
|
|
522
|
+
state: s,
|
|
523
|
+
withWorkspaceName: (v) => distributedDataProcessingNode(guardrail(s, "workspaceName", v))
|
|
524
|
+
});
|
|
525
|
+
const DistributedDataProcessing = (cfg) => distributedDataProcessingNode(newNode(cfg.id, "BigData.DistributedDataProcessing"));
|
|
526
|
+
|
|
527
|
+
//#endregion
|
|
528
|
+
//#region src/model/components/messaging.ts
|
|
529
|
+
/**
|
|
530
|
+
* components/messaging.ts — Messaging domain Component factories (Level 1).
|
|
531
|
+
*
|
|
532
|
+
* Abstract, vendor-agnostic Components for the locked Fractal model. Agnostic
|
|
533
|
+
* `.withXxx()` setters are GUARDRAILS (locked at design time) via guardrail().
|
|
534
|
+
* Offers that satisfy these Components live in offers/messaging.ts.
|
|
535
|
+
*/
|
|
536
|
+
const brokerNode = (s) => ({
|
|
537
|
+
state: s,
|
|
538
|
+
withTier: (v) => brokerNode(guardrail(s, "tier", v)),
|
|
539
|
+
withRegion: (v) => brokerNode(guardrail(s, "region", v)),
|
|
540
|
+
withEncryption: (v) => brokerNode(guardrail(s, "encryption", v))
|
|
541
|
+
});
|
|
542
|
+
const Broker = (cfg) => brokerNode(newNode(cfg.id, "Messaging.Broker"));
|
|
543
|
+
const messagingEntityNode = (s) => ({
|
|
544
|
+
state: s,
|
|
545
|
+
withMessageRetentionHours: (v) => messagingEntityNode(guardrail(s, "messageRetentionHours", v)),
|
|
546
|
+
withPartitionCount: (v) => messagingEntityNode(guardrail(s, "partitionCount", v)),
|
|
547
|
+
withDeadLetterEnabled: (v) => messagingEntityNode(guardrail(s, "deadLetterEnabled", v)),
|
|
548
|
+
withMaxDeliveryAttempts: (v) => messagingEntityNode(guardrail(s, "maxDeliveryAttempts", v)),
|
|
549
|
+
dependsOn: (other) => messagingEntityNode(addDependency(s, other.state.id))
|
|
550
|
+
});
|
|
551
|
+
const MessagingEntity = (cfg) => messagingEntityNode(newNode(cfg.id, "Messaging.MessagingEntity"));
|
|
552
|
+
|
|
553
|
+
//#endregion
|
|
554
|
+
//#region src/model/components/api_management.ts
|
|
555
|
+
/**
|
|
556
|
+
* components/api_management.ts — APIManagement Component factories.
|
|
557
|
+
*
|
|
558
|
+
* Each agnostic blueprint parameter is a typed `.withXxx()` guardrail setter
|
|
559
|
+
* (locked at design time). Vendor knobs do NOT live here — they belong on
|
|
560
|
+
* Offers (see offers/api_management.ts).
|
|
561
|
+
*/
|
|
562
|
+
const apiGatewayNode = (s) => ({
|
|
563
|
+
state: s,
|
|
564
|
+
withHttpsOnly: (v) => apiGatewayNode(guardrail(s, "httpsOnly", v)),
|
|
565
|
+
withCustomDomain: (v) => apiGatewayNode(guardrail(s, "customDomain", v)),
|
|
566
|
+
withCors: (v) => apiGatewayNode(guardrail(s, "cors", v)),
|
|
567
|
+
withRateLimit: (v) => apiGatewayNode(guardrail(s, "rateLimit", v)),
|
|
568
|
+
withRoutes: (v) => apiGatewayNode(guardrail(s, "routes", v))
|
|
569
|
+
});
|
|
570
|
+
const ApiGateway = (cfg) => apiGatewayNode(newNode(cfg.id, "APIManagement.ApiGateway"));
|
|
571
|
+
|
|
572
|
+
//#endregion
|
|
573
|
+
//#region src/model/components/observability.ts
|
|
574
|
+
/**
|
|
575
|
+
* components/observability.ts — Observability domain Component factories (Level 1).
|
|
576
|
+
*
|
|
577
|
+
* Abstract, vendor-agnostic capability contracts:
|
|
578
|
+
* - Observability.Monitoring
|
|
579
|
+
* - Observability.Tracing
|
|
580
|
+
* - Observability.Logging
|
|
581
|
+
*
|
|
582
|
+
* Each agnostic parameter is a typed `.withXxx()` guardrail setter (locks the
|
|
583
|
+
* key at design time). Built exclusively on the LOCKED engine in ../core.
|
|
584
|
+
*/
|
|
585
|
+
const monitoringNode = (s) => ({
|
|
586
|
+
state: s,
|
|
587
|
+
withRetentionDays: (v) => monitoringNode(guardrail(s, "retentionDays", v)),
|
|
588
|
+
withScrapeInterval: (v) => monitoringNode(guardrail(s, "scrapeInterval", v))
|
|
589
|
+
});
|
|
590
|
+
const Monitoring = (cfg) => monitoringNode(newNode(cfg.id, "Observability.Monitoring"));
|
|
591
|
+
const tracingNode = (s) => ({
|
|
592
|
+
state: s,
|
|
593
|
+
withRetentionDays: (v) => tracingNode(guardrail(s, "retentionDays", v)),
|
|
594
|
+
withSamplingRate: (v) => tracingNode(guardrail(s, "samplingRate", v))
|
|
595
|
+
});
|
|
596
|
+
const Tracing = (cfg) => tracingNode(newNode(cfg.id, "Observability.Tracing"));
|
|
597
|
+
const loggingNode = (s) => ({
|
|
598
|
+
state: s,
|
|
599
|
+
withRetentionDays: (v) => loggingNode(guardrail(s, "retentionDays", v))
|
|
600
|
+
});
|
|
601
|
+
const Logging = (cfg) => loggingNode(newNode(cfg.id, "Observability.Logging"));
|
|
602
|
+
|
|
603
|
+
//#endregion
|
|
604
|
+
//#region src/model/components/security.ts
|
|
605
|
+
/**
|
|
606
|
+
* components/security.ts — Security domain Component factories (Level 1).
|
|
607
|
+
*
|
|
608
|
+
* Abstract, vendor-agnostic capability contracts:
|
|
609
|
+
* - Security.ServiceMesh
|
|
610
|
+
* - Security.IdentityProvider
|
|
611
|
+
*
|
|
612
|
+
* Each agnostic parameter is a typed `.withXxx()` guardrail setter (locks the
|
|
613
|
+
* key at design time). Built exclusively on the LOCKED engine in ../core.
|
|
614
|
+
*/
|
|
615
|
+
const serviceMeshNode = (s) => ({
|
|
616
|
+
state: s,
|
|
617
|
+
withMtlsMode: (v) => serviceMeshNode(guardrail(s, "mtlsMode", v)),
|
|
618
|
+
withAuthenticationMode: (v) => serviceMeshNode(guardrail(s, "authenticationMode", v)),
|
|
619
|
+
withTags: (v) => serviceMeshNode(guardrail(s, "tags", v))
|
|
620
|
+
});
|
|
621
|
+
const ServiceMesh = (cfg) => serviceMeshNode(newNode(cfg.id, "Security.ServiceMesh"));
|
|
622
|
+
const identityProviderNode = (s) => ({
|
|
623
|
+
state: s,
|
|
624
|
+
withUserDirectoryName: (v) => identityProviderNode(guardrail(s, "userDirectoryName", v)),
|
|
625
|
+
withPasswordPolicy: (v) => identityProviderNode(guardrail(s, "passwordPolicy", v)),
|
|
626
|
+
withMfaConfiguration: (v) => identityProviderNode(guardrail(s, "mfaConfiguration", v)),
|
|
627
|
+
withSessionDuration: (v) => identityProviderNode(guardrail(s, "sessionDuration", v)),
|
|
628
|
+
withTags: (v) => identityProviderNode(guardrail(s, "tags", v))
|
|
629
|
+
});
|
|
630
|
+
const IdentityProvider = (cfg) => identityProviderNode(newNode(cfg.id, "Security.IdentityProvider"));
|
|
631
|
+
|
|
632
|
+
//#endregion
|
|
633
|
+
//#region src/model/components/custom_workloads.ts
|
|
634
|
+
/**
|
|
635
|
+
* components/custom_workloads.ts — CustomWorkloads domain Component factories
|
|
636
|
+
* (Level 1, abstract).
|
|
637
|
+
*
|
|
638
|
+
* Each agnostic param is a typed `.withXxx()` guardrail setter (locked at design
|
|
639
|
+
* time via `guardrail`). Vendor knobs never appear here — they live on Offers.
|
|
640
|
+
*/
|
|
641
|
+
const workloadNode = (s) => ({
|
|
642
|
+
state: s,
|
|
643
|
+
withImage: (v) => workloadNode(guardrail(s, "image", v)),
|
|
644
|
+
withPort: (v) => workloadNode(guardrail(s, "port", v)),
|
|
645
|
+
withReplicas: (v) => workloadNode(guardrail(s, "replicas", v)),
|
|
646
|
+
withEnv: (v) => workloadNode(guardrail(s, "env", v)),
|
|
647
|
+
withCpuRequest: (v) => workloadNode(guardrail(s, "cpuRequest", v)),
|
|
648
|
+
withMemoryRequest: (v) => workloadNode(guardrail(s, "memoryRequest", v)),
|
|
649
|
+
withMaxReplicas: (v) => workloadNode(guardrail(s, "maxReplicas", v)),
|
|
650
|
+
withHealthCheck: (v) => workloadNode(guardrail(s, "healthCheck", v))
|
|
651
|
+
});
|
|
652
|
+
const Workload = (cfg) => workloadNode(newNode(cfg.id, "CustomWorkloads.Workload"));
|
|
653
|
+
const functionNode = (s) => ({
|
|
654
|
+
state: s,
|
|
655
|
+
withSourceArtifact: (v) => functionNode(guardrail(s, "sourceArtifact", v)),
|
|
656
|
+
withRuntime: (v) => functionNode(guardrail(s, "runtime", v)),
|
|
657
|
+
withEnvironment: (v) => functionNode(guardrail(s, "environment", v)),
|
|
658
|
+
withMemory: (v) => functionNode(guardrail(s, "memory", v)),
|
|
659
|
+
withTimeout: (v) => functionNode(guardrail(s, "timeout", v)),
|
|
660
|
+
withConcurrency: (v) => functionNode(guardrail(s, "concurrency", v))
|
|
661
|
+
});
|
|
662
|
+
const Function = (cfg) => functionNode(newNode(cfg.id, "CustomWorkloads.Function"));
|
|
663
|
+
|
|
664
|
+
//#endregion
|
|
665
|
+
//#region src/model/offers/network_and_compute.ts
|
|
666
|
+
/**
|
|
667
|
+
* offers/network_and_compute.ts — NetworkAndCompute Offer catalogue (Level 3).
|
|
668
|
+
*
|
|
669
|
+
* Each offer declares which abstract Component it satisfies, its 3-part offer
|
|
670
|
+
* type, its vendor (provider) and delivery model, and carries vendor knobs in
|
|
671
|
+
* its config type. Offers with no extra vendor knobs use config type `{}`.
|
|
672
|
+
*/
|
|
673
|
+
const AwsVpc = defineOffer({
|
|
674
|
+
satisfies: "NetworkAndCompute.VirtualNetwork",
|
|
675
|
+
offerType: "NetworkAndCompute.IaaS.AwsVpc",
|
|
676
|
+
provider: "AWS",
|
|
677
|
+
deliveryModel: "IaaS"
|
|
678
|
+
});
|
|
679
|
+
const AzureVnet = defineOffer({
|
|
680
|
+
satisfies: "NetworkAndCompute.VirtualNetwork",
|
|
681
|
+
offerType: "NetworkAndCompute.IaaS.AzureVnet",
|
|
682
|
+
provider: "Azure",
|
|
683
|
+
deliveryModel: "IaaS"
|
|
684
|
+
});
|
|
685
|
+
const GcpVpc = defineOffer({
|
|
686
|
+
satisfies: "NetworkAndCompute.VirtualNetwork",
|
|
687
|
+
offerType: "NetworkAndCompute.IaaS.GcpVpc",
|
|
688
|
+
provider: "GCP",
|
|
689
|
+
deliveryModel: "IaaS"
|
|
690
|
+
});
|
|
691
|
+
const AwsSubnet = defineOffer({
|
|
692
|
+
satisfies: "NetworkAndCompute.Subnet",
|
|
693
|
+
offerType: "NetworkAndCompute.IaaS.AwsSubnet",
|
|
694
|
+
provider: "AWS",
|
|
695
|
+
deliveryModel: "IaaS"
|
|
696
|
+
});
|
|
697
|
+
const AzureSubnet = defineOffer({
|
|
698
|
+
satisfies: "NetworkAndCompute.Subnet",
|
|
699
|
+
offerType: "NetworkAndCompute.IaaS.AzureSubnet",
|
|
700
|
+
provider: "Azure",
|
|
701
|
+
deliveryModel: "IaaS"
|
|
702
|
+
});
|
|
703
|
+
const GcpSubnet = defineOffer({
|
|
704
|
+
satisfies: "NetworkAndCompute.Subnet",
|
|
705
|
+
offerType: "NetworkAndCompute.IaaS.GcpSubnet",
|
|
706
|
+
provider: "GCP",
|
|
707
|
+
deliveryModel: "IaaS"
|
|
708
|
+
});
|
|
709
|
+
const AwsSecurityGroup = defineOffer({
|
|
710
|
+
satisfies: "NetworkAndCompute.SecurityGroup",
|
|
711
|
+
offerType: "NetworkAndCompute.IaaS.AwsSecurityGroup",
|
|
712
|
+
provider: "AWS",
|
|
713
|
+
deliveryModel: "IaaS"
|
|
714
|
+
});
|
|
715
|
+
const AzureNsg = defineOffer({
|
|
716
|
+
satisfies: "NetworkAndCompute.SecurityGroup",
|
|
717
|
+
offerType: "NetworkAndCompute.IaaS.AzureNsg",
|
|
718
|
+
provider: "Azure",
|
|
719
|
+
deliveryModel: "IaaS"
|
|
720
|
+
});
|
|
721
|
+
const GcpFirewall = defineOffer({
|
|
722
|
+
satisfies: "NetworkAndCompute.SecurityGroup",
|
|
723
|
+
offerType: "NetworkAndCompute.IaaS.GcpFirewall",
|
|
724
|
+
provider: "GCP",
|
|
725
|
+
deliveryModel: "IaaS"
|
|
726
|
+
});
|
|
727
|
+
const Ec2Instance = defineOffer({
|
|
728
|
+
satisfies: "NetworkAndCompute.VirtualMachine",
|
|
729
|
+
offerType: "NetworkAndCompute.IaaS.Ec2Instance",
|
|
730
|
+
provider: "AWS",
|
|
731
|
+
deliveryModel: "IaaS"
|
|
732
|
+
});
|
|
733
|
+
const AzureVm = defineOffer({
|
|
734
|
+
satisfies: "NetworkAndCompute.VirtualMachine",
|
|
735
|
+
offerType: "NetworkAndCompute.IaaS.AzureVm",
|
|
736
|
+
provider: "Azure",
|
|
737
|
+
deliveryModel: "IaaS"
|
|
738
|
+
});
|
|
739
|
+
const GcpVm = defineOffer({
|
|
740
|
+
satisfies: "NetworkAndCompute.VirtualMachine",
|
|
741
|
+
offerType: "NetworkAndCompute.IaaS.GcpVm",
|
|
742
|
+
provider: "GCP",
|
|
743
|
+
deliveryModel: "IaaS"
|
|
744
|
+
});
|
|
745
|
+
const VsphereVm = defineOffer({
|
|
746
|
+
satisfies: "NetworkAndCompute.VirtualMachine",
|
|
747
|
+
offerType: "NetworkAndCompute.IaaS.VsphereVm",
|
|
748
|
+
provider: "VMware",
|
|
749
|
+
deliveryModel: "IaaS"
|
|
750
|
+
});
|
|
751
|
+
const OpenshiftVm = defineOffer({
|
|
752
|
+
satisfies: "NetworkAndCompute.VirtualMachine",
|
|
753
|
+
offerType: "NetworkAndCompute.CaaS.OpenshiftVm",
|
|
754
|
+
provider: "RedHat",
|
|
755
|
+
deliveryModel: "CaaS"
|
|
756
|
+
});
|
|
757
|
+
const Eks = defineOffer({
|
|
758
|
+
satisfies: "NetworkAndCompute.ContainerPlatform",
|
|
759
|
+
offerType: "NetworkAndCompute.PaaS.Eks",
|
|
760
|
+
provider: "AWS",
|
|
761
|
+
deliveryModel: "PaaS"
|
|
762
|
+
});
|
|
763
|
+
const Aks = defineOffer({
|
|
764
|
+
satisfies: "NetworkAndCompute.ContainerPlatform",
|
|
765
|
+
offerType: "NetworkAndCompute.PaaS.Aks",
|
|
766
|
+
provider: "Azure",
|
|
767
|
+
deliveryModel: "PaaS"
|
|
768
|
+
});
|
|
769
|
+
const Gke = defineOffer({
|
|
770
|
+
satisfies: "NetworkAndCompute.ContainerPlatform",
|
|
771
|
+
offerType: "NetworkAndCompute.PaaS.Gke",
|
|
772
|
+
provider: "GCP",
|
|
773
|
+
deliveryModel: "PaaS"
|
|
774
|
+
});
|
|
775
|
+
const AwsLb = defineOffer({
|
|
776
|
+
satisfies: "NetworkAndCompute.LoadBalancer",
|
|
777
|
+
offerType: "NetworkAndCompute.IaaS.AwsLb",
|
|
778
|
+
provider: "AWS",
|
|
779
|
+
deliveryModel: "IaaS"
|
|
780
|
+
});
|
|
781
|
+
const AzureLb = defineOffer({
|
|
782
|
+
satisfies: "NetworkAndCompute.LoadBalancer",
|
|
783
|
+
offerType: "NetworkAndCompute.IaaS.AzureLb",
|
|
784
|
+
provider: "Azure",
|
|
785
|
+
deliveryModel: "IaaS"
|
|
786
|
+
});
|
|
787
|
+
const GcpGlb = defineOffer({
|
|
788
|
+
satisfies: "NetworkAndCompute.LoadBalancer",
|
|
789
|
+
offerType: "NetworkAndCompute.IaaS.GcpGlb",
|
|
790
|
+
provider: "GCP",
|
|
791
|
+
deliveryModel: "IaaS"
|
|
792
|
+
});
|
|
793
|
+
const OciVcn = defineOffer({
|
|
794
|
+
satisfies: "NetworkAndCompute.VirtualNetwork",
|
|
795
|
+
offerType: "NetworkAndCompute.IaaS.OciVcn",
|
|
796
|
+
provider: "OCI",
|
|
797
|
+
deliveryModel: "IaaS"
|
|
798
|
+
});
|
|
799
|
+
const OciSubnet = defineOffer({
|
|
800
|
+
satisfies: "NetworkAndCompute.Subnet",
|
|
801
|
+
offerType: "NetworkAndCompute.IaaS.OciSubnet",
|
|
802
|
+
provider: "OCI",
|
|
803
|
+
deliveryModel: "IaaS"
|
|
804
|
+
});
|
|
805
|
+
const OciSecurityList = defineOffer({
|
|
806
|
+
satisfies: "NetworkAndCompute.SecurityGroup",
|
|
807
|
+
offerType: "NetworkAndCompute.IaaS.OciSecurityList",
|
|
808
|
+
provider: "OCI",
|
|
809
|
+
deliveryModel: "IaaS"
|
|
810
|
+
});
|
|
811
|
+
const OciInstance = defineOffer({
|
|
812
|
+
satisfies: "NetworkAndCompute.VirtualMachine",
|
|
813
|
+
offerType: "NetworkAndCompute.IaaS.OciInstance",
|
|
814
|
+
provider: "OCI",
|
|
815
|
+
deliveryModel: "IaaS"
|
|
816
|
+
});
|
|
817
|
+
const HetznerNetwork = defineOffer({
|
|
818
|
+
satisfies: "NetworkAndCompute.VirtualNetwork",
|
|
819
|
+
offerType: "NetworkAndCompute.IaaS.HetznerNetwork",
|
|
820
|
+
provider: "Hetzner",
|
|
821
|
+
deliveryModel: "IaaS"
|
|
822
|
+
});
|
|
823
|
+
const HetznerSubnet = defineOffer({
|
|
824
|
+
satisfies: "NetworkAndCompute.Subnet",
|
|
825
|
+
offerType: "NetworkAndCompute.IaaS.HetznerSubnet",
|
|
826
|
+
provider: "Hetzner",
|
|
827
|
+
deliveryModel: "IaaS"
|
|
828
|
+
});
|
|
829
|
+
const HetznerFirewall = defineOffer({
|
|
830
|
+
satisfies: "NetworkAndCompute.SecurityGroup",
|
|
831
|
+
offerType: "NetworkAndCompute.IaaS.HetznerFirewall",
|
|
832
|
+
provider: "Hetzner",
|
|
833
|
+
deliveryModel: "IaaS"
|
|
834
|
+
});
|
|
835
|
+
const HetznerServer = defineOffer({
|
|
836
|
+
satisfies: "NetworkAndCompute.VirtualMachine",
|
|
837
|
+
offerType: "NetworkAndCompute.IaaS.HetznerServer",
|
|
838
|
+
provider: "Hetzner",
|
|
839
|
+
deliveryModel: "IaaS"
|
|
840
|
+
});
|
|
841
|
+
const VspherePortGroup = defineOffer({
|
|
842
|
+
satisfies: "NetworkAndCompute.VirtualNetwork",
|
|
843
|
+
offerType: "NetworkAndCompute.IaaS.VspherePortGroup",
|
|
844
|
+
provider: "VMware",
|
|
845
|
+
deliveryModel: "IaaS"
|
|
846
|
+
});
|
|
847
|
+
const VsphereVlan = defineOffer({
|
|
848
|
+
satisfies: "NetworkAndCompute.Subnet",
|
|
849
|
+
offerType: "NetworkAndCompute.IaaS.VsphereVlan",
|
|
850
|
+
provider: "VMware",
|
|
851
|
+
deliveryModel: "IaaS"
|
|
852
|
+
});
|
|
853
|
+
const OpenshiftSecurityGroup = defineOffer({
|
|
854
|
+
satisfies: "NetworkAndCompute.SecurityGroup",
|
|
855
|
+
offerType: "NetworkAndCompute.CaaS.OpenshiftNetworkPolicy",
|
|
856
|
+
provider: "RedHat",
|
|
857
|
+
deliveryModel: "CaaS"
|
|
858
|
+
});
|
|
859
|
+
const OpenshiftService = defineOffer({
|
|
860
|
+
satisfies: "NetworkAndCompute.LoadBalancer",
|
|
861
|
+
offerType: "NetworkAndCompute.CaaS.OpenshiftService",
|
|
862
|
+
provider: "RedHat",
|
|
863
|
+
deliveryModel: "CaaS"
|
|
864
|
+
});
|
|
865
|
+
|
|
866
|
+
//#endregion
|
|
867
|
+
//#region src/model/offers/storage.ts
|
|
868
|
+
/**
|
|
869
|
+
* offers/storage.ts — Storage domain Offers (Catalogue, Level 3).
|
|
870
|
+
*
|
|
871
|
+
* Concrete, vendor-specific implementations declaring which abstract Storage
|
|
872
|
+
* Component each satisfies. Vendor knobs live in each offer's config only.
|
|
873
|
+
* Vendor-neutral self-hosted offers (e.g. MinIO on any cluster) omit `provider`.
|
|
874
|
+
*/
|
|
875
|
+
/**
|
|
876
|
+
* A DBMS offer emits itself PLUS one Database live component per child the
|
|
877
|
+
* application added via `withDatabases` — each database lives in the DBMS's
|
|
878
|
+
* vendor family, so it is not independently offer-selected. Swap the DBMS offer
|
|
879
|
+
* and the databases' offer type follows.
|
|
880
|
+
*/
|
|
881
|
+
const dbmsInstantiate = (dbmsType, provider, databaseType) => (ctx, config) => [{
|
|
882
|
+
id: ctx.id,
|
|
883
|
+
type: dbmsType,
|
|
884
|
+
provider,
|
|
885
|
+
deliveryModel: "PaaS",
|
|
886
|
+
parameters: {
|
|
887
|
+
...ctx.parameters,
|
|
888
|
+
...config
|
|
889
|
+
},
|
|
890
|
+
dependencies: [...ctx.dependencies],
|
|
891
|
+
links: [...ctx.links]
|
|
892
|
+
}, ...ctx.children.map((child) => ({
|
|
893
|
+
id: child.id,
|
|
894
|
+
type: databaseType,
|
|
895
|
+
provider,
|
|
896
|
+
deliveryModel: "PaaS",
|
|
897
|
+
parameters: { ...child.parameters },
|
|
898
|
+
dependencies: [...child.dependencies],
|
|
899
|
+
links: [...child.links]
|
|
900
|
+
}))];
|
|
901
|
+
const AwsS3 = defineOffer({
|
|
902
|
+
satisfies: "Storage.ObjectStorage",
|
|
903
|
+
offerType: "Storage.PaaS.S3",
|
|
904
|
+
provider: "AWS",
|
|
905
|
+
deliveryModel: "PaaS"
|
|
906
|
+
});
|
|
907
|
+
const AzureBlob = defineOffer({
|
|
908
|
+
satisfies: "Storage.ObjectStorage",
|
|
909
|
+
offerType: "Storage.PaaS.AzureBlob",
|
|
910
|
+
provider: "Azure",
|
|
911
|
+
deliveryModel: "PaaS"
|
|
912
|
+
});
|
|
913
|
+
const GcsBucket = defineOffer({
|
|
914
|
+
satisfies: "Storage.ObjectStorage",
|
|
915
|
+
offerType: "Storage.PaaS.GcsBucket",
|
|
916
|
+
provider: "GCP",
|
|
917
|
+
deliveryModel: "PaaS"
|
|
918
|
+
});
|
|
919
|
+
const MinIO = defineOffer({
|
|
920
|
+
satisfies: "Storage.ObjectStorage",
|
|
921
|
+
offerType: "Storage.CaaS.MinIO",
|
|
922
|
+
deliveryModel: "CaaS"
|
|
923
|
+
});
|
|
924
|
+
const AzurePostgresDbms = defineOffer({
|
|
925
|
+
satisfies: "Storage.RelationalDbms",
|
|
926
|
+
offerType: "Storage.PaaS.AzurePostgresDbms",
|
|
927
|
+
provider: "Azure",
|
|
928
|
+
deliveryModel: "PaaS",
|
|
929
|
+
instantiate: dbmsInstantiate("Storage.PaaS.AzurePostgresDbms", "Azure", "Storage.PaaS.AzurePostgresDatabase")
|
|
930
|
+
});
|
|
931
|
+
const GcpPostgresDbms = defineOffer({
|
|
932
|
+
satisfies: "Storage.RelationalDbms",
|
|
933
|
+
offerType: "Storage.PaaS.GcpPostgresDbms",
|
|
934
|
+
provider: "GCP",
|
|
935
|
+
deliveryModel: "PaaS",
|
|
936
|
+
instantiate: dbmsInstantiate("Storage.PaaS.GcpPostgresDbms", "GCP", "Storage.PaaS.GcpPostgresDatabase")
|
|
937
|
+
});
|
|
938
|
+
const ArubaMySqlDbms = defineOffer({
|
|
939
|
+
satisfies: "Storage.RelationalDbms",
|
|
940
|
+
offerType: "Storage.PaaS.ArubaMySqlDbms",
|
|
941
|
+
provider: "Aruba",
|
|
942
|
+
deliveryModel: "PaaS",
|
|
943
|
+
instantiate: dbmsInstantiate("Storage.PaaS.ArubaMySqlDbms", "Aruba", "Storage.PaaS.ArubaMySqlDatabase")
|
|
944
|
+
});
|
|
945
|
+
const AzurePostgresDatabase = defineOffer({
|
|
946
|
+
satisfies: "Storage.RelationalDatabase",
|
|
947
|
+
offerType: "Storage.PaaS.AzurePostgresDatabase",
|
|
948
|
+
provider: "Azure",
|
|
949
|
+
deliveryModel: "PaaS"
|
|
950
|
+
});
|
|
951
|
+
const GcpPostgresDatabase = defineOffer({
|
|
952
|
+
satisfies: "Storage.RelationalDatabase",
|
|
953
|
+
offerType: "Storage.PaaS.GcpPostgresDatabase",
|
|
954
|
+
provider: "GCP",
|
|
955
|
+
deliveryModel: "PaaS"
|
|
956
|
+
});
|
|
957
|
+
const OpenshiftPersistentVolume = defineOffer({
|
|
958
|
+
satisfies: "Storage.ObjectStorage",
|
|
959
|
+
offerType: "Storage.CaaS.OpenshiftPersistentVolume",
|
|
960
|
+
provider: "RedHat",
|
|
961
|
+
deliveryModel: "CaaS"
|
|
962
|
+
});
|
|
963
|
+
|
|
964
|
+
//#endregion
|
|
965
|
+
//#region src/model/offers/big_data.ts
|
|
966
|
+
/**
|
|
967
|
+
* offers/big_data.ts — BigData domain Offers (Catalogue, Level 3, concrete).
|
|
968
|
+
*
|
|
969
|
+
* Each offer declares which Component it satisfies, its 3-part offer type, its
|
|
970
|
+
* delivery model and (for cloud offers) its vendor. Vendor-neutral CaaS offers
|
|
971
|
+
* OMIT `provider` — they run on any cluster and are identified by deliveryModel
|
|
972
|
+
* + offerType. Vendor knobs live in each offer's config type.
|
|
973
|
+
*/
|
|
974
|
+
const AwsDatabricksCluster = defineOffer({
|
|
975
|
+
satisfies: "BigData.ComputeCluster",
|
|
976
|
+
offerType: "BigData.PaaS.AwsDatabricksCluster",
|
|
977
|
+
provider: "AWS",
|
|
978
|
+
deliveryModel: "PaaS"
|
|
979
|
+
});
|
|
980
|
+
const AzureDatabricksCluster = defineOffer({
|
|
981
|
+
satisfies: "BigData.ComputeCluster",
|
|
982
|
+
offerType: "BigData.PaaS.AzureDatabricksCluster",
|
|
983
|
+
provider: "Azure",
|
|
984
|
+
deliveryModel: "PaaS"
|
|
985
|
+
});
|
|
986
|
+
const GcpDatabricksCluster = defineOffer({
|
|
987
|
+
satisfies: "BigData.ComputeCluster",
|
|
988
|
+
offerType: "BigData.PaaS.GcpDatabricksCluster",
|
|
989
|
+
provider: "GCP",
|
|
990
|
+
deliveryModel: "PaaS"
|
|
991
|
+
});
|
|
992
|
+
const CaaSSparkCluster = defineOffer({
|
|
993
|
+
satisfies: "BigData.ComputeCluster",
|
|
994
|
+
offerType: "BigData.CaaS.CaaSSparkCluster",
|
|
995
|
+
deliveryModel: "CaaS"
|
|
996
|
+
});
|
|
997
|
+
const AwsDatabricksJob = defineOffer({
|
|
998
|
+
satisfies: "BigData.DataProcessingJob",
|
|
999
|
+
offerType: "BigData.PaaS.AwsDatabricksJob",
|
|
1000
|
+
provider: "AWS",
|
|
1001
|
+
deliveryModel: "PaaS"
|
|
1002
|
+
});
|
|
1003
|
+
const AzureDatabricksJob = defineOffer({
|
|
1004
|
+
satisfies: "BigData.DataProcessingJob",
|
|
1005
|
+
offerType: "BigData.PaaS.AzureDatabricksJob",
|
|
1006
|
+
provider: "Azure",
|
|
1007
|
+
deliveryModel: "PaaS"
|
|
1008
|
+
});
|
|
1009
|
+
const GcpDatabricksJob = defineOffer({
|
|
1010
|
+
satisfies: "BigData.DataProcessingJob",
|
|
1011
|
+
offerType: "BigData.PaaS.GcpDatabricksJob",
|
|
1012
|
+
provider: "GCP",
|
|
1013
|
+
deliveryModel: "PaaS"
|
|
1014
|
+
});
|
|
1015
|
+
const CaaSSparkJob = defineOffer({
|
|
1016
|
+
satisfies: "BigData.DataProcessingJob",
|
|
1017
|
+
offerType: "BigData.CaaS.CaaSSparkJob",
|
|
1018
|
+
deliveryModel: "CaaS"
|
|
1019
|
+
});
|
|
1020
|
+
const AwsDatabricksMlflow = defineOffer({
|
|
1021
|
+
satisfies: "BigData.MlExperiment",
|
|
1022
|
+
offerType: "BigData.PaaS.AwsDatabricksMlflow",
|
|
1023
|
+
provider: "AWS",
|
|
1024
|
+
deliveryModel: "PaaS"
|
|
1025
|
+
});
|
|
1026
|
+
const AzureDatabricksMlflow = defineOffer({
|
|
1027
|
+
satisfies: "BigData.MlExperiment",
|
|
1028
|
+
offerType: "BigData.PaaS.AzureDatabricksMlflow",
|
|
1029
|
+
provider: "Azure",
|
|
1030
|
+
deliveryModel: "PaaS"
|
|
1031
|
+
});
|
|
1032
|
+
const GcpDatabricksMlflow = defineOffer({
|
|
1033
|
+
satisfies: "BigData.MlExperiment",
|
|
1034
|
+
offerType: "BigData.PaaS.GcpDatabricksMlflow",
|
|
1035
|
+
provider: "GCP",
|
|
1036
|
+
deliveryModel: "PaaS"
|
|
1037
|
+
});
|
|
1038
|
+
const CaaSMlflow = defineOffer({
|
|
1039
|
+
satisfies: "BigData.MlExperiment",
|
|
1040
|
+
offerType: "BigData.CaaS.CaaSMlflow",
|
|
1041
|
+
deliveryModel: "CaaS"
|
|
1042
|
+
});
|
|
1043
|
+
const AwsS3Datalake = defineOffer({
|
|
1044
|
+
satisfies: "BigData.Datalake",
|
|
1045
|
+
offerType: "BigData.PaaS.AwsS3Datalake",
|
|
1046
|
+
provider: "AWS",
|
|
1047
|
+
deliveryModel: "PaaS"
|
|
1048
|
+
});
|
|
1049
|
+
const AzureDatalake = defineOffer({
|
|
1050
|
+
satisfies: "BigData.Datalake",
|
|
1051
|
+
offerType: "BigData.PaaS.AzureDatalake",
|
|
1052
|
+
provider: "Azure",
|
|
1053
|
+
deliveryModel: "PaaS"
|
|
1054
|
+
});
|
|
1055
|
+
const GcpDatalake = defineOffer({
|
|
1056
|
+
satisfies: "BigData.Datalake",
|
|
1057
|
+
offerType: "BigData.PaaS.GcpDatalake",
|
|
1058
|
+
provider: "GCP",
|
|
1059
|
+
deliveryModel: "PaaS"
|
|
1060
|
+
});
|
|
1061
|
+
const AwsDatabricks = defineOffer({
|
|
1062
|
+
satisfies: "BigData.DistributedDataProcessing",
|
|
1063
|
+
offerType: "BigData.PaaS.AwsDatabricks",
|
|
1064
|
+
provider: "AWS",
|
|
1065
|
+
deliveryModel: "PaaS"
|
|
1066
|
+
});
|
|
1067
|
+
const AzureDatabricks = defineOffer({
|
|
1068
|
+
satisfies: "BigData.DistributedDataProcessing",
|
|
1069
|
+
offerType: "BigData.PaaS.AzureDatabricks",
|
|
1070
|
+
provider: "Azure",
|
|
1071
|
+
deliveryModel: "PaaS"
|
|
1072
|
+
});
|
|
1073
|
+
const GcpDatabricks = defineOffer({
|
|
1074
|
+
satisfies: "BigData.DistributedDataProcessing",
|
|
1075
|
+
offerType: "BigData.PaaS.GcpDatabricks",
|
|
1076
|
+
provider: "GCP",
|
|
1077
|
+
deliveryModel: "PaaS"
|
|
1078
|
+
});
|
|
1079
|
+
|
|
1080
|
+
//#endregion
|
|
1081
|
+
//#region src/model/offers/messaging.ts
|
|
1082
|
+
/**
|
|
1083
|
+
* offers/messaging.ts — Messaging domain Offers (Catalogue, Level 3).
|
|
1084
|
+
*
|
|
1085
|
+
* Concrete vendor-specific implementations that satisfy the abstract Messaging
|
|
1086
|
+
* Components in components/messaging.ts. Vendor knobs live in each offer's Cfg.
|
|
1087
|
+
* Vendor-neutral self-hosted offers (Kafka on any cluster) OMIT `provider`.
|
|
1088
|
+
*/
|
|
1089
|
+
const AzureServiceBus = defineOffer({
|
|
1090
|
+
satisfies: "Messaging.Broker",
|
|
1091
|
+
offerType: "Messaging.PaaS.AzureServiceBus",
|
|
1092
|
+
provider: "Azure",
|
|
1093
|
+
deliveryModel: "PaaS"
|
|
1094
|
+
});
|
|
1095
|
+
const GcpPubSub = defineOffer({
|
|
1096
|
+
satisfies: "Messaging.Broker",
|
|
1097
|
+
offerType: "Messaging.PaaS.GcpPubSub",
|
|
1098
|
+
provider: "GCP",
|
|
1099
|
+
deliveryModel: "PaaS"
|
|
1100
|
+
});
|
|
1101
|
+
/** Vendor-neutral self-hosted Kafka — no `provider`. */
|
|
1102
|
+
const Kafka = defineOffer({
|
|
1103
|
+
satisfies: "Messaging.Broker",
|
|
1104
|
+
offerType: "Messaging.CaaS.Kafka",
|
|
1105
|
+
deliveryModel: "CaaS"
|
|
1106
|
+
});
|
|
1107
|
+
const AzureServiceBusTopic = defineOffer({
|
|
1108
|
+
satisfies: "Messaging.MessagingEntity",
|
|
1109
|
+
offerType: "Messaging.PaaS.AzureServiceBusTopic",
|
|
1110
|
+
provider: "Azure",
|
|
1111
|
+
deliveryModel: "PaaS"
|
|
1112
|
+
});
|
|
1113
|
+
const GcpPubSubTopic = defineOffer({
|
|
1114
|
+
satisfies: "Messaging.MessagingEntity",
|
|
1115
|
+
offerType: "Messaging.PaaS.GcpPubSubTopic",
|
|
1116
|
+
provider: "GCP",
|
|
1117
|
+
deliveryModel: "PaaS"
|
|
1118
|
+
});
|
|
1119
|
+
/** Vendor-neutral self-hosted Kafka topic — no `provider`. */
|
|
1120
|
+
const KafkaTopic = defineOffer({
|
|
1121
|
+
satisfies: "Messaging.MessagingEntity",
|
|
1122
|
+
offerType: "Messaging.CaaS.KafkaTopic",
|
|
1123
|
+
deliveryModel: "CaaS"
|
|
1124
|
+
});
|
|
1125
|
+
|
|
1126
|
+
//#endregion
|
|
1127
|
+
//#region src/model/offers/api_management.ts
|
|
1128
|
+
/**
|
|
1129
|
+
* offers/api_management.ts — APIManagement Offer catalogue (Level 3).
|
|
1130
|
+
*
|
|
1131
|
+
* Each offer declares which abstract Component it satisfies, its 3-part offer
|
|
1132
|
+
* type, its vendor (provider) and delivery model, and carries vendor knobs in
|
|
1133
|
+
* its config type. Vendor-neutral self-hosted offers (CaaS) OMIT `provider`.
|
|
1134
|
+
*/
|
|
1135
|
+
const AwsCloudFront = defineOffer({
|
|
1136
|
+
satisfies: "APIManagement.ApiGateway",
|
|
1137
|
+
offerType: "APIManagement.PaaS.CloudFront",
|
|
1138
|
+
provider: "AWS",
|
|
1139
|
+
deliveryModel: "PaaS"
|
|
1140
|
+
});
|
|
1141
|
+
const AzureApiManagement = defineOffer({
|
|
1142
|
+
satisfies: "APIManagement.ApiGateway",
|
|
1143
|
+
offerType: "APIManagement.PaaS.ApiManagement",
|
|
1144
|
+
provider: "Azure",
|
|
1145
|
+
deliveryModel: "PaaS"
|
|
1146
|
+
});
|
|
1147
|
+
const GcpApiGateway = defineOffer({
|
|
1148
|
+
satisfies: "APIManagement.ApiGateway",
|
|
1149
|
+
offerType: "APIManagement.PaaS.GcpApiGateway",
|
|
1150
|
+
provider: "GCP",
|
|
1151
|
+
deliveryModel: "PaaS"
|
|
1152
|
+
});
|
|
1153
|
+
const Ambassador = defineOffer({
|
|
1154
|
+
satisfies: "APIManagement.ApiGateway",
|
|
1155
|
+
offerType: "APIManagement.CaaS.Ambassador",
|
|
1156
|
+
deliveryModel: "CaaS"
|
|
1157
|
+
});
|
|
1158
|
+
const Traefik = defineOffer({
|
|
1159
|
+
satisfies: "APIManagement.ApiGateway",
|
|
1160
|
+
offerType: "APIManagement.CaaS.Traefik",
|
|
1161
|
+
deliveryModel: "CaaS"
|
|
1162
|
+
});
|
|
1163
|
+
|
|
1164
|
+
//#endregion
|
|
1165
|
+
//#region src/model/offers/observability.ts
|
|
1166
|
+
/**
|
|
1167
|
+
* offers/observability.ts — Observability domain Offers (Catalogue, Level 3).
|
|
1168
|
+
*
|
|
1169
|
+
* Concrete implementations declaring which abstract Observability Component each
|
|
1170
|
+
* satisfies. Vendor knobs live in each offer's config only. These are all
|
|
1171
|
+
* vendor-neutral self-hosted CaaS offers (Prometheus/Jaeger/Elastic on any
|
|
1172
|
+
* cluster), so they omit `provider`.
|
|
1173
|
+
*/
|
|
1174
|
+
const Prometheus = defineOffer({
|
|
1175
|
+
satisfies: "Observability.Monitoring",
|
|
1176
|
+
offerType: "Observability.CaaS.Prometheus",
|
|
1177
|
+
deliveryModel: "CaaS"
|
|
1178
|
+
});
|
|
1179
|
+
const Jaeger = defineOffer({
|
|
1180
|
+
satisfies: "Observability.Tracing",
|
|
1181
|
+
offerType: "Observability.CaaS.Jaeger",
|
|
1182
|
+
deliveryModel: "CaaS"
|
|
1183
|
+
});
|
|
1184
|
+
const ObservabilityElastic = defineOffer({
|
|
1185
|
+
satisfies: "Observability.Logging",
|
|
1186
|
+
offerType: "Observability.CaaS.Elastic",
|
|
1187
|
+
deliveryModel: "CaaS"
|
|
1188
|
+
});
|
|
1189
|
+
|
|
1190
|
+
//#endregion
|
|
1191
|
+
//#region src/model/offers/security.ts
|
|
1192
|
+
/**
|
|
1193
|
+
* offers/security.ts — Security domain Offers (Catalogue, Level 3).
|
|
1194
|
+
*
|
|
1195
|
+
* Concrete implementations declaring which abstract Security Component each
|
|
1196
|
+
* satisfies. Vendor knobs live in each offer's config only. Vendor-neutral
|
|
1197
|
+
* self-hosted offers (e.g. Ocelot / Keycloak on any cluster) omit `provider`.
|
|
1198
|
+
*/
|
|
1199
|
+
const Ocelot = defineOffer({
|
|
1200
|
+
satisfies: "Security.ServiceMesh",
|
|
1201
|
+
offerType: "Security.CaaS.Ocelot",
|
|
1202
|
+
deliveryModel: "CaaS"
|
|
1203
|
+
});
|
|
1204
|
+
const Cognito = defineOffer({
|
|
1205
|
+
satisfies: "Security.IdentityProvider",
|
|
1206
|
+
offerType: "Security.PaaS.Cognito",
|
|
1207
|
+
provider: "AWS",
|
|
1208
|
+
deliveryModel: "PaaS"
|
|
1209
|
+
});
|
|
1210
|
+
const Keycloak = defineOffer({
|
|
1211
|
+
satisfies: "Security.IdentityProvider",
|
|
1212
|
+
offerType: "Security.CaaS.Keycloak",
|
|
1213
|
+
deliveryModel: "CaaS"
|
|
1214
|
+
});
|
|
1215
|
+
|
|
1216
|
+
//#endregion
|
|
1217
|
+
//#region src/model/offers/custom_workloads.ts
|
|
1218
|
+
/**
|
|
1219
|
+
* offers/custom_workloads.ts — CustomWorkloads domain Offers (Catalogue, Level 3,
|
|
1220
|
+
* concrete).
|
|
1221
|
+
*
|
|
1222
|
+
* Each offer declares which Component it satisfies, its 3-part offer type, its
|
|
1223
|
+
* delivery model and (for cloud offers) its vendor. Vendor-neutral CaaS offers
|
|
1224
|
+
* OMIT `provider` — they run on any cluster and are identified by deliveryModel
|
|
1225
|
+
* + offerType. Vendor knobs live in each offer's config type.
|
|
1226
|
+
*/
|
|
1227
|
+
const EcsService = defineOffer({
|
|
1228
|
+
satisfies: "CustomWorkloads.Workload",
|
|
1229
|
+
offerType: "CustomWorkloads.PaaS.EcsService",
|
|
1230
|
+
provider: "AWS",
|
|
1231
|
+
deliveryModel: "PaaS"
|
|
1232
|
+
});
|
|
1233
|
+
const CloudRun = defineOffer({
|
|
1234
|
+
satisfies: "CustomWorkloads.Workload",
|
|
1235
|
+
offerType: "CustomWorkloads.PaaS.CloudRun",
|
|
1236
|
+
provider: "GCP",
|
|
1237
|
+
deliveryModel: "PaaS"
|
|
1238
|
+
});
|
|
1239
|
+
const AzureContainerApp = defineOffer({
|
|
1240
|
+
satisfies: "CustomWorkloads.Workload",
|
|
1241
|
+
offerType: "CustomWorkloads.PaaS.AzureContainerApp",
|
|
1242
|
+
provider: "Azure",
|
|
1243
|
+
deliveryModel: "PaaS"
|
|
1244
|
+
});
|
|
1245
|
+
const OpenshiftWorkload = defineOffer({
|
|
1246
|
+
satisfies: "CustomWorkloads.Workload",
|
|
1247
|
+
offerType: "CustomWorkloads.CaaS.OpenshiftWorkload",
|
|
1248
|
+
provider: "RedHat",
|
|
1249
|
+
deliveryModel: "CaaS"
|
|
1250
|
+
});
|
|
1251
|
+
const K8sWorkload = defineOffer({
|
|
1252
|
+
satisfies: "CustomWorkloads.Workload",
|
|
1253
|
+
offerType: "CustomWorkloads.CaaS.K8sWorkload",
|
|
1254
|
+
deliveryModel: "CaaS"
|
|
1255
|
+
});
|
|
1256
|
+
const AwsLambda = defineOffer({
|
|
1257
|
+
satisfies: "CustomWorkloads.Function",
|
|
1258
|
+
offerType: "CustomWorkloads.FaaS.AwsLambda",
|
|
1259
|
+
provider: "AWS",
|
|
1260
|
+
deliveryModel: "FaaS"
|
|
1261
|
+
});
|
|
1262
|
+
const AzureFunction = defineOffer({
|
|
1263
|
+
satisfies: "CustomWorkloads.Function",
|
|
1264
|
+
offerType: "CustomWorkloads.FaaS.AzureFunction",
|
|
1265
|
+
provider: "Azure",
|
|
1266
|
+
deliveryModel: "FaaS"
|
|
1267
|
+
});
|
|
1268
|
+
const GcpFunction = defineOffer({
|
|
1269
|
+
satisfies: "CustomWorkloads.Function",
|
|
1270
|
+
offerType: "CustomWorkloads.FaaS.GcpFunction",
|
|
1271
|
+
provider: "GCP",
|
|
1272
|
+
deliveryModel: "FaaS"
|
|
1273
|
+
});
|
|
1274
|
+
|
|
1275
|
+
//#endregion
|
|
1276
|
+
Object.defineProperty(exports, 'Aks', {
|
|
1277
|
+
enumerable: true,
|
|
1278
|
+
get: function () {
|
|
1279
|
+
return Aks;
|
|
1280
|
+
}
|
|
1281
|
+
});
|
|
1282
|
+
Object.defineProperty(exports, 'Ambassador', {
|
|
1283
|
+
enumerable: true,
|
|
1284
|
+
get: function () {
|
|
1285
|
+
return Ambassador;
|
|
1286
|
+
}
|
|
1287
|
+
});
|
|
1288
|
+
Object.defineProperty(exports, 'ApiGateway', {
|
|
1289
|
+
enumerable: true,
|
|
1290
|
+
get: function () {
|
|
1291
|
+
return ApiGateway;
|
|
1292
|
+
}
|
|
1293
|
+
});
|
|
1294
|
+
Object.defineProperty(exports, 'ArubaMySqlDbms', {
|
|
1295
|
+
enumerable: true,
|
|
1296
|
+
get: function () {
|
|
1297
|
+
return ArubaMySqlDbms;
|
|
1298
|
+
}
|
|
1299
|
+
});
|
|
1300
|
+
Object.defineProperty(exports, 'AwsCloudFront', {
|
|
1301
|
+
enumerable: true,
|
|
1302
|
+
get: function () {
|
|
1303
|
+
return AwsCloudFront;
|
|
1304
|
+
}
|
|
1305
|
+
});
|
|
1306
|
+
Object.defineProperty(exports, 'AwsDatabricks', {
|
|
1307
|
+
enumerable: true,
|
|
1308
|
+
get: function () {
|
|
1309
|
+
return AwsDatabricks;
|
|
1310
|
+
}
|
|
1311
|
+
});
|
|
1312
|
+
Object.defineProperty(exports, 'AwsDatabricksCluster', {
|
|
1313
|
+
enumerable: true,
|
|
1314
|
+
get: function () {
|
|
1315
|
+
return AwsDatabricksCluster;
|
|
1316
|
+
}
|
|
1317
|
+
});
|
|
1318
|
+
Object.defineProperty(exports, 'AwsDatabricksJob', {
|
|
1319
|
+
enumerable: true,
|
|
1320
|
+
get: function () {
|
|
1321
|
+
return AwsDatabricksJob;
|
|
1322
|
+
}
|
|
1323
|
+
});
|
|
1324
|
+
Object.defineProperty(exports, 'AwsDatabricksMlflow', {
|
|
1325
|
+
enumerable: true,
|
|
1326
|
+
get: function () {
|
|
1327
|
+
return AwsDatabricksMlflow;
|
|
1328
|
+
}
|
|
1329
|
+
});
|
|
1330
|
+
Object.defineProperty(exports, 'AwsLambda', {
|
|
1331
|
+
enumerable: true,
|
|
1332
|
+
get: function () {
|
|
1333
|
+
return AwsLambda;
|
|
1334
|
+
}
|
|
1335
|
+
});
|
|
1336
|
+
Object.defineProperty(exports, 'AwsLb', {
|
|
1337
|
+
enumerable: true,
|
|
1338
|
+
get: function () {
|
|
1339
|
+
return AwsLb;
|
|
1340
|
+
}
|
|
1341
|
+
});
|
|
1342
|
+
Object.defineProperty(exports, 'AwsS3', {
|
|
1343
|
+
enumerable: true,
|
|
1344
|
+
get: function () {
|
|
1345
|
+
return AwsS3;
|
|
1346
|
+
}
|
|
1347
|
+
});
|
|
1348
|
+
Object.defineProperty(exports, 'AwsS3Datalake', {
|
|
1349
|
+
enumerable: true,
|
|
1350
|
+
get: function () {
|
|
1351
|
+
return AwsS3Datalake;
|
|
1352
|
+
}
|
|
1353
|
+
});
|
|
1354
|
+
Object.defineProperty(exports, 'AwsSecurityGroup', {
|
|
1355
|
+
enumerable: true,
|
|
1356
|
+
get: function () {
|
|
1357
|
+
return AwsSecurityGroup;
|
|
1358
|
+
}
|
|
1359
|
+
});
|
|
1360
|
+
Object.defineProperty(exports, 'AwsSubnet', {
|
|
1361
|
+
enumerable: true,
|
|
1362
|
+
get: function () {
|
|
1363
|
+
return AwsSubnet;
|
|
1364
|
+
}
|
|
1365
|
+
});
|
|
1366
|
+
Object.defineProperty(exports, 'AwsVpc', {
|
|
1367
|
+
enumerable: true,
|
|
1368
|
+
get: function () {
|
|
1369
|
+
return AwsVpc;
|
|
1370
|
+
}
|
|
1371
|
+
});
|
|
1372
|
+
Object.defineProperty(exports, 'AzureApiManagement', {
|
|
1373
|
+
enumerable: true,
|
|
1374
|
+
get: function () {
|
|
1375
|
+
return AzureApiManagement;
|
|
1376
|
+
}
|
|
1377
|
+
});
|
|
1378
|
+
Object.defineProperty(exports, 'AzureBlob', {
|
|
1379
|
+
enumerable: true,
|
|
1380
|
+
get: function () {
|
|
1381
|
+
return AzureBlob;
|
|
1382
|
+
}
|
|
1383
|
+
});
|
|
1384
|
+
Object.defineProperty(exports, 'AzureContainerApp', {
|
|
1385
|
+
enumerable: true,
|
|
1386
|
+
get: function () {
|
|
1387
|
+
return AzureContainerApp;
|
|
1388
|
+
}
|
|
1389
|
+
});
|
|
1390
|
+
Object.defineProperty(exports, 'AzureDatabricks', {
|
|
1391
|
+
enumerable: true,
|
|
1392
|
+
get: function () {
|
|
1393
|
+
return AzureDatabricks;
|
|
1394
|
+
}
|
|
1395
|
+
});
|
|
1396
|
+
Object.defineProperty(exports, 'AzureDatabricksCluster', {
|
|
1397
|
+
enumerable: true,
|
|
1398
|
+
get: function () {
|
|
1399
|
+
return AzureDatabricksCluster;
|
|
1400
|
+
}
|
|
1401
|
+
});
|
|
1402
|
+
Object.defineProperty(exports, 'AzureDatabricksJob', {
|
|
1403
|
+
enumerable: true,
|
|
1404
|
+
get: function () {
|
|
1405
|
+
return AzureDatabricksJob;
|
|
1406
|
+
}
|
|
1407
|
+
});
|
|
1408
|
+
Object.defineProperty(exports, 'AzureDatabricksMlflow', {
|
|
1409
|
+
enumerable: true,
|
|
1410
|
+
get: function () {
|
|
1411
|
+
return AzureDatabricksMlflow;
|
|
1412
|
+
}
|
|
1413
|
+
});
|
|
1414
|
+
Object.defineProperty(exports, 'AzureDatalake', {
|
|
1415
|
+
enumerable: true,
|
|
1416
|
+
get: function () {
|
|
1417
|
+
return AzureDatalake;
|
|
1418
|
+
}
|
|
1419
|
+
});
|
|
1420
|
+
Object.defineProperty(exports, 'AzureFunction', {
|
|
1421
|
+
enumerable: true,
|
|
1422
|
+
get: function () {
|
|
1423
|
+
return AzureFunction;
|
|
1424
|
+
}
|
|
1425
|
+
});
|
|
1426
|
+
Object.defineProperty(exports, 'AzureLb', {
|
|
1427
|
+
enumerable: true,
|
|
1428
|
+
get: function () {
|
|
1429
|
+
return AzureLb;
|
|
1430
|
+
}
|
|
1431
|
+
});
|
|
1432
|
+
Object.defineProperty(exports, 'AzureNsg', {
|
|
1433
|
+
enumerable: true,
|
|
1434
|
+
get: function () {
|
|
1435
|
+
return AzureNsg;
|
|
1436
|
+
}
|
|
1437
|
+
});
|
|
1438
|
+
Object.defineProperty(exports, 'AzurePostgresDatabase', {
|
|
1439
|
+
enumerable: true,
|
|
1440
|
+
get: function () {
|
|
1441
|
+
return AzurePostgresDatabase;
|
|
1442
|
+
}
|
|
1443
|
+
});
|
|
1444
|
+
Object.defineProperty(exports, 'AzurePostgresDbms', {
|
|
1445
|
+
enumerable: true,
|
|
1446
|
+
get: function () {
|
|
1447
|
+
return AzurePostgresDbms;
|
|
1448
|
+
}
|
|
1449
|
+
});
|
|
1450
|
+
Object.defineProperty(exports, 'AzureServiceBus', {
|
|
1451
|
+
enumerable: true,
|
|
1452
|
+
get: function () {
|
|
1453
|
+
return AzureServiceBus;
|
|
1454
|
+
}
|
|
1455
|
+
});
|
|
1456
|
+
Object.defineProperty(exports, 'AzureServiceBusTopic', {
|
|
1457
|
+
enumerable: true,
|
|
1458
|
+
get: function () {
|
|
1459
|
+
return AzureServiceBusTopic;
|
|
1460
|
+
}
|
|
1461
|
+
});
|
|
1462
|
+
Object.defineProperty(exports, 'AzureSubnet', {
|
|
1463
|
+
enumerable: true,
|
|
1464
|
+
get: function () {
|
|
1465
|
+
return AzureSubnet;
|
|
1466
|
+
}
|
|
1467
|
+
});
|
|
1468
|
+
Object.defineProperty(exports, 'AzureVm', {
|
|
1469
|
+
enumerable: true,
|
|
1470
|
+
get: function () {
|
|
1471
|
+
return AzureVm;
|
|
1472
|
+
}
|
|
1473
|
+
});
|
|
1474
|
+
Object.defineProperty(exports, 'AzureVnet', {
|
|
1475
|
+
enumerable: true,
|
|
1476
|
+
get: function () {
|
|
1477
|
+
return AzureVnet;
|
|
1478
|
+
}
|
|
1479
|
+
});
|
|
1480
|
+
Object.defineProperty(exports, 'Broker', {
|
|
1481
|
+
enumerable: true,
|
|
1482
|
+
get: function () {
|
|
1483
|
+
return Broker;
|
|
1484
|
+
}
|
|
1485
|
+
});
|
|
1486
|
+
Object.defineProperty(exports, 'CaaSMlflow', {
|
|
1487
|
+
enumerable: true,
|
|
1488
|
+
get: function () {
|
|
1489
|
+
return CaaSMlflow;
|
|
1490
|
+
}
|
|
1491
|
+
});
|
|
1492
|
+
Object.defineProperty(exports, 'CaaSSparkCluster', {
|
|
1493
|
+
enumerable: true,
|
|
1494
|
+
get: function () {
|
|
1495
|
+
return CaaSSparkCluster;
|
|
1496
|
+
}
|
|
1497
|
+
});
|
|
1498
|
+
Object.defineProperty(exports, 'CaaSSparkJob', {
|
|
1499
|
+
enumerable: true,
|
|
1500
|
+
get: function () {
|
|
1501
|
+
return CaaSSparkJob;
|
|
1502
|
+
}
|
|
1503
|
+
});
|
|
1504
|
+
Object.defineProperty(exports, 'CloudRun', {
|
|
1505
|
+
enumerable: true,
|
|
1506
|
+
get: function () {
|
|
1507
|
+
return CloudRun;
|
|
1508
|
+
}
|
|
1509
|
+
});
|
|
1510
|
+
Object.defineProperty(exports, 'Cognito', {
|
|
1511
|
+
enumerable: true,
|
|
1512
|
+
get: function () {
|
|
1513
|
+
return Cognito;
|
|
1514
|
+
}
|
|
1515
|
+
});
|
|
1516
|
+
Object.defineProperty(exports, 'ComputeCluster', {
|
|
1517
|
+
enumerable: true,
|
|
1518
|
+
get: function () {
|
|
1519
|
+
return ComputeCluster;
|
|
1520
|
+
}
|
|
1521
|
+
});
|
|
1522
|
+
Object.defineProperty(exports, 'ContainerPlatform', {
|
|
1523
|
+
enumerable: true,
|
|
1524
|
+
get: function () {
|
|
1525
|
+
return ContainerPlatform;
|
|
1526
|
+
}
|
|
1527
|
+
});
|
|
1528
|
+
Object.defineProperty(exports, 'DataProcessingJob', {
|
|
1529
|
+
enumerable: true,
|
|
1530
|
+
get: function () {
|
|
1531
|
+
return DataProcessingJob;
|
|
1532
|
+
}
|
|
1533
|
+
});
|
|
1534
|
+
Object.defineProperty(exports, 'Datalake', {
|
|
1535
|
+
enumerable: true,
|
|
1536
|
+
get: function () {
|
|
1537
|
+
return Datalake;
|
|
1538
|
+
}
|
|
1539
|
+
});
|
|
1540
|
+
Object.defineProperty(exports, 'DistributedDataProcessing', {
|
|
1541
|
+
enumerable: true,
|
|
1542
|
+
get: function () {
|
|
1543
|
+
return DistributedDataProcessing;
|
|
1544
|
+
}
|
|
1545
|
+
});
|
|
1546
|
+
Object.defineProperty(exports, 'Ec2Instance', {
|
|
1547
|
+
enumerable: true,
|
|
1548
|
+
get: function () {
|
|
1549
|
+
return Ec2Instance;
|
|
1550
|
+
}
|
|
1551
|
+
});
|
|
1552
|
+
Object.defineProperty(exports, 'EcsService', {
|
|
1553
|
+
enumerable: true,
|
|
1554
|
+
get: function () {
|
|
1555
|
+
return EcsService;
|
|
1556
|
+
}
|
|
1557
|
+
});
|
|
1558
|
+
Object.defineProperty(exports, 'Eks', {
|
|
1559
|
+
enumerable: true,
|
|
1560
|
+
get: function () {
|
|
1561
|
+
return Eks;
|
|
1562
|
+
}
|
|
1563
|
+
});
|
|
1564
|
+
Object.defineProperty(exports, 'Function', {
|
|
1565
|
+
enumerable: true,
|
|
1566
|
+
get: function () {
|
|
1567
|
+
return Function;
|
|
1568
|
+
}
|
|
1569
|
+
});
|
|
1570
|
+
Object.defineProperty(exports, 'GcpApiGateway', {
|
|
1571
|
+
enumerable: true,
|
|
1572
|
+
get: function () {
|
|
1573
|
+
return GcpApiGateway;
|
|
1574
|
+
}
|
|
1575
|
+
});
|
|
1576
|
+
Object.defineProperty(exports, 'GcpDatabricks', {
|
|
1577
|
+
enumerable: true,
|
|
1578
|
+
get: function () {
|
|
1579
|
+
return GcpDatabricks;
|
|
1580
|
+
}
|
|
1581
|
+
});
|
|
1582
|
+
Object.defineProperty(exports, 'GcpDatabricksCluster', {
|
|
1583
|
+
enumerable: true,
|
|
1584
|
+
get: function () {
|
|
1585
|
+
return GcpDatabricksCluster;
|
|
1586
|
+
}
|
|
1587
|
+
});
|
|
1588
|
+
Object.defineProperty(exports, 'GcpDatabricksJob', {
|
|
1589
|
+
enumerable: true,
|
|
1590
|
+
get: function () {
|
|
1591
|
+
return GcpDatabricksJob;
|
|
1592
|
+
}
|
|
1593
|
+
});
|
|
1594
|
+
Object.defineProperty(exports, 'GcpDatabricksMlflow', {
|
|
1595
|
+
enumerable: true,
|
|
1596
|
+
get: function () {
|
|
1597
|
+
return GcpDatabricksMlflow;
|
|
1598
|
+
}
|
|
1599
|
+
});
|
|
1600
|
+
Object.defineProperty(exports, 'GcpDatalake', {
|
|
1601
|
+
enumerable: true,
|
|
1602
|
+
get: function () {
|
|
1603
|
+
return GcpDatalake;
|
|
1604
|
+
}
|
|
1605
|
+
});
|
|
1606
|
+
Object.defineProperty(exports, 'GcpFirewall', {
|
|
1607
|
+
enumerable: true,
|
|
1608
|
+
get: function () {
|
|
1609
|
+
return GcpFirewall;
|
|
1610
|
+
}
|
|
1611
|
+
});
|
|
1612
|
+
Object.defineProperty(exports, 'GcpFunction', {
|
|
1613
|
+
enumerable: true,
|
|
1614
|
+
get: function () {
|
|
1615
|
+
return GcpFunction;
|
|
1616
|
+
}
|
|
1617
|
+
});
|
|
1618
|
+
Object.defineProperty(exports, 'GcpGlb', {
|
|
1619
|
+
enumerable: true,
|
|
1620
|
+
get: function () {
|
|
1621
|
+
return GcpGlb;
|
|
1622
|
+
}
|
|
1623
|
+
});
|
|
1624
|
+
Object.defineProperty(exports, 'GcpPostgresDatabase', {
|
|
1625
|
+
enumerable: true,
|
|
1626
|
+
get: function () {
|
|
1627
|
+
return GcpPostgresDatabase;
|
|
1628
|
+
}
|
|
1629
|
+
});
|
|
1630
|
+
Object.defineProperty(exports, 'GcpPostgresDbms', {
|
|
1631
|
+
enumerable: true,
|
|
1632
|
+
get: function () {
|
|
1633
|
+
return GcpPostgresDbms;
|
|
1634
|
+
}
|
|
1635
|
+
});
|
|
1636
|
+
Object.defineProperty(exports, 'GcpPubSub', {
|
|
1637
|
+
enumerable: true,
|
|
1638
|
+
get: function () {
|
|
1639
|
+
return GcpPubSub;
|
|
1640
|
+
}
|
|
1641
|
+
});
|
|
1642
|
+
Object.defineProperty(exports, 'GcpPubSubTopic', {
|
|
1643
|
+
enumerable: true,
|
|
1644
|
+
get: function () {
|
|
1645
|
+
return GcpPubSubTopic;
|
|
1646
|
+
}
|
|
1647
|
+
});
|
|
1648
|
+
Object.defineProperty(exports, 'GcpSubnet', {
|
|
1649
|
+
enumerable: true,
|
|
1650
|
+
get: function () {
|
|
1651
|
+
return GcpSubnet;
|
|
1652
|
+
}
|
|
1653
|
+
});
|
|
1654
|
+
Object.defineProperty(exports, 'GcpVm', {
|
|
1655
|
+
enumerable: true,
|
|
1656
|
+
get: function () {
|
|
1657
|
+
return GcpVm;
|
|
1658
|
+
}
|
|
1659
|
+
});
|
|
1660
|
+
Object.defineProperty(exports, 'GcpVpc', {
|
|
1661
|
+
enumerable: true,
|
|
1662
|
+
get: function () {
|
|
1663
|
+
return GcpVpc;
|
|
1664
|
+
}
|
|
1665
|
+
});
|
|
1666
|
+
Object.defineProperty(exports, 'GcsBucket', {
|
|
1667
|
+
enumerable: true,
|
|
1668
|
+
get: function () {
|
|
1669
|
+
return GcsBucket;
|
|
1670
|
+
}
|
|
1671
|
+
});
|
|
1672
|
+
Object.defineProperty(exports, 'Gke', {
|
|
1673
|
+
enumerable: true,
|
|
1674
|
+
get: function () {
|
|
1675
|
+
return Gke;
|
|
1676
|
+
}
|
|
1677
|
+
});
|
|
1678
|
+
Object.defineProperty(exports, 'HetznerFirewall', {
|
|
1679
|
+
enumerable: true,
|
|
1680
|
+
get: function () {
|
|
1681
|
+
return HetznerFirewall;
|
|
1682
|
+
}
|
|
1683
|
+
});
|
|
1684
|
+
Object.defineProperty(exports, 'HetznerNetwork', {
|
|
1685
|
+
enumerable: true,
|
|
1686
|
+
get: function () {
|
|
1687
|
+
return HetznerNetwork;
|
|
1688
|
+
}
|
|
1689
|
+
});
|
|
1690
|
+
Object.defineProperty(exports, 'HetznerServer', {
|
|
1691
|
+
enumerable: true,
|
|
1692
|
+
get: function () {
|
|
1693
|
+
return HetznerServer;
|
|
1694
|
+
}
|
|
1695
|
+
});
|
|
1696
|
+
Object.defineProperty(exports, 'HetznerSubnet', {
|
|
1697
|
+
enumerable: true,
|
|
1698
|
+
get: function () {
|
|
1699
|
+
return HetznerSubnet;
|
|
1700
|
+
}
|
|
1701
|
+
});
|
|
1702
|
+
Object.defineProperty(exports, 'IdentityProvider', {
|
|
1703
|
+
enumerable: true,
|
|
1704
|
+
get: function () {
|
|
1705
|
+
return IdentityProvider;
|
|
1706
|
+
}
|
|
1707
|
+
});
|
|
1708
|
+
Object.defineProperty(exports, 'Jaeger', {
|
|
1709
|
+
enumerable: true,
|
|
1710
|
+
get: function () {
|
|
1711
|
+
return Jaeger;
|
|
1712
|
+
}
|
|
1713
|
+
});
|
|
1714
|
+
Object.defineProperty(exports, 'K8sWorkload', {
|
|
1715
|
+
enumerable: true,
|
|
1716
|
+
get: function () {
|
|
1717
|
+
return K8sWorkload;
|
|
1718
|
+
}
|
|
1719
|
+
});
|
|
1720
|
+
Object.defineProperty(exports, 'Kafka', {
|
|
1721
|
+
enumerable: true,
|
|
1722
|
+
get: function () {
|
|
1723
|
+
return Kafka;
|
|
1724
|
+
}
|
|
1725
|
+
});
|
|
1726
|
+
Object.defineProperty(exports, 'KafkaTopic', {
|
|
1727
|
+
enumerable: true,
|
|
1728
|
+
get: function () {
|
|
1729
|
+
return KafkaTopic;
|
|
1730
|
+
}
|
|
1731
|
+
});
|
|
1732
|
+
Object.defineProperty(exports, 'Keycloak', {
|
|
1733
|
+
enumerable: true,
|
|
1734
|
+
get: function () {
|
|
1735
|
+
return Keycloak;
|
|
1736
|
+
}
|
|
1737
|
+
});
|
|
1738
|
+
Object.defineProperty(exports, 'LoadBalancer', {
|
|
1739
|
+
enumerable: true,
|
|
1740
|
+
get: function () {
|
|
1741
|
+
return LoadBalancer;
|
|
1742
|
+
}
|
|
1743
|
+
});
|
|
1744
|
+
Object.defineProperty(exports, 'Logging', {
|
|
1745
|
+
enumerable: true,
|
|
1746
|
+
get: function () {
|
|
1747
|
+
return Logging;
|
|
1748
|
+
}
|
|
1749
|
+
});
|
|
1750
|
+
Object.defineProperty(exports, 'MessagingEntity', {
|
|
1751
|
+
enumerable: true,
|
|
1752
|
+
get: function () {
|
|
1753
|
+
return MessagingEntity;
|
|
1754
|
+
}
|
|
1755
|
+
});
|
|
1756
|
+
Object.defineProperty(exports, 'MinIO', {
|
|
1757
|
+
enumerable: true,
|
|
1758
|
+
get: function () {
|
|
1759
|
+
return MinIO;
|
|
1760
|
+
}
|
|
1761
|
+
});
|
|
1762
|
+
Object.defineProperty(exports, 'MlExperiment', {
|
|
1763
|
+
enumerable: true,
|
|
1764
|
+
get: function () {
|
|
1765
|
+
return MlExperiment;
|
|
1766
|
+
}
|
|
1767
|
+
});
|
|
1768
|
+
Object.defineProperty(exports, 'Monitoring', {
|
|
1769
|
+
enumerable: true,
|
|
1770
|
+
get: function () {
|
|
1771
|
+
return Monitoring;
|
|
1772
|
+
}
|
|
1773
|
+
});
|
|
1774
|
+
Object.defineProperty(exports, 'ObjectStorage', {
|
|
1775
|
+
enumerable: true,
|
|
1776
|
+
get: function () {
|
|
1777
|
+
return ObjectStorage;
|
|
1778
|
+
}
|
|
1779
|
+
});
|
|
1780
|
+
Object.defineProperty(exports, 'ObservabilityElastic', {
|
|
1781
|
+
enumerable: true,
|
|
1782
|
+
get: function () {
|
|
1783
|
+
return ObservabilityElastic;
|
|
1784
|
+
}
|
|
1785
|
+
});
|
|
1786
|
+
Object.defineProperty(exports, 'Ocelot', {
|
|
1787
|
+
enumerable: true,
|
|
1788
|
+
get: function () {
|
|
1789
|
+
return Ocelot;
|
|
1790
|
+
}
|
|
1791
|
+
});
|
|
1792
|
+
Object.defineProperty(exports, 'OciInstance', {
|
|
1793
|
+
enumerable: true,
|
|
1794
|
+
get: function () {
|
|
1795
|
+
return OciInstance;
|
|
1796
|
+
}
|
|
1797
|
+
});
|
|
1798
|
+
Object.defineProperty(exports, 'OciSecurityList', {
|
|
1799
|
+
enumerable: true,
|
|
1800
|
+
get: function () {
|
|
1801
|
+
return OciSecurityList;
|
|
1802
|
+
}
|
|
1803
|
+
});
|
|
1804
|
+
Object.defineProperty(exports, 'OciSubnet', {
|
|
1805
|
+
enumerable: true,
|
|
1806
|
+
get: function () {
|
|
1807
|
+
return OciSubnet;
|
|
1808
|
+
}
|
|
1809
|
+
});
|
|
1810
|
+
Object.defineProperty(exports, 'OciVcn', {
|
|
1811
|
+
enumerable: true,
|
|
1812
|
+
get: function () {
|
|
1813
|
+
return OciVcn;
|
|
1814
|
+
}
|
|
1815
|
+
});
|
|
1816
|
+
Object.defineProperty(exports, 'OpenshiftPersistentVolume', {
|
|
1817
|
+
enumerable: true,
|
|
1818
|
+
get: function () {
|
|
1819
|
+
return OpenshiftPersistentVolume;
|
|
1820
|
+
}
|
|
1821
|
+
});
|
|
1822
|
+
Object.defineProperty(exports, 'OpenshiftSecurityGroup', {
|
|
1823
|
+
enumerable: true,
|
|
1824
|
+
get: function () {
|
|
1825
|
+
return OpenshiftSecurityGroup;
|
|
1826
|
+
}
|
|
1827
|
+
});
|
|
1828
|
+
Object.defineProperty(exports, 'OpenshiftService', {
|
|
1829
|
+
enumerable: true,
|
|
1830
|
+
get: function () {
|
|
1831
|
+
return OpenshiftService;
|
|
1832
|
+
}
|
|
1833
|
+
});
|
|
1834
|
+
Object.defineProperty(exports, 'OpenshiftVm', {
|
|
1835
|
+
enumerable: true,
|
|
1836
|
+
get: function () {
|
|
1837
|
+
return OpenshiftVm;
|
|
1838
|
+
}
|
|
1839
|
+
});
|
|
1840
|
+
Object.defineProperty(exports, 'OpenshiftWorkload', {
|
|
1841
|
+
enumerable: true,
|
|
1842
|
+
get: function () {
|
|
1843
|
+
return OpenshiftWorkload;
|
|
1844
|
+
}
|
|
1845
|
+
});
|
|
1846
|
+
Object.defineProperty(exports, 'Prometheus', {
|
|
1847
|
+
enumerable: true,
|
|
1848
|
+
get: function () {
|
|
1849
|
+
return Prometheus;
|
|
1850
|
+
}
|
|
1851
|
+
});
|
|
1852
|
+
Object.defineProperty(exports, 'RelationalDatabase', {
|
|
1853
|
+
enumerable: true,
|
|
1854
|
+
get: function () {
|
|
1855
|
+
return RelationalDatabase;
|
|
1856
|
+
}
|
|
1857
|
+
});
|
|
1858
|
+
Object.defineProperty(exports, 'RelationalDbms', {
|
|
1859
|
+
enumerable: true,
|
|
1860
|
+
get: function () {
|
|
1861
|
+
return RelationalDbms;
|
|
1862
|
+
}
|
|
1863
|
+
});
|
|
1864
|
+
Object.defineProperty(exports, 'SecurityGroup', {
|
|
1865
|
+
enumerable: true,
|
|
1866
|
+
get: function () {
|
|
1867
|
+
return SecurityGroup;
|
|
1868
|
+
}
|
|
1869
|
+
});
|
|
1870
|
+
Object.defineProperty(exports, 'ServiceMesh', {
|
|
1871
|
+
enumerable: true,
|
|
1872
|
+
get: function () {
|
|
1873
|
+
return ServiceMesh;
|
|
1874
|
+
}
|
|
1875
|
+
});
|
|
1876
|
+
Object.defineProperty(exports, 'Subnet', {
|
|
1877
|
+
enumerable: true,
|
|
1878
|
+
get: function () {
|
|
1879
|
+
return Subnet;
|
|
1880
|
+
}
|
|
1881
|
+
});
|
|
1882
|
+
Object.defineProperty(exports, 'Tracing', {
|
|
1883
|
+
enumerable: true,
|
|
1884
|
+
get: function () {
|
|
1885
|
+
return Tracing;
|
|
1886
|
+
}
|
|
1887
|
+
});
|
|
1888
|
+
Object.defineProperty(exports, 'Traefik', {
|
|
1889
|
+
enumerable: true,
|
|
1890
|
+
get: function () {
|
|
1891
|
+
return Traefik;
|
|
1892
|
+
}
|
|
1893
|
+
});
|
|
1894
|
+
Object.defineProperty(exports, 'VirtualMachine', {
|
|
1895
|
+
enumerable: true,
|
|
1896
|
+
get: function () {
|
|
1897
|
+
return VirtualMachine;
|
|
1898
|
+
}
|
|
1899
|
+
});
|
|
1900
|
+
Object.defineProperty(exports, 'VirtualNetwork', {
|
|
1901
|
+
enumerable: true,
|
|
1902
|
+
get: function () {
|
|
1903
|
+
return VirtualNetwork;
|
|
1904
|
+
}
|
|
1905
|
+
});
|
|
1906
|
+
Object.defineProperty(exports, 'VspherePortGroup', {
|
|
1907
|
+
enumerable: true,
|
|
1908
|
+
get: function () {
|
|
1909
|
+
return VspherePortGroup;
|
|
1910
|
+
}
|
|
1911
|
+
});
|
|
1912
|
+
Object.defineProperty(exports, 'VsphereVlan', {
|
|
1913
|
+
enumerable: true,
|
|
1914
|
+
get: function () {
|
|
1915
|
+
return VsphereVlan;
|
|
1916
|
+
}
|
|
1917
|
+
});
|
|
1918
|
+
Object.defineProperty(exports, 'VsphereVm', {
|
|
1919
|
+
enumerable: true,
|
|
1920
|
+
get: function () {
|
|
1921
|
+
return VsphereVm;
|
|
1922
|
+
}
|
|
1923
|
+
});
|
|
1924
|
+
Object.defineProperty(exports, 'Workload', {
|
|
1925
|
+
enumerable: true,
|
|
1926
|
+
get: function () {
|
|
1927
|
+
return Workload;
|
|
1928
|
+
}
|
|
1929
|
+
});
|
|
1930
|
+
Object.defineProperty(exports, 'addDependency', {
|
|
1931
|
+
enumerable: true,
|
|
1932
|
+
get: function () {
|
|
1933
|
+
return addDependency;
|
|
1934
|
+
}
|
|
1935
|
+
});
|
|
1936
|
+
Object.defineProperty(exports, 'createFractal', {
|
|
1937
|
+
enumerable: true,
|
|
1938
|
+
get: function () {
|
|
1939
|
+
return createFractal;
|
|
1940
|
+
}
|
|
1941
|
+
});
|
|
1942
|
+
Object.defineProperty(exports, 'defineOffer', {
|
|
1943
|
+
enumerable: true,
|
|
1944
|
+
get: function () {
|
|
1945
|
+
return defineOffer;
|
|
1946
|
+
}
|
|
1947
|
+
});
|
|
1948
|
+
Object.defineProperty(exports, 'deploy', {
|
|
1949
|
+
enumerable: true,
|
|
1950
|
+
get: function () {
|
|
1951
|
+
return deploy;
|
|
1952
|
+
}
|
|
1953
|
+
});
|
|
1954
|
+
Object.defineProperty(exports, 'destroy', {
|
|
1955
|
+
enumerable: true,
|
|
1956
|
+
get: function () {
|
|
1957
|
+
return destroy;
|
|
1958
|
+
}
|
|
1959
|
+
});
|
|
1960
|
+
Object.defineProperty(exports, 'guardrail', {
|
|
1961
|
+
enumerable: true,
|
|
1962
|
+
get: function () {
|
|
1963
|
+
return guardrail;
|
|
1964
|
+
}
|
|
1965
|
+
});
|
|
1966
|
+
Object.defineProperty(exports, 'newNode', {
|
|
1967
|
+
enumerable: true,
|
|
1968
|
+
get: function () {
|
|
1969
|
+
return newNode;
|
|
1970
|
+
}
|
|
1971
|
+
});
|