@fnndsc/stratus 0.2.1 → 0.4.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 (122) hide show
  1. package/chris/values-openshift.yaml +59 -0
  2. package/dist/backend.d.ts +9 -3
  3. package/dist/backend.js +32 -8
  4. package/dist/backend.js.map +1 -1
  5. package/dist/cloud/builder.d.ts +16 -1
  6. package/dist/cloud/builder.js +1 -1
  7. package/dist/cloud/builder.js.map +1 -1
  8. package/dist/cloud/fake/builder.d.ts +13 -1
  9. package/dist/cloud/fake/builder.js +26 -9
  10. package/dist/cloud/fake/builder.js.map +1 -1
  11. package/dist/cloud/fake/driver.d.ts +1 -1
  12. package/dist/cloud/fake/driver.js +9 -9
  13. package/dist/cloud/fake/driver.js.map +1 -1
  14. package/dist/cloud/oci/api.js +15 -15
  15. package/dist/cloud/oci/api.js.map +1 -1
  16. package/dist/cloud/oci/buildApi.d.ts +11 -0
  17. package/dist/cloud/oci/buildApi.js +40 -9
  18. package/dist/cloud/oci/buildApi.js.map +1 -1
  19. package/dist/cloud/oci/builder.d.ts +42 -1
  20. package/dist/cloud/oci/builder.js +100 -16
  21. package/dist/cloud/oci/builder.js.map +1 -1
  22. package/dist/cloud/oci/driver.d.ts +1 -1
  23. package/dist/cloud/oci/driver.js +21 -21
  24. package/dist/cloud/oci/driver.js.map +1 -1
  25. package/dist/cloud/oci/errors.d.ts +13 -0
  26. package/dist/cloud/oci/errors.js +16 -0
  27. package/dist/cloud/oci/errors.js.map +1 -0
  28. package/dist/cloud/oci/resourceApi.js +22 -22
  29. package/dist/cloud/oci/resourceApi.js.map +1 -1
  30. package/dist/cloud/oci/resourceMap.d.ts +3 -3
  31. package/dist/cloud/oci/resourceMap.js +3 -3
  32. package/dist/cloud/oci/resourceMap.js.map +1 -1
  33. package/dist/cloud/oci/rmApi.js +7 -7
  34. package/dist/cloud/oci/rmApi.js.map +1 -1
  35. package/dist/cloud/oci/stackVars.d.ts +5 -3
  36. package/dist/cloud/oci/stackVars.js +3 -3
  37. package/dist/cloud/oci/stackVars.js.map +1 -1
  38. package/dist/cluster/chris.d.ts +156 -0
  39. package/dist/cluster/chris.js +493 -0
  40. package/dist/cluster/chris.js.map +1 -0
  41. package/dist/cluster/fakeKube.d.ts +6 -0
  42. package/dist/cluster/fakeKube.js +21 -0
  43. package/dist/cluster/fakeKube.js.map +1 -1
  44. package/dist/cluster/kubeHttp.d.ts +7 -0
  45. package/dist/cluster/kubeHttp.js +26 -1
  46. package/dist/cluster/kubeHttp.js.map +1 -1
  47. package/dist/commands/build.d.ts +33 -0
  48. package/dist/commands/build.js +123 -22
  49. package/dist/commands/build.js.map +1 -1
  50. package/dist/commands/capacity.d.ts +1 -1
  51. package/dist/commands/capacity.js +2 -2
  52. package/dist/commands/capacity.js.map +1 -1
  53. package/dist/commands/domain.js +13 -12
  54. package/dist/commands/domain.js.map +1 -1
  55. package/dist/commands/protect.d.ts +10 -0
  56. package/dist/commands/protect.js +37 -0
  57. package/dist/commands/protect.js.map +1 -0
  58. package/dist/commands/size.d.ts +10 -0
  59. package/dist/commands/size.js +84 -0
  60. package/dist/commands/size.js.map +1 -0
  61. package/dist/commands/teardown.js +2 -0
  62. package/dist/commands/teardown.js.map +1 -1
  63. package/dist/commands/verify.js +4 -10
  64. package/dist/commands/verify.js.map +1 -1
  65. package/dist/domain/adopt.d.ts +11 -1
  66. package/dist/domain/adopt.js +28 -2
  67. package/dist/domain/adopt.js.map +1 -1
  68. package/dist/domain/expect.d.ts +32 -0
  69. package/dist/domain/expect.js +53 -0
  70. package/dist/domain/expect.js.map +1 -0
  71. package/dist/domain/manifests.d.ts +17 -0
  72. package/dist/domain/manifests.js +36 -0
  73. package/dist/domain/manifests.js.map +1 -0
  74. package/dist/domain/readout.d.ts +64 -0
  75. package/dist/domain/readout.js +188 -0
  76. package/dist/domain/readout.js.map +1 -0
  77. package/dist/domain/sizing.d.ts +1 -1
  78. package/dist/domain/sizing.js +3 -3
  79. package/dist/domain/sizing.js.map +1 -1
  80. package/dist/domain/spec.d.ts +1 -1
  81. package/dist/domain/spec.js +1 -1
  82. package/dist/domain/spec.js.map +1 -1
  83. package/dist/domain/state.d.ts +6 -2
  84. package/dist/domain/state.js +11 -11
  85. package/dist/domain/state.js.map +1 -1
  86. package/dist/domain/steps.d.ts +18 -20
  87. package/dist/domain/steps.js +122 -11
  88. package/dist/domain/steps.js.map +1 -1
  89. package/dist/domain/verify.d.ts +39 -0
  90. package/dist/domain/verify.js +64 -17
  91. package/dist/domain/verify.js.map +1 -1
  92. package/dist/domain/view.d.ts +4 -2
  93. package/dist/domain/view.js +7 -4
  94. package/dist/domain/view.js.map +1 -1
  95. package/dist/domains/harborOci.d.ts +1 -1
  96. package/dist/domains/harborOci.js +1 -1
  97. package/dist/domains/harborOci.js.map +1 -1
  98. package/dist/index.d.ts +7 -7
  99. package/dist/index.js +7 -7
  100. package/dist/index.js.map +1 -1
  101. package/dist/installer/account.d.ts +16 -0
  102. package/dist/installer/account.js +33 -0
  103. package/dist/installer/account.js.map +1 -0
  104. package/dist/names.d.ts +1 -1
  105. package/dist/names.js +2 -2
  106. package/dist/names.js.map +1 -1
  107. package/dist/prompt.d.ts +1 -1
  108. package/dist/prompt.js +2 -2
  109. package/dist/prompt.js.map +1 -1
  110. package/dist/stratus.js +5 -2
  111. package/dist/stratus.js.map +1 -1
  112. package/dist/vfs/domains.d.ts +3 -0
  113. package/dist/vfs/domains.js +12 -4
  114. package/dist/vfs/domains.js.map +1 -1
  115. package/dist/vfs/resources.d.ts +4 -4
  116. package/dist/vfs/resources.js +14 -14
  117. package/dist/vfs/resources.js.map +1 -1
  118. package/dist/vfs/tenancy.d.ts +3 -3
  119. package/dist/vfs/tenancy.js +10 -10
  120. package/dist/vfs/tenancy.js.map +1 -1
  121. package/manifests/tenant.mise +27 -0
  122. package/package.json +8 -6
