@zincapp/znvault-cli 2.26.4 → 2.29.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/group.d.ts +3 -0
- package/dist/commands/group.d.ts.map +1 -0
- package/dist/commands/group.js +319 -0
- package/dist/commands/group.js.map +1 -0
- package/dist/commands/host/bootstrap-token.d.ts.map +1 -1
- package/dist/commands/host/bootstrap-token.js +28 -10
- package/dist/commands/host/bootstrap-token.js.map +1 -1
- package/dist/commands/host/index.d.ts.map +1 -1
- package/dist/commands/host/index.js +4 -0
- package/dist/commands/host/index.js.map +1 -1
- package/dist/commands/host/link-agent.d.ts +26 -0
- package/dist/commands/host/link-agent.d.ts.map +1 -0
- package/dist/commands/host/link-agent.js +110 -0
- package/dist/commands/host/link-agent.js.map +1 -0
- package/dist/commands/host/types.d.ts +5 -0
- package/dist/commands/host/types.d.ts.map +1 -1
- package/dist/commands/ssh-ca/ca.d.ts +14 -0
- package/dist/commands/ssh-ca/ca.d.ts.map +1 -0
- package/dist/commands/ssh-ca/ca.js +169 -0
- package/dist/commands/ssh-ca/ca.js.map +1 -0
- package/dist/commands/ssh-ca/certificates.d.ts +7 -0
- package/dist/commands/ssh-ca/certificates.d.ts.map +1 -0
- package/dist/commands/ssh-ca/certificates.js +131 -0
- package/dist/commands/ssh-ca/certificates.js.map +1 -0
- package/dist/commands/ssh-ca/helpers.d.ts +37 -0
- package/dist/commands/ssh-ca/helpers.d.ts.map +1 -0
- package/dist/commands/ssh-ca/helpers.js +104 -0
- package/dist/commands/ssh-ca/helpers.js.map +1 -0
- package/dist/commands/ssh-ca/index.d.ts +7 -0
- package/dist/commands/ssh-ca/index.d.ts.map +1 -0
- package/dist/commands/ssh-ca/index.js +180 -0
- package/dist/commands/ssh-ca/index.js.map +1 -0
- package/dist/commands/ssh-ca/mappings.d.ts +11 -0
- package/dist/commands/ssh-ca/mappings.d.ts.map +1 -0
- package/dist/commands/ssh-ca/mappings.js +178 -0
- package/dist/commands/ssh-ca/mappings.js.map +1 -0
- package/dist/commands/ssh-ca/server-groups.d.ts +21 -0
- package/dist/commands/ssh-ca/server-groups.d.ts.map +1 -0
- package/dist/commands/ssh-ca/server-groups.js +252 -0
- package/dist/commands/ssh-ca/server-groups.js.map +1 -0
- package/dist/commands/ssh-ca/sign.d.ts +3 -0
- package/dist/commands/ssh-ca/sign.d.ts.map +1 -0
- package/dist/commands/ssh-ca/sign.js +79 -0
- package/dist/commands/ssh-ca/sign.js.map +1 -0
- package/dist/commands/ssh-ca/types.d.ts +135 -0
- package/dist/commands/ssh-ca/types.d.ts.map +1 -0
- package/dist/commands/ssh-ca/types.js +3 -0
- package/dist/commands/ssh-ca/types.js.map +1 -0
- package/dist/commands/ssh-ca.d.ts +7 -0
- package/dist/commands/ssh-ca.d.ts.map +1 -0
- package/dist/commands/ssh-ca.js +7 -0
- package/dist/commands/ssh-ca.js.map +1 -0
- package/dist/commands/ssh.d.ts +3 -0
- package/dist/commands/ssh.d.ts.map +1 -0
- package/dist/commands/ssh.js +814 -0
- package/dist/commands/ssh.js.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/client/tenants.d.ts.map +1 -1
- package/dist/lib/client/tenants.js +3 -6
- package/dist/lib/client/tenants.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group.d.ts","sourceRoot":"","sources":["../../src/commands/group.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,CAAC;AAyEzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8W5D"}
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
// Path: znvault-cli/src/commands/group.ts
|
|
2
|
+
import ora from 'ora';
|
|
3
|
+
import { client } from '../lib/client.js';
|
|
4
|
+
import { promptConfirm } from '../lib/prompts.js';
|
|
5
|
+
import * as output from '../lib/output.js';
|
|
6
|
+
// ============================================================================
|
|
7
|
+
// Commands
|
|
8
|
+
// ============================================================================
|
|
9
|
+
export function registerGroupCommands(program) {
|
|
10
|
+
const group = program
|
|
11
|
+
.command('group')
|
|
12
|
+
.description('SSO group management');
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
// List Groups
|
|
15
|
+
// ---------------------------------------------------------------------------
|
|
16
|
+
group
|
|
17
|
+
.command('list')
|
|
18
|
+
.description('List SSO groups')
|
|
19
|
+
.option('--tenant <id>', 'Filter by tenant (superadmin only)')
|
|
20
|
+
.option('--json', 'Output as JSON')
|
|
21
|
+
.action(async (options) => {
|
|
22
|
+
const spinner = ora('Fetching groups...').start();
|
|
23
|
+
try {
|
|
24
|
+
const params = new URLSearchParams();
|
|
25
|
+
if (options.tenant) {
|
|
26
|
+
params.set('tenantId', options.tenant);
|
|
27
|
+
}
|
|
28
|
+
const queryString = params.toString() ? `?${params.toString()}` : '';
|
|
29
|
+
const data = await client.get(`/v1/sso/groups${queryString}`);
|
|
30
|
+
spinner.stop();
|
|
31
|
+
if (options.json) {
|
|
32
|
+
output.json(data);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
if (data.items.length === 0) {
|
|
36
|
+
output.info('No groups found');
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
output.table(['Name', 'Display Name', 'Members', 'Created'], data.items.map((g) => [
|
|
40
|
+
g.name,
|
|
41
|
+
g.displayName ?? '-',
|
|
42
|
+
g.memberCount ?? 0,
|
|
43
|
+
new Date(g.createdAt).toLocaleDateString(),
|
|
44
|
+
]));
|
|
45
|
+
output.info(`Total: ${data.pagination.total} group(s)`);
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
spinner.fail('Error fetching groups');
|
|
49
|
+
output.error(err instanceof Error ? err.message : 'Unknown error');
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
// ---------------------------------------------------------------------------
|
|
54
|
+
// Create Group
|
|
55
|
+
// ---------------------------------------------------------------------------
|
|
56
|
+
group
|
|
57
|
+
.command('create <name>')
|
|
58
|
+
.description('Create a new SSO group')
|
|
59
|
+
.option('--display-name <name>', 'Human-readable display name')
|
|
60
|
+
.option('--description <text>', 'Group description')
|
|
61
|
+
.option('--json', 'Output as JSON')
|
|
62
|
+
.action(async (name, options) => {
|
|
63
|
+
const spinner = ora('Creating group...').start();
|
|
64
|
+
try {
|
|
65
|
+
const body = {
|
|
66
|
+
name,
|
|
67
|
+
};
|
|
68
|
+
if (options.displayName) {
|
|
69
|
+
body.display_name = options.displayName;
|
|
70
|
+
}
|
|
71
|
+
if (options.description) {
|
|
72
|
+
body.description = options.description;
|
|
73
|
+
}
|
|
74
|
+
const data = await client.post('/v1/sso/groups', body);
|
|
75
|
+
spinner.succeed('Group created successfully');
|
|
76
|
+
if (options.json) {
|
|
77
|
+
output.json(data);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
output.keyValue({
|
|
81
|
+
'ID': data.id,
|
|
82
|
+
'Name': data.name,
|
|
83
|
+
'Display Name': data.displayName ?? '-',
|
|
84
|
+
'Description': data.description ?? '-',
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
spinner.fail('Error creating group');
|
|
89
|
+
output.error(err instanceof Error ? err.message : 'Unknown error');
|
|
90
|
+
process.exit(1);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
// ---------------------------------------------------------------------------
|
|
94
|
+
// Get Group
|
|
95
|
+
// ---------------------------------------------------------------------------
|
|
96
|
+
group
|
|
97
|
+
.command('get <id>')
|
|
98
|
+
.description('Get group details')
|
|
99
|
+
.option('--json', 'Output as JSON')
|
|
100
|
+
.action(async (id, options) => {
|
|
101
|
+
const spinner = ora('Fetching group...').start();
|
|
102
|
+
try {
|
|
103
|
+
const data = await client.get(`/v1/sso/groups/${id}`);
|
|
104
|
+
spinner.stop();
|
|
105
|
+
if (options.json) {
|
|
106
|
+
output.json(data);
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
output.keyValue({
|
|
110
|
+
'ID': data.id,
|
|
111
|
+
'Tenant': data.tenantId,
|
|
112
|
+
'Name': data.name,
|
|
113
|
+
'Display Name': data.displayName ?? '-',
|
|
114
|
+
'Description': data.description ?? '-',
|
|
115
|
+
'Members': data.memberCount ?? 'N/A',
|
|
116
|
+
'Created By': data.createdByUsername ?? data.createdBy ?? '-',
|
|
117
|
+
'Created At': new Date(data.createdAt).toLocaleString(),
|
|
118
|
+
'Updated At': new Date(data.updatedAt).toLocaleString(),
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
spinner.fail('Error fetching group');
|
|
123
|
+
output.error(err instanceof Error ? err.message : 'Unknown error');
|
|
124
|
+
process.exit(1);
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
// ---------------------------------------------------------------------------
|
|
128
|
+
// Update Group
|
|
129
|
+
// ---------------------------------------------------------------------------
|
|
130
|
+
group
|
|
131
|
+
.command('update <id>')
|
|
132
|
+
.description('Update group')
|
|
133
|
+
.option('--name <name>', 'New group name')
|
|
134
|
+
.option('--display-name <name>', 'New display name')
|
|
135
|
+
.option('--description <text>', 'New description')
|
|
136
|
+
.option('--json', 'Output as JSON')
|
|
137
|
+
.action(async (id, options) => {
|
|
138
|
+
const spinner = ora('Updating group...').start();
|
|
139
|
+
try {
|
|
140
|
+
const body = {};
|
|
141
|
+
if (options.name) {
|
|
142
|
+
body.name = options.name;
|
|
143
|
+
}
|
|
144
|
+
if (options.displayName !== undefined) {
|
|
145
|
+
body.display_name = options.displayName || null;
|
|
146
|
+
}
|
|
147
|
+
if (options.description !== undefined) {
|
|
148
|
+
body.description = options.description || null;
|
|
149
|
+
}
|
|
150
|
+
if (Object.keys(body).length === 0) {
|
|
151
|
+
spinner.fail('No updates specified');
|
|
152
|
+
output.error('Use --name, --display-name, or --description to specify updates');
|
|
153
|
+
process.exit(1);
|
|
154
|
+
}
|
|
155
|
+
const data = await client.patch(`/v1/sso/groups/${id}`, body);
|
|
156
|
+
spinner.succeed('Group updated successfully');
|
|
157
|
+
if (options.json) {
|
|
158
|
+
output.json(data);
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
output.keyValue({
|
|
162
|
+
'ID': data.id,
|
|
163
|
+
'Name': data.name,
|
|
164
|
+
'Display Name': data.displayName ?? '-',
|
|
165
|
+
'Description': data.description ?? '-',
|
|
166
|
+
});
|
|
167
|
+
}
|
|
168
|
+
catch (err) {
|
|
169
|
+
spinner.fail('Error updating group');
|
|
170
|
+
output.error(err instanceof Error ? err.message : 'Unknown error');
|
|
171
|
+
process.exit(1);
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
// ---------------------------------------------------------------------------
|
|
175
|
+
// Delete Group
|
|
176
|
+
// ---------------------------------------------------------------------------
|
|
177
|
+
group
|
|
178
|
+
.command('delete <id>')
|
|
179
|
+
.description('Delete group')
|
|
180
|
+
.option('-y, --yes', 'Skip confirmation')
|
|
181
|
+
.action(async (id, options) => {
|
|
182
|
+
try {
|
|
183
|
+
// Get group info for confirmation
|
|
184
|
+
const groupData = await client.get(`/v1/sso/groups/${id}`);
|
|
185
|
+
if (!options.yes) {
|
|
186
|
+
const confirmed = await promptConfirm(`Delete group "${groupData.name}"? This will remove all members.`);
|
|
187
|
+
if (!confirmed) {
|
|
188
|
+
output.info('Cancelled');
|
|
189
|
+
return;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
const spinner = ora('Deleting group...').start();
|
|
193
|
+
await client.delete(`/v1/sso/groups/${id}`);
|
|
194
|
+
spinner.succeed(`Group "${groupData.name}" deleted`);
|
|
195
|
+
}
|
|
196
|
+
catch (err) {
|
|
197
|
+
output.error(err instanceof Error ? err.message : 'Unknown error');
|
|
198
|
+
process.exit(1);
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
// ---------------------------------------------------------------------------
|
|
202
|
+
// Members Subcommand
|
|
203
|
+
// ---------------------------------------------------------------------------
|
|
204
|
+
const members = group
|
|
205
|
+
.command('members')
|
|
206
|
+
.description('Manage group members');
|
|
207
|
+
// List members
|
|
208
|
+
members
|
|
209
|
+
.command('list <groupId>')
|
|
210
|
+
.description('List group members')
|
|
211
|
+
.option('--json', 'Output as JSON')
|
|
212
|
+
.action(async (groupId, options) => {
|
|
213
|
+
const spinner = ora('Fetching members...').start();
|
|
214
|
+
try {
|
|
215
|
+
const data = await client.get(`/v1/sso/groups/${groupId}/members`);
|
|
216
|
+
spinner.stop();
|
|
217
|
+
if (options.json) {
|
|
218
|
+
output.json(data);
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
if (data.items.length === 0) {
|
|
222
|
+
output.info('No members found');
|
|
223
|
+
return;
|
|
224
|
+
}
|
|
225
|
+
output.table(['User ID', 'Username', 'Email', 'Added At'], data.items.map((m) => [
|
|
226
|
+
m.userId,
|
|
227
|
+
m.username,
|
|
228
|
+
m.email ?? '-',
|
|
229
|
+
new Date(m.addedAt).toLocaleDateString(),
|
|
230
|
+
]));
|
|
231
|
+
output.info(`Total: ${data.pagination.total} member(s)`);
|
|
232
|
+
}
|
|
233
|
+
catch (err) {
|
|
234
|
+
spinner.fail('Error fetching members');
|
|
235
|
+
output.error(err instanceof Error ? err.message : 'Unknown error');
|
|
236
|
+
process.exit(1);
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
// Add member
|
|
240
|
+
members
|
|
241
|
+
.command('add <groupId> <userId>')
|
|
242
|
+
.description('Add user to group')
|
|
243
|
+
.action(async (groupId, userId) => {
|
|
244
|
+
const spinner = ora('Adding member...').start();
|
|
245
|
+
try {
|
|
246
|
+
const data = await client.post(`/v1/sso/groups/${groupId}/members`, {
|
|
247
|
+
user_id: userId,
|
|
248
|
+
});
|
|
249
|
+
spinner.succeed('Member added successfully');
|
|
250
|
+
output.keyValue({
|
|
251
|
+
'User ID': data.userId,
|
|
252
|
+
'Username': data.username,
|
|
253
|
+
'Added At': new Date(data.addedAt).toLocaleString(),
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
catch (err) {
|
|
257
|
+
spinner.fail('Error adding member');
|
|
258
|
+
output.error(err instanceof Error ? err.message : 'Unknown error');
|
|
259
|
+
process.exit(1);
|
|
260
|
+
}
|
|
261
|
+
});
|
|
262
|
+
// Remove member
|
|
263
|
+
members
|
|
264
|
+
.command('remove <groupId> <userId>')
|
|
265
|
+
.description('Remove user from group')
|
|
266
|
+
.option('-y, --yes', 'Skip confirmation')
|
|
267
|
+
.action(async (groupId, userId, options) => {
|
|
268
|
+
try {
|
|
269
|
+
if (!options.yes) {
|
|
270
|
+
const confirmed = await promptConfirm(`Remove user ${userId} from group?`);
|
|
271
|
+
if (!confirmed) {
|
|
272
|
+
output.info('Cancelled');
|
|
273
|
+
return;
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
const spinner = ora('Removing member...').start();
|
|
277
|
+
await client.delete(`/v1/sso/groups/${groupId}/members/${userId}`);
|
|
278
|
+
spinner.succeed('Member removed successfully');
|
|
279
|
+
}
|
|
280
|
+
catch (err) {
|
|
281
|
+
output.error(err instanceof Error ? err.message : 'Unknown error');
|
|
282
|
+
process.exit(1);
|
|
283
|
+
}
|
|
284
|
+
});
|
|
285
|
+
// ---------------------------------------------------------------------------
|
|
286
|
+
// My Groups
|
|
287
|
+
// ---------------------------------------------------------------------------
|
|
288
|
+
group
|
|
289
|
+
.command('my-groups')
|
|
290
|
+
.description('List groups you belong to')
|
|
291
|
+
.option('--json', 'Output as JSON')
|
|
292
|
+
.action(async (options) => {
|
|
293
|
+
const spinner = ora('Fetching your groups...').start();
|
|
294
|
+
try {
|
|
295
|
+
const data = await client.get('/v1/sso/my-groups');
|
|
296
|
+
spinner.stop();
|
|
297
|
+
if (options.json) {
|
|
298
|
+
output.json(data);
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
if (data.groups.length === 0) {
|
|
302
|
+
output.info('You are not a member of any groups');
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
output.table(['ID', 'Name', 'Display Name'], data.groups.map((g) => [
|
|
306
|
+
g.id,
|
|
307
|
+
g.name,
|
|
308
|
+
g.displayName ?? '-',
|
|
309
|
+
]));
|
|
310
|
+
output.info(`Total: ${data.groups.length} group(s)`);
|
|
311
|
+
}
|
|
312
|
+
catch (err) {
|
|
313
|
+
spinner.fail('Error fetching groups');
|
|
314
|
+
output.error(err instanceof Error ? err.message : 'Unknown error');
|
|
315
|
+
process.exit(1);
|
|
316
|
+
}
|
|
317
|
+
});
|
|
318
|
+
}
|
|
319
|
+
//# sourceMappingURL=group.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"group.js","sourceRoot":"","sources":["../../src/commands/group.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap-token.d.ts","sourceRoot":"","sources":["../../../src/commands/host/bootstrap-token.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"bootstrap-token.d.ts","sourceRoot":"","sources":["../../../src/commands/host/bootstrap-token.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOzC;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAiGtE"}
|
|
@@ -13,6 +13,7 @@ export function registerBootstrapTokenCommand(parentCmd) {
|
|
|
13
13
|
.alias('token')
|
|
14
14
|
.description('Generate a bootstrap token for a host')
|
|
15
15
|
.option('-e, --expires <duration>', 'Token expiration (e.g., 1h, 24h, 7d)', '24h')
|
|
16
|
+
.option('-a, --agent-hostname <hostname>', 'Agent hostname (for multi-host templates, defaults to host config name)')
|
|
16
17
|
.option('--json', 'Output as JSON')
|
|
17
18
|
.action(async (hostname, options) => {
|
|
18
19
|
// Parse expiration
|
|
@@ -27,35 +28,52 @@ export function registerBootstrapTokenCommand(parentCmd) {
|
|
|
27
28
|
}
|
|
28
29
|
const spinner = ora('Generating bootstrap token...').start();
|
|
29
30
|
try {
|
|
30
|
-
|
|
31
|
+
// Build request body
|
|
32
|
+
const body = { expiresAt };
|
|
33
|
+
if (options.agentHostname) {
|
|
34
|
+
body.agentHostname = options.agentHostname;
|
|
35
|
+
}
|
|
36
|
+
const response = await mode.apiPost(`/v1/hosts/${encodeURIComponent(hostname)}/bootstrap-token`, body);
|
|
31
37
|
spinner.succeed('Bootstrap token generated');
|
|
32
38
|
if (options.json) {
|
|
33
39
|
output.json(response);
|
|
34
40
|
return;
|
|
35
41
|
}
|
|
36
|
-
//
|
|
37
|
-
const
|
|
42
|
+
// Use bootstrapUrl directly (now includes token and hostname)
|
|
43
|
+
const bootstrapUrl = response.bootstrapUrl;
|
|
44
|
+
const agentHostname = response.agentHostname;
|
|
45
|
+
const isMultiHost = agentHostname !== hostname;
|
|
38
46
|
console.log();
|
|
39
|
-
|
|
47
|
+
if (isMultiHost) {
|
|
48
|
+
output.section(`Bootstrap Token for ${agentHostname} (template: ${hostname})`);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
output.section('Bootstrap Token for ' + hostname);
|
|
52
|
+
}
|
|
40
53
|
console.log();
|
|
41
|
-
|
|
54
|
+
const tokenInfo = {
|
|
42
55
|
'Token': response.token,
|
|
43
56
|
'Expires': new Date(response.expiresAt).toLocaleString(),
|
|
44
|
-
}
|
|
57
|
+
};
|
|
58
|
+
if (isMultiHost) {
|
|
59
|
+
tokenInfo['Host Config'] = hostname;
|
|
60
|
+
tokenInfo['Agent Hostname'] = agentHostname;
|
|
61
|
+
}
|
|
62
|
+
output.keyValue(tokenInfo);
|
|
45
63
|
console.log();
|
|
46
64
|
output.section('Quick Start (One Command)');
|
|
47
65
|
console.log();
|
|
48
66
|
console.log(' Run this on the target server to install and configure the agent:');
|
|
49
67
|
console.log();
|
|
50
|
-
console.log(` curl -sL "${
|
|
68
|
+
console.log(` curl -sL "${bootstrapUrl}" | sudo bash`);
|
|
51
69
|
console.log();
|
|
52
70
|
output.section('Review First (Recommended)');
|
|
53
71
|
console.log();
|
|
54
72
|
console.log(' Download the script, review it, then run:');
|
|
55
73
|
console.log();
|
|
56
|
-
console.log(` curl -sL "${
|
|
57
|
-
console.log(` less bootstrap-${
|
|
58
|
-
console.log(` sudo bash bootstrap-${
|
|
74
|
+
console.log(` curl -sL "${bootstrapUrl}" -o bootstrap-${agentHostname}.sh`);
|
|
75
|
+
console.log(` less bootstrap-${agentHostname}.sh`);
|
|
76
|
+
console.log(` sudo bash bootstrap-${agentHostname}.sh`);
|
|
59
77
|
console.log();
|
|
60
78
|
output.section('Alternative: Manual Installation');
|
|
61
79
|
console.log();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap-token.js","sourceRoot":"","sources":["../../../src/commands/host/bootstrap-token.ts"],"names":[],"mappings":"AAAA,6CAA6C;AAC7C,oCAAoC;AAGpC,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,KAAK,IAAI,MAAM,mBAAmB,CAAC;AAC1C,OAAO,KAAK,MAAM,MAAM,qBAAqB,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAE7C;;GAEG;AACH,MAAM,UAAU,6BAA6B,CAAC,SAAkB;IAC9D,SAAS;SACN,OAAO,CAAC,4BAA4B,CAAC;SACrC,KAAK,CAAC,OAAO,CAAC;SACd,WAAW,CAAC,uCAAuC,CAAC;SACpD,MAAM,CAAC,0BAA0B,EAAE,sCAAsC,EAAE,KAAK,CAAC;SACjF,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,KAAK,EAAE,QAAgB,EAAE,OAA8B,EAAE,EAAE;QACjE,mBAAmB;QACnB,IAAI,SAAiB,CAAC;QACtB,IAAI,CAAC;YACH,MAAM,cAAc,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC;YAC/D,SAAS,GAAG,cAAc,CAAC,WAAW,EAAE,CAAC;QAC3C,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;QAED,MAAM,OAAO,GAAG,GAAG,CAAC,+BAA+B,CAAC,CAAC,KAAK,EAAE,CAAC;QAE7D,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CACjC,aAAa,kBAAkB,CAAC,QAAQ,CAAC,kBAAkB,EAC3D,
|
|
1
|
+
{"version":3,"file":"bootstrap-token.js","sourceRoot":"","sources":["../../../src/commands/host/bootstrap-token.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/host/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/host/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0B3D;AAGD,cAAc,YAAY,CAAC"}
|
|
@@ -7,6 +7,7 @@ import { registerConfigCommand } from './config.js';
|
|
|
7
7
|
import { registerDeleteCommand } from './delete.js';
|
|
8
8
|
import { registerBootstrapTokenCommand } from './bootstrap-token.js';
|
|
9
9
|
import { registerSyncCommand } from './sync.js';
|
|
10
|
+
import { registerLinkAgentCommand, registerUnlinkAgentCommand } from './link-agent.js';
|
|
10
11
|
/**
|
|
11
12
|
* Register all host management commands
|
|
12
13
|
*/
|
|
@@ -26,6 +27,9 @@ export function registerHostCommands(program) {
|
|
|
26
27
|
// Bootstrap and sync
|
|
27
28
|
registerBootstrapTokenCommand(hostCmd);
|
|
28
29
|
registerSyncCommand(hostCmd);
|
|
30
|
+
// Agent linking
|
|
31
|
+
registerLinkAgentCommand(hostCmd);
|
|
32
|
+
registerUnlinkAgentCommand(hostCmd);
|
|
29
33
|
// Utility commands
|
|
30
34
|
registerOutdatedAgentsCommand(hostCmd);
|
|
31
35
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/host/index.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,wDAAwD;AAGxD,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,6BAA6B,EAAE,MAAM,UAAU,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/host/index.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,wDAAwD;AAGxD,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,6BAA6B,EAAE,MAAM,UAAU,CAAC;AAC7E,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,6BAA6B,EAAE,MAAM,sBAAsB,CAAC;AACrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,0BAA0B,EAAE,MAAM,iBAAiB,CAAC;AAEvF;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,OAAO,GAAG,OAAO;SACpB,OAAO,CAAC,MAAM,CAAC;SACf,KAAK,CAAC,OAAO,CAAC;SACd,WAAW,CAAC,yDAAyD,CAAC,CAAC;IAE1E,iBAAiB;IACjB,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7B,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAE9B,kBAAkB;IAClB,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5B,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAE/B,qBAAqB;IACrB,6BAA6B,CAAC,OAAO,CAAC,CAAC;IACvC,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAE7B,gBAAgB;IAChB,wBAAwB,CAAC,OAAO,CAAC,CAAC;IAClC,0BAA0B,CAAC,OAAO,CAAC,CAAC;IAEpC,mBAAmB;IACnB,6BAA6B,CAAC,OAAO,CAAC,CAAC;AACzC,CAAC;AAED,kBAAkB;AAClB,cAAc,YAAY,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Command options for link-agent
|
|
4
|
+
*/
|
|
5
|
+
export interface LinkAgentOptions {
|
|
6
|
+
agent?: string;
|
|
7
|
+
agentId?: string;
|
|
8
|
+
json?: boolean;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Command options for unlink-agent
|
|
12
|
+
*/
|
|
13
|
+
export interface UnlinkAgentOptions {
|
|
14
|
+
agent?: string;
|
|
15
|
+
agentId?: string;
|
|
16
|
+
json?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Register the link-agent command
|
|
20
|
+
*/
|
|
21
|
+
export declare function registerLinkAgentCommand(parentCmd: Command): void;
|
|
22
|
+
/**
|
|
23
|
+
* Register the unlink-agent command
|
|
24
|
+
*/
|
|
25
|
+
export declare function registerUnlinkAgentCommand(parentCmd: Command): void;
|
|
26
|
+
//# sourceMappingURL=link-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link-agent.d.ts","sourceRoot":"","sources":["../../../src/commands/host/link-agent.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAsBD;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAwDjE;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAmDnE"}
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
// Path: src/commands/host/link-agent.ts
|
|
2
|
+
// Link/unlink agents to host configurations
|
|
3
|
+
import ora from 'ora';
|
|
4
|
+
import * as mode from '../../lib/mode.js';
|
|
5
|
+
import * as output from '../../lib/output.js';
|
|
6
|
+
/**
|
|
7
|
+
* Register the link-agent command
|
|
8
|
+
*/
|
|
9
|
+
export function registerLinkAgentCommand(parentCmd) {
|
|
10
|
+
parentCmd
|
|
11
|
+
.command('link-agent <hostname>')
|
|
12
|
+
.description('Link an agent to a host configuration')
|
|
13
|
+
.option('-a, --agent <hostname>', 'Agent hostname to link')
|
|
14
|
+
.option('-i, --agent-id <id>', 'Agent ID to link (e.g., agent_abc123)')
|
|
15
|
+
.option('--json', 'Output as JSON')
|
|
16
|
+
.action(async (hostname, options) => {
|
|
17
|
+
// Validate options
|
|
18
|
+
if (!options.agent && !options.agentId) {
|
|
19
|
+
output.error('Either --agent <hostname> or --agent-id <id> is required');
|
|
20
|
+
console.log('\nExamples:');
|
|
21
|
+
console.log(' znvault host link-agent payara-staging --agent payara-staging-1');
|
|
22
|
+
console.log(' znvault host link-agent payara-staging --agent-id agent_e8ca2d55b0cf');
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
const spinner = ora('Linking agent to host config...').start();
|
|
26
|
+
try {
|
|
27
|
+
const body = {};
|
|
28
|
+
if (options.agentId) {
|
|
29
|
+
body.agentId = options.agentId;
|
|
30
|
+
}
|
|
31
|
+
else if (options.agent) {
|
|
32
|
+
body.agentHostname = options.agent;
|
|
33
|
+
}
|
|
34
|
+
const response = await mode.apiPost(`/v1/hosts/${encodeURIComponent(hostname)}/link-agent`, body);
|
|
35
|
+
spinner.succeed('Agent linked successfully');
|
|
36
|
+
if (options.json) {
|
|
37
|
+
output.json(response);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
console.log();
|
|
41
|
+
output.keyValue({
|
|
42
|
+
'Agent ID': response.agentId,
|
|
43
|
+
'Agent Hostname': response.agentHostname,
|
|
44
|
+
'Host Config': response.hostConfigName,
|
|
45
|
+
'Host Config ID': response.hostConfigId,
|
|
46
|
+
});
|
|
47
|
+
console.log();
|
|
48
|
+
output.success(`Agent "${response.agentHostname}" is now linked to host config "${hostname}"`);
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
spinner.fail('Failed to link agent');
|
|
52
|
+
output.error(err instanceof Error ? err.message : String(err));
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
finally {
|
|
56
|
+
await mode.closeLocalClient();
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Register the unlink-agent command
|
|
62
|
+
*/
|
|
63
|
+
export function registerUnlinkAgentCommand(parentCmd) {
|
|
64
|
+
parentCmd
|
|
65
|
+
.command('unlink-agent <hostname>')
|
|
66
|
+
.description('Unlink an agent from a host configuration')
|
|
67
|
+
.option('-a, --agent <hostname>', 'Agent hostname to unlink')
|
|
68
|
+
.option('-i, --agent-id <id>', 'Agent ID to unlink (e.g., agent_abc123)')
|
|
69
|
+
.option('--json', 'Output as JSON')
|
|
70
|
+
.action(async (hostname, options) => {
|
|
71
|
+
// Validate options
|
|
72
|
+
if (!options.agent && !options.agentId) {
|
|
73
|
+
output.error('Either --agent <hostname> or --agent-id <id> is required');
|
|
74
|
+
process.exit(1);
|
|
75
|
+
}
|
|
76
|
+
const spinner = ora('Unlinking agent from host config...').start();
|
|
77
|
+
try {
|
|
78
|
+
// Build query params
|
|
79
|
+
const params = new URLSearchParams();
|
|
80
|
+
if (options.agentId) {
|
|
81
|
+
params.set('agentId', options.agentId);
|
|
82
|
+
}
|
|
83
|
+
else if (options.agent) {
|
|
84
|
+
params.set('agentHostname', options.agent);
|
|
85
|
+
}
|
|
86
|
+
const response = await mode.apiDelete(`/v1/hosts/${encodeURIComponent(hostname)}/link-agent?${params.toString()}`);
|
|
87
|
+
spinner.succeed('Agent unlinked successfully');
|
|
88
|
+
if (options.json) {
|
|
89
|
+
output.json(response);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
console.log();
|
|
93
|
+
output.keyValue({
|
|
94
|
+
'Agent ID': response.agentId,
|
|
95
|
+
'Agent Hostname': response.agentHostname,
|
|
96
|
+
});
|
|
97
|
+
console.log();
|
|
98
|
+
output.success(`Agent "${response.agentHostname}" has been unlinked from host config "${hostname}"`);
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
101
|
+
spinner.fail('Failed to unlink agent');
|
|
102
|
+
output.error(err instanceof Error ? err.message : String(err));
|
|
103
|
+
process.exit(1);
|
|
104
|
+
}
|
|
105
|
+
finally {
|
|
106
|
+
await mode.closeLocalClient();
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
//# sourceMappingURL=link-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"link-agent.js","sourceRoot":"","sources":["../../../src/commands/host/link-agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -156,7 +156,10 @@ export interface BootstrapTokenResponse {
|
|
|
156
156
|
expiresAt: string;
|
|
157
157
|
bootstrapUrl: string;
|
|
158
158
|
hostConfigId: string;
|
|
159
|
+
/** Host config name (template) */
|
|
159
160
|
hostname: string;
|
|
161
|
+
/** Agent hostname (may differ from config name for multi-host templates) */
|
|
162
|
+
agentHostname: string;
|
|
160
163
|
}
|
|
161
164
|
/**
|
|
162
165
|
* Sync response
|
|
@@ -206,6 +209,8 @@ export interface DeleteOptions {
|
|
|
206
209
|
}
|
|
207
210
|
export interface BootstrapTokenOptions {
|
|
208
211
|
expires?: string;
|
|
212
|
+
/** Agent hostname (for multi-host templates, defaults to host config name) */
|
|
213
|
+
agentHostname?: string;
|
|
209
214
|
json?: boolean;
|
|
210
215
|
}
|
|
211
216
|
export interface SyncOptions {
|