@fnndsc/stratus 0.1.0 → 0.2.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.
Files changed (134) hide show
  1. package/README.md +6 -1
  2. package/dist/args.d.ts +20 -6
  3. package/dist/args.js +45 -2
  4. package/dist/args.js.map +1 -1
  5. package/dist/backend.d.ts +35 -4
  6. package/dist/backend.js +77 -12
  7. package/dist/backend.js.map +1 -1
  8. package/dist/cloud/builder.d.ts +172 -0
  9. package/dist/cloud/builder.js +41 -0
  10. package/dist/cloud/builder.js.map +1 -0
  11. package/dist/cloud/driver.d.ts +149 -0
  12. package/dist/cloud/fake/builder.d.ts +147 -0
  13. package/dist/cloud/fake/builder.js +213 -0
  14. package/dist/cloud/fake/builder.js.map +1 -0
  15. package/dist/cloud/fake/driver.d.ts +73 -1
  16. package/dist/cloud/fake/driver.js +122 -0
  17. package/dist/cloud/fake/driver.js.map +1 -1
  18. package/dist/cloud/oci/api.d.ts +3 -2
  19. package/dist/cloud/oci/api.js +2 -0
  20. package/dist/cloud/oci/api.js.map +1 -1
  21. package/dist/cloud/oci/buildApi.d.ts +61 -0
  22. package/dist/cloud/oci/buildApi.js +132 -0
  23. package/dist/cloud/oci/buildApi.js.map +1 -0
  24. package/dist/cloud/oci/builder.d.ts +172 -0
  25. package/dist/cloud/oci/builder.js +370 -0
  26. package/dist/cloud/oci/builder.js.map +1 -0
  27. package/dist/cloud/oci/driver.d.ts +23 -2
  28. package/dist/cloud/oci/driver.js +107 -1
  29. package/dist/cloud/oci/driver.js.map +1 -1
  30. package/dist/cloud/oci/planRead.d.ts +38 -0
  31. package/dist/cloud/oci/planRead.js +67 -0
  32. package/dist/cloud/oci/planRead.js.map +1 -0
  33. package/dist/cloud/oci/prices.d.ts +22 -1
  34. package/dist/cloud/oci/prices.js +35 -0
  35. package/dist/cloud/oci/prices.js.map +1 -1
  36. package/dist/cloud/oci/resourceApi.d.ts +114 -0
  37. package/dist/cloud/oci/resourceApi.js +261 -0
  38. package/dist/cloud/oci/resourceApi.js.map +1 -0
  39. package/dist/cloud/oci/resourceMap.d.ts +44 -0
  40. package/dist/cloud/oci/resourceMap.js +70 -0
  41. package/dist/cloud/oci/resourceMap.js.map +1 -0
  42. package/dist/cloud/oci/rmApi.d.ts +74 -0
  43. package/dist/cloud/oci/rmApi.js +141 -0
  44. package/dist/cloud/oci/rmApi.js.map +1 -0
  45. package/dist/cloud/oci/stackVars.d.ts +49 -0
  46. package/dist/cloud/oci/stackVars.js +70 -0
  47. package/dist/cloud/oci/stackVars.js.map +1 -0
  48. package/dist/cluster/fakeKube.d.ts +43 -0
  49. package/dist/cluster/fakeKube.js +86 -0
  50. package/dist/cluster/fakeKube.js.map +1 -0
  51. package/dist/cluster/kube.d.ts +40 -0
  52. package/dist/cluster/kube.js +46 -0
  53. package/dist/cluster/kube.js.map +1 -0
  54. package/dist/cluster/kubeHttp.d.ts +16 -0
  55. package/dist/cluster/kubeHttp.js +86 -0
  56. package/dist/cluster/kubeHttp.js.map +1 -0
  57. package/dist/commands/build.d.ts +90 -0
  58. package/dist/commands/build.js +358 -0
  59. package/dist/commands/build.js.map +1 -0
  60. package/dist/commands/capacity.d.ts +37 -0
  61. package/dist/commands/capacity.js +93 -0
  62. package/dist/commands/capacity.js.map +1 -0
  63. package/dist/commands/domain.d.ts +45 -0
  64. package/dist/commands/domain.js +150 -0
  65. package/dist/commands/domain.js.map +1 -0
  66. package/dist/commands/spend.d.ts +22 -0
  67. package/dist/commands/spend.js +65 -0
  68. package/dist/commands/spend.js.map +1 -0
  69. package/dist/commands/teardown.d.ts +10 -0
  70. package/dist/commands/teardown.js +72 -0
  71. package/dist/commands/teardown.js.map +1 -0
  72. package/dist/commands/verify.d.ts +28 -0
  73. package/dist/commands/verify.js +98 -0
  74. package/dist/commands/verify.js.map +1 -0
  75. package/dist/domain/adopt.d.ts +60 -0
  76. package/dist/domain/adopt.js +143 -0
  77. package/dist/domain/adopt.js.map +1 -0
  78. package/dist/domain/sizing.d.ts +55 -0
  79. package/dist/domain/sizing.js +66 -0
  80. package/dist/domain/sizing.js.map +1 -0
  81. package/dist/domain/spec.d.ts +101 -0
  82. package/dist/domain/spec.js +191 -0
  83. package/dist/domain/spec.js.map +1 -0
  84. package/dist/domain/spend.d.ts +84 -0
  85. package/dist/domain/spend.js +109 -0
  86. package/dist/domain/spend.js.map +1 -0
  87. package/dist/domain/state.d.ts +149 -0
  88. package/dist/domain/state.js +182 -0
  89. package/dist/domain/state.js.map +1 -0
  90. package/dist/domain/steps.d.ts +82 -0
  91. package/dist/domain/steps.js +311 -0
  92. package/dist/domain/steps.js.map +1 -0
  93. package/dist/domain/teardown.d.ts +38 -0
  94. package/dist/domain/teardown.js +48 -0
  95. package/dist/domain/teardown.js.map +1 -0
  96. package/dist/domain/verify.d.ts +68 -0
  97. package/dist/domain/verify.js +216 -0
  98. package/dist/domain/verify.js.map +1 -0
  99. package/dist/domain/view.d.ts +24 -0
  100. package/dist/domain/view.js +38 -0
  101. package/dist/domain/view.js.map +1 -0
  102. package/dist/domains/harborOci.d.ts +75 -0
  103. package/dist/domains/harborOci.js +165 -0
  104. package/dist/domains/harborOci.js.map +1 -0
  105. package/dist/index.d.ts +7 -0
  106. package/dist/index.js +6 -0
  107. package/dist/index.js.map +1 -1
  108. package/dist/installer/assisted.d.ts +97 -0
  109. package/dist/installer/assisted.js +171 -0
  110. package/dist/installer/assisted.js.map +1 -0
  111. package/dist/installer/installer.d.ts +86 -0
  112. package/dist/installer/installer.js +15 -0
  113. package/dist/installer/installer.js.map +1 -0
  114. package/dist/prompt.d.ts +33 -0
  115. package/dist/prompt.js +46 -0
  116. package/dist/prompt.js.map +1 -0
  117. package/dist/session.d.ts +2 -0
  118. package/dist/session.js +4 -0
  119. package/dist/session.js.map +1 -1
  120. package/dist/stratus.js +75 -3
  121. package/dist/stratus.js.map +1 -1
  122. package/dist/vfs/domains.d.ts +39 -0
  123. package/dist/vfs/domains.js +128 -0
  124. package/dist/vfs/domains.js.map +1 -0
  125. package/dist/vfs/look.d.ts +10 -0
  126. package/dist/vfs/look.js +43 -8
  127. package/dist/vfs/look.js.map +1 -1
  128. package/dist/vfs/resources.d.ts +136 -0
  129. package/dist/vfs/resources.js +325 -0
  130. package/dist/vfs/resources.js.map +1 -0
  131. package/dist/vfs/tenancy.d.ts +15 -2
  132. package/dist/vfs/tenancy.js +53 -17
  133. package/dist/vfs/tenancy.js.map +1 -1
  134. package/package.json +13 -6
