@bldg-7/proxmox-mcp 0.4.3 → 0.6.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/README.md +189 -13
- package/dist/schemas/access-control.d.ts +67 -0
- package/dist/schemas/access-control.d.ts.map +1 -1
- package/dist/schemas/access-control.js +29 -0
- package/dist/schemas/access-control.js.map +1 -1
- package/dist/schemas/acme.d.ts +60 -0
- package/dist/schemas/acme.d.ts.map +1 -0
- package/dist/schemas/acme.js +32 -0
- package/dist/schemas/acme.js.map +1 -0
- package/dist/schemas/certificate.d.ts +76 -0
- package/dist/schemas/certificate.d.ts.map +1 -0
- package/dist/schemas/certificate.js +36 -0
- package/dist/schemas/certificate.js.map +1 -0
- package/dist/schemas/cloud-init.d.ts +39 -0
- package/dist/schemas/cloud-init.d.ts.map +1 -0
- package/dist/schemas/cloud-init.js +14 -0
- package/dist/schemas/cloud-init.js.map +1 -0
- package/dist/schemas/cluster-management.d.ts +189 -6
- package/dist/schemas/cluster-management.d.ts.map +1 -1
- package/dist/schemas/cluster-management.js +89 -0
- package/dist/schemas/cluster-management.js.map +1 -1
- package/dist/schemas/disk.d.ts +43 -2
- package/dist/schemas/disk.d.ts.map +1 -1
- package/dist/schemas/disk.js +19 -0
- package/dist/schemas/disk.js.map +1 -1
- package/dist/schemas/index.d.ts +1 -0
- package/dist/schemas/index.d.ts.map +1 -1
- package/dist/schemas/index.js +1 -0
- package/dist/schemas/index.js.map +1 -1
- package/dist/schemas/node.d.ts +39 -0
- package/dist/schemas/node.d.ts.map +1 -1
- package/dist/schemas/node.js +17 -0
- package/dist/schemas/node.js.map +1 -1
- package/dist/schemas/notifications.d.ts +81 -0
- package/dist/schemas/notifications.d.ts.map +1 -0
- package/dist/schemas/notifications.js +39 -0
- package/dist/schemas/notifications.js.map +1 -0
- package/dist/schemas/system-operations.d.ts +57 -0
- package/dist/schemas/system-operations.d.ts.map +1 -1
- package/dist/schemas/system-operations.js +27 -0
- package/dist/schemas/system-operations.js.map +1 -1
- package/dist/schemas/vm-advanced.d.ts +178 -0
- package/dist/schemas/vm-advanced.d.ts.map +1 -1
- package/dist/schemas/vm-advanced.js +38 -0
- package/dist/schemas/vm-advanced.js.map +1 -1
- package/dist/schemas/vm.d.ts +53 -3
- package/dist/schemas/vm.d.ts.map +1 -1
- package/dist/schemas/vm.js +22 -0
- package/dist/schemas/vm.js.map +1 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +85 -0
- package/dist/server.js.map +1 -1
- package/dist/tools/access-control.d.ts +21 -1
- package/dist/tools/access-control.d.ts.map +1 -1
- package/dist/tools/access-control.js +140 -1
- package/dist/tools/access-control.js.map +1 -1
- package/dist/tools/acme.d.ts +13 -0
- package/dist/tools/acme.d.ts.map +1 -0
- package/dist/tools/acme.js +188 -0
- package/dist/tools/acme.js.map +1 -0
- package/dist/tools/certificate.d.ts +12 -0
- package/dist/tools/certificate.d.ts.map +1 -0
- package/dist/tools/certificate.js +156 -0
- package/dist/tools/certificate.js.map +1 -0
- package/dist/tools/cloud-init.d.ts +19 -0
- package/dist/tools/cloud-init.d.ts.map +1 -0
- package/dist/tools/cloud-init.js +62 -0
- package/dist/tools/cloud-init.js.map +1 -0
- package/dist/tools/cluster-management.d.ts +85 -1
- package/dist/tools/cluster-management.d.ts.map +1 -1
- package/dist/tools/cluster-management.js +520 -1
- package/dist/tools/cluster-management.js.map +1 -1
- package/dist/tools/disk.d.ts +21 -1
- package/dist/tools/disk.d.ts.map +1 -1
- package/dist/tools/disk.js +127 -1
- package/dist/tools/disk.js.map +1 -1
- package/dist/tools/index.d.ts +11 -6
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +16 -6
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/node.d.ts +16 -1
- package/dist/tools/node.d.ts.map +1 -1
- package/dist/tools/node.js +88 -1
- package/dist/tools/node.js.map +1 -1
- package/dist/tools/notifications.d.ts +10 -0
- package/dist/tools/notifications.d.ts.map +1 -0
- package/dist/tools/notifications.js +135 -0
- package/dist/tools/notifications.js.map +1 -0
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +164 -11
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/system-operations.d.ts +31 -1
- package/dist/tools/system-operations.d.ts.map +1 -1
- package/dist/tools/system-operations.js +131 -1
- package/dist/tools/system-operations.js.map +1 -1
- package/dist/tools/vm-advanced.d.ts +60 -1
- package/dist/tools/vm-advanced.d.ts.map +1 -1
- package/dist/tools/vm-advanced.js +354 -2
- package/dist/tools/vm-advanced.js.map +1 -1
- package/dist/tools/vm-query.d.ts +21 -1
- package/dist/tools/vm-query.d.ts.map +1 -1
- package/dist/tools/vm-query.js +115 -1
- package/dist/tools/vm-query.js.map +1 -1
- package/dist/types/tools.d.ts +1 -1
- package/dist/types/tools.d.ts.map +1 -1
- package/dist/types/tools.js +84 -0
- package/dist/types/tools.js.map +1 -1
- package/dist/validators/index.d.ts +18 -0
- package/dist/validators/index.d.ts.map +1 -1
- package/dist/validators/index.js +52 -0
- package/dist/validators/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { ProxmoxApiClient } from '../client/proxmox.js';
|
|
2
2
|
import type { Config } from '../config/index.js';
|
|
3
3
|
import type { ToolResponse } from '../types/index.js';
|
|
4
|
-
import type { GetHaResourcesInput, GetHaResourceInput, CreateHaResourceInput, UpdateHaResourceInput, DeleteHaResourceInput, GetHaGroupsInput, GetHaGroupInput, CreateHaGroupInput, UpdateHaGroupInput, DeleteHaGroupInput, GetHaStatusInput, ListClusterFirewallRulesInput, GetClusterFirewallRuleInput, CreateClusterFirewallRuleInput, UpdateClusterFirewallRuleInput, DeleteClusterFirewallRuleInput, ListClusterFirewallGroupsInput, GetClusterFirewallGroupInput, CreateClusterFirewallGroupInput, UpdateClusterFirewallGroupInput, DeleteClusterFirewallGroupInput, ListClusterBackupJobsInput, GetClusterBackupJobInput, CreateClusterBackupJobInput, UpdateClusterBackupJobInput, DeleteClusterBackupJobInput, ListClusterReplicationJobsInput, GetClusterReplicationJobInput, CreateClusterReplicationJobInput, UpdateClusterReplicationJobInput, DeleteClusterReplicationJobInput, GetClusterOptionsInput, UpdateClusterOptionsInput } from '../schemas/cluster-management.js';
|
|
4
|
+
import type { GetHaResourcesInput, GetHaResourceInput, CreateHaResourceInput, UpdateHaResourceInput, DeleteHaResourceInput, GetHaGroupsInput, GetHaGroupInput, CreateHaGroupInput, UpdateHaGroupInput, DeleteHaGroupInput, GetHaStatusInput, ListClusterFirewallRulesInput, GetClusterFirewallRuleInput, CreateClusterFirewallRuleInput, UpdateClusterFirewallRuleInput, DeleteClusterFirewallRuleInput, ListClusterFirewallGroupsInput, GetClusterFirewallGroupInput, CreateClusterFirewallGroupInput, UpdateClusterFirewallGroupInput, DeleteClusterFirewallGroupInput, ListClusterBackupJobsInput, GetClusterBackupJobInput, CreateClusterBackupJobInput, UpdateClusterBackupJobInput, DeleteClusterBackupJobInput, ListClusterReplicationJobsInput, GetClusterReplicationJobInput, CreateClusterReplicationJobInput, UpdateClusterReplicationJobInput, DeleteClusterReplicationJobInput, GetClusterOptionsInput, UpdateClusterOptionsInput, GetClusterFirewallOptionsInput, UpdateClusterFirewallOptionsInput, ListClusterFirewallMacrosInput, ListClusterFirewallRefsInput, ListClusterFirewallAliasesInput, GetClusterFirewallAliasInput, CreateClusterFirewallAliasInput, UpdateClusterFirewallAliasInput, DeleteClusterFirewallAliasInput, ListClusterFirewallIpsetsInput, CreateClusterFirewallIpsetInput, DeleteClusterFirewallIpsetInput, ListClusterFirewallIpsetEntriesInput, AddClusterFirewallIpsetEntryInput, UpdateClusterFirewallIpsetEntryInput, DeleteClusterFirewallIpsetEntryInput, GetClusterConfigInput, ListClusterConfigNodesInput, GetClusterConfigNodeInput, JoinClusterInput, GetClusterTotemInput } from '../schemas/cluster-management.js';
|
|
5
5
|
/**
|
|
6
6
|
* List HA resources.
|
|
7
7
|
*/
|
|
@@ -134,4 +134,88 @@ export declare function getClusterOptions(client: ProxmoxApiClient, _config: Con
|
|
|
134
134
|
* Update cluster options.
|
|
135
135
|
*/
|
|
136
136
|
export declare function updateClusterOptions(client: ProxmoxApiClient, config: Config, input: UpdateClusterOptionsInput): Promise<ToolResponse>;
|
|
137
|
+
/**
|
|
138
|
+
* Get cluster firewall options.
|
|
139
|
+
*/
|
|
140
|
+
export declare function getClusterFirewallOptions(client: ProxmoxApiClient, _config: Config, input: GetClusterFirewallOptionsInput): Promise<ToolResponse>;
|
|
141
|
+
/**
|
|
142
|
+
* Update cluster firewall options.
|
|
143
|
+
*/
|
|
144
|
+
export declare function updateClusterFirewallOptions(client: ProxmoxApiClient, config: Config, input: UpdateClusterFirewallOptionsInput): Promise<ToolResponse>;
|
|
145
|
+
/**
|
|
146
|
+
* List cluster firewall macros.
|
|
147
|
+
*/
|
|
148
|
+
export declare function listClusterFirewallMacros(client: ProxmoxApiClient, _config: Config, input: ListClusterFirewallMacrosInput): Promise<ToolResponse>;
|
|
149
|
+
/**
|
|
150
|
+
* List cluster firewall refs.
|
|
151
|
+
*/
|
|
152
|
+
export declare function listClusterFirewallRefs(client: ProxmoxApiClient, _config: Config, input: ListClusterFirewallRefsInput): Promise<ToolResponse>;
|
|
153
|
+
/**
|
|
154
|
+
* List cluster firewall aliases.
|
|
155
|
+
*/
|
|
156
|
+
export declare function listClusterFirewallAliases(client: ProxmoxApiClient, _config: Config, input: ListClusterFirewallAliasesInput): Promise<ToolResponse>;
|
|
157
|
+
/**
|
|
158
|
+
* Get cluster firewall alias.
|
|
159
|
+
*/
|
|
160
|
+
export declare function getClusterFirewallAlias(client: ProxmoxApiClient, _config: Config, input: GetClusterFirewallAliasInput): Promise<ToolResponse>;
|
|
161
|
+
/**
|
|
162
|
+
* Create cluster firewall alias.
|
|
163
|
+
*/
|
|
164
|
+
export declare function createClusterFirewallAlias(client: ProxmoxApiClient, config: Config, input: CreateClusterFirewallAliasInput): Promise<ToolResponse>;
|
|
165
|
+
/**
|
|
166
|
+
* Update cluster firewall alias.
|
|
167
|
+
*/
|
|
168
|
+
export declare function updateClusterFirewallAlias(client: ProxmoxApiClient, config: Config, input: UpdateClusterFirewallAliasInput): Promise<ToolResponse>;
|
|
169
|
+
/**
|
|
170
|
+
* Delete cluster firewall alias.
|
|
171
|
+
*/
|
|
172
|
+
export declare function deleteClusterFirewallAlias(client: ProxmoxApiClient, config: Config, input: DeleteClusterFirewallAliasInput): Promise<ToolResponse>;
|
|
173
|
+
/**
|
|
174
|
+
* List cluster firewall IP sets.
|
|
175
|
+
*/
|
|
176
|
+
export declare function listClusterFirewallIpsets(client: ProxmoxApiClient, _config: Config, input: ListClusterFirewallIpsetsInput): Promise<ToolResponse>;
|
|
177
|
+
/**
|
|
178
|
+
* Create cluster firewall IP set.
|
|
179
|
+
*/
|
|
180
|
+
export declare function createClusterFirewallIpset(client: ProxmoxApiClient, config: Config, input: CreateClusterFirewallIpsetInput): Promise<ToolResponse>;
|
|
181
|
+
/**
|
|
182
|
+
* Delete cluster firewall IP set.
|
|
183
|
+
*/
|
|
184
|
+
export declare function deleteClusterFirewallIpset(client: ProxmoxApiClient, config: Config, input: DeleteClusterFirewallIpsetInput): Promise<ToolResponse>;
|
|
185
|
+
/**
|
|
186
|
+
* List cluster firewall IP set entries.
|
|
187
|
+
*/
|
|
188
|
+
export declare function listClusterFirewallIpsetEntries(client: ProxmoxApiClient, _config: Config, input: ListClusterFirewallIpsetEntriesInput): Promise<ToolResponse>;
|
|
189
|
+
/**
|
|
190
|
+
* Add cluster firewall IP set entry.
|
|
191
|
+
*/
|
|
192
|
+
export declare function addClusterFirewallIpsetEntry(client: ProxmoxApiClient, config: Config, input: AddClusterFirewallIpsetEntryInput): Promise<ToolResponse>;
|
|
193
|
+
/**
|
|
194
|
+
* Update cluster firewall IP set entry.
|
|
195
|
+
*/
|
|
196
|
+
export declare function updateClusterFirewallIpsetEntry(client: ProxmoxApiClient, config: Config, input: UpdateClusterFirewallIpsetEntryInput): Promise<ToolResponse>;
|
|
197
|
+
/**
|
|
198
|
+
* Delete cluster firewall IP set entry.
|
|
199
|
+
*/
|
|
200
|
+
export declare function deleteClusterFirewallIpsetEntry(client: ProxmoxApiClient, config: Config, input: DeleteClusterFirewallIpsetEntryInput): Promise<ToolResponse>;
|
|
201
|
+
/**
|
|
202
|
+
* Get cluster config.
|
|
203
|
+
*/
|
|
204
|
+
export declare function getClusterConfig(client: ProxmoxApiClient, _config: Config, input: GetClusterConfigInput): Promise<ToolResponse>;
|
|
205
|
+
/**
|
|
206
|
+
* List cluster config nodes.
|
|
207
|
+
*/
|
|
208
|
+
export declare function listClusterConfigNodes(client: ProxmoxApiClient, _config: Config, input: ListClusterConfigNodesInput): Promise<ToolResponse>;
|
|
209
|
+
/**
|
|
210
|
+
* Get cluster config node.
|
|
211
|
+
*/
|
|
212
|
+
export declare function getClusterConfigNode(client: ProxmoxApiClient, _config: Config, input: GetClusterConfigNodeInput): Promise<ToolResponse>;
|
|
213
|
+
/**
|
|
214
|
+
* Join cluster.
|
|
215
|
+
*/
|
|
216
|
+
export declare function joinCluster(client: ProxmoxApiClient, config: Config, input: JoinClusterInput): Promise<ToolResponse>;
|
|
217
|
+
/**
|
|
218
|
+
* Get cluster totem config.
|
|
219
|
+
*/
|
|
220
|
+
export declare function getClusterTotem(client: ProxmoxApiClient, _config: Config, input: GetClusterTotemInput): Promise<ToolResponse>;
|
|
137
221
|
//# sourceMappingURL=cluster-management.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cluster-management.d.ts","sourceRoot":"","sources":["../../src/tools/cluster-management.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"cluster-management.d.ts","sourceRoot":"","sources":["../../src/tools/cluster-management.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { formatToolResponse, formatErrorResponse } from '../formatters/index.js';
|
|
2
2
|
import { requireElevated } from '../middleware/index.js';
|
|
3
3
|
import { validateHaResourceId, validateHaGroupId, validateFirewallGroupName, validateFirewallRulePos, validateBackupJobId, validateReplicationJobId, } from '../validators/index.js';
|
|
4
|
-
import { getHaResourcesSchema, getHaResourceSchema, createHaResourceSchema, updateHaResourceSchema, deleteHaResourceSchema, getHaGroupsSchema, getHaGroupSchema, createHaGroupSchema, updateHaGroupSchema, deleteHaGroupSchema, getHaStatusSchema, listClusterFirewallRulesSchema, getClusterFirewallRuleSchema, createClusterFirewallRuleSchema, updateClusterFirewallRuleSchema, deleteClusterFirewallRuleSchema, listClusterFirewallGroupsSchema, getClusterFirewallGroupSchema, createClusterFirewallGroupSchema, updateClusterFirewallGroupSchema, deleteClusterFirewallGroupSchema, listClusterBackupJobsSchema, getClusterBackupJobSchema, createClusterBackupJobSchema, updateClusterBackupJobSchema, deleteClusterBackupJobSchema, listClusterReplicationJobsSchema, getClusterReplicationJobSchema, createClusterReplicationJobSchema, updateClusterReplicationJobSchema, deleteClusterReplicationJobSchema, getClusterOptionsSchema, updateClusterOptionsSchema, } from '../schemas/cluster-management.js';
|
|
4
|
+
import { getHaResourcesSchema, getHaResourceSchema, createHaResourceSchema, updateHaResourceSchema, deleteHaResourceSchema, getHaGroupsSchema, getHaGroupSchema, createHaGroupSchema, updateHaGroupSchema, deleteHaGroupSchema, getHaStatusSchema, listClusterFirewallRulesSchema, getClusterFirewallRuleSchema, createClusterFirewallRuleSchema, updateClusterFirewallRuleSchema, deleteClusterFirewallRuleSchema, listClusterFirewallGroupsSchema, getClusterFirewallGroupSchema, createClusterFirewallGroupSchema, updateClusterFirewallGroupSchema, deleteClusterFirewallGroupSchema, listClusterBackupJobsSchema, getClusterBackupJobSchema, createClusterBackupJobSchema, updateClusterBackupJobSchema, deleteClusterBackupJobSchema, listClusterReplicationJobsSchema, getClusterReplicationJobSchema, createClusterReplicationJobSchema, updateClusterReplicationJobSchema, deleteClusterReplicationJobSchema, getClusterOptionsSchema, updateClusterOptionsSchema, getClusterFirewallOptionsSchema, updateClusterFirewallOptionsSchema, listClusterFirewallMacrosSchema, listClusterFirewallRefsSchema, listClusterFirewallAliasesSchema, getClusterFirewallAliasSchema, createClusterFirewallAliasSchema, updateClusterFirewallAliasSchema, deleteClusterFirewallAliasSchema, listClusterFirewallIpsetsSchema, createClusterFirewallIpsetSchema, deleteClusterFirewallIpsetSchema, listClusterFirewallIpsetEntriesSchema, addClusterFirewallIpsetEntrySchema, updateClusterFirewallIpsetEntrySchema, deleteClusterFirewallIpsetEntrySchema, getClusterConfigSchema, listClusterConfigNodesSchema, getClusterConfigNodeSchema, joinClusterSchema, getClusterTotemSchema, } from '../schemas/cluster-management.js';
|
|
5
5
|
/**
|
|
6
6
|
* List HA resources.
|
|
7
7
|
*/
|
|
@@ -1052,4 +1052,523 @@ export async function updateClusterOptions(client, config, input) {
|
|
|
1052
1052
|
return formatErrorResponse(error, 'Update Cluster Options');
|
|
1053
1053
|
}
|
|
1054
1054
|
}
|
|
1055
|
+
/**
|
|
1056
|
+
* Get cluster firewall options.
|
|
1057
|
+
*/
|
|
1058
|
+
export async function getClusterFirewallOptions(client, _config, input) {
|
|
1059
|
+
try {
|
|
1060
|
+
getClusterFirewallOptionsSchema.parse(input);
|
|
1061
|
+
const options = (await client.request('/cluster/firewall/options'));
|
|
1062
|
+
let output = '🛡️ **Cluster Firewall Options**\n\n';
|
|
1063
|
+
const entries = Object.entries(options ?? {});
|
|
1064
|
+
if (entries.length === 0) {
|
|
1065
|
+
output += 'No firewall options found.';
|
|
1066
|
+
return formatToolResponse(output);
|
|
1067
|
+
}
|
|
1068
|
+
for (const [key, value] of entries) {
|
|
1069
|
+
output += `• **${key}**: ${typeof value === 'string' ? value : JSON.stringify(value)}\n`;
|
|
1070
|
+
}
|
|
1071
|
+
return formatToolResponse(output.trimEnd());
|
|
1072
|
+
}
|
|
1073
|
+
catch (error) {
|
|
1074
|
+
return formatErrorResponse(error, 'Get Cluster Firewall Options');
|
|
1075
|
+
}
|
|
1076
|
+
}
|
|
1077
|
+
/**
|
|
1078
|
+
* Update cluster firewall options.
|
|
1079
|
+
*/
|
|
1080
|
+
export async function updateClusterFirewallOptions(client, config, input) {
|
|
1081
|
+
try {
|
|
1082
|
+
requireElevated(config, 'update cluster firewall options');
|
|
1083
|
+
const validated = updateClusterFirewallOptionsSchema.parse(input);
|
|
1084
|
+
const payload = {};
|
|
1085
|
+
if (validated.enable !== undefined)
|
|
1086
|
+
payload.enable = validated.enable;
|
|
1087
|
+
if (validated.policy_in)
|
|
1088
|
+
payload.policy_in = validated.policy_in;
|
|
1089
|
+
if (validated.policy_out)
|
|
1090
|
+
payload.policy_out = validated.policy_out;
|
|
1091
|
+
if (validated.log_ratelimit)
|
|
1092
|
+
payload.log_ratelimit = validated.log_ratelimit;
|
|
1093
|
+
const result = await client.request('/cluster/firewall/options', 'PUT', payload);
|
|
1094
|
+
let output = '✅ **Cluster Firewall Options Updated**\n\n';
|
|
1095
|
+
output += `• **Updated Keys**: ${Object.keys(payload).join(', ') || 'none'}\n`;
|
|
1096
|
+
output += `• **Result**: ${result ?? 'OK'}`;
|
|
1097
|
+
return formatToolResponse(output);
|
|
1098
|
+
}
|
|
1099
|
+
catch (error) {
|
|
1100
|
+
return formatErrorResponse(error, 'Update Cluster Firewall Options');
|
|
1101
|
+
}
|
|
1102
|
+
}
|
|
1103
|
+
/**
|
|
1104
|
+
* List cluster firewall macros.
|
|
1105
|
+
*/
|
|
1106
|
+
export async function listClusterFirewallMacros(client, _config, input) {
|
|
1107
|
+
try {
|
|
1108
|
+
listClusterFirewallMacrosSchema.parse(input);
|
|
1109
|
+
const macros = (await client.request('/cluster/firewall/macros'));
|
|
1110
|
+
let output = '🛡️ **Cluster Firewall Macros**\n\n';
|
|
1111
|
+
if (!macros || macros.length === 0) {
|
|
1112
|
+
output += 'No firewall macros found.';
|
|
1113
|
+
return formatToolResponse(output);
|
|
1114
|
+
}
|
|
1115
|
+
for (const macro of macros) {
|
|
1116
|
+
const name = macro.name ?? 'unknown';
|
|
1117
|
+
output += `• **${name}**`;
|
|
1118
|
+
if (macro.descr)
|
|
1119
|
+
output += ` - ${macro.descr}`;
|
|
1120
|
+
output += '\n';
|
|
1121
|
+
}
|
|
1122
|
+
output += `\n**Total**: ${macros.length} macro(s)`;
|
|
1123
|
+
return formatToolResponse(output);
|
|
1124
|
+
}
|
|
1125
|
+
catch (error) {
|
|
1126
|
+
return formatErrorResponse(error, 'List Cluster Firewall Macros');
|
|
1127
|
+
}
|
|
1128
|
+
}
|
|
1129
|
+
/**
|
|
1130
|
+
* List cluster firewall refs.
|
|
1131
|
+
*/
|
|
1132
|
+
export async function listClusterFirewallRefs(client, _config, input) {
|
|
1133
|
+
try {
|
|
1134
|
+
const validated = listClusterFirewallRefsSchema.parse(input);
|
|
1135
|
+
const typeFilter = validated.type ? `?type=${encodeURIComponent(validated.type)}` : '';
|
|
1136
|
+
const refs = (await client.request(`/cluster/firewall/refs${typeFilter}`));
|
|
1137
|
+
let output = '🛡️ **Cluster Firewall References**\n\n';
|
|
1138
|
+
if (!refs || refs.length === 0) {
|
|
1139
|
+
output += 'No firewall references found.';
|
|
1140
|
+
return formatToolResponse(output);
|
|
1141
|
+
}
|
|
1142
|
+
for (const ref of refs) {
|
|
1143
|
+
const name = ref.name ?? 'unknown';
|
|
1144
|
+
const type = ref.type ?? 'unknown';
|
|
1145
|
+
output += `• **${name}** (${type})`;
|
|
1146
|
+
if (ref.comment)
|
|
1147
|
+
output += ` - ${ref.comment}`;
|
|
1148
|
+
output += '\n';
|
|
1149
|
+
}
|
|
1150
|
+
output += `\n**Total**: ${refs.length} reference(s)`;
|
|
1151
|
+
return formatToolResponse(output);
|
|
1152
|
+
}
|
|
1153
|
+
catch (error) {
|
|
1154
|
+
return formatErrorResponse(error, 'List Cluster Firewall Refs');
|
|
1155
|
+
}
|
|
1156
|
+
}
|
|
1157
|
+
/**
|
|
1158
|
+
* List cluster firewall aliases.
|
|
1159
|
+
*/
|
|
1160
|
+
export async function listClusterFirewallAliases(client, _config, input) {
|
|
1161
|
+
try {
|
|
1162
|
+
listClusterFirewallAliasesSchema.parse(input);
|
|
1163
|
+
const aliases = (await client.request('/cluster/firewall/aliases'));
|
|
1164
|
+
let output = '🔖 **Cluster Firewall Aliases**\n\n';
|
|
1165
|
+
if (!aliases || aliases.length === 0) {
|
|
1166
|
+
output += 'No firewall aliases found.';
|
|
1167
|
+
return formatToolResponse(output);
|
|
1168
|
+
}
|
|
1169
|
+
for (const alias of aliases) {
|
|
1170
|
+
const name = alias.name ?? 'unknown';
|
|
1171
|
+
output += `• **${name}**`;
|
|
1172
|
+
if (alias.cidr)
|
|
1173
|
+
output += ` - ${alias.cidr}`;
|
|
1174
|
+
if (alias.comment)
|
|
1175
|
+
output += ` (${alias.comment})`;
|
|
1176
|
+
output += '\n';
|
|
1177
|
+
}
|
|
1178
|
+
output += `\n**Total**: ${aliases.length} alias(es)`;
|
|
1179
|
+
return formatToolResponse(output);
|
|
1180
|
+
}
|
|
1181
|
+
catch (error) {
|
|
1182
|
+
return formatErrorResponse(error, 'List Cluster Firewall Aliases');
|
|
1183
|
+
}
|
|
1184
|
+
}
|
|
1185
|
+
/**
|
|
1186
|
+
* Get cluster firewall alias.
|
|
1187
|
+
*/
|
|
1188
|
+
export async function getClusterFirewallAlias(client, _config, input) {
|
|
1189
|
+
try {
|
|
1190
|
+
const validated = getClusterFirewallAliasSchema.parse(input);
|
|
1191
|
+
const safeName = validated.name;
|
|
1192
|
+
const alias = (await client.request(`/cluster/firewall/aliases/${encodeURIComponent(safeName)}`));
|
|
1193
|
+
let output = '🔖 **Cluster Firewall Alias**\n\n';
|
|
1194
|
+
output += `• **Name**: ${safeName}\n`;
|
|
1195
|
+
if (alias.cidr)
|
|
1196
|
+
output += `• **CIDR**: ${alias.cidr}\n`;
|
|
1197
|
+
if (alias.comment)
|
|
1198
|
+
output += `• **Comment**: ${alias.comment}\n`;
|
|
1199
|
+
return formatToolResponse(output.trimEnd());
|
|
1200
|
+
}
|
|
1201
|
+
catch (error) {
|
|
1202
|
+
return formatErrorResponse(error, 'Get Cluster Firewall Alias');
|
|
1203
|
+
}
|
|
1204
|
+
}
|
|
1205
|
+
/**
|
|
1206
|
+
* Create cluster firewall alias.
|
|
1207
|
+
*/
|
|
1208
|
+
export async function createClusterFirewallAlias(client, config, input) {
|
|
1209
|
+
try {
|
|
1210
|
+
requireElevated(config, 'create cluster firewall alias');
|
|
1211
|
+
const validated = createClusterFirewallAliasSchema.parse(input);
|
|
1212
|
+
const safeName = validated.name;
|
|
1213
|
+
const payload = {
|
|
1214
|
+
name: safeName,
|
|
1215
|
+
cidr: validated.cidr,
|
|
1216
|
+
};
|
|
1217
|
+
if (validated.comment)
|
|
1218
|
+
payload.comment = validated.comment;
|
|
1219
|
+
const result = await client.request('/cluster/firewall/aliases', 'POST', payload);
|
|
1220
|
+
let output = '✅ **Cluster Firewall Alias Created**\n\n';
|
|
1221
|
+
output += `• **Name**: ${safeName}\n`;
|
|
1222
|
+
output += `• **CIDR**: ${validated.cidr}\n`;
|
|
1223
|
+
if (validated.comment)
|
|
1224
|
+
output += `• **Comment**: ${validated.comment}\n`;
|
|
1225
|
+
output += `• **Result**: ${result ?? 'OK'}`;
|
|
1226
|
+
return formatToolResponse(output);
|
|
1227
|
+
}
|
|
1228
|
+
catch (error) {
|
|
1229
|
+
return formatErrorResponse(error, 'Create Cluster Firewall Alias');
|
|
1230
|
+
}
|
|
1231
|
+
}
|
|
1232
|
+
/**
|
|
1233
|
+
* Update cluster firewall alias.
|
|
1234
|
+
*/
|
|
1235
|
+
export async function updateClusterFirewallAlias(client, config, input) {
|
|
1236
|
+
try {
|
|
1237
|
+
requireElevated(config, 'update cluster firewall alias');
|
|
1238
|
+
const validated = updateClusterFirewallAliasSchema.parse(input);
|
|
1239
|
+
const safeName = validated.name;
|
|
1240
|
+
const payload = {
|
|
1241
|
+
cidr: validated.cidr,
|
|
1242
|
+
};
|
|
1243
|
+
if (validated.comment)
|
|
1244
|
+
payload.comment = validated.comment;
|
|
1245
|
+
if (validated.rename)
|
|
1246
|
+
payload.rename = validated.rename;
|
|
1247
|
+
const result = await client.request(`/cluster/firewall/aliases/${encodeURIComponent(safeName)}`, 'PUT', payload);
|
|
1248
|
+
let output = '✅ **Cluster Firewall Alias Updated**\n\n';
|
|
1249
|
+
output += `• **Name**: ${safeName}\n`;
|
|
1250
|
+
output += `• **CIDR**: ${validated.cidr}\n`;
|
|
1251
|
+
if (validated.rename)
|
|
1252
|
+
output += `• **Renamed to**: ${validated.rename}\n`;
|
|
1253
|
+
if (validated.comment)
|
|
1254
|
+
output += `• **Comment**: ${validated.comment}\n`;
|
|
1255
|
+
output += `• **Result**: ${result ?? 'OK'}`;
|
|
1256
|
+
return formatToolResponse(output);
|
|
1257
|
+
}
|
|
1258
|
+
catch (error) {
|
|
1259
|
+
return formatErrorResponse(error, 'Update Cluster Firewall Alias');
|
|
1260
|
+
}
|
|
1261
|
+
}
|
|
1262
|
+
/**
|
|
1263
|
+
* Delete cluster firewall alias.
|
|
1264
|
+
*/
|
|
1265
|
+
export async function deleteClusterFirewallAlias(client, config, input) {
|
|
1266
|
+
try {
|
|
1267
|
+
requireElevated(config, 'delete cluster firewall alias');
|
|
1268
|
+
const validated = deleteClusterFirewallAliasSchema.parse(input);
|
|
1269
|
+
const safeName = validated.name;
|
|
1270
|
+
const result = await client.request(`/cluster/firewall/aliases/${encodeURIComponent(safeName)}`, 'DELETE');
|
|
1271
|
+
let output = '🗑️ **Cluster Firewall Alias Deleted**\n\n';
|
|
1272
|
+
output += `• **Name**: ${safeName}\n`;
|
|
1273
|
+
output += `• **Result**: ${result ?? 'OK'}`;
|
|
1274
|
+
return formatToolResponse(output);
|
|
1275
|
+
}
|
|
1276
|
+
catch (error) {
|
|
1277
|
+
return formatErrorResponse(error, 'Delete Cluster Firewall Alias');
|
|
1278
|
+
}
|
|
1279
|
+
}
|
|
1280
|
+
/**
|
|
1281
|
+
* List cluster firewall IP sets.
|
|
1282
|
+
*/
|
|
1283
|
+
export async function listClusterFirewallIpsets(client, _config, input) {
|
|
1284
|
+
try {
|
|
1285
|
+
listClusterFirewallIpsetsSchema.parse(input);
|
|
1286
|
+
const ipsets = (await client.request('/cluster/firewall/ipset'));
|
|
1287
|
+
let output = '📋 **Cluster Firewall IP Sets**\n\n';
|
|
1288
|
+
if (!ipsets || ipsets.length === 0) {
|
|
1289
|
+
output += 'No firewall IP sets found.';
|
|
1290
|
+
return formatToolResponse(output);
|
|
1291
|
+
}
|
|
1292
|
+
for (const ipset of ipsets) {
|
|
1293
|
+
const name = ipset.name ?? 'unknown';
|
|
1294
|
+
output += `• **${name}**`;
|
|
1295
|
+
if (ipset.comment)
|
|
1296
|
+
output += ` - ${ipset.comment}`;
|
|
1297
|
+
output += '\n';
|
|
1298
|
+
}
|
|
1299
|
+
output += `\n**Total**: ${ipsets.length} IP set(s)`;
|
|
1300
|
+
return formatToolResponse(output);
|
|
1301
|
+
}
|
|
1302
|
+
catch (error) {
|
|
1303
|
+
return formatErrorResponse(error, 'List Cluster Firewall IP Sets');
|
|
1304
|
+
}
|
|
1305
|
+
}
|
|
1306
|
+
/**
|
|
1307
|
+
* Create cluster firewall IP set.
|
|
1308
|
+
*/
|
|
1309
|
+
export async function createClusterFirewallIpset(client, config, input) {
|
|
1310
|
+
try {
|
|
1311
|
+
requireElevated(config, 'create cluster firewall IP set');
|
|
1312
|
+
const validated = createClusterFirewallIpsetSchema.parse(input);
|
|
1313
|
+
const safeName = validated.name;
|
|
1314
|
+
const payload = {
|
|
1315
|
+
name: safeName,
|
|
1316
|
+
};
|
|
1317
|
+
if (validated.comment)
|
|
1318
|
+
payload.comment = validated.comment;
|
|
1319
|
+
const result = await client.request('/cluster/firewall/ipset', 'POST', payload);
|
|
1320
|
+
let output = '✅ **Cluster Firewall IP Set Created**\n\n';
|
|
1321
|
+
output += `• **Name**: ${safeName}\n`;
|
|
1322
|
+
if (validated.comment)
|
|
1323
|
+
output += `• **Comment**: ${validated.comment}\n`;
|
|
1324
|
+
output += `• **Result**: ${result ?? 'OK'}`;
|
|
1325
|
+
return formatToolResponse(output);
|
|
1326
|
+
}
|
|
1327
|
+
catch (error) {
|
|
1328
|
+
return formatErrorResponse(error, 'Create Cluster Firewall IP Set');
|
|
1329
|
+
}
|
|
1330
|
+
}
|
|
1331
|
+
/**
|
|
1332
|
+
* Delete cluster firewall IP set.
|
|
1333
|
+
*/
|
|
1334
|
+
export async function deleteClusterFirewallIpset(client, config, input) {
|
|
1335
|
+
try {
|
|
1336
|
+
requireElevated(config, 'delete cluster firewall IP set');
|
|
1337
|
+
const validated = deleteClusterFirewallIpsetSchema.parse(input);
|
|
1338
|
+
const safeName = validated.name;
|
|
1339
|
+
const result = await client.request(`/cluster/firewall/ipset/${encodeURIComponent(safeName)}`, 'DELETE');
|
|
1340
|
+
let output = '🗑️ **Cluster Firewall IP Set Deleted**\n\n';
|
|
1341
|
+
output += `• **Name**: ${safeName}\n`;
|
|
1342
|
+
output += `• **Result**: ${result ?? 'OK'}`;
|
|
1343
|
+
return formatToolResponse(output);
|
|
1344
|
+
}
|
|
1345
|
+
catch (error) {
|
|
1346
|
+
return formatErrorResponse(error, 'Delete Cluster Firewall IP Set');
|
|
1347
|
+
}
|
|
1348
|
+
}
|
|
1349
|
+
/**
|
|
1350
|
+
* List cluster firewall IP set entries.
|
|
1351
|
+
*/
|
|
1352
|
+
export async function listClusterFirewallIpsetEntries(client, _config, input) {
|
|
1353
|
+
try {
|
|
1354
|
+
const validated = listClusterFirewallIpsetEntriesSchema.parse(input);
|
|
1355
|
+
const safeName = validated.name;
|
|
1356
|
+
const entries = (await client.request(`/cluster/firewall/ipset/${encodeURIComponent(safeName)}`));
|
|
1357
|
+
let output = `📋 **IP Set Entries: ${safeName}**\n\n`;
|
|
1358
|
+
if (!entries || entries.length === 0) {
|
|
1359
|
+
output += 'No entries found.';
|
|
1360
|
+
return formatToolResponse(output);
|
|
1361
|
+
}
|
|
1362
|
+
for (const entry of entries) {
|
|
1363
|
+
const cidr = entry.cidr ?? 'unknown';
|
|
1364
|
+
output += `• **${cidr}**`;
|
|
1365
|
+
if (entry.nomatch)
|
|
1366
|
+
output += ' (nomatch)';
|
|
1367
|
+
if (entry.comment)
|
|
1368
|
+
output += ` - ${entry.comment}`;
|
|
1369
|
+
output += '\n';
|
|
1370
|
+
}
|
|
1371
|
+
output += `\n**Total**: ${entries.length} entry(ies)`;
|
|
1372
|
+
return formatToolResponse(output);
|
|
1373
|
+
}
|
|
1374
|
+
catch (error) {
|
|
1375
|
+
return formatErrorResponse(error, 'List Cluster Firewall IP Set Entries');
|
|
1376
|
+
}
|
|
1377
|
+
}
|
|
1378
|
+
/**
|
|
1379
|
+
* Add cluster firewall IP set entry.
|
|
1380
|
+
*/
|
|
1381
|
+
export async function addClusterFirewallIpsetEntry(client, config, input) {
|
|
1382
|
+
try {
|
|
1383
|
+
requireElevated(config, 'add cluster firewall IP set entry');
|
|
1384
|
+
const validated = addClusterFirewallIpsetEntrySchema.parse(input);
|
|
1385
|
+
const safeName = validated.name;
|
|
1386
|
+
const payload = {
|
|
1387
|
+
cidr: validated.cidr,
|
|
1388
|
+
};
|
|
1389
|
+
if (validated.comment)
|
|
1390
|
+
payload.comment = validated.comment;
|
|
1391
|
+
if (validated.nomatch !== undefined)
|
|
1392
|
+
payload.nomatch = validated.nomatch;
|
|
1393
|
+
const result = await client.request(`/cluster/firewall/ipset/${encodeURIComponent(safeName)}`, 'POST', payload);
|
|
1394
|
+
let output = '✅ **IP Set Entry Added**\n\n';
|
|
1395
|
+
output += `• **IP Set**: ${safeName}\n`;
|
|
1396
|
+
output += `• **CIDR**: ${validated.cidr}\n`;
|
|
1397
|
+
if (validated.nomatch)
|
|
1398
|
+
output += `• **Nomatch**: yes\n`;
|
|
1399
|
+
if (validated.comment)
|
|
1400
|
+
output += `• **Comment**: ${validated.comment}\n`;
|
|
1401
|
+
output += `• **Result**: ${result ?? 'OK'}`;
|
|
1402
|
+
return formatToolResponse(output);
|
|
1403
|
+
}
|
|
1404
|
+
catch (error) {
|
|
1405
|
+
return formatErrorResponse(error, 'Add Cluster Firewall IP Set Entry');
|
|
1406
|
+
}
|
|
1407
|
+
}
|
|
1408
|
+
/**
|
|
1409
|
+
* Update cluster firewall IP set entry.
|
|
1410
|
+
*/
|
|
1411
|
+
export async function updateClusterFirewallIpsetEntry(client, config, input) {
|
|
1412
|
+
try {
|
|
1413
|
+
requireElevated(config, 'update cluster firewall IP set entry');
|
|
1414
|
+
const validated = updateClusterFirewallIpsetEntrySchema.parse(input);
|
|
1415
|
+
const safeName = validated.name;
|
|
1416
|
+
const safeCidr = validated.cidr;
|
|
1417
|
+
const payload = {};
|
|
1418
|
+
if (validated.comment)
|
|
1419
|
+
payload.comment = validated.comment;
|
|
1420
|
+
if (validated.nomatch !== undefined)
|
|
1421
|
+
payload.nomatch = validated.nomatch;
|
|
1422
|
+
const result = await client.request(`/cluster/firewall/ipset/${encodeURIComponent(safeName)}/${encodeURIComponent(safeCidr)}`, 'PUT', payload);
|
|
1423
|
+
let output = '✅ **IP Set Entry Updated**\n\n';
|
|
1424
|
+
output += `• **IP Set**: ${safeName}\n`;
|
|
1425
|
+
output += `• **CIDR**: ${safeCidr}\n`;
|
|
1426
|
+
output += `• **Result**: ${result ?? 'OK'}`;
|
|
1427
|
+
return formatToolResponse(output);
|
|
1428
|
+
}
|
|
1429
|
+
catch (error) {
|
|
1430
|
+
return formatErrorResponse(error, 'Update Cluster Firewall IP Set Entry');
|
|
1431
|
+
}
|
|
1432
|
+
}
|
|
1433
|
+
/**
|
|
1434
|
+
* Delete cluster firewall IP set entry.
|
|
1435
|
+
*/
|
|
1436
|
+
export async function deleteClusterFirewallIpsetEntry(client, config, input) {
|
|
1437
|
+
try {
|
|
1438
|
+
requireElevated(config, 'delete cluster firewall IP set entry');
|
|
1439
|
+
const validated = deleteClusterFirewallIpsetEntrySchema.parse(input);
|
|
1440
|
+
const safeName = validated.name;
|
|
1441
|
+
const safeCidr = validated.cidr;
|
|
1442
|
+
const result = await client.request(`/cluster/firewall/ipset/${encodeURIComponent(safeName)}/${encodeURIComponent(safeCidr)}`, 'DELETE');
|
|
1443
|
+
let output = '🗑️ **IP Set Entry Deleted**\n\n';
|
|
1444
|
+
output += `• **IP Set**: ${safeName}\n`;
|
|
1445
|
+
output += `• **CIDR**: ${safeCidr}\n`;
|
|
1446
|
+
output += `• **Result**: ${result ?? 'OK'}`;
|
|
1447
|
+
return formatToolResponse(output);
|
|
1448
|
+
}
|
|
1449
|
+
catch (error) {
|
|
1450
|
+
return formatErrorResponse(error, 'Delete Cluster Firewall IP Set Entry');
|
|
1451
|
+
}
|
|
1452
|
+
}
|
|
1453
|
+
/**
|
|
1454
|
+
* Get cluster config.
|
|
1455
|
+
*/
|
|
1456
|
+
export async function getClusterConfig(client, _config, input) {
|
|
1457
|
+
try {
|
|
1458
|
+
getClusterConfigSchema.parse(input);
|
|
1459
|
+
const config = (await client.request('/cluster/config'));
|
|
1460
|
+
let output = '🔧 **Cluster Config**\n\n';
|
|
1461
|
+
const entries = Object.entries(config ?? {});
|
|
1462
|
+
if (entries.length === 0) {
|
|
1463
|
+
output += 'No cluster config found.';
|
|
1464
|
+
return formatToolResponse(output);
|
|
1465
|
+
}
|
|
1466
|
+
for (const [key, value] of entries) {
|
|
1467
|
+
output += `• **${key}**: ${typeof value === 'string' ? value : JSON.stringify(value)}\n`;
|
|
1468
|
+
}
|
|
1469
|
+
return formatToolResponse(output.trimEnd());
|
|
1470
|
+
}
|
|
1471
|
+
catch (error) {
|
|
1472
|
+
return formatErrorResponse(error, 'Get Cluster Config');
|
|
1473
|
+
}
|
|
1474
|
+
}
|
|
1475
|
+
/**
|
|
1476
|
+
* List cluster config nodes.
|
|
1477
|
+
*/
|
|
1478
|
+
export async function listClusterConfigNodes(client, _config, input) {
|
|
1479
|
+
try {
|
|
1480
|
+
listClusterConfigNodesSchema.parse(input);
|
|
1481
|
+
const nodes = (await client.request('/cluster/config/nodes'));
|
|
1482
|
+
let output = '🖥️ **Cluster Config Nodes**\n\n';
|
|
1483
|
+
if (!nodes || nodes.length === 0) {
|
|
1484
|
+
output += 'No cluster nodes found.';
|
|
1485
|
+
return formatToolResponse(output);
|
|
1486
|
+
}
|
|
1487
|
+
for (const node of nodes) {
|
|
1488
|
+
const name = node.name ?? 'unknown';
|
|
1489
|
+
output += `• **${name}**`;
|
|
1490
|
+
if (node.nodeid)
|
|
1491
|
+
output += ` (ID: ${node.nodeid})`;
|
|
1492
|
+
output += '\n';
|
|
1493
|
+
}
|
|
1494
|
+
output += `\n**Total**: ${nodes.length} node(s)`;
|
|
1495
|
+
return formatToolResponse(output);
|
|
1496
|
+
}
|
|
1497
|
+
catch (error) {
|
|
1498
|
+
return formatErrorResponse(error, 'List Cluster Config Nodes');
|
|
1499
|
+
}
|
|
1500
|
+
}
|
|
1501
|
+
/**
|
|
1502
|
+
* Get cluster config node.
|
|
1503
|
+
*/
|
|
1504
|
+
export async function getClusterConfigNode(client, _config, input) {
|
|
1505
|
+
try {
|
|
1506
|
+
const validated = getClusterConfigNodeSchema.parse(input);
|
|
1507
|
+
const safeNode = validated.node;
|
|
1508
|
+
const node = (await client.request(`/cluster/config/nodes/${encodeURIComponent(safeNode)}`));
|
|
1509
|
+
let output = '🖥️ **Cluster Config Node**\n\n';
|
|
1510
|
+
output += `• **Node**: ${safeNode}\n`;
|
|
1511
|
+
const entries = Object.entries(node ?? {});
|
|
1512
|
+
for (const [key, value] of entries) {
|
|
1513
|
+
output += `• **${key}**: ${typeof value === 'string' ? value : JSON.stringify(value)}\n`;
|
|
1514
|
+
}
|
|
1515
|
+
return formatToolResponse(output.trimEnd());
|
|
1516
|
+
}
|
|
1517
|
+
catch (error) {
|
|
1518
|
+
return formatErrorResponse(error, 'Get Cluster Config Node');
|
|
1519
|
+
}
|
|
1520
|
+
}
|
|
1521
|
+
/**
|
|
1522
|
+
* Join cluster.
|
|
1523
|
+
*/
|
|
1524
|
+
export async function joinCluster(client, config, input) {
|
|
1525
|
+
try {
|
|
1526
|
+
requireElevated(config, 'join cluster');
|
|
1527
|
+
const validated = joinClusterSchema.parse(input);
|
|
1528
|
+
const payload = {
|
|
1529
|
+
hostname: validated.hostname,
|
|
1530
|
+
password: validated.password,
|
|
1531
|
+
};
|
|
1532
|
+
if (validated.fingerprint)
|
|
1533
|
+
payload.fingerprint = validated.fingerprint;
|
|
1534
|
+
if (validated.force !== undefined)
|
|
1535
|
+
payload.force = validated.force;
|
|
1536
|
+
const result = await client.request('/cluster/config/join', 'POST', payload);
|
|
1537
|
+
const safePayload = { ...payload, password: '[REDACTED]' };
|
|
1538
|
+
let output = '✅ **Joined Cluster**\n\n';
|
|
1539
|
+
output += `• **Hostname**: ${validated.hostname}\n`;
|
|
1540
|
+
output += `• **Password**: ${safePayload.password}\n`;
|
|
1541
|
+
if (validated.fingerprint)
|
|
1542
|
+
output += `• **Fingerprint**: ${validated.fingerprint}\n`;
|
|
1543
|
+
if (validated.force)
|
|
1544
|
+
output += `• **Force**: yes\n`;
|
|
1545
|
+
output += `• **Result**: ${result ?? 'OK'}`;
|
|
1546
|
+
return formatToolResponse(output);
|
|
1547
|
+
}
|
|
1548
|
+
catch (error) {
|
|
1549
|
+
return formatErrorResponse(error, 'Join Cluster');
|
|
1550
|
+
}
|
|
1551
|
+
}
|
|
1552
|
+
/**
|
|
1553
|
+
* Get cluster totem config.
|
|
1554
|
+
*/
|
|
1555
|
+
export async function getClusterTotem(client, _config, input) {
|
|
1556
|
+
try {
|
|
1557
|
+
getClusterTotemSchema.parse(input);
|
|
1558
|
+
const totem = (await client.request('/cluster/config/totem'));
|
|
1559
|
+
let output = '⚙️ **Cluster Totem Config**\n\n';
|
|
1560
|
+
const entries = Object.entries(totem ?? {});
|
|
1561
|
+
if (entries.length === 0) {
|
|
1562
|
+
output += 'No totem config found.';
|
|
1563
|
+
return formatToolResponse(output);
|
|
1564
|
+
}
|
|
1565
|
+
for (const [key, value] of entries) {
|
|
1566
|
+
output += `• **${key}**: ${typeof value === 'string' ? value : JSON.stringify(value)}\n`;
|
|
1567
|
+
}
|
|
1568
|
+
return formatToolResponse(output.trimEnd());
|
|
1569
|
+
}
|
|
1570
|
+
catch (error) {
|
|
1571
|
+
return formatErrorResponse(error, 'Get Cluster Totem');
|
|
1572
|
+
}
|
|
1573
|
+
}
|
|
1055
1574
|
//# sourceMappingURL=cluster-management.js.map
|