@calltelemetry/cli 0.12.11 → 0.12.13
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/config.d.ts +25 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +42 -3
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/db.d.ts +24 -0
- package/dist/commands/db.d.ts.map +1 -1
- package/dist/commands/db.js +43 -4
- package/dist/commands/db.js.map +1 -1
- package/dist/commands/go-parity.d.ts +32 -0
- package/dist/commands/go-parity.d.ts.map +1 -0
- package/dist/commands/go-parity.js +359 -0
- package/dist/commands/go-parity.js.map +1 -0
- package/dist/commands/jtapi.d.ts.map +1 -1
- package/dist/commands/jtapi.js +2 -0
- package/dist/commands/jtapi.js.map +1 -1
- package/dist/commands/migrate.d.ts.map +1 -1
- package/dist/commands/migrate.js +2 -0
- package/dist/commands/migrate.js.map +1 -1
- package/dist/commands/network.d.ts.map +1 -1
- package/dist/commands/network.js +63 -50
- package/dist/commands/network.js.map +1 -1
- package/dist/commands/offline.d.ts.map +1 -1
- package/dist/commands/offline.js +2 -0
- package/dist/commands/offline.js.map +1 -1
- package/dist/commands/seed.d.ts.map +1 -1
- package/dist/commands/seed.js +2 -0
- package/dist/commands/seed.js.map +1 -1
- package/dist/commands/ship-certs.d.ts +7 -0
- package/dist/commands/ship-certs.d.ts.map +1 -0
- package/dist/commands/ship-certs.js +105 -0
- package/dist/commands/ship-certs.js.map +1 -0
- package/dist/commands/ship-db.d.ts +8 -0
- package/dist/commands/ship-db.d.ts.map +1 -0
- package/dist/commands/ship-db.js +358 -0
- package/dist/commands/ship-db.js.map +1 -0
- package/dist/commands/ship-diag.d.ts +10 -0
- package/dist/commands/ship-diag.d.ts.map +1 -0
- package/dist/commands/ship-diag.js +73 -0
- package/dist/commands/ship-diag.js.map +1 -0
- package/dist/commands/ship-docker.d.ts +6 -0
- package/dist/commands/ship-docker.d.ts.map +1 -0
- package/dist/commands/ship-docker.js +153 -0
- package/dist/commands/ship-docker.js.map +1 -0
- package/dist/commands/ship-ipv6.d.ts +6 -0
- package/dist/commands/ship-ipv6.d.ts.map +1 -0
- package/dist/commands/ship-ipv6.js +59 -0
- package/dist/commands/ship-ipv6.js.map +1 -0
- package/dist/commands/ship-logging.d.ts +7 -0
- package/dist/commands/ship-logging.d.ts.map +1 -0
- package/dist/commands/ship-logging.js +71 -0
- package/dist/commands/ship-logging.js.map +1 -0
- package/dist/commands/ship-migrate.d.ts +6 -0
- package/dist/commands/ship-migrate.d.ts.map +1 -0
- package/dist/commands/ship-migrate.js +152 -0
- package/dist/commands/ship-migrate.js.map +1 -0
- package/dist/commands/ship-offline.d.ts +6 -0
- package/dist/commands/ship-offline.d.ts.map +1 -0
- package/dist/commands/ship-offline.js +110 -0
- package/dist/commands/ship-offline.js.map +1 -0
- package/dist/commands/ship-os-updates.d.ts +6 -0
- package/dist/commands/ship-os-updates.d.ts.map +1 -0
- package/dist/commands/ship-os-updates.js +116 -0
- package/dist/commands/ship-os-updates.js.map +1 -0
- package/dist/commands/ship-postgres.d.ts +6 -0
- package/dist/commands/ship-postgres.d.ts.map +1 -0
- package/dist/commands/ship-postgres.js +84 -0
- package/dist/commands/ship-postgres.js.map +1 -0
- package/dist/commands/ship-rollback.d.ts +7 -0
- package/dist/commands/ship-rollback.d.ts.map +1 -0
- package/dist/commands/ship-rollback.js +63 -0
- package/dist/commands/ship-rollback.js.map +1 -0
- package/dist/commands/ship-services.d.ts +7 -0
- package/dist/commands/ship-services.d.ts.map +1 -0
- package/dist/commands/ship-services.js +127 -0
- package/dist/commands/ship-services.js.map +1 -0
- package/dist/commands/ship-sql-monitor.d.ts +6 -0
- package/dist/commands/ship-sql-monitor.d.ts.map +1 -0
- package/dist/commands/ship-sql-monitor.js +89 -0
- package/dist/commands/ship-sql-monitor.js.map +1 -0
- package/dist/commands/ship-status.d.ts +6 -0
- package/dist/commands/ship-status.d.ts.map +1 -0
- package/dist/commands/ship-status.js +21 -0
- package/dist/commands/ship-status.js.map +1 -0
- package/dist/commands/ship-update.d.ts +31 -0
- package/dist/commands/ship-update.d.ts.map +1 -0
- package/dist/commands/ship-update.js +234 -0
- package/dist/commands/ship-update.js.map +1 -0
- package/dist/commands/ship-users.d.ts +7 -0
- package/dist/commands/ship-users.d.ts.map +1 -0
- package/dist/commands/ship-users.js +118 -0
- package/dist/commands/ship-users.js.map +1 -0
- package/dist/commands/update.d.ts +45 -0
- package/dist/commands/update.d.ts.map +1 -1
- package/dist/commands/update.js +74 -3
- package/dist/commands/update.js.map +1 -1
- package/dist/commands/users.d.ts.map +1 -1
- package/dist/commands/users.js +51 -0
- package/dist/commands/users.js.map +1 -1
- package/dist/index.js +3 -72
- package/dist/index.js.map +1 -1
- package/dist/lib/network-apply.d.ts +102 -0
- package/dist/lib/network-apply.d.ts.map +1 -0
- package/dist/lib/network-apply.js +472 -0
- package/dist/lib/network-apply.js.map +1 -0
- package/dist/lib/ops-port.d.ts +205 -0
- package/dist/lib/ops-port.d.ts.map +1 -0
- package/dist/lib/ops-port.js +906 -0
- package/dist/lib/ops-port.js.map +1 -0
- package/dist/lib/public-doc.d.ts +37 -0
- package/dist/lib/public-doc.d.ts.map +1 -0
- package/dist/lib/public-doc.js +27 -0
- package/dist/lib/public-doc.js.map +1 -0
- package/dist/lib/ship-identity.d.ts +9 -0
- package/dist/lib/ship-identity.d.ts.map +1 -0
- package/dist/lib/ship-identity.js +12 -0
- package/dist/lib/ship-identity.js.map +1 -0
- package/dist/lib/ship-logo.d.ts +11 -0
- package/dist/lib/ship-logo.d.ts.map +1 -0
- package/dist/lib/ship-logo.js +17 -0
- package/dist/lib/ship-logo.js.map +1 -0
- package/dist/lib/ship-status.d.ts +21 -0
- package/dist/lib/ship-status.d.ts.map +1 -0
- package/dist/lib/ship-status.js +82 -0
- package/dist/lib/ship-status.js.map +1 -0
- package/dist/lib/version.d.ts +1 -1
- package/dist/lib/version.js +1 -1
- package/dist/program.d.ts +22 -0
- package/dist/program.d.ts.map +1 -0
- package/dist/program.js +124 -0
- package/dist/program.js.map +1 -0
- package/dist/shell/commands/diag.d.ts.map +1 -1
- package/dist/shell/commands/diag.js +47 -19
- package/dist/shell/commands/diag.js.map +1 -1
- package/dist/shell/commands/ops-mutates.d.ts +16 -0
- package/dist/shell/commands/ops-mutates.d.ts.map +1 -0
- package/dist/shell/commands/ops-mutates.js +62 -0
- package/dist/shell/commands/ops-mutates.js.map +1 -0
- package/dist/shell/commands/registry.d.ts.map +1 -1
- package/dist/shell/commands/registry.js +43 -0
- package/dist/shell/commands/registry.js.map +1 -1
- package/dist/shell/commands/show.d.ts +12 -0
- package/dist/shell/commands/show.d.ts.map +1 -1
- package/dist/shell/commands/show.js +190 -10
- package/dist/shell/commands/show.js.map +1 -1
- package/dist/shell/commands/telemetry.d.ts +11 -0
- package/dist/shell/commands/telemetry.d.ts.map +1 -0
- package/dist/shell/commands/telemetry.js +49 -0
- package/dist/shell/commands/telemetry.js.map +1 -0
- package/dist/shell/network-onboarding.d.ts +7 -4
- package/dist/shell/network-onboarding.d.ts.map +1 -1
- package/dist/shell/network-onboarding.js +22 -38
- package/dist/shell/network-onboarding.js.map +1 -1
- package/dist/ship-entry.d.ts +3 -0
- package/dist/ship-entry.d.ts.map +1 -0
- package/dist/ship-entry.js +122 -0
- package/dist/ship-entry.js.map +1 -0
- package/package.json +9 -2
|
@@ -0,0 +1,359 @@
|
|
|
1
|
+
import * as out from '../utils/output.js';
|
|
2
|
+
import { listPurgeGroups, purgeCtEvents, factoryReset, updateService, setJtapiRtpAdvertise, seedMonitor, seedCancel, bootstrapAdmin, getTelemetryStatus, setTelemetry, operationLeaseStatus, operationLeaseAcquire, operationLeaseRelease, operationLeaseRecover, prepClusterNode, buildAppliance, postgresConvertBitnami, risPhoneExport, sqlMonitorPassword, sqlMonitorRotatePassword, offlineListImages, offlineFetchVersion, migrateLegacyStatus, listRollbackSnapshots, } from '../lib/ops-port.js';
|
|
3
|
+
/** Fail-closed Commander reporting for ops-port results (sets process.exitCode). */
|
|
4
|
+
export function reportOpsResult(r, opts) {
|
|
5
|
+
if (!r.ok) {
|
|
6
|
+
out.fail(r.message);
|
|
7
|
+
process.exitCode = 1;
|
|
8
|
+
return;
|
|
9
|
+
}
|
|
10
|
+
opts?.onSuccess?.();
|
|
11
|
+
out.ok(r.message);
|
|
12
|
+
}
|
|
13
|
+
export function registerGoParityCommands(program) {
|
|
14
|
+
// ── factory-reset (hidden / experimental UAT) ─────────────────────────
|
|
15
|
+
program
|
|
16
|
+
.command('factory-reset', { hidden: true })
|
|
17
|
+
.description('[experimental/UAT] Destructive appliance reset (data + volumes). Requires --experimental --yes.')
|
|
18
|
+
.option('-y, --yes', 'Confirm destructive reset')
|
|
19
|
+
.option('--experimental', 'Enable experimental UAT factory-reset')
|
|
20
|
+
.option('--dry-run', 'Print steps without executing')
|
|
21
|
+
.action(async (opts) => {
|
|
22
|
+
const r = await factoryReset({
|
|
23
|
+
yes: opts.yes,
|
|
24
|
+
dryRun: opts.dryRun,
|
|
25
|
+
experimental: opts.experimental,
|
|
26
|
+
});
|
|
27
|
+
reportOpsResult(r, {
|
|
28
|
+
onSuccess: () => {
|
|
29
|
+
for (const s of r.steps ?? [])
|
|
30
|
+
console.log(` · ${s}`);
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
// ── update service ────────────────────────────────────────────────────
|
|
35
|
+
// Nested under a dedicated parent so it does not collide with update [version]
|
|
36
|
+
program
|
|
37
|
+
.command('update-service <service> <tag>')
|
|
38
|
+
.alias('update_service')
|
|
39
|
+
.description('Update ONE compose service image tag (atomic recreate)')
|
|
40
|
+
.option('-y, --yes', 'Confirm non-interactive apply')
|
|
41
|
+
.option('--dry-run', 'Show plan only')
|
|
42
|
+
.action(async (service, tag, opts) => {
|
|
43
|
+
const r = await updateService(service, tag, { yes: opts.yes, dryRun: opts.dryRun });
|
|
44
|
+
reportOpsResult(r);
|
|
45
|
+
});
|
|
46
|
+
// Also expose as: ct update service — by patching after update registers
|
|
47
|
+
// (see attachUpdateServiceSubcommand)
|
|
48
|
+
// ── bootstrap-admin (experimental until RPC verified) ─────────────────
|
|
49
|
+
program
|
|
50
|
+
.command('bootstrap-admin <email> <password>', { hidden: true })
|
|
51
|
+
.description('[experimental] Create or reset admin via RPC (gated until symbols verified). Requires --experimental.')
|
|
52
|
+
.option('--org <id>', 'Org id, or "new" for first-boot org+admin')
|
|
53
|
+
.option('--experimental', 'Enable experimental bootstrap-admin RPC')
|
|
54
|
+
.action(async (email, password, opts) => {
|
|
55
|
+
const r = await bootstrapAdmin(email, password, {
|
|
56
|
+
orgId: opts.org ?? 'auto',
|
|
57
|
+
experimental: opts.experimental,
|
|
58
|
+
});
|
|
59
|
+
reportOpsResult(r);
|
|
60
|
+
});
|
|
61
|
+
// ── telemetry ─────────────────────────────────────────────────────────
|
|
62
|
+
const telemetry = program.command('telemetry').description('CLI analytics consent');
|
|
63
|
+
telemetry
|
|
64
|
+
.command('status')
|
|
65
|
+
.description('Show telemetry consent')
|
|
66
|
+
.action(async () => {
|
|
67
|
+
const s = await getTelemetryStatus();
|
|
68
|
+
console.log(s.enabled ? 'Telemetry: enabled' : 'Telemetry: disabled');
|
|
69
|
+
console.log(`State file: ${s.path}`);
|
|
70
|
+
});
|
|
71
|
+
telemetry
|
|
72
|
+
.command('enable')
|
|
73
|
+
.description('Opt in to pseudonymous CLI analytics')
|
|
74
|
+
.action(async () => {
|
|
75
|
+
const r = await setTelemetry(true);
|
|
76
|
+
out.ok(r.message);
|
|
77
|
+
});
|
|
78
|
+
telemetry
|
|
79
|
+
.command('disable')
|
|
80
|
+
.description('Opt out of CLI analytics')
|
|
81
|
+
.action(async () => {
|
|
82
|
+
const r = await setTelemetry(false);
|
|
83
|
+
out.ok(r.message);
|
|
84
|
+
});
|
|
85
|
+
telemetry.action(async () => {
|
|
86
|
+
const s = await getTelemetryStatus();
|
|
87
|
+
console.log(s.enabled ? 'Telemetry: enabled' : 'Telemetry: disabled');
|
|
88
|
+
});
|
|
89
|
+
// ── operation-lease (local/UAT) ────────────────────────────────────────
|
|
90
|
+
const lease = program
|
|
91
|
+
.command('operation-lease')
|
|
92
|
+
.description('[UAT] Shared local operation lease file (~/.ct/operation-lease.json)');
|
|
93
|
+
lease
|
|
94
|
+
.command('status')
|
|
95
|
+
.action(async () => {
|
|
96
|
+
const r = await operationLeaseStatus();
|
|
97
|
+
console.log(r.message);
|
|
98
|
+
});
|
|
99
|
+
lease
|
|
100
|
+
.command('acquire <holder>')
|
|
101
|
+
.option('--ttl <minutes>', 'Lease TTL minutes', '60')
|
|
102
|
+
.action(async (holder, opts) => {
|
|
103
|
+
const r = await operationLeaseAcquire(holder, Number(opts.ttl) || 60);
|
|
104
|
+
if (!r.ok) {
|
|
105
|
+
out.fail(r.message);
|
|
106
|
+
process.exitCode = 1;
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
out.ok(r.message);
|
|
110
|
+
});
|
|
111
|
+
lease
|
|
112
|
+
.command('release <holder>')
|
|
113
|
+
.action(async (holder) => {
|
|
114
|
+
const r = await operationLeaseRelease(holder);
|
|
115
|
+
if (!r.ok) {
|
|
116
|
+
out.fail(r.message);
|
|
117
|
+
process.exitCode = 1;
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
out.ok(r.message);
|
|
121
|
+
});
|
|
122
|
+
lease
|
|
123
|
+
.command('recover')
|
|
124
|
+
.description('Force-clear stale lease file')
|
|
125
|
+
.action(async () => {
|
|
126
|
+
const r = await operationLeaseRecover();
|
|
127
|
+
out.ok(r.message);
|
|
128
|
+
});
|
|
129
|
+
lease
|
|
130
|
+
.command('renew <holder>')
|
|
131
|
+
.option('--ttl <minutes>', 'Lease TTL minutes', '60')
|
|
132
|
+
.action(async (holder, opts) => {
|
|
133
|
+
const r = await operationLeaseAcquire(holder, Number(opts.ttl) || 60);
|
|
134
|
+
if (!r.ok) {
|
|
135
|
+
out.fail(r.message);
|
|
136
|
+
process.exitCode = 1;
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
out.ok(`Renewed: ${r.message}`);
|
|
140
|
+
});
|
|
141
|
+
lease.action(async () => {
|
|
142
|
+
const r = await operationLeaseStatus();
|
|
143
|
+
console.log(r.message);
|
|
144
|
+
});
|
|
145
|
+
// ── prep-cluster-node / build-appliance (lab / non-production) ────────
|
|
146
|
+
program
|
|
147
|
+
.command('prep-cluster-node')
|
|
148
|
+
.description('[lab/non-production] Verify cluster-node helper tooling (idempotent)')
|
|
149
|
+
.option('--dry-run', 'Print steps only')
|
|
150
|
+
.action(async (opts) => {
|
|
151
|
+
const r = await prepClusterNode({ dryRun: opts.dryRun });
|
|
152
|
+
reportOpsResult(r);
|
|
153
|
+
});
|
|
154
|
+
program
|
|
155
|
+
.command('build-appliance')
|
|
156
|
+
.description('[lab/non-production] Download/check appliance prep installer (does not build production OVA)')
|
|
157
|
+
.option('--dry-run', 'Print plan only')
|
|
158
|
+
.action(async (opts) => {
|
|
159
|
+
const r = await buildAppliance({ dryRun: opts.dryRun });
|
|
160
|
+
reportOpsResult(r);
|
|
161
|
+
});
|
|
162
|
+
// ── ris phone-export (experimental) ───────────────────────────────────
|
|
163
|
+
const ris = program.command('ris').description('RIS diagnostics (experimental tools)');
|
|
164
|
+
ris
|
|
165
|
+
.command('phone-export')
|
|
166
|
+
.description('[experimental] Capture RIS debug snapshot (non-production). Requires --experimental.')
|
|
167
|
+
.option('-o, --output <file>', 'Output path')
|
|
168
|
+
.option('--experimental', 'Enable experimental RIS export')
|
|
169
|
+
.action(async (opts) => {
|
|
170
|
+
const r = await risPhoneExport({ output: opts.output, experimental: opts.experimental });
|
|
171
|
+
reportOpsResult(r);
|
|
172
|
+
});
|
|
173
|
+
ris.action(() => {
|
|
174
|
+
console.log('Usage: ct ris phone-export --experimental [-o file]');
|
|
175
|
+
});
|
|
176
|
+
// ── sql-monitor password helpers (also under parent if exists) ───────
|
|
177
|
+
// Registered on program as flat helpers when sql-monitor parent already exists
|
|
178
|
+
}
|
|
179
|
+
/** Attach db purge-groups / purge-ct-events onto existing db command. */
|
|
180
|
+
export function attachDbPurgePorts(db) {
|
|
181
|
+
db.command('purge-groups')
|
|
182
|
+
.description('List optimized purge groups')
|
|
183
|
+
.action(() => {
|
|
184
|
+
console.log(listPurgeGroups());
|
|
185
|
+
});
|
|
186
|
+
// Wave 0 §10.1: Cdrcisco.Maintenance.purge_group is not a real onprem RPC
|
|
187
|
+
// symbol on current cisco-cdr (MaintenanceDdlRepo is a DB pool, not RPC API).
|
|
188
|
+
// Keep list (purge-groups) visible; gate execute until native purge is ported.
|
|
189
|
+
db.command('purge-ct-events [days]', { hidden: true })
|
|
190
|
+
.description('[experimental] Purge CUBE/XCC/CURRI telemetry group (default 7 days). Requires --experimental until RPC/native path is verified.')
|
|
191
|
+
.option('-y, --yes', 'Confirm purge')
|
|
192
|
+
.option('--dry-run', 'Show plan only')
|
|
193
|
+
.option('--experimental', 'Enable experimental purge-ct-events (RPC symbol unverified on tip)')
|
|
194
|
+
.action(async (daysStr, opts) => {
|
|
195
|
+
if (!opts.experimental && !opts.dryRun) {
|
|
196
|
+
reportOpsResult({
|
|
197
|
+
ok: false,
|
|
198
|
+
message: 'Error: purge-ct-events is experimental until the execute path is verified on the pinned release (Cdrcisco.Maintenance.purge_group is not a known onprem RPC). Pass --experimental --yes, or use --dry-run. Prefer native Go `ct db purge-ct-events` on appliances until Wave 1 native port lands.',
|
|
199
|
+
});
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
const days = daysStr ? parseInt(daysStr, 10) : 7;
|
|
203
|
+
const r = await purgeCtEvents(days, { yes: opts.yes, dryRun: opts.dryRun });
|
|
204
|
+
reportOpsResult(r);
|
|
205
|
+
});
|
|
206
|
+
}
|
|
207
|
+
export function attachJtapiRtp(jtapi) {
|
|
208
|
+
jtapi
|
|
209
|
+
.command('set-rtp-advertise <ip>')
|
|
210
|
+
.description('Set CTI RTP advertise address')
|
|
211
|
+
.action(async (ip) => {
|
|
212
|
+
const r = await setJtapiRtpAdvertise(ip);
|
|
213
|
+
reportOpsResult(r);
|
|
214
|
+
});
|
|
215
|
+
}
|
|
216
|
+
export function attachSeedMonitorCancel(seed) {
|
|
217
|
+
// Wave 0: Cdrcisco.Seed.* is not a module on tip (Cdrcisco.Seeds is demos). Gate.
|
|
218
|
+
seed
|
|
219
|
+
.command('monitor', { hidden: true })
|
|
220
|
+
.description('[experimental] Seed status via RPC (gated until symbol verified). Requires --experimental.')
|
|
221
|
+
.option('--experimental', 'Enable experimental seed monitor RPC')
|
|
222
|
+
.action(async (opts) => {
|
|
223
|
+
if (!opts.experimental) {
|
|
224
|
+
reportOpsResult({
|
|
225
|
+
ok: false,
|
|
226
|
+
message: 'Error: seed monitor is experimental (Cdrcisco.Seed.status not verified on tip). Pass --experimental.',
|
|
227
|
+
});
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
const r = await seedMonitor({ once: true });
|
|
231
|
+
reportOpsResult(r);
|
|
232
|
+
});
|
|
233
|
+
seed
|
|
234
|
+
.command('cancel', { hidden: true })
|
|
235
|
+
.description('[experimental] Cancel seed jobs via RPC (gated until symbol verified). Requires --experimental.')
|
|
236
|
+
.option('--experimental', 'Enable experimental seed cancel RPC')
|
|
237
|
+
.action(async (opts) => {
|
|
238
|
+
if (!opts.experimental) {
|
|
239
|
+
reportOpsResult({
|
|
240
|
+
ok: false,
|
|
241
|
+
message: 'Error: seed cancel is experimental (Cdrcisco.Seed.cancel_all not verified on tip). Pass --experimental.',
|
|
242
|
+
});
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
const r = await seedCancel();
|
|
246
|
+
reportOpsResult(r);
|
|
247
|
+
});
|
|
248
|
+
}
|
|
249
|
+
export function attachUsersAddAdmin(users) {
|
|
250
|
+
users
|
|
251
|
+
.command('add-admin <orgId> <email> <password>', { hidden: true })
|
|
252
|
+
.description('[experimental] Create or reset full_admin in org (orgId may be "new"). Requires --experimental.')
|
|
253
|
+
.option('--experimental', 'Enable experimental add-admin RPC')
|
|
254
|
+
.action(async (orgId, email, password, opts) => {
|
|
255
|
+
const r = await bootstrapAdmin(email, password, {
|
|
256
|
+
orgId,
|
|
257
|
+
experimental: opts.experimental,
|
|
258
|
+
});
|
|
259
|
+
reportOpsResult(r);
|
|
260
|
+
});
|
|
261
|
+
// list|orgs|reset-password are registered by ship-users (ship) / users.ts (full CLI).
|
|
262
|
+
// Do not attach stubs here — they would shadow real handlers or leave false greens.
|
|
263
|
+
}
|
|
264
|
+
export function attachMigrateLegacy(migrate) {
|
|
265
|
+
migrate
|
|
266
|
+
.command('legacy')
|
|
267
|
+
.description('Legacy partition + rollup backfill status')
|
|
268
|
+
.option('--json', 'JSON output')
|
|
269
|
+
.action(async (opts) => {
|
|
270
|
+
const r = await migrateLegacyStatus({ json: opts.json });
|
|
271
|
+
console.log(r.message);
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
export function attachSqlMonitorPassword(sql) {
|
|
275
|
+
sql
|
|
276
|
+
.command('password')
|
|
277
|
+
.description('Show PgHero / sql-monitor URL and redacted credentials')
|
|
278
|
+
.action(async () => {
|
|
279
|
+
const r = await sqlMonitorPassword();
|
|
280
|
+
reportOpsResult(r);
|
|
281
|
+
});
|
|
282
|
+
sql
|
|
283
|
+
.command('rotate-password')
|
|
284
|
+
.description('Rotate PgHero credentials and recreate service')
|
|
285
|
+
.action(async () => {
|
|
286
|
+
const r = await sqlMonitorRotatePassword();
|
|
287
|
+
reportOpsResult(r);
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
export function attachPostgresConvert(postgresCmd) {
|
|
291
|
+
postgresCmd
|
|
292
|
+
.command('convert-bitnami', { hidden: true })
|
|
293
|
+
.description('[experimental] Detect PostgreSQL Bitnami layout only (no conf auto-repair). Prefer docs migration.')
|
|
294
|
+
.option('--dry-run', 'Plan only')
|
|
295
|
+
.option('--experimental', 'Acknowledge experimental detect-only mode')
|
|
296
|
+
.action(async (opts) => {
|
|
297
|
+
if (!opts.experimental && !opts.dryRun) {
|
|
298
|
+
out.fail('Error: postgres convert-bitnami is experimental detect-only. Pass --experimental (or --dry-run). No comment-only conf repair.');
|
|
299
|
+
process.exitCode = 1;
|
|
300
|
+
return;
|
|
301
|
+
}
|
|
302
|
+
const r = await postgresConvertBitnami({
|
|
303
|
+
dryRun: opts.dryRun,
|
|
304
|
+
experimental: opts.experimental,
|
|
305
|
+
});
|
|
306
|
+
reportOpsResult(r);
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
/** Standalone registration when postgres uses positional action style. */
|
|
310
|
+
export async function runPostgresConvertBitnami(opts = {}) {
|
|
311
|
+
if (!opts.experimental && !opts.dryRun) {
|
|
312
|
+
out.fail('Error: postgres convert-bitnami is experimental detect-only. Pass --experimental (or --dry-run). No comment-only conf repair.');
|
|
313
|
+
process.exitCode = 1;
|
|
314
|
+
return;
|
|
315
|
+
}
|
|
316
|
+
const r = await postgresConvertBitnami({
|
|
317
|
+
dryRun: opts.dryRun,
|
|
318
|
+
experimental: opts.experimental,
|
|
319
|
+
});
|
|
320
|
+
reportOpsResult(r);
|
|
321
|
+
}
|
|
322
|
+
export function attachOfflineDepth(offline) {
|
|
323
|
+
// list already exists; ensure fetch polish
|
|
324
|
+
offline
|
|
325
|
+
.command('fetch-check <version>')
|
|
326
|
+
.description('Check offline bundle manifest reachability for version')
|
|
327
|
+
.option('--dry-run', 'Plan only')
|
|
328
|
+
.action(async (version, opts) => {
|
|
329
|
+
const r = await offlineFetchVersion(version, { dryRun: opts.dryRun });
|
|
330
|
+
if (!r.ok) {
|
|
331
|
+
out.fail(r.message);
|
|
332
|
+
process.exitCode = 1;
|
|
333
|
+
return;
|
|
334
|
+
}
|
|
335
|
+
out.ok(r.message);
|
|
336
|
+
});
|
|
337
|
+
offline
|
|
338
|
+
.command('images')
|
|
339
|
+
.description('List compose image lines (offline inventory)')
|
|
340
|
+
.action(async () => {
|
|
341
|
+
const r = await offlineListImages();
|
|
342
|
+
if (!r.ok) {
|
|
343
|
+
out.fail(r.message);
|
|
344
|
+
process.exitCode = 1;
|
|
345
|
+
return;
|
|
346
|
+
}
|
|
347
|
+
console.log(r.message);
|
|
348
|
+
});
|
|
349
|
+
}
|
|
350
|
+
export function attachRollbackList(program) {
|
|
351
|
+
program
|
|
352
|
+
.command('rollback-list')
|
|
353
|
+
.description('List pre-upgrade rollback snapshots')
|
|
354
|
+
.action(async () => {
|
|
355
|
+
const r = await listRollbackSnapshots();
|
|
356
|
+
console.log(r.message);
|
|
357
|
+
});
|
|
358
|
+
}
|
|
359
|
+
//# sourceMappingURL=go-parity.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"go-parity.js","sourceRoot":"","sources":["../../src/commands/go-parity.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jtapi.d.ts","sourceRoot":"","sources":["../../src/commands/jtapi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"jtapi.d.ts","sourceRoot":"","sources":["../../src/commands/jtapi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,QAsCpD"}
|
package/dist/commands/jtapi.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { render } from 'ink';
|
|
2
2
|
import React from 'react';
|
|
3
3
|
import { JtapiView } from '../ui/views/JtapiView.js';
|
|
4
|
+
import { attachJtapiRtp } from './go-parity.js';
|
|
4
5
|
export function registerJtapiCommand(program) {
|
|
5
6
|
const jtapi = program
|
|
6
7
|
.command('jtapi')
|
|
@@ -9,6 +10,7 @@ export function registerJtapiCommand(program) {
|
|
|
9
10
|
const { waitUntilExit } = render(React.createElement(JtapiView));
|
|
10
11
|
await waitUntilExit();
|
|
11
12
|
});
|
|
13
|
+
attachJtapiRtp(jtapi);
|
|
12
14
|
jtapi.command('enable')
|
|
13
15
|
.description('Enable the JTAPI sidecar')
|
|
14
16
|
.action(async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jtapi.js","sourceRoot":"","sources":["../../src/commands/jtapi.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"jtapi.js","sourceRoot":"","sources":["../../src/commands/jtapi.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,SAAS,EAAE,MAAM,0BAA0B,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,KAAK,GAAG,OAAO;SAClB,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,0CAA0C,CAAC;SACvD,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC;QACjE,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,cAAc,CAAC,KAAK,CAAC,CAAC;IAEtB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;SACpB,WAAW,CAAC,0BAA0B,CAAC;SACvC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC9F,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC;SACrB,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QAC/F,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;SACpB,WAAW,CAAC,2BAA2B,CAAC;SACxC,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;QAC9F,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;IAEL,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC;SAC1B,WAAW,CAAC,gDAAgD,CAAC;SAC7D,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,MAAM,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC,KAAK,CAAC,aAAa,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC,CAAC,CAAC;QACpG,MAAM,aAAa,EAAE,CAAC;IACxB,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,QA2DtD"}
|
package/dist/commands/migrate.js
CHANGED
|
@@ -6,10 +6,12 @@ import { MigrateRunView } from '../ui/views/MigrateRunView.js';
|
|
|
6
6
|
import { MigrateRollbackView } from '../ui/views/MigrateRollbackView.js';
|
|
7
7
|
import { MigrateWatchView } from '../ui/views/MigrateWatchView.js';
|
|
8
8
|
import { MigrateDrainView } from '../ui/views/MigrateDrainView.js';
|
|
9
|
+
import { attachMigrateLegacy } from './go-parity.js';
|
|
9
10
|
export function registerMigrateCommand(program) {
|
|
10
11
|
const migrate = program
|
|
11
12
|
.command('migrate')
|
|
12
13
|
.description('Database migration commands');
|
|
14
|
+
attachMigrateLegacy(migrate);
|
|
13
15
|
migrate.command('status')
|
|
14
16
|
.description('Show migration status (default)')
|
|
15
17
|
.action(async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAC7B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/commands/network.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"network.d.ts","sourceRoot":"","sources":["../../src/commands/network.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkCpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,QAiItD"}
|
package/dist/commands/network.js
CHANGED
|
@@ -1,26 +1,16 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
2
|
import { exec } from '../lib/exec.js';
|
|
3
3
|
import { getNetworkInterfaceList, getDefaultGateway, getEthernetInterfaces } from '../lib/network.js';
|
|
4
|
+
import { applyStaticAddress, applyDhcp, fixNetworkProfiles, setExternalIp, detectPrimaryEthernet, activeConnectionOnIface, CT_NETWORK_CONN, } from '../lib/network-apply.js';
|
|
4
5
|
import * as out from '../utils/output.js';
|
|
5
|
-
const CONN_NAME = 'ct-network';
|
|
6
6
|
async function getActiveConn(iface) {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return line.split(':')[0];
|
|
12
|
-
}
|
|
13
|
-
catch { /* fall through */ }
|
|
14
|
-
return CONN_NAME;
|
|
7
|
+
const active = await activeConnectionOnIface(iface);
|
|
8
|
+
if (active)
|
|
9
|
+
return active;
|
|
10
|
+
return CT_NETWORK_CONN;
|
|
15
11
|
}
|
|
16
12
|
async function getPrimaryIface() {
|
|
17
|
-
|
|
18
|
-
const output = String(result.stdout ?? '');
|
|
19
|
-
const line = output.split('\n').find((l) => l.includes(':ethernet'));
|
|
20
|
-
const iface = line?.split(':')[0];
|
|
21
|
-
if (!iface)
|
|
22
|
-
throw new Error('No ethernet interface detected.');
|
|
23
|
-
return iface;
|
|
13
|
+
return detectPrimaryEthernet();
|
|
24
14
|
}
|
|
25
15
|
/** If first arg is an ethernet interface name, extract it; otherwise auto-detect. */
|
|
26
16
|
function extractIface(args) {
|
|
@@ -34,7 +24,6 @@ export function registerNetworkCommand(program) {
|
|
|
34
24
|
const network = program
|
|
35
25
|
.command('network')
|
|
36
26
|
.description('Network configuration');
|
|
37
|
-
// ct network — show all interfaces
|
|
38
27
|
network.action(async () => {
|
|
39
28
|
const ifaces = getNetworkInterfaceList().filter((i) => !i.internal && i.family === 'IPv4');
|
|
40
29
|
const gateway = await getDefaultGateway().catch(() => null);
|
|
@@ -49,12 +38,16 @@ export function registerNetworkCommand(program) {
|
|
|
49
38
|
const conn = await getActiveConn(primary);
|
|
50
39
|
const dnsResult = await exec('nmcli', ['-g', 'ipv4.dns', 'connection', 'show', conn]);
|
|
51
40
|
const domainResult = await exec('nmcli', ['-g', 'ipv4.dns-search', 'connection', 'show', conn]);
|
|
41
|
+
const prioResult = await exec('nmcli', ['-g', 'connection.autoconnect-priority', 'connection', 'show', conn]).catch(() => null);
|
|
52
42
|
const dns = String(dnsResult.stdout ?? '').trim();
|
|
53
43
|
const domain = String(domainResult.stdout ?? '').trim();
|
|
44
|
+
const prio = prioResult ? String(prioResult.stdout ?? '').trim() : '';
|
|
54
45
|
if (dns)
|
|
55
46
|
console.log(` DNS : ${dns.replace(/,/g, ', ')}`);
|
|
56
47
|
if (domain)
|
|
57
48
|
console.log(` Domain : ${domain}`);
|
|
49
|
+
if (prio)
|
|
50
|
+
console.log(` Priority : ${prio} (active: ${conn})`);
|
|
58
51
|
}
|
|
59
52
|
catch { /* nmcli not available */ }
|
|
60
53
|
console.log();
|
|
@@ -63,34 +56,36 @@ export function registerNetworkCommand(program) {
|
|
|
63
56
|
console.log(' ct network dns-servers [iface] <dns1> [dns2 ...]');
|
|
64
57
|
console.log(' ct network domain [iface] <domain>');
|
|
65
58
|
console.log(' ct network dhcp [iface]');
|
|
59
|
+
console.log(' ct network fix [iface]');
|
|
60
|
+
console.log(' ct network set-external-ip <ip|auto>');
|
|
66
61
|
});
|
|
67
|
-
// ct network address [iface] <ip/prefix> <gateway>
|
|
68
62
|
network
|
|
69
63
|
.command('address [args...]')
|
|
70
|
-
.description('Set static IP
|
|
64
|
+
.description('Set static IP (reboot-safe: priority 200, demote, mask cloud-init)')
|
|
71
65
|
.action(async (rawArgs) => {
|
|
72
|
-
const { iface: ifaceArg, rest } = extractIface(rawArgs);
|
|
66
|
+
const { iface: ifaceArg, rest } = extractIface(rawArgs ?? []);
|
|
73
67
|
const [ipPrefix, gateway] = rest;
|
|
74
68
|
if (!ipPrefix || !gateway) {
|
|
75
69
|
out.fail('Usage: ct network address [iface] <ip/prefix> <gateway>');
|
|
76
70
|
out.fail('Example: ct network address eth0 192.168.10.50/24 192.168.10.1');
|
|
77
71
|
return;
|
|
78
72
|
}
|
|
79
|
-
const
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
]);
|
|
90
|
-
|
|
91
|
-
|
|
73
|
+
const result = await applyStaticAddress({
|
|
74
|
+
iface: ifaceArg,
|
|
75
|
+
address: ipPrefix,
|
|
76
|
+
gateway,
|
|
77
|
+
});
|
|
78
|
+
if (!result.ok) {
|
|
79
|
+
out.fail(result.message);
|
|
80
|
+
process.exitCode = 1;
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
out.ok(result.message.split('\n')[0]);
|
|
84
|
+
for (const line of result.message.split('\n').slice(1)) {
|
|
85
|
+
if (line)
|
|
86
|
+
console.log(line);
|
|
87
|
+
}
|
|
92
88
|
});
|
|
93
|
-
// ct network dns-servers <dns...>
|
|
94
89
|
network
|
|
95
90
|
.command('dns-servers <dns...>')
|
|
96
91
|
.description('Set DNS servers e.g. ct network dns-servers 8.8.8.8 4.4.4.4')
|
|
@@ -101,7 +96,6 @@ export function registerNetworkCommand(program) {
|
|
|
101
96
|
await exec('nmcli', ['connection', 'up', conn]).catch(() => { });
|
|
102
97
|
out.ok(`DNS servers set: ${dns.join(', ')}`);
|
|
103
98
|
});
|
|
104
|
-
// ct network domain <domain>
|
|
105
99
|
network
|
|
106
100
|
.command('domain <domain>')
|
|
107
101
|
.description('Set DNS search domain e.g. ct network domain corp.local')
|
|
@@ -112,24 +106,43 @@ export function registerNetworkCommand(program) {
|
|
|
112
106
|
await exec('nmcli', ['connection', 'up', conn]).catch(() => { });
|
|
113
107
|
out.ok(`Search domain set: ${domain}`);
|
|
114
108
|
});
|
|
115
|
-
// ct network dhcp [iface]
|
|
116
109
|
network
|
|
117
110
|
.command('dhcp [args...]')
|
|
118
|
-
.description('Switch to DHCP
|
|
111
|
+
.description('Switch to DHCP with priority 200 product profile')
|
|
119
112
|
.action(async (rawArgs) => {
|
|
120
|
-
const { iface: ifaceArg } = extractIface(rawArgs);
|
|
121
|
-
const
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
113
|
+
const { iface: ifaceArg } = extractIface(rawArgs ?? []);
|
|
114
|
+
const result = await applyDhcp({ iface: ifaceArg });
|
|
115
|
+
if (!result.ok) {
|
|
116
|
+
out.fail(result.message);
|
|
117
|
+
process.exitCode = 1;
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
const acquired = getNetworkInterfaceList().find((i) => i.name === result.iface && i.family === 'IPv4');
|
|
121
|
+
out.ok(`DHCP configured on ${result.iface}. IP: ${acquired?.address ?? '(acquiring...)'}`);
|
|
122
|
+
});
|
|
123
|
+
network
|
|
124
|
+
.command('fix [iface]')
|
|
125
|
+
.description('Demote competing profiles and ensure ct-network wins on boot')
|
|
126
|
+
.action(async (iface) => {
|
|
127
|
+
const result = await fixNetworkProfiles(iface);
|
|
128
|
+
if (!result.ok) {
|
|
129
|
+
out.fail(result.message);
|
|
130
|
+
process.exitCode = 1;
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
out.ok(result.message);
|
|
134
|
+
});
|
|
135
|
+
network
|
|
136
|
+
.command('set-external-ip <ip>')
|
|
137
|
+
.description('Persist appliance callback IPv4 (EXTERNAL_IP) or auto')
|
|
138
|
+
.action(async (ip) => {
|
|
139
|
+
const result = await setExternalIp(ip);
|
|
140
|
+
if (!result.ok) {
|
|
141
|
+
out.fail(result.message);
|
|
142
|
+
process.exitCode = 1;
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
out.ok(result.message);
|
|
133
146
|
});
|
|
134
147
|
}
|
|
135
148
|
//# sourceMappingURL=network.js.map
|