@@ -0,0 +1,370 @@
1
+ /**
2
+ * @file OCI's build half: Terraform in Resource Manager (docs/stratus.adoc, D3).
3
+ *
4
+ * The stack is Oracle's own `oci-openshift` `create-cluster` release zip,
5
+ * pinned by its digest, uploaded as a Resource Manager stack. A plan is a plan
6
+ * job read back as JSON; adopting a domain `harbor-oci` built is a stack with
7
+ * that domain's variables and an import-state job carrying its Terraform
8
+ * state. Every wait polls the job and streams its log to the step's; a stop
9
+ * asks Resource Manager to cancel the job without forcing it, and waits for
10
+ * Terraform to finish its current operation.
11
+ *
12
+ * A new domain's build, as `harbor-oci` proved it: preflight reads the
13
+ * credential, the compartment, the attribution tag, the room per availability
14
+ * domain, the load balancers free, the zone's delegation and the SSH key; the
15
+ * discovery image is copied through this host into a private bucket and
16
+ * linked for a week (the link is a secret); a new stack's variables come from
17
+ * the spec (`stackVars.ts`); the apply's outputs give the load balancers'
18
+ * addresses and the platform manifest; the three A records are replaced in
19
+ * the zone. A cluster with workers is refused: only the compact one is proven.
20
+ *
21
+ * @module
22
+ */
23
+ import { createHash } from 'node:crypto';
24
+ import { Readable } from 'node:stream';
25
+ import { planRows_read } from './planRead.js';
26
+ import { familyShape_of, stackVariables_build } from './stackVars.js';
27
+ import { specFit_read } from '../../domain/sizing.js';
28
+ /** The stack release stratus builds with: Oracle's zip of `create-cluster`, pinned. */
29
+ export const STACK_RELEASE = {
30
+ version: 'v1.6.1',
31
+ url: 'https://github.com/oracle-quickstart/oci-openshift/releases/download/v1.6.1/create-cluster-v1.6.1.zip',
32
+ sha256: 'a4c8a52dcc4ffc030e90b94e90553cc9294fbb87ed66fb6ac6fae2c573b14c8b',
33
+ };
34
+ /** The freeform tag a domain's stack carries, so a fresh bastion finds it (D4). */
35
+ export const DOMAIN_TAG = 'mise-domain';
36
+ /** The job states that will not change again. */
37
+ const JOB_OVER = ['SUCCEEDED', 'FAILED', 'CANCELED'];
38
+ /** The bucket the discovery images live in, one object per domain. */
39
+ export const ISO_BUCKET = 'stratus-iso';
40
+ /**
41
+ * Fetches a discovery image as a stream.
42
+ *
43
+ * @param url - Its address.
44
+ * @returns Its bytes and their length.
45
+ */
46
+ export async function iso_fetch(url) {
47
+ const response = await fetch(url, { redirect: 'follow' });
48
+ if (!response.ok || response.body === null)
49
+ throw new Error(`the discovery image: HTTP ${response.status}`);
50
+ const length = Number(response.headers.get('content-length') ?? NaN);
51
+ return { body: Readable.from(response.body), ...(Number.isFinite(length) ? { length } : {}) };
52
+ }
53
+ /**
54
+ * Fetches the pinned stack zip and checks its digest.
55
+ *
56
+ * @returns The zip.
57
+ * @throws Error - When the download fails or the digest is not the pinned one.
58
+ */
59
+ export async function stackZip_fetch() {
60
+ const response = await fetch(STACK_RELEASE.url);
61
+ if (!response.ok)
62
+ throw new Error(`stack ${STACK_RELEASE.version}: HTTP ${response.status} from ${STACK_RELEASE.url}`);
63
+ const zip = Buffer.from(await response.arrayBuffer());
64
+ return stackZip_check(zip);
65
+ }
66
+ /**
67
+ * Checks a zip against the pinned digest.
68
+ *
69
+ * @param zip - The zip.
70
+ * @returns It, when it is the pinned one.
71
+ * @throws Error - When it is not.
72
+ */
73
+ export function stackZip_check(zip) {
74
+ const digest = createHash('sha256').update(zip).digest('hex');
75
+ if (digest !== STACK_RELEASE.sha256)
76
+ throw new Error(`stack ${STACK_RELEASE.version}: sha256 ${digest} is not the pinned ${STACK_RELEASE.sha256}`);
77
+ return zip;
78
+ }
79
+ /**
80
+ * Waits a poll, unless stopped.
81
+ *
82
+ * @param ms - How long.
83
+ * @param signal - Stops it.
84
+ */
85
+ function poll_wait(ms, signal) {
86
+ if (ms <= 0 || signal.aborted)
87
+ return Promise.resolve();
88
+ return new Promise((resolve) => {
89
+ const timer = setTimeout(resolve, ms);
90
+ signal.addEventListener('abort', () => { clearTimeout(timer); resolve(); }, { once: true });
91
+ });
92
+ }
93
+ /** OCI's build half, over Resource Manager. */
94
+ export class OciBuilder {
95
+ options;
96
+ id = 'oci';
97
+ zip = null;
98
+ constructor(options) {
99
+ this.options = options;
100
+ }
101
+ /** The stack's zip, fetched once. */
102
+ async zip_get() {
103
+ if (this.zip === null)
104
+ this.zip = await (this.options.zip_fetch ?? stackZip_fetch)();
105
+ return this.zip;
106
+ }
107
+ /**
108
+ * Runs a job to its end: its log streamed to the step's, a stop passed on
109
+ * as a cancel that is never forced.
110
+ *
111
+ * @param rm - Resource Manager.
112
+ * @param stackId - The stack.
113
+ * @param operation - What the job does.
114
+ * @param name - What the job is called.
115
+ * @param call - The step's log and stop.
116
+ * @returns The job at its end.
117
+ * @throws Error - When it failed or was cancelled.
118
+ */
119
+ async job_run(rm, stackId, operation, name, call) {
120
+ let job = await rm.job_create(stackId, operation, name);
121
+ call.log(`Resource Manager ${operation.kind} job ${job.id}`);
122
+ let shown = 0;
123
+ let cancelAsked = false;
124
+ for (;;) {
125
+ if (call.signal.aborted && !cancelAsked) {
126
+ cancelAsked = true;
127
+ call.log(`asking Resource Manager to cancel ${job.id}; Terraform finishes its current operation first`);
128
+ await rm.job_cancel(job.id);
129
+ }
130
+ job = await rm.job_get(job.id);
131
+ shown = await this.log_follow(rm, job.id, shown, call);
132
+ if (JOB_OVER.includes(job.state))
133
+ break;
134
+ await poll_wait(this.options.pollMs ?? 10_000, call.signal);
135
+ }
136
+ if (job.state !== 'SUCCEEDED')
137
+ throw new Error(`Resource Manager ${operation.kind} job ${job.id}: ${job.state}${job.failure !== undefined ? `: ${job.failure}` : ''}`);
138
+ return job;
139
+ }
140
+ /**
141
+ * Passes on the lines of a job's log not yet shown. A log read while the
142
+ * job writes it can fail (Resource Manager pages a log that grows); the
143
+ * log is only ever shown, so a failed read is skipped and read again on
144
+ * the next poll, never the job's failure.
145
+ *
146
+ * @param rm - Resource Manager.
147
+ * @param jobId - The job.
148
+ * @param shown - How many lines were passed on already.
149
+ * @param call - The step's log.
150
+ * @returns How many lines have been passed on now.
151
+ */
152
+ async log_follow(rm, jobId, shown, call) {
153
+ let lines;
154
+ try {
155
+ lines = await rm.jobLog_read(jobId);
156
+ }
157
+ catch {
158
+ return shown;
159
+ }
160
+ for (const line of lines.slice(shown))
161
+ call.log(line);
162
+ return Math.max(shown, lines.length);
163
+ }
164
+ /**
165
+ * Adopts a domain `harbor-oci` built: a stack of the pinned release with its
166
+ * variables, tagged with the domain's name, and its Terraform state imported.
167
+ *
168
+ * @param request - The domain, where the stack goes, its variables and its state.
169
+ * @param call - The step's log and stop.
170
+ * @returns The stack's id.
171
+ */
172
+ async stack_adopt(request, call) {
173
+ // The state was written by that release's Terraform; another release would plan changes that are not there.
174
+ if (request.stackVersion !== STACK_RELEASE.version)
175
+ throw new Error(`the domain was built with oci-openshift ${request.stackVersion || '(unpinned)'}; stratus builds with ${STACK_RELEASE.version}`);
176
+ const rm = this.options.rm(request.region);
177
+ // A stack already tagged with the domain is the one an earlier adoption made: its state is in, nothing to repeat.
178
+ const found = (await rm.stacks_tagged(request.compartmentId, DOMAIN_TAG)).filter((stack) => stack.tagValue === request.domain && stack.state === 'ACTIVE');
179
+ if (found.length > 1)
180
+ throw new Error(`${found.length} stacks in ${request.compartmentId} are tagged ${DOMAIN_TAG}=${request.domain}: ${found.map((stack) => stack.id).join(', ')}`);
181
+ if (found.length === 1) {
182
+ call.log(`stack ${found[0].id} is already tagged ${DOMAIN_TAG}=${request.domain}: taken as this domain's, its state already in`);
183
+ return found[0].id;
184
+ }
185
+ const zip = await this.zip_get();
186
+ const stack = await rm.stack_create({
187
+ compartmentId: request.compartmentId,
188
+ displayName: `${request.domain} · a Trusted Domain`,
189
+ description: `The ${request.domain} domain's infrastructure, oci-openshift ${STACK_RELEASE.version}, adopted from harbor-oci by stratus.`,
190
+ zipBase64: zip.toString('base64'),
191
+ variables: request.variables,
192
+ tags: { [DOMAIN_TAG]: request.domain },
193
+ });
194
+ call.log(`stack ${stack.id} made in ${request.compartmentId}`);
195
+ await this.job_run(rm, stack.id, { kind: 'import', stateBase64: request.state.toString('base64') }, `${request.domain}: import the state harbor-oci kept`, call);
196
+ return stack.id;
197
+ }
198
+ /**
199
+ * The build's other calls in a region.
200
+ *
201
+ * @param region - The region.
202
+ * @returns The calls.
203
+ * @throws Error - When the builder was made without them.
204
+ */
205
+ api_in(region) {
206
+ if (this.options.api === undefined)
207
+ throw new Error('this builder adopts and re-plans only');
208
+ return this.options.api(region);
209
+ }
210
+ async preflight(request, call) {
211
+ const api = this.api_in(request.region);
212
+ const checks = [];
213
+ const check = async (name, run) => {
214
+ let result;
215
+ try {
216
+ result = await run();
217
+ }
218
+ catch (error) {
219
+ result = { ok: false, note: error instanceof Error ? error.message : String(error) };
220
+ }
221
+ checks.push({ name, ...result });
222
+ call.log(`${result.ok ? 'ok' : 'NO'} ${name}: ${result.note}`);
223
+ };
224
+ await check('credential', async () => { const tenancy = await api.tenancy_get(); return { ok: true, note: `the key answers for ${tenancy.name}` }; });
225
+ await check('compartment', async () => {
226
+ if (request.compartmentId === '')
227
+ return { ok: false, note: 'none chosen: domain new --compartment <ocid>' };
228
+ const state = await api.compartmentState_get(request.compartmentId);
229
+ return { ok: state.toUpperCase() === 'ACTIVE', note: state.toLowerCase() };
230
+ });
231
+ await check('attribution tag', async () => {
232
+ const ok = request.compartmentId !== '' && await api.tag_exists(request.compartmentId, 'openshift-tags', 'openshift-resource');
233
+ return { ok, note: ok ? 'openshift-tags.openshift-resource exists' : 'openshift-tags.openshift-resource is missing in the compartment' };
234
+ });
235
+ await check('spec', async () => {
236
+ if (request.spec.workers.count > 0)
237
+ return { ok: false, note: 'workers are not proven on OCI yet: a compact cluster (workers 0) only' };
238
+ familyShape_of(request.spec.family);
239
+ return { ok: true, note: `${request.spec.family}, compact, ${request.spec.controlPlane.count} nodes` };
240
+ });
241
+ await check('room', async () => {
242
+ if (this.options.driver === undefined)
243
+ return { ok: false, note: 'no driver to read the limits with' };
244
+ const fits = await specFit_read(this.options.driver, request.region, request.domain, request.spec);
245
+ const short = fits.filter((fit) => fit.fits !== true);
246
+ return { ok: short.length === 0, note: short.length === 0 ? `fits all ${fits.length} availability domains` : `does not fit, or not said, in ${short.map((fit) => fit.zone).join(', ')}` };
247
+ });
248
+ await check('load balancers', async () => {
249
+ const free = await api.limitFree_get('load-balancer', 'lb-flexible-count');
250
+ return { ok: free !== null && free >= 3, note: `3 needed, ${free ?? 'unknown'} free` };
251
+ });
252
+ await check('zone', async () => {
253
+ const served = await api.zoneNameservers_get(request.baseDomain, request.compartmentId);
254
+ const resolved = this.options.nameservers_resolve === undefined ? [] : (await this.options.nameservers_resolve(request.baseDomain)).map((name) => name.replace(/\.$/, '')).sort();
255
+ const same = served.length > 0 && JSON.stringify(served) === JSON.stringify(resolved);
256
+ return { ok: same, note: same ? `${request.baseDomain} is delegated to OCI's name servers` : `${request.baseDomain}: OCI serves ${served.join(' ') || 'nothing'}, the world asks ${resolved.join(' ') || 'nobody'}` };
257
+ });
258
+ await check('SSH key', async () => {
259
+ const key = this.options.sshPublicKey?.() ?? null;
260
+ return { ok: key !== null && key.trim() !== '', note: key === null ? 'no public key on the host' : 'present' };
261
+ });
262
+ return checks;
263
+ }
264
+ async iso_store(request, call) {
265
+ const api = this.api_in(request.region);
266
+ const bucket = this.options.bucket ?? ISO_BUCKET;
267
+ const object = `${request.domain}-discovery.iso`;
268
+ await api.bucket_ensure(bucket, request.compartmentId);
269
+ const image = await (this.options.iso_fetch ?? iso_fetch)(request.url);
270
+ call.log(`copying the discovery image into ${bucket}/${object}${image.length !== undefined ? ` (${Math.round(image.length / 1_048_576)} MiB)` : ''}`);
271
+ await api.object_put(bucket, object, image.body, image.length);
272
+ const expires = new Date(Date.now() + (this.options.linkDays ?? 7) * 24 * 3600 * 1000);
273
+ const link = await api.link_create(bucket, object, `${object}-link`, expires);
274
+ call.log(`linked until ${expires.toISOString().slice(0, 10)}`);
275
+ return { object, expires: expires.toISOString(), link: link.url, linkId: link.id };
276
+ }
277
+ async infra_plan(request, call) {
278
+ const rm = this.options.rm(request.region);
279
+ let stackRef = request.stackRef;
280
+ let made;
281
+ if (stackRef === undefined) {
282
+ if (request.compartmentId === undefined || request.baseDomain === undefined || request.isoLink === undefined || request.isoLink === '')
283
+ throw new Error('a new stack needs the compartment, the zone and the image\'s link');
284
+ const sshPublicKey = this.options.sshPublicKey?.() ?? null;
285
+ if (sshPublicKey === null)
286
+ throw new Error('no SSH public key on the host');
287
+ const tenancyId = (await this.api_in(request.region).tenancy_get()).id;
288
+ const variables = stackVariables_build({
289
+ domain: request.domain, spec: request.spec, tenancyId, compartmentId: request.compartmentId, region: request.region,
290
+ baseDomain: request.baseDomain, isoLink: request.isoLink, sshPublicKey: sshPublicKey.trim(),
291
+ });
292
+ const stack = await rm.stack_create({
293
+ compartmentId: request.compartmentId,
294
+ displayName: `${request.domain} · a Trusted Domain`,
295
+ description: `The ${request.domain} domain's infrastructure, oci-openshift ${STACK_RELEASE.version}, built by stratus.`,
296
+ zipBase64: (await this.zip_get()).toString('base64'),
297
+ variables,
298
+ tags: { [DOMAIN_TAG]: request.domain },
299
+ });
300
+ call.log(`stack ${stack.id} made in ${request.compartmentId}`);
301
+ stackRef = stack.id;
302
+ made = stack.id;
303
+ }
304
+ const job = await this.job_run(rm, stackRef, { kind: 'plan' }, `${request.domain}: plan`, call);
305
+ return { ref: job.id, rows: planRows_read(await rm.jobPlan_read(job.id)), ...(made !== undefined ? { stackRef: made } : {}) };
306
+ }
307
+ async infra_apply(request, call) {
308
+ const stackRef = request.stackRef ?? request.plan.stackRef;
309
+ if (stackRef === undefined)
310
+ throw new Error('no stack to apply in');
311
+ const rm = this.options.rm(request.region);
312
+ const job = await this.job_run(rm, stackRef, { kind: 'apply', planJobId: request.plan.ref }, `${request.domain}: apply`, call);
313
+ const outputs = await rm.jobOutputs_read(job.id);
314
+ const need = (key) => {
315
+ const value = outputs[key];
316
+ if (value === undefined || value === '')
317
+ throw new Error(`the apply left no ${key}`);
318
+ return value;
319
+ };
320
+ return {
321
+ stackRef,
322
+ apiIp: need('open_shift_api_lb_addr'),
323
+ apiIntIp: need('open_shift_api_int_lb_addr'),
324
+ appsIp: need('open_shift_apps_lb_addr'),
325
+ manifests: [{ name: 'oci-dynamic-custom-manifest.yml', content: need('dynamic_custom_manifest') }],
326
+ };
327
+ }
328
+ async dns_upsert(request, call) {
329
+ const api = this.api_in(request.region);
330
+ const cluster = `${request.domain}.${request.baseDomain}`;
331
+ const records = [[`api.${cluster}`, request.outputs.apiIp], [`api-int.${cluster}`, request.outputs.apiIntIp], [`*.apps.${cluster}`, request.outputs.appsIp]];
332
+ for (const [name, address] of records) {
333
+ await api.record_upsert(request.baseDomain, name, address, request.compartmentId);
334
+ call.log(`${name} -> ${address}`);
335
+ }
336
+ return records.map(([name]) => name);
337
+ }
338
+ async stackResources_count(request) {
339
+ return this.options.rm(request.region).stackResources_count(request.stackRef);
340
+ }
341
+ async teardown_run(request, call) {
342
+ const api = this.api_in(request.region);
343
+ const gone = [];
344
+ if (request.stackRef !== undefined) {
345
+ await this.job_run(this.options.rm(request.region), request.stackRef, { kind: 'destroy' }, `${request.domain}: destroy`, call);
346
+ gone.push(`the stack's resources (${request.stackRef})`);
347
+ }
348
+ const cluster = `${request.domain}.${request.baseDomain}`;
349
+ for (const name of [`api.${cluster}`, `api-int.${cluster}`, `*.apps.${cluster}`]) {
350
+ await api.record_delete(request.baseDomain, name, request.compartmentId);
351
+ call.log(`record ${name} removed`);
352
+ }
353
+ gone.push('3 DNS records');
354
+ const bucket = this.options.bucket ?? ISO_BUCKET;
355
+ if (request.isoLinkId !== undefined)
356
+ await api.link_delete(bucket, request.isoLinkId);
357
+ if (request.isoObject !== undefined) {
358
+ await api.object_delete(bucket, request.isoObject);
359
+ gone.push(`the image ${request.isoObject} and its link`);
360
+ }
361
+ for (const volumeId of request.volumeIds) {
362
+ await api.volume_delete(volumeId);
363
+ call.log(`volume ${volumeId} removed`);
364
+ }
365
+ if (request.volumeIds.length > 0)
366
+ gone.push(`${request.volumeIds.length} volumes the cluster made`);
367
+ return gone;
368
+ }
369
+ }
370
+ //# sourceMappingURL=builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.js","sourceRoot":"","sources":["../../../src/cloud/oci/builder.ts"],"names":[],"mappings":"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"}
@@ -3,13 +3,17 @@
3
3
  *
