@calltelemetry/cli 1.3.0 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/commands/k8s.d.ts.map +1 -1
- package/dist/commands/k8s.js +29 -0
- package/dist/commands/k8s.js.map +1 -1
- package/dist/lib/env-to-values.d.ts +34 -0
- package/dist/lib/env-to-values.d.ts.map +1 -0
- package/dist/lib/env-to-values.js +163 -0
- package/dist/lib/env-to-values.js.map +1 -0
- package/dist/lib/k8s/appliance-info.d.ts +78 -0
- package/dist/lib/k8s/appliance-info.d.ts.map +1 -0
- package/dist/lib/k8s/appliance-info.js +226 -0
- package/dist/lib/k8s/appliance-info.js.map +1 -0
- package/dist/lib/k8s/appliance-job-logger.d.ts +63 -0
- package/dist/lib/k8s/appliance-job-logger.d.ts.map +1 -0
- package/dist/lib/k8s/appliance-job-logger.js +228 -0
- package/dist/lib/k8s/appliance-job-logger.js.map +1 -0
- package/dist/lib/k8s/appliance-orchestrator.d.ts +101 -0
- package/dist/lib/k8s/appliance-orchestrator.d.ts.map +1 -0
- package/dist/lib/k8s/appliance-orchestrator.js +496 -0
- package/dist/lib/k8s/appliance-orchestrator.js.map +1 -0
- package/dist/lib/k8s/index.d.ts +8 -0
- package/dist/lib/k8s/index.d.ts.map +1 -0
- package/dist/lib/k8s/index.js +8 -0
- package/dist/lib/k8s/index.js.map +1 -0
- package/dist/lib/prefs.d.ts +25 -0
- package/dist/lib/prefs.d.ts.map +1 -1
- package/dist/lib/prefs.js +0 -0
- package/dist/lib/prefs.js.map +1 -1
- package/dist/lib/version.d.ts +1 -1
- package/dist/lib/version.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"k8s.d.ts","sourceRoot":"","sources":["../../src/commands/k8s.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"k8s.d.ts","sourceRoot":"","sources":["../../src/commands/k8s.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2DpC,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,QAiLlD"}
|
package/dist/commands/k8s.js
CHANGED
|
@@ -2,6 +2,10 @@ import chalk from 'chalk';
|
|
|
2
2
|
import { getBackend } from '../lib/deployment.js';
|
|
3
3
|
import { getPrefs } from '../lib/prefs.js';
|
|
4
4
|
import { resolveHelmfilePath, helmfileSync, helmfileDiff, helmfileDestroy, } from '../lib/helmfile.js';
|
|
5
|
+
import { renderGeneratedValues } from '../lib/env-to-values.js';
|
|
6
|
+
import { debug } from '../lib/log.js';
|
|
7
|
+
import { existsSync } from 'node:fs';
|
|
8
|
+
import { dirname, join } from 'node:path';
|
|
5
9
|
async function requireK8sBackend() {
|
|
6
10
|
const backend = await getBackend();
|
|
7
11
|
if (backend.mode !== 'k3s') {
|
|
@@ -18,6 +22,29 @@ function helmOpts() {
|
|
|
18
22
|
environment: prefs.k8sEnvironment,
|
|
19
23
|
};
|
|
20
24
|
}
|
|
25
|
+
/**
|
|
26
|
+
* Render the .env -> generated values overlays before every sync/diff.
|
|
27
|
+
* A malformed pin stops the command before helmfile touches the cluster.
|
|
28
|
+
*/
|
|
29
|
+
async function prepareGeneratedValues() {
|
|
30
|
+
const helmfilePath = resolveHelmfilePath();
|
|
31
|
+
if (!existsSync(helmfilePath)) {
|
|
32
|
+
debug(`No helmfile at ${helmfilePath}; skipping generated values`);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
try {
|
|
36
|
+
const result = await renderGeneratedValues({
|
|
37
|
+
generatedDir: join(dirname(helmfilePath), 'generated'),
|
|
38
|
+
});
|
|
39
|
+
debug(`Rendered k8s values overlays in ${result.generatedDir}: ` +
|
|
40
|
+
`${result.written.join(', ') || 'none'}` +
|
|
41
|
+
(result.cleared.length > 0 ? ` (cleared: ${result.cleared.join(', ')})` : ''));
|
|
42
|
+
}
|
|
43
|
+
catch (err) {
|
|
44
|
+
console.error(chalk.red(`Error: ${err.message}`));
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
21
48
|
export function registerK8sCommand(program) {
|
|
22
49
|
const k8s = program
|
|
23
50
|
.command('k8s')
|
|
@@ -116,6 +143,7 @@ export function registerK8sCommand(program) {
|
|
|
116
143
|
.description('Run helmfile sync (deploy/upgrade)')
|
|
117
144
|
.action(async () => {
|
|
118
145
|
await requireK8sBackend();
|
|
146
|
+
await prepareGeneratedValues();
|
|
119
147
|
await helmfileSync(helmOpts());
|
|
120
148
|
});
|
|
121
149
|
k8s
|
|
@@ -123,6 +151,7 @@ export function registerK8sCommand(program) {
|
|
|
123
151
|
.description('Show pending helmfile changes')
|
|
124
152
|
.action(async () => {
|
|
125
153
|
await requireK8sBackend();
|
|
154
|
+
await prepareGeneratedValues();
|
|
126
155
|
const diff = await helmfileDiff(helmOpts());
|
|
127
156
|
if (diff)
|
|
128
157
|
console.log(diff);
|
package/dist/commands/k8s.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"k8s.js","sourceRoot":"","sources":["../../src/commands/k8s.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"k8s.js","sourceRoot":"","sources":["../../src/commands/k8s.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
export declare const GENERATED_RELEASES: readonly ["api", "ct-web", "traceroute"];
|
|
2
|
+
export type GeneratedRelease = (typeof GENERATED_RELEASES)[number];
|
|
3
|
+
export type GeneratedValue = string | GeneratedValuesMap;
|
|
4
|
+
export interface GeneratedValuesMap {
|
|
5
|
+
[key: string]: GeneratedValue;
|
|
6
|
+
}
|
|
7
|
+
export type MappedReleaseValues = Partial<Record<GeneratedRelease, GeneratedValuesMap>>;
|
|
8
|
+
export interface RenderGeneratedValuesOptions {
|
|
9
|
+
installDir?: string;
|
|
10
|
+
generatedDir?: string;
|
|
11
|
+
env?: Record<string, string>;
|
|
12
|
+
}
|
|
13
|
+
export interface RenderGeneratedValuesResult {
|
|
14
|
+
generatedDir: string;
|
|
15
|
+
/** Releases that received at least one mapped key. */
|
|
16
|
+
written: GeneratedRelease[];
|
|
17
|
+
/** Releases that were cleared because the `.env` supplied no keys. */
|
|
18
|
+
cleared: GeneratedRelease[];
|
|
19
|
+
files: Record<GeneratedRelease, string>;
|
|
20
|
+
}
|
|
21
|
+
export declare class EnvToValuesError extends Error {
|
|
22
|
+
readonly errors: string[];
|
|
23
|
+
constructor(errors: string[]);
|
|
24
|
+
}
|
|
25
|
+
/** Map the `.env` keys that the wired releases consume. */
|
|
26
|
+
export declare function mapEnvToValues(env: Record<string, string>): MappedReleaseValues;
|
|
27
|
+
/** Render one release overlay as YAML. Empty input renders an empty file. */
|
|
28
|
+
export declare function renderGeneratedValuesYaml(values: GeneratedValuesMap | undefined): string;
|
|
29
|
+
/**
|
|
30
|
+
* Write all three overlays under `<installDir>/k8s/generated`. Files are
|
|
31
|
+
* validated first, so a bad pin cannot leave a half-rendered directory.
|
|
32
|
+
*/
|
|
33
|
+
export declare function renderGeneratedValues(options?: RenderGeneratedValuesOptions): Promise<RenderGeneratedValuesResult>;
|
|
34
|
+
//# sourceMappingURL=env-to-values.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-to-values.d.ts","sourceRoot":"","sources":["../../src/lib/env-to-values.ts"],"names":[],"mappings":"AAuBA,eAAO,MAAM,kBAAkB,0CAA2C,CAAC;AAC3E,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,kBAAkB,CAAC,CAAC,MAAM,CAAC,CAAC;AAEnE,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,kBAAkB,CAAC;AACzD,MAAM,WAAW,kBAAkB;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,CAAC;CAC/B;AAED,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC,MAAM,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,CAAC,CAAC;AAExF,MAAM,WAAW,4BAA4B;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC9B;AAED,MAAM,WAAW,2BAA2B;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,sDAAsD;IACtD,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,sEAAsE;IACtE,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAAC,CAAC;CACzC;AAED,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;gBAEd,MAAM,EAAE,MAAM,EAAE;CAK7B;AAKD,2DAA2D;AAC3D,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,mBAAmB,CAkE/E;AAiBD,6EAA6E;AAC7E,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,kBAAkB,GAAG,SAAS,GAAG,MAAM,CAGxF;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,GAAE,4BAAiC,GACzC,OAAO,CAAC,2BAA2B,CAAC,CAqCtC"}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Render the appliance `.env` into per-release Helm values overlays.
|
|
3
|
+
*
|
|
4
|
+
* The appliance `.env` is the single source of truth for image pins and
|
|
5
|
+
* database credentials. Helmfile loads `<installDir>/k8s/generated/<release>.yaml`
|
|
6
|
+
* after the shipped example values, so these files are the bridge that keeps
|
|
7
|
+
* a k3s deployment on the same pins as the compose stack.
|
|
8
|
+
*
|
|
9
|
+
* Only releases wired in the shipped helmfile emit values today:
|
|
10
|
+
* `api`, `ct-web`, and `traceroute`. Other `.env` keys (JTAPI, ct-media,
|
|
11
|
+
* syslog, SeaweedFS) are intentionally ignored until those releases land.
|
|
12
|
+
*
|
|
13
|
+
* Files are always written, including empty files for a release with no
|
|
14
|
+
* mapped keys. That clears stale values left by a previous sync and keeps
|
|
15
|
+
* the checked-in empty placeholders valid for hand-run installs.
|
|
16
|
+
*/
|
|
17
|
+
import { chmodSync } from 'node:fs';
|
|
18
|
+
import { join } from 'node:path';
|
|
19
|
+
import { execa } from 'execa';
|
|
20
|
+
import { mkdirSafe, writeFileSafe } from './fs.js';
|
|
21
|
+
import { getPaths } from './paths.js';
|
|
22
|
+
import { readEnvKeys } from './env.js';
|
|
23
|
+
export const GENERATED_RELEASES = ['api', 'ct-web', 'traceroute'];
|
|
24
|
+
export class EnvToValuesError extends Error {
|
|
25
|
+
errors;
|
|
26
|
+
constructor(errors) {
|
|
27
|
+
super(`Cannot render k8s values from .env: ${errors.join('; ')}`);
|
|
28
|
+
this.name = 'EnvToValuesError';
|
|
29
|
+
this.errors = errors;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
const MAX_VALUE_LENGTH = 512;
|
|
33
|
+
const VERSION_PIN = /^\S+$/;
|
|
34
|
+
/** Map the `.env` keys that the wired releases consume. */
|
|
35
|
+
export function mapEnvToValues(env) {
|
|
36
|
+
const mapped = {};
|
|
37
|
+
const errors = [];
|
|
38
|
+
const read = (key, kind) => {
|
|
39
|
+
const raw = env[key];
|
|
40
|
+
if (raw === undefined)
|
|
41
|
+
return undefined;
|
|
42
|
+
const value = raw.trim();
|
|
43
|
+
if (value.length === 0)
|
|
44
|
+
return undefined;
|
|
45
|
+
if (value.length > MAX_VALUE_LENGTH) {
|
|
46
|
+
errors.push(`${key} exceeds ${MAX_VALUE_LENGTH} characters`);
|
|
47
|
+
return undefined;
|
|
48
|
+
}
|
|
49
|
+
// eslint-disable-next-line no-control-regex
|
|
50
|
+
if (/[\u0000-\u001f\u007f]/.test(value)) {
|
|
51
|
+
errors.push(`${key} contains a control character`);
|
|
52
|
+
return undefined;
|
|
53
|
+
}
|
|
54
|
+
if (kind === 'pin' && !VERSION_PIN.test(value)) {
|
|
55
|
+
errors.push(`${key} must be a single-token version pin`);
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
return value;
|
|
59
|
+
};
|
|
60
|
+
const webVersion = read('WEB_VERSION', 'pin');
|
|
61
|
+
const vueVersion = read('VUE_VERSION', 'pin');
|
|
62
|
+
const tracerouteVersion = read('TRACEROUTE_VERSION', 'pin');
|
|
63
|
+
const pgUser = read('POSTGRES_USER', 'value');
|
|
64
|
+
const pgPassword = read('POSTGRES_PASSWORD', 'value');
|
|
65
|
+
const pgDatabase = read('POSTGRES_DB', 'value');
|
|
66
|
+
const pgHost = read('POSTGRES_HOST', 'value');
|
|
67
|
+
const pgPort = read('POSTGRES_PORT', 'value');
|
|
68
|
+
if (webVersion) {
|
|
69
|
+
mapped.api = {
|
|
70
|
+
api: { tag: webVersion },
|
|
71
|
+
admin: { tag: webVersion },
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
const dbValues = {};
|
|
75
|
+
if (pgUser)
|
|
76
|
+
dbValues.db_username = pgUser;
|
|
77
|
+
if (pgPassword)
|
|
78
|
+
dbValues.db_password = pgPassword;
|
|
79
|
+
if (pgDatabase)
|
|
80
|
+
dbValues.db_name = pgDatabase;
|
|
81
|
+
if (pgHost)
|
|
82
|
+
dbValues.db_hostname = pgHost;
|
|
83
|
+
if (pgPort)
|
|
84
|
+
dbValues.db_port = pgPort;
|
|
85
|
+
if (Object.keys(dbValues).length > 0) {
|
|
86
|
+
mapped.api = {
|
|
87
|
+
...(mapped.api ?? {}),
|
|
88
|
+
db: { values: dbValues },
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
if (vueVersion) {
|
|
92
|
+
mapped['ct-web'] = { vue_web: { image: { tag: vueVersion } } };
|
|
93
|
+
}
|
|
94
|
+
if (tracerouteVersion) {
|
|
95
|
+
mapped.traceroute = { image: { tag: tracerouteVersion } };
|
|
96
|
+
}
|
|
97
|
+
if (errors.length > 0)
|
|
98
|
+
throw new EnvToValuesError(errors);
|
|
99
|
+
return mapped;
|
|
100
|
+
}
|
|
101
|
+
function renderMap(values, indent = 0) {
|
|
102
|
+
const pad = ' '.repeat(indent);
|
|
103
|
+
let output = '';
|
|
104
|
+
for (const [key, value] of Object.entries(values)) {
|
|
105
|
+
if (typeof value === 'object') {
|
|
106
|
+
output += `${pad}${key}:\n${renderMap(value, indent + 2)}`;
|
|
107
|
+
}
|
|
108
|
+
else {
|
|
109
|
+
// JSON.stringify gives a YAML-compatible double-quoted scalar and
|
|
110
|
+
// escapes quotes, backslashes, and control characters.
|
|
111
|
+
output += `${pad}${key}: ${JSON.stringify(value)}\n`;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return output;
|
|
115
|
+
}
|
|
116
|
+
/** Render one release overlay as YAML. Empty input renders an empty file. */
|
|
117
|
+
export function renderGeneratedValuesYaml(values) {
|
|
118
|
+
if (!values || Object.keys(values).length === 0)
|
|
119
|
+
return '';
|
|
120
|
+
return renderMap(values);
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Write all three overlays under `<installDir>/k8s/generated`. Files are
|
|
124
|
+
* validated first, so a bad pin cannot leave a half-rendered directory.
|
|
125
|
+
*/
|
|
126
|
+
export async function renderGeneratedValues(options = {}) {
|
|
127
|
+
const installDir = options.installDir ?? getPaths().installDir;
|
|
128
|
+
const generatedDir = options.generatedDir ?? join(installDir, 'k8s', 'generated');
|
|
129
|
+
const env = options.env ?? readEnvKeys();
|
|
130
|
+
// Validate and map everything before touching the filesystem.
|
|
131
|
+
const mapped = mapEnvToValues(env);
|
|
132
|
+
const rendered = new Map();
|
|
133
|
+
for (const release of GENERATED_RELEASES) {
|
|
134
|
+
rendered.set(release, renderGeneratedValuesYaml(mapped[release]));
|
|
135
|
+
}
|
|
136
|
+
await mkdirSafe(generatedDir);
|
|
137
|
+
const result = {
|
|
138
|
+
generatedDir,
|
|
139
|
+
written: [],
|
|
140
|
+
cleared: [],
|
|
141
|
+
files: { api: '', 'ct-web': '', traceroute: '' },
|
|
142
|
+
};
|
|
143
|
+
for (const release of GENERATED_RELEASES) {
|
|
144
|
+
const content = rendered.get(release) ?? '';
|
|
145
|
+
const path = join(generatedDir, `${release}.yaml`);
|
|
146
|
+
await writeFileSafe(path, content, { mode: 0o600 });
|
|
147
|
+
try {
|
|
148
|
+
chmodSync(path, 0o600);
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
if (err?.code !== 'EACCES' && err?.code !== 'EPERM')
|
|
152
|
+
throw err;
|
|
153
|
+
await execa('sudo', ['-n', 'chmod', '600', path]);
|
|
154
|
+
}
|
|
155
|
+
result.files[release] = path;
|
|
156
|
+
if (content.length > 0)
|
|
157
|
+
result.written.push(release);
|
|
158
|
+
else
|
|
159
|
+
result.cleared.push(release);
|
|
160
|
+
}
|
|
161
|
+
return result;
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=env-to-values.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-to-values.js","sourceRoot":"","sources":["../../src/lib/env-to-values.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { type Preferences } from '../prefs.js';
|
|
2
|
+
import type { DeploymentMode } from '../deployment.js';
|
|
3
|
+
import type { HelmfileEnvironment } from '../helmfile.js';
|
|
4
|
+
export declare const APPLIANCE_INFO_SCHEMA_VERSION = 1;
|
|
5
|
+
export declare const DEFAULT_APPLIANCE_HOSTNAME = "calltelemetry";
|
|
6
|
+
export declare const APPLIANCE_DEPLOYMENT_MODES: readonly DeploymentMode[];
|
|
7
|
+
export declare const APPLIANCE_HELMFILE_ENVIRONMENTS: readonly HelmfileEnvironment[];
|
|
8
|
+
/** Non-secret image pins carried in the appliance `.env`. */
|
|
9
|
+
export interface ApplianceVersions {
|
|
10
|
+
cli?: string;
|
|
11
|
+
web?: string;
|
|
12
|
+
vue?: string;
|
|
13
|
+
jtapi?: string;
|
|
14
|
+
ctMedia?: string;
|
|
15
|
+
syslog?: string;
|
|
16
|
+
traceroute?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface ApplianceInfo {
|
|
19
|
+
schemaVersion: typeof APPLIANCE_INFO_SCHEMA_VERSION;
|
|
20
|
+
/** Stable installation identifier derived from the install dir + machine id. */
|
|
21
|
+
installationId: string;
|
|
22
|
+
installDir: string;
|
|
23
|
+
hostname: string;
|
|
24
|
+
deploymentMode: DeploymentMode;
|
|
25
|
+
k8sNamespace: string;
|
|
26
|
+
k8sEnvironment: HelmfileEnvironment;
|
|
27
|
+
versions: ApplianceVersions;
|
|
28
|
+
createdAt: string;
|
|
29
|
+
updatedAt: string;
|
|
30
|
+
}
|
|
31
|
+
export interface ApplianceInfoValidation {
|
|
32
|
+
valid: boolean;
|
|
33
|
+
errors: string[];
|
|
34
|
+
}
|
|
35
|
+
export declare class ApplianceInfoValidationError extends Error {
|
|
36
|
+
readonly errors: string[];
|
|
37
|
+
constructor(errors: string[]);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Derive a stable, non-license installation identifier. This is not the
|
|
41
|
+
* licensing `CT-APP-*` identifier; it exists only so job receipts from the
|
|
42
|
+
* same install can be correlated.
|
|
43
|
+
*/
|
|
44
|
+
export declare function deriveInstallationId(installDir: string, machineId?: string): string;
|
|
45
|
+
/** Map `.env` pin keys onto the non-secret appliance version record. */
|
|
46
|
+
export declare function versionsFromEnv(env: Record<string, string>): ApplianceVersions;
|
|
47
|
+
export declare function validateApplianceInfo(info: unknown): ApplianceInfoValidation;
|
|
48
|
+
export declare function assertValidApplianceInfo(info: unknown): asserts info is ApplianceInfo;
|
|
49
|
+
/** Resolve the persisted inventory path under the appliance k8s payload. */
|
|
50
|
+
export declare function resolveApplianceInfoPath(installDir: string): string;
|
|
51
|
+
/**
|
|
52
|
+
* Persist a validated inventory snapshot. The file is mode 0600 because it
|
|
53
|
+
* carries host placement details, even though it carries no credentials.
|
|
54
|
+
*/
|
|
55
|
+
export declare function saveApplianceInfo(info: ApplianceInfo, path?: string): Promise<void>;
|
|
56
|
+
/** Load and validate an inventory snapshot. Missing files return null. */
|
|
57
|
+
export declare function loadApplianceInfo(path: string): ApplianceInfo | null;
|
|
58
|
+
export interface CollectApplianceInfoOptions {
|
|
59
|
+
installDir?: string;
|
|
60
|
+
hostname?: string;
|
|
61
|
+
machineId?: string;
|
|
62
|
+
env?: Record<string, string>;
|
|
63
|
+
prefs?: Preferences;
|
|
64
|
+
cliVersion?: string;
|
|
65
|
+
now?: Date;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Build a fresh snapshot from the appliance `.env`, paths, and preferences.
|
|
69
|
+
* The caller is responsible for persisting it with `saveApplianceInfo`.
|
|
70
|
+
*/
|
|
71
|
+
export declare function collectApplianceInfo(options?: CollectApplianceInfoOptions): ApplianceInfo;
|
|
72
|
+
/**
|
|
73
|
+
* Refresh an existing snapshot in place. Identity (`installationId`,
|
|
74
|
+
* `installDir`, `createdAt`) is preserved; placement, versions, and
|
|
75
|
+
* `updatedAt` are replaced.
|
|
76
|
+
*/
|
|
77
|
+
export declare function refreshApplianceInfo(previous: ApplianceInfo, updates: Pick<ApplianceInfo, 'deploymentMode' | 'k8sNamespace' | 'k8sEnvironment' | 'versions' | 'hostname'>, now?: Date): ApplianceInfo;
|
|
78
|
+
//# sourceMappingURL=appliance-info.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appliance-info.d.ts","sourceRoot":"","sources":["../../../src/lib/k8s/appliance-info.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,226 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Appliance inventory for the Kubernetes deployment path.
|
|
3
|
+
*
|
|
4
|
+
* This is the durable, validated record of *what this appliance is* — the
|
|
5
|
+
* installation identity, deployment mode, namespace/environment, and the
|
|
6
|
+
* image pins read from the appliance `.env`. It is deliberately separate
|
|
7
|
+
* from `~/.ct/preferences.json`: preferences are operator overrides, while
|
|
8
|
+
* this file is a generated snapshot that can be attached to a job receipt.
|
|
9
|
+
*
|
|
10
|
+
* The snapshot never contains credentials. Only non-secret image pins and
|
|
11
|
+
* placement settings are persisted; `.env` remains the source of truth for
|
|
12
|
+
* everything else.
|
|
13
|
+
*/
|
|
14
|
+
import { createHash } from 'node:crypto';
|
|
15
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
16
|
+
import { dirname, join } from 'node:path';
|
|
17
|
+
import { mkdirSafe, writeFileSafe } from '../fs.js';
|
|
18
|
+
import { getPaths } from '../paths.js';
|
|
19
|
+
import { getPrefs } from '../prefs.js';
|
|
20
|
+
import { isValidHostname } from '../identity.js';
|
|
21
|
+
import { readEnvKeys } from '../env.js';
|
|
22
|
+
export const APPLIANCE_INFO_SCHEMA_VERSION = 1;
|
|
23
|
+
export const DEFAULT_APPLIANCE_HOSTNAME = 'calltelemetry';
|
|
24
|
+
export const APPLIANCE_DEPLOYMENT_MODES = [
|
|
25
|
+
'docker-compose',
|
|
26
|
+
'k3s',
|
|
27
|
+
];
|
|
28
|
+
export const APPLIANCE_HELMFILE_ENVIRONMENTS = [
|
|
29
|
+
'ct-dev',
|
|
30
|
+
'ct-prod',
|
|
31
|
+
'ct-test',
|
|
32
|
+
'ct-appliance',
|
|
33
|
+
];
|
|
34
|
+
export class ApplianceInfoValidationError extends Error {
|
|
35
|
+
errors;
|
|
36
|
+
constructor(errors) {
|
|
37
|
+
super(`Invalid appliance info: ${errors.join('; ')}`);
|
|
38
|
+
this.name = 'ApplianceInfoValidationError';
|
|
39
|
+
this.errors = errors;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
const DNS_LABEL = /^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$/;
|
|
43
|
+
const INSTALLATION_ID = /^[a-f0-9]{16,64}$/;
|
|
44
|
+
const VERSION_VALUE = /^\S+$/;
|
|
45
|
+
const MAX_VERSION_LENGTH = 128;
|
|
46
|
+
function isIsoTimestamp(value) {
|
|
47
|
+
if (typeof value !== 'string' || value.length === 0)
|
|
48
|
+
return false;
|
|
49
|
+
const parsed = Date.parse(value);
|
|
50
|
+
return Number.isFinite(parsed);
|
|
51
|
+
}
|
|
52
|
+
function isScalarVersion(value) {
|
|
53
|
+
return (typeof value === 'string' &&
|
|
54
|
+
value.length > 0 &&
|
|
55
|
+
value.length <= MAX_VERSION_LENGTH &&
|
|
56
|
+
VERSION_VALUE.test(value) &&
|
|
57
|
+
// eslint-disable-next-line no-control-regex
|
|
58
|
+
!/[\u0000-\u001f\u007f]/.test(value));
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Derive a stable, non-license installation identifier. This is not the
|
|
62
|
+
* licensing `CT-APP-*` identifier; it exists only so job receipts from the
|
|
63
|
+
* same install can be correlated.
|
|
64
|
+
*/
|
|
65
|
+
export function deriveInstallationId(installDir, machineId = '') {
|
|
66
|
+
return createHash('sha256')
|
|
67
|
+
.update(`${installDir}\u0000${machineId}`)
|
|
68
|
+
.digest('hex')
|
|
69
|
+
.slice(0, 16);
|
|
70
|
+
}
|
|
71
|
+
/** Map `.env` pin keys onto the non-secret appliance version record. */
|
|
72
|
+
export function versionsFromEnv(env) {
|
|
73
|
+
const versions = {};
|
|
74
|
+
const mapping = [
|
|
75
|
+
['cli', 'CT_CLI_VERSION'],
|
|
76
|
+
['web', 'WEB_VERSION'],
|
|
77
|
+
['vue', 'VUE_VERSION'],
|
|
78
|
+
['jtapi', 'JTAPI_VERSION'],
|
|
79
|
+
['ctMedia', 'CT_MEDIA_VERSION'],
|
|
80
|
+
['syslog', 'CT_SYSLOG_INGEST_VERSION'],
|
|
81
|
+
['traceroute', 'TRACEROUTE_VERSION'],
|
|
82
|
+
];
|
|
83
|
+
for (const [field, key] of mapping) {
|
|
84
|
+
const value = env[key]?.trim();
|
|
85
|
+
if (value)
|
|
86
|
+
versions[field] = value;
|
|
87
|
+
}
|
|
88
|
+
return versions;
|
|
89
|
+
}
|
|
90
|
+
export function validateApplianceInfo(info) {
|
|
91
|
+
const errors = [];
|
|
92
|
+
if (typeof info !== 'object' || info === null || Array.isArray(info)) {
|
|
93
|
+
return { valid: false, errors: ['appliance info must be an object'] };
|
|
94
|
+
}
|
|
95
|
+
const value = info;
|
|
96
|
+
if (value.schemaVersion !== APPLIANCE_INFO_SCHEMA_VERSION) {
|
|
97
|
+
errors.push(`schemaVersion must be ${APPLIANCE_INFO_SCHEMA_VERSION}`);
|
|
98
|
+
}
|
|
99
|
+
if (typeof value.installationId !== 'string' || !INSTALLATION_ID.test(value.installationId)) {
|
|
100
|
+
errors.push('installationId must be a 16-64 character lowercase hex string');
|
|
101
|
+
}
|
|
102
|
+
if (typeof value.installDir !== 'string' || value.installDir.trim().length === 0) {
|
|
103
|
+
errors.push('installDir must be a non-empty string');
|
|
104
|
+
}
|
|
105
|
+
if (typeof value.hostname !== 'string' ||
|
|
106
|
+
!isValidHostname(value.hostname)) {
|
|
107
|
+
errors.push('hostname must be a valid RFC 1123 hostname');
|
|
108
|
+
}
|
|
109
|
+
if (typeof value.deploymentMode !== 'string' ||
|
|
110
|
+
!APPLIANCE_DEPLOYMENT_MODES.includes(value.deploymentMode)) {
|
|
111
|
+
errors.push(`deploymentMode must be one of ${APPLIANCE_DEPLOYMENT_MODES.join(', ')}`);
|
|
112
|
+
}
|
|
113
|
+
if (typeof value.k8sNamespace !== 'string' ||
|
|
114
|
+
!DNS_LABEL.test(value.k8sNamespace)) {
|
|
115
|
+
errors.push('k8sNamespace must be a valid DNS-1123 label');
|
|
116
|
+
}
|
|
117
|
+
if (typeof value.k8sEnvironment !== 'string' ||
|
|
118
|
+
!APPLIANCE_HELMFILE_ENVIRONMENTS.includes(value.k8sEnvironment)) {
|
|
119
|
+
errors.push(`k8sEnvironment must be one of ${APPLIANCE_HELMFILE_ENVIRONMENTS.join(', ')}`);
|
|
120
|
+
}
|
|
121
|
+
if (typeof value.versions !== 'object' || value.versions === null || Array.isArray(value.versions)) {
|
|
122
|
+
errors.push('versions must be an object');
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
for (const [field, pin] of Object.entries(value.versions)) {
|
|
126
|
+
if (!['cli', 'web', 'vue', 'jtapi', 'ctMedia', 'syslog', 'traceroute'].includes(field)) {
|
|
127
|
+
errors.push(`versions.${field} is not a recognized component`);
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
if (pin !== undefined && !isScalarVersion(pin)) {
|
|
131
|
+
errors.push(`versions.${field} must be a non-empty single-token version string`);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
if (!isIsoTimestamp(value.createdAt)) {
|
|
136
|
+
errors.push('createdAt must be an ISO timestamp');
|
|
137
|
+
}
|
|
138
|
+
if (!isIsoTimestamp(value.updatedAt)) {
|
|
139
|
+
errors.push('updatedAt must be an ISO timestamp');
|
|
140
|
+
}
|
|
141
|
+
else if (isIsoTimestamp(value.createdAt) && Date.parse(value.updatedAt) < Date.parse(value.createdAt)) {
|
|
142
|
+
errors.push('updatedAt must not be earlier than createdAt');
|
|
143
|
+
}
|
|
144
|
+
return { valid: errors.length === 0, errors };
|
|
145
|
+
}
|
|
146
|
+
export function assertValidApplianceInfo(info) {
|
|
147
|
+
const result = validateApplianceInfo(info);
|
|
148
|
+
if (!result.valid)
|
|
149
|
+
throw new ApplianceInfoValidationError(result.errors);
|
|
150
|
+
}
|
|
151
|
+
/** Resolve the persisted inventory path under the appliance k8s payload. */
|
|
152
|
+
export function resolveApplianceInfoPath(installDir) {
|
|
153
|
+
return join(installDir, 'k8s', 'appliance-info.json');
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Persist a validated inventory snapshot. The file is mode 0600 because it
|
|
157
|
+
* carries host placement details, even though it carries no credentials.
|
|
158
|
+
*/
|
|
159
|
+
export async function saveApplianceInfo(info, path = resolveApplianceInfoPath(info.installDir)) {
|
|
160
|
+
assertValidApplianceInfo(info);
|
|
161
|
+
await mkdirSafe(dirname(path));
|
|
162
|
+
await writeFileSafe(path, JSON.stringify(info, null, 2) + '\n', { mode: 0o600 });
|
|
163
|
+
}
|
|
164
|
+
/** Load and validate an inventory snapshot. Missing files return null. */
|
|
165
|
+
export function loadApplianceInfo(path) {
|
|
166
|
+
if (!existsSync(path))
|
|
167
|
+
return null;
|
|
168
|
+
let parsed;
|
|
169
|
+
try {
|
|
170
|
+
parsed = JSON.parse(readFileSync(path, 'utf-8'));
|
|
171
|
+
}
|
|
172
|
+
catch (err) {
|
|
173
|
+
throw new ApplianceInfoValidationError([`could not parse ${path}: ${err.message}`]);
|
|
174
|
+
}
|
|
175
|
+
assertValidApplianceInfo(parsed);
|
|
176
|
+
return parsed;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Build a fresh snapshot from the appliance `.env`, paths, and preferences.
|
|
180
|
+
* The caller is responsible for persisting it with `saveApplianceInfo`.
|
|
181
|
+
*/
|
|
182
|
+
export function collectApplianceInfo(options = {}) {
|
|
183
|
+
const installDir = options.installDir ?? getPaths().installDir;
|
|
184
|
+
const env = options.env ?? readEnvKeys();
|
|
185
|
+
const prefs = options.prefs ?? getPrefs();
|
|
186
|
+
const now = options.now ?? new Date();
|
|
187
|
+
const timestamp = now.toISOString();
|
|
188
|
+
if (!prefs.deploymentMode || !APPLIANCE_DEPLOYMENT_MODES.includes(prefs.deploymentMode)) {
|
|
189
|
+
throw new ApplianceInfoValidationError(['preferences.deploymentMode is invalid']);
|
|
190
|
+
}
|
|
191
|
+
if (!prefs.k8sEnvironment || !APPLIANCE_HELMFILE_ENVIRONMENTS.includes(prefs.k8sEnvironment)) {
|
|
192
|
+
throw new ApplianceInfoValidationError(['preferences.k8sEnvironment is invalid']);
|
|
193
|
+
}
|
|
194
|
+
const versions = versionsFromEnv(env);
|
|
195
|
+
if (options.cliVersion)
|
|
196
|
+
versions.cli = options.cliVersion;
|
|
197
|
+
const info = {
|
|
198
|
+
schemaVersion: APPLIANCE_INFO_SCHEMA_VERSION,
|
|
199
|
+
installationId: deriveInstallationId(installDir, options.machineId),
|
|
200
|
+
installDir,
|
|
201
|
+
hostname: options.hostname ?? DEFAULT_APPLIANCE_HOSTNAME,
|
|
202
|
+
deploymentMode: prefs.deploymentMode,
|
|
203
|
+
k8sNamespace: prefs.k8sNamespace,
|
|
204
|
+
k8sEnvironment: prefs.k8sEnvironment,
|
|
205
|
+
versions,
|
|
206
|
+
createdAt: timestamp,
|
|
207
|
+
updatedAt: timestamp,
|
|
208
|
+
};
|
|
209
|
+
assertValidApplianceInfo(info);
|
|
210
|
+
return info;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Refresh an existing snapshot in place. Identity (`installationId`,
|
|
214
|
+
* `installDir`, `createdAt`) is preserved; placement, versions, and
|
|
215
|
+
* `updatedAt` are replaced.
|
|
216
|
+
*/
|
|
217
|
+
export function refreshApplianceInfo(previous, updates, now = new Date()) {
|
|
218
|
+
const next = {
|
|
219
|
+
...previous,
|
|
220
|
+
...updates,
|
|
221
|
+
updatedAt: now.toISOString(),
|
|
222
|
+
};
|
|
223
|
+
assertValidApplianceInfo(next);
|
|
224
|
+
return next;
|
|
225
|
+
}
|
|
226
|
+
//# sourceMappingURL=appliance-info.js.map
|