@@ -0,0 +1,188 @@
1
+ /**
2
+ * @file What the TD controller draws of a domain, read from the host
3
+ * (docs/stratus.adoc, D13): its condition in one word, whether money runs,
4
+ * what it is (built here, adopted, read from a checkout) and what is refused
5
+ * on it, its spec, each step with its times, the build's task while it
6
+ * runs, the last plan counted with drift apart, and the last verify check by
7
+ * check. Nothing here asks the cloud: `domain status` adds the live counts
8
+ * and the cost, and a build's state event carries this alone.
9
+ *
10
+ * @module
11
+ */
12
+ import * as fs from 'fs';
13
+ import * as path from 'path';
14
+ import { taskState_isOver } from '@fnndsc/menu';
15
+ import { runner_get } from '@fnndsc/brasa/core';
16
+ import { plan_count } from '../cloud/builder.js';
17
+ import { lastDone_find } from '../domains/harborOci.js';
18
+ import { buildJob_id, FIRST_BILLING_STEP, stepNext_find, STEPS_SOURCE } from './steps.js';
19
+ import { VERIFY_FILE } from './verify.js';
20
+ export { VERIFY_FILE };
21
+ /**
22
+ * A step's state, as kept or as read from a checkout.
23
+ *
24
+ * @param domain - The domain.
25
+ * @param name - The step.
26
+ * @returns Its state, or `not done`.
27
+ */
28
+ function stepState_read(domain, name) {
29
+ return domain.steps.find((step) => step.name === name)?.state ?? 'not done';
30
+ }
31
+ /**
32
+ * Where a domain stands in one word.
33
+ *
34
+ * @param domain - The domain.
35
+ * @param record - Its state on the host, or null for one read from a checkout.
36
+ * @param running - Whether its build is running.
37
+ * @param asking - Whether the engine waits on a question about it.
38
+ * @returns The condition.
39
+ */
40
+ export function condition_derive(domain, record, running, asking) {
41
+ if (record?.gone !== undefined)
42
+ return 'GONE';
43
+ if (asking)
44
+ return 'ASKING';
45
+ if (running || domain.steps.some((step) => step.state === 'running'))
46
+ return 'BUILDING';
47
+ if (domain.steps.some((step) => step.state === 'failed'))
48
+ return 'FAILED';
49
+ if (stepState_read(domain, 'smoke') === 'done')
50
+ return 'SERVING';
51
+ if (stepState_read(domain, 'run') === 'done')
52
+ return 'UP';
53
+ if (domain.steps.some((step) => step.state === 'done'))
54
+ return 'STOPPED';
55
+ return 'SIZING';
56
+ }
57
+ /**
58
+ * The verbs refused on a domain, with why, in the words the verbs refuse with.
59
+ *
60
+ * @param domain - The domain.
61
+ * @param record - Its state on the host, or null.
62
+ * @returns By verb.
63
+ */
64
+ export function refusals_derive(domain, record) {
65
+ if (domain.origin !== 'built' || record === null)
66
+ return { build: 'read from a harbor-oci checkout, not built here', teardown: 'read from a harbor-oci checkout, not built here' };
67
+ if (record.adopted !== undefined)
68
+ return { build: `adopted from ${record.adopted.from}`, teardown: 'adopted, not built here' };
69
+ if (record.gone !== undefined)
70
+ return { build: 'torn down', teardown: 'already torn down' };
71
+ return record.protected !== false ? { teardown: `protected (domain protect ${domain.name} off lifts it)` } : {};
72
+ }
73
+ /**
74
+ * The last plan, counted, its rows grouped by action and kind.
75
+ *
76
+ * @param plan - The plan.
77
+ * @param at - When it was made.
78
+ * @returns The summary.
79
+ */
80
+ export function planSummary_build(plan, at) {
81
+ const counts = plan_count(plan);
82
+ const created = new Set(plan.rows.filter((row) => row.action === 'create').map((row) => row.name));
83
+ const destroyed = new Set(plan.rows.filter((row) => row.action === 'destroy').map((row) => row.name));
84
+ const groups = new Map();
85
+ for (const row of plan.rows) {
86
+ const replaced = created.has(row.name) && destroyed.has(row.name);
87
+ if (replaced && row.action === 'destroy')
88
+ continue;
89
+ const action = replaced ? 'replace' : row.action === 'change' && row.drift === true ? 'drift' : row.action;
90
+ const key = `${action}\u0000${row.kind}`;
91
+ const group = groups.get(key) ?? { action, kind: row.kind, count: 0, names: [] };
92
+ group.count++;
93
+ group.names.push(row.name);
94
+ groups.set(key, group);
95
+ }
96
+ return { create: counts.create, replace: counts.replace, change: counts.change, drift: counts.drift, destroy: counts.destroy, groups: [...groups.values()], at };
97
+ }
98
+ /**
99
+ * When one of a domain's files was written.
100
+ *
101
+ * @param store - The domains kept.
102
+ * @param name - The domain.
103
+ * @param file - The file.
104
+ * @returns Its time, or null.
105
+ */
106
+ function fileTime_read(store, name, file) {
107
+ try {
108
+ return fs.statSync(path.join(store.folder_derive(name), file)).mtime.toISOString();
109
+ }
110
+ catch {
111
+ return null;
112
+ }
113
+ }
114
+ /**
115
+ * What the controller draws of a domain, from the host.
116
+ *
117
+ * @param domain - The domain.
118
+ * @param store - The domains this daemon keeps, or null when it keeps none.
119
+ * @param job - The build's task, when one was ever started.
120
+ * @param asking - The question the engine waits on about it, or null.
121
+ * @returns The readout.
122
+ */
123
+ export function domainReadout_build(domain, store, job, asking = null) {
124
+ const record = store?.record_read(domain.name) ?? null;
125
+ const running = job !== undefined && !taskState_isOver(job.state);
126
+ const runningStep = domain.steps.find((step) => step.state === 'running')?.name ?? null;
127
+ const planText = store?.file_read(domain.name, 'plan.json') ?? null;
128
+ const verifyText = store?.file_read(domain.name, VERIFY_FILE) ?? null;
129
+ const verify = verifyText === null ? null : JSON.parse(verifyText);
130
+ const applied = stepState_read(domain, FIRST_BILLING_STEP) === 'done' || lastDone_find(domain) !== null && (record === null || record.adopted !== undefined);
131
+ return {
132
+ condition: condition_derive(domain, record, running, asking !== null),
133
+ billing: record?.gone === undefined && applied,
134
+ origin: domain.origin !== 'built' || record === null ? 'checkout' : record.adopted !== undefined ? 'adopted' : 'built',
135
+ protected: record?.protected !== false,
136
+ refused: refusals_derive(domain, record),
137
+ region: record?.region ?? domain.settings['OCI_REGION'] ?? null,
138
+ compartment: record?.compartmentId ?? domain.settings['OCI_COMPARTMENT_OCID'] ?? null,
139
+ gone: record?.gone ?? null,
140
+ spec: store?.spec_read(domain.name)?.spec ?? null,
141
+ next: record === null || record.adopted !== undefined || record.gone !== undefined ? null : stepNext_find(record),
142
+ billingStep: FIRST_BILLING_STEP,
143
+ running: running ? { job: job.id, step: runningStep, since: record?.steps[runningStep ?? '']?.started ?? job.started } : null,
144
+ plan: planText === null || store === null ? null : planSummary_build(JSON.parse(planText), fileTime_read(store, domain.name, 'plan.json')),
145
+ verify: verify === null ? null : { at: verify.at, checks: verify.checks },
146
+ asking,
147
+ };
148
+ }
149
+ /**
150
+ * A domain's steps for the model: each with its name, evidence and times.
151
+ *
152
+ * @param domain - The domain.
153
+ * @param record - Its state on the host, or null.
154
+ * @returns The steps.
155
+ */
156
+ export function summarySteps_map(domain, record) {
157
+ return domain.steps.map((step) => ({
158
+ folder: step.folder,
159
+ state: step.state,
160
+ name: step.name,
161
+ evidence: step.evidence,
162
+ started: record?.steps[step.name]?.started ?? null,
163
+ ended: record?.steps[step.name]?.ended ?? null,
164
+ }));
165
+ }
166
+ /**
167
+ * One domain's summary as the host knows it, without asking the cloud: the
168
+ * live counts null and the cost absent. What a build's state event carries.
169
+ *
170
+ * @param store - The domains this daemon keeps, or null.
171
+ * @param domainsPath - The folder the domains stand in.
172
+ * @param domain - The domain.
173
+ * @param asking - The question the engine waits on about it, or null.
174
+ * @returns The summary.
175
+ */
176
+ export function domainSummary_read(store, domainsPath, domain, asking = null) {
177
+ const job = runner_get()?.job_get(STEPS_SOURCE, buildJob_id(domain.name));
178
+ return {
179
+ name: domain.name,
180
+ path: `${domainsPath}/${domain.name}`,
181
+ cluster: domain.cluster,
182
+ lastDone: lastDone_find(domain)?.folder ?? null,
183
+ steps: summarySteps_map(domain, store?.record_read(domain.name) ?? null),
184
+ resources: null,
185
+ ...domainReadout_build(domain, store, job, asking),
186
+ };
187
+ }
188
+ //# sourceMappingURL=readout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"readout.js","sourceRoot":"","sources":["../../src/domain/readout.ts"],"names":[],"mappings":"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"}
@@ -35,7 +35,7 @@ export declare function familyShape_find(shapes: ReadonlyArray<CloudShape>, fami
35
35
  * @param prices - The price list.
36
36
  * @returns The cost, or null when the shape is not priced.
37
37
  */
38
- export declare function specCost_of(spec: DomainSpec, shape: CloudShape | undefined, prices: ReadonlyArray<CloudPrice>): SpecCost | null;
38
+ export declare function specCost_compute(spec: DomainSpec, shape: CloudShape | undefined, prices: ReadonlyArray<CloudPrice>): SpecCost | null;
39
39
  /**
40
40
  * Money as the operator reads it.
41
41
  *
@@ -1,5 +1,5 @@
1
1
  import { capacityRows_read } from '../commands/capacity.js';
2
- import { specNodes_of } from './spec.js';
2
+ import { specNodes_build } from './spec.js';
3
3
  /**
4
4
  * The flexible shape a spec's family runs on.
5
5
  *
@@ -19,7 +19,7 @@ export function familyShape_find(shapes, family) {
19
19
  * @param prices - The price list.
20
20
  * @returns The cost, or null when the shape is not priced.
21
21
  */
22
- export function specCost_of(spec, shape, prices) {
22
+ export function specCost_compute(spec, shape, prices) {
23
23
  const price = shape === undefined ? undefined : prices.find((entry) => entry.shape === shape.name);
24
24
  if (price === undefined)
25
25
  return null;
@@ -51,7 +51,7 @@ export async function specFit_read(driver, region, domain, spec) {
51
51
  const shape = familyShape_find(await driver.shapes_list(region), spec.family);
52
52
  const perCore = shape?.vcpuPerCore ?? 2;
53
53
  const rows = await capacityRows_read(driver, region, [spec.family]);
54
- const nodes = specNodes_of(domain, spec, zones.length);
54
+ const nodes = specNodes_build(domain, spec, zones.length);
55
55
  return zones.map((zone, index) => {
56
56
  const here = nodes.filter((node) => node.zoneIndex === index);
57
57
  const free = (word) => rows.find((row) => row.zone === zone.name && row.limit.includes(word))?.available ?? null;
@@ -1 +1 @@
1
- {"version":3,"file":"sizing.js","sourceRoot":"","sources":["../../src/domain/sizing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sizing.js","sourceRoot":"","sources":["../../src/domain/sizing.ts"],"names":[],"mappings":"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"}
@@ -98,4 +98,4 @@ export interface SpecNode {
98
98
  * @param zones - How many zones the region has.
99
99
  * @returns The nodes.
100
100
  */
101
- export declare function specNodes_of(domain: string, spec: DomainSpec, zones: number): SpecNode[];
101
+ export declare function specNodes_build(domain: string, spec: DomainSpec, zones: number): SpecNode[];
@@ -179,7 +179,7 @@ export function specOptions_apply(base, options) {
179
179
  * @param zones - How many zones the region has.
180
180
  * @returns The nodes.
181
181
  */
182
- export function specNodes_of(domain, spec, zones) {
182
+ export function specNodes_build(domain, spec, zones) {
183
183
  const nodes = [];
184
184
  const count = Math.max(zones, 1);
185
185
  for (let i = 0; i < spec.controlPlane.count; i++)
@@ -1 +1 @@
1
- {"version":3,"file":"spec.js","sourceRoot":"","sources":["../../src/domain/spec.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"spec.js","sourceRoot":"","sources":["../../src/domain/spec.ts"],"names":[],"mappings":"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"}
@@ -22,6 +22,9 @@ export interface StepRecord {
22
22
  * @property compartmentId - The compartment its resources live in, when known.
23
23
  * @property adopted - Where it was adopted from, and when: built elsewhere, never built on here.
24
24
  * @property gone - When its teardown removed what it built.
25
+ * @property protected - Whether teardown is refused. A domain is born
26
+ * protected; `domain protect <name> off` lifts it, as its own line, so no
27
+ * single slip or replayed line removes a tenant. Absent reads as protected.
25
28
  */
26
29
  export interface DomainRecord {
27
30
  name: string;
@@ -37,6 +40,7 @@ export interface DomainRecord {
37
40
  at: string;
38
41
  };
39
42
  gone?: string;
43
+ protected?: boolean;
40
44
  }
41
45
  /**
42
46
  * The folder a daemon keeps its domains in.
@@ -44,7 +48,7 @@ export interface DomainRecord {
44
48
  * @param env - The environment.
45
49
  * @returns `$XDG_STATE_HOME/stratus/domains`, or `~/.local/state/stratus/domains`.
46
50
  */
47
- export declare function domainsRoot_of(env?: NodeJS.ProcessEnv): string;
51
+ export declare function domainsRoot_derive(env?: NodeJS.ProcessEnv): string;
48
52
  /** A domain name is a DNS label: lower-case letters, digits and hyphens, at most 54. */
49
53
  export declare const DOMAIN_NAME: RegExp;
50
54
  /** The domains this daemon builds, on its host. */
@@ -60,7 +64,7 @@ export declare class DomainStore {
60
64
  * @param name - The domain.
61
65
  * @returns Its folder.
62
66
  */
63
- folder_of(name: string): string;
67
+ folder_derive(name: string): string;
64
68
  /** The names of the domains kept, sorted. */
65
69
  names_list(): string[];
66
70
  /**
@@ -17,7 +17,7 @@ import { specYaml_parse, specYaml_render } from './spec.js';
17
17
  * @param env - The environment.
18
18
  * @returns `$XDG_STATE_HOME/stratus/domains`, or `~/.local/state/stratus/domains`.
19
19
  */
20
- export function domainsRoot_of(env = process.env) {
20
+ export function domainsRoot_derive(env = process.env) {
21
21
  return path.join(env['XDG_STATE_HOME'] || path.join(os.homedir(), '.local', 'state'), 'stratus', 'domains');
22
22
  }
23
23
  /** A domain name is a DNS label: lower-case letters, digits and hyphens, at most 54. */
@@ -48,7 +48,7 @@ export class DomainStore {
48
48
  * @param name - The domain.
49
49
  * @returns Its folder.
50
50
  */
51
- folder_of(name) {
51
+ folder_derive(name) {
52
52
  return path.join(this.root, name);
53
53
  }
54
54
  /** The names of the domains kept, sorted. */
@@ -65,7 +65,7 @@ export class DomainStore {
65
65
  * @throws Error - When one of that name is already kept.
66
66
  */
67
67
  create(record, spec) {
68
- const folder = this.folder_of(record.name);
68
+ const folder = this.folder_derive(record.name);
69
69
  if (fs.existsSync(path.join(folder, 'state.json')))
70
70
  throw new Error(`${record.name}: a domain of that name is already kept (${folder})`);
71
71
  fs.mkdirSync(path.join(folder, 'auth'), { recursive: true, mode: 0o700 });
@@ -79,7 +79,7 @@ export class DomainStore {
79
79
  * @returns Its record, or null when none is kept.
80
80
  */
81
81
  record_read(name) {
82
- const file = path.join(this.folder_of(name), 'state.json');
82
+ const file = path.join(this.folder_derive(name), 'state.json');
83
83
  if (!fs.existsSync(file))
84
84
  return null;
85
85
  return JSON.parse(fs.readFileSync(file, 'utf-8'));
@@ -90,7 +90,7 @@ export class DomainStore {
90
90
  * @param record - Its record.
91
91
  */
92
92
  record_write(record) {
93
- file_writeAtomic(path.join(this.folder_of(record.name), 'state.json'), `${JSON.stringify(record, null, 2)}\n`);
93
+ file_writeAtomic(path.join(this.folder_derive(record.name), 'state.json'), `${JSON.stringify(record, null, 2)}\n`);
94
94
  }
95
95
  /**
96
96
  * Changes a domain's state and saves it.
@@ -115,7 +115,7 @@ export class DomainStore {
115
115
  * @returns The text and the spec (or why it does not read), or null when there is no file.
116
116
  */
117
117
  spec_read(name) {
118
- const file = path.join(this.folder_of(name), 'spec.yaml');
118
+ const file = path.join(this.folder_derive(name), 'spec.yaml');
119
119
  if (!fs.existsSync(file))
120
120
  return null;
121
121
  const text = fs.readFileSync(file, 'utf-8');
@@ -130,7 +130,7 @@ export class DomainStore {
130
130
  * @param text - Its content.
131
131
  */
132
132
  file_write(name, file, text) {
133
- file_writeAtomic(path.join(this.folder_of(name), file), text);
133
+ file_writeAtomic(path.join(this.folder_derive(name), file), text);
134
134
  }
135
135
  /**
136
136
  * Reads one of the domain's own files.
@@ -140,7 +140,7 @@ export class DomainStore {
140
140
  * @returns Its content, or null when it is not there.
141
141
  */
142
142
  file_read(name, file) {
143
- const where = path.join(this.folder_of(name), file);
143
+ const where = path.join(this.folder_derive(name), file);
144
144
  return fs.existsSync(where) ? fs.readFileSync(where, 'utf-8') : null;
145
145
  }
146
146
  /**
@@ -151,7 +151,7 @@ export class DomainStore {
151
151
  * @param text - Its content.
152
152
  */
153
153
  secret_write(name, file, text) {
154
- const folder = path.join(this.folder_of(name), 'auth');
154
+ const folder = path.join(this.folder_derive(name), 'auth');
155
155
  fs.mkdirSync(folder, { recursive: true, mode: 0o700 });
156
156
  file_writeAtomic(path.join(folder, file), text);
157
157
  }
@@ -163,7 +163,7 @@ export class DomainStore {
163
163
  * @returns Its content, or null.
164
164
  */
165
165
  secret_read(name, file) {
166
- const where = path.join(this.folder_of(name), 'auth', file);
166
+ const where = path.join(this.folder_derive(name), 'auth', file);
167
167
  return fs.existsSync(where) ? fs.readFileSync(where, 'utf-8') : null;
168
168
  }
169
169
  /**
@@ -173,7 +173,7 @@ export class DomainStore {
173
173
  * @returns The files.
174
174
  */
175
175
  secrets_list(name) {
176
- const folder = path.join(this.folder_of(name), 'auth');
176
+ const folder = path.join(this.folder_derive(name), 'auth');
177
177
  if (!fs.existsSync(folder))
178
178
  return [];
179
179
  return fs.readdirSync(folder).sort().map((file) => ({ name: file, hostPath: path.join(folder, file) }));
@@ -1 +1 @@
1
- {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/domain/state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/domain/state.ts"],"names":[],"mappings":"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"}
@@ -1,23 +1,6 @@
1
- /**
2
- * @file A domain's build steps, written once over the three drivers
3
- * (docs/stratus.adoc, D3): their names and order, what each asks of the
4
- * cloud's builder and of the installer, and the run that takes a domain from
5
- * its first step not done to where it was asked to stop.
6
- *
7
- * A run is one of the core runner's jobs (`/proc/steps/<domain>-build`): it
8
- * outlives the command that started it and every surface. It stops on its
9
- * own before the first step that bills until the operator has accepted the
10
- * cost, which only the foreground `domain build` asks; and before a step
11
- * this session does not have yet. Every step records what later ones need in
12
- * the domain's state, so a run picked up after a restart starts from the
13
- * first step not done and repeats nothing the cloud already holds.
14
- *
15
- * The order and the waits are `harbor-oci`'s, proven live once: the hosts
16
- * have 45 minutes to register, the install 120.
17
- *
18
- * @module
19
- */
20
1
  import type { JobRun } from '@fnndsc/brasa/core';
2
+ import { type ChrisWaits, type ChrisWork, type HostRun } from '../cluster/chris.js';
3
+ import type { VerifyReach } from '../commands/verify.js';
21
4
  import { type CloudBuilder } from '../cloud/builder.js';
22
5
  import type { Installer } from '../installer/installer.js';
23
6
  import type { DomainRecord, DomainStore } from './state.js';
@@ -25,6 +8,8 @@ import type { DomainRecord, DomainStore } from './state.js';
25
8
  export declare const BUILD_STEPS: ReadonlyArray<string>;
26
9
  /** The first step that bills: the run stops before it until the cost is accepted. */
27
10
  export declare const FIRST_BILLING_STEP: string;
11
+ /** The machine's steps, through the install: what an adopted checkout already did. */
12
+ export declare const MACHINE_STEPS: ReadonlyArray<string>;
28
13
  /** The steps this session has; the run stops before any other. */
29
14
  export declare const STEPS_WRITTEN: ReadonlyArray<string>;
30
15
  /** The task source the runs are kept in. */
@@ -44,7 +29,20 @@ export interface BuildDeps {
44
29
  readonly hostsWaitMs: number;
45
30
  /** How long the install has, in milliseconds. */
46
31
  readonly installWaitMs: number;
32
+ /** How the steps after `run` reach the installed cluster: verify's reach. */
33
+ readonly reach?: VerifyReach;
34
+ /** ChRIS on the cluster; the real cluster's unless a test or the fake world hands its own. */
35
+ readonly chris?: ChrisWork;
36
+ /** How `helm` and `uv` run on the host. */
37
+ readonly host?: HostRun;
38
+ /** The shape a family's nodes are, which verify checks them against. */
39
+ readonly shape_find?: (region: string, family: string) => Promise<string | null>;
40
+ /** How long a freshly installed cluster has to pass verify, in milliseconds. */
41
+ readonly verifyWaitMs?: number;
42
+ readonly chrisWaits?: ChrisWaits;
47
43
  }
44
+ /** How long a new cluster has to settle until verify passes: its operators go on rolling after the install says done. */
45
+ export declare const VERIFY_WAIT_MS: number;
48
46
  /** The waits `harbor-oci` proved, polled each minute. */
49
47
  export declare const BUILD_WAITS: Pick<BuildDeps, 'pollMs' | 'hostsWaitMs' | 'installWaitMs'>;
50
48
  /**
@@ -60,7 +58,7 @@ export declare function buildJob_id(domain: string): string;
60
58
  * @param record - The domain's state.
61
59
  * @returns The step, or null when every step is done.
62
60
  */
63
- export declare function stepNext_of(record: DomainRecord): string | null;
61
+ export declare function stepNext_find(record: DomainRecord): string | null;
64
62
  /**
65
63
  * The run that builds a domain from its first step not done.
66
64
  *