4
4
  * Containers are compartments, the root the tenancy; zones are availability
5
5
  * domains; limits come from the Limits service and shapes from Compute,
6
- * each asked in the region given; prices from Oracle's public list. The SDK
6
+ * each asked in the region given; prices from Oracle's public list. The
7
+ * resource kinds come from their services (Compute, Virtual Network, Block
8
+ * Storage, Load Balancing, Object Storage, DNS) and their counts from
9
+ * Resource Search: VCNs are networks, NSGs security groups, block and boot
10
+ * volumes both volumes. The SDK
7
11
  * is reached through `OciApi` (`api.ts`), so this file maps records and
8
12
  * tests run it over recorded answers.
9
13
  *
10
14
  * @module
11
15
  */
12
- import type { CloudAvailability, CloudContainer, CloudDriver, CloudIdentity, CloudLimit, CloudPrice, CloudShape, CloudZone } from '../driver.js';
16
+ import type { CloudAvailability, CloudBucket, CloudContainer, CloudDnsZone, CloudDriver, CloudIdentity, CloudInstance, CloudLimit, CloudLink, CloudLoadBalancer, CloudNetwork, CloudObject, CloudPrice, ServicePrices, CloudRecord, CloudSecurityGroup, CloudShape, CloudSubnet, CloudVolume, CloudZone, ResourceCounts } from '../driver.js';
13
17
  import type { OciApi, OciShapeRecord } from './api.js';
14
18
  import { type JsonFetch } from './prices.js';
15
19
  /** How the driver is made. */
@@ -28,7 +32,10 @@ export declare class OciDriver implements CloudDriver {
28
32
  readonly cloud: string;
29
33
  private readonly api;
30
34
  private readonly fetchJson;
35
+ private readonly namespaces;
31
36
  constructor(options: OciDriverOptions);
37
+ /** The Object Storage namespace, asked once per region. */
38
+ private namespace_get;
32
39
  identity_get(): Promise<CloudIdentity>;
33
40
  root_get(): Promise<CloudContainer>;
34
41
  containers_list(parentId: string): Promise<CloudContainer[]>;
@@ -39,4 +46,18 @@ export declare class OciDriver implements CloudDriver {
39
46
  limitAvailability_get(region: string, service: string, name: string, zone?: string): Promise<CloudAvailability | null>;
40
47
  shapes_list(region: string): Promise<CloudShape[]>;
41
48
  prices_list(): Promise<CloudPrice[]>;
49
+ servicePrices_get(): Promise<ServicePrices | null>;
50
+ instances_list(containerId: string, region: string): Promise<CloudInstance[]>;
51
+ networks_list(containerId: string, region: string): Promise<CloudNetwork[]>;
52
+ subnets_list(containerId: string, region: string): Promise<CloudSubnet[]>;
53
+ securitygroups_list(containerId: string, region: string): Promise<CloudSecurityGroup[]>;
54
+ loadbalancers_list(containerId: string, region: string): Promise<CloudLoadBalancer[]>;
55
+ volumes_list(containerId: string, region: string): Promise<CloudVolume[]>;
56
+ buckets_list(containerId: string, region: string): Promise<CloudBucket[]>;
57
+ dns_list(containerId: string, region: string): Promise<CloudDnsZone[]>;
58
+ objects_list(bucket: string, region: string): Promise<CloudObject[]>;
59
+ links_list(bucket: string, region: string): Promise<CloudLink[]>;
60
+ object_read(bucket: string, object: string, region: string): Promise<Buffer>;
61
+ records_list(zoneId: string, region: string): Promise<CloudRecord[]>;
62
+ resources_search(containerId: string, region: string): Promise<ResourceCounts>;
42
63
  }
@@ -1,4 +1,5 @@
1
- import { ociPrices_read, shapeTerms_get } from './prices.js';
1
+ import { byName_sort, resource_ofRecord, searchCounts_of, searchQuery_of } from './resourceMap.js';
2
+ import { ociPrices_read, ociServicePrices_read, shapeTerms_get } from './prices.js';
2
3
  /** Tags flattened: freeform as `key`, defined as `namespace.key`. */
3
4
  export function ociTags_flatten(freeform, defined) {
4
5
  const tags = {};
@@ -65,6 +66,7 @@ export function shape_ofRecord(record) {
65
66
  processor: record.processorDescription,
66
67
  gpus: record.gpus,
67
68
  quotaNames: record.quotaNames,
69
+ limitService: 'compute',
68
70
  raw: record.raw,
69
71
  };
70
72
  }
@@ -73,10 +75,21 @@ export class OciDriver {
73
75
  cloud = 'oci';
74
76
  api;
75
77
  fetchJson;
78
+ namespaces = new Map();
76
79
  constructor(options) {
77
80
  this.api = options.api;
78
81
  this.fetchJson = options.fetchJson;
79
82
  }
83
+ /** The Object Storage namespace, asked once per region. */
84
+ namespace_get(region) {
85
+ let namespace = this.namespaces.get(region);
86
+ if (namespace === undefined) {
87
+ namespace = this.api.namespace_get(region);
88
+ namespace.catch(() => { this.namespaces.delete(region); });
89
+ this.namespaces.set(region, namespace);
90
+ }
91
+ return namespace;
92
+ }
80
93
  async identity_get() {
81
94
  const credential = this.api.credential_get();
82
95
  const [tenancy, user] = await Promise.all([
@@ -127,5 +140,98 @@ export class OciDriver {
127
140
  async prices_list() {
128
141
  return ociPrices_read(this.fetchJson);
129
142
  }
143
+ async servicePrices_get() {
144
+ return ociServicePrices_read(this.fetchJson);
145
+ }
146
+ async instances_list(containerId, region) {
147
+ const [records, attachments] = await Promise.all([
148
+ this.api.instances_list(region, containerId),
149
+ this.api.vnicAttachments_list(region, containerId),
150
+ ]);
151
+ const live = attachments.filter((attachment) => attachment.lifecycleState.toUpperCase() === 'ATTACHED' && attachment.vnicId !== '');
152
+ const vnics = await Promise.all(live.map((attachment) => this.api.vnic_get(region, attachment.vnicId)));
153
+ const ipsByInstance = new Map();
154
+ live.forEach((attachment, index) => {
155
+ const vnic = vnics[index];
156
+ const ips = ipsByInstance.get(attachment.instanceId) ?? [];
157
+ if (vnic.privateIp !== null)
158
+ ips.unshift(vnic.privateIp);
159
+ if (vnic.publicIp !== null)
160
+ ips.push(vnic.publicIp);
161
+ ipsByInstance.set(attachment.instanceId, ips);
162
+ });
163
+ return byName_sort(records.map((record) => ({
164
+ ...resource_ofRecord(record, region), shape: record.shape, zone: record.availabilityDomain, ips: ipsByInstance.get(record.id) ?? [],
165
+ ...(record.ocpus !== undefined ? { vcpus: record.ocpus * shapeTerms_get(record.shape).vcpuPerOcpu } : {}),
166
+ ...(record.memoryInGBs !== undefined ? { memoryGib: record.memoryInGBs } : {}),
167
+ })));
168
+ }
169
+ async networks_list(containerId, region) {
170
+ return byName_sort((await this.api.vcns_list(region, containerId)).map((record) => resource_ofRecord(record, region)));
171
+ }
172
+ async subnets_list(containerId, region) {
173
+ return byName_sort((await this.api.subnets_list(region, containerId)).map((record) => ({ ...resource_ofRecord(record, region), networkId: record.vcnId })));
174
+ }
175
+ async securitygroups_list(containerId, region) {
176
+ return byName_sort((await this.api.nsgs_list(region, containerId)).map((record) => ({ ...resource_ofRecord(record, region), networkId: record.vcnId })));
177
+ }
178
+ async loadbalancers_list(containerId, region) {
179
+ return byName_sort((await this.api.loadBalancers_list(region, containerId)).map((record) => ({ ...resource_ofRecord(record, region), ips: record.ipAddresses, shape: record.shapeName, ...(record.minimumMbps !== undefined ? { minimumMbps: record.minimumMbps } : {}) })));
180
+ }
181
+ async volumes_list(containerId, region) {
182
+ const zones = await this.api.availabilityDomains_list(region, this.api.credential_get().tenancyId);
183
+ const [blocks, attachments, boots, bootAttachments] = await Promise.all([
184
+ this.api.volumes_list(region, containerId),
185
+ this.api.volumeAttachments_list(region, containerId),
186
+ Promise.all(zones.map((zone) => this.api.bootVolumes_list(region, containerId, zone))),
187
+ Promise.all(zones.map((zone) => this.api.bootVolumeAttachments_list(region, containerId, zone))),
188
+ ]);
189
+ const attachedTo = new Map();
190
+ for (const attachment of [...attachments, ...bootAttachments.flat()]) {
191
+ if (['ATTACHED', 'ATTACHING'].includes(attachment.lifecycleState.toUpperCase()))
192
+ attachedTo.set(attachment.volumeId, attachment.instanceId);
193
+ }
194
+ const volume_of = (record, boot) => ({
195
+ ...resource_ofRecord(record, region), sizeGib: record.sizeInGBs, attachedTo: attachedTo.get(record.id) ?? null, boot,
196
+ ...(record.vpusPerGB !== undefined ? { vpusPerGib: record.vpusPerGB } : {}),
197
+ });
198
+ return byName_sort([
199
+ ...blocks.map((record) => volume_of(record, false)),
200
+ ...boots.flat().map((record) => volume_of(record, true)),
201
+ ]);
202
+ }
203
+ async buckets_list(containerId, region) {
204
+ const namespace = await this.namespace_get(region);
205
+ return byName_sort((await this.api.buckets_list(region, namespace, containerId)).map((record) => resource_ofRecord(record, region)));
206
+ }
207
+ async dns_list(containerId, region) {
208
+ const seen = new Set();
209
+ const zones = [];
210
+ for (const record of await this.api.zones_list(region, containerId)) {
211
+ if (seen.has(record.id))
212
+ continue;
213
+ seen.add(record.id);
214
+ zones.push(resource_ofRecord(record, region));
215
+ }
216
+ return byName_sort(zones);
217
+ }
218
+ async objects_list(bucket, region) {
219
+ const records = await this.api.objects_list(region, await this.namespace_get(region), bucket);
220
+ return records.map((record) => ({ name: record.name, size: record.size, modified: record.timeModified }));
221
+ }
222
+ async links_list(bucket, region) {
223
+ const records = await this.api.pars_list(region, await this.namespace_get(region), bucket);
224
+ return records.map((record) => ({ object: record.objectName, name: record.name, access: record.accessType, expires: record.timeExpires }));
225
+ }
226
+ async object_read(bucket, object, region) {
227
+ return this.api.object_get(region, await this.namespace_get(region), bucket, object);
228
+ }
229
+ async records_list(zoneId, region) {
230
+ const records = await this.api.zoneRecords_list(region, zoneId);
231
+ return records.map((record) => ({ domain: record.domain, type: record.rtype, ttl: record.ttl, data: record.rdata }));
232
+ }
233
+ async resources_search(containerId, region) {
234
+ return searchCounts_of(await this.api.search_list(region, searchQuery_of(containerId)));
235
+ }
130
236
  }
131
237
  //# sourceMappingURL=driver.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"driver.js","sourceRoot":"","sources":["../../../src/cloud/oci/driver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"driver.js","sourceRoot":"","sources":["../../../src/cloud/oci/driver.ts"],"names":[],"mappings":"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"}