n8n-nodes-proxmox
Version:
n8n community node for Proxmox Virtual Environment (VE) API integration with VM, container, storage, and cluster management capabilities
118 lines (117 loc) • 4.96 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.executeClusterOperation = executeClusterOperation;
const apiRequest_1 = require("../helpers/apiRequest");
const errorHandler_1 = require("../helpers/errorHandler");
const logger_1 = require("../helpers/logger");
async function executeClusterOperation(operation, i) {
try {
logger_1.logger.operation('cluster', operation, 'start', { operation });
let response;
switch (operation) {
case 'getVersion':
response = await getVersion.call(this);
break;
case 'getStatus':
response = await getClusterStatus.call(this);
break;
case 'getResources':
response = await getClusterResources.call(this, i);
break;
case 'getNodes':
response = await getClusterNodes.call(this, i);
break;
case 'getTasks':
response = await getClusterTasks.call(this, i);
break;
case 'getConfig':
response = await getClusterConfig.call(this);
break;
default:
throw new Error(`Unknown cluster operation: ${operation}`);
}
logger_1.logger.operation('cluster', operation, 'success', { operation });
return response;
}
catch (error) {
logger_1.logger.operation('cluster', operation, 'error', { operation, error: error.message });
return errorHandler_1.handleProxMoxError.call(this, error, operation, 'cluster');
}
}
async function getVersion() {
logger_1.logger.debug('cluster', 'Getting ProxMox VE version');
return await apiRequest_1.apiRequest.call(this, 'GET', '/version');
}
async function getClusterStatus() {
logger_1.logger.debug('cluster', 'Getting cluster status');
return await apiRequest_1.apiRequest.call(this, 'GET', '/cluster/status');
}
async function getClusterResources(i) {
const returnAll = this.getNodeParameter('returnAll', i);
const resourceType = this.getNodeParameter('resourceType', i, '');
const additionalFields = this.getNodeParameter('additionalFields', i, {});
let qs = {};
if (resourceType) {
qs.type = resourceType;
}
// Add additional filters
if (additionalFields.node) {
qs.node = additionalFields.node;
}
logger_1.logger.debug('cluster', 'Getting cluster resources', { resourceType, additionalFields });
if (returnAll) {
return await apiRequest_1.apiRequestAllItems.call(this, 'GET', '/cluster/resources', {}, qs);
}
else {
const limit = this.getNodeParameter('limit', i);
// ProxMox API doesn't support limit parameter, we'll slice the results client-side
const response = await apiRequest_1.apiRequest.call(this, 'GET', '/cluster/resources', {}, qs);
return Array.isArray(response) ? response.slice(0, limit) : [response];
}
}
async function getClusterNodes(i) {
const returnAll = this.getNodeParameter('returnAll', i);
logger_1.logger.debug('cluster', 'Getting cluster nodes');
if (returnAll) {
return await apiRequest_1.apiRequestAllItems.call(this, 'GET', '/nodes', {});
}
else {
const limit = this.getNodeParameter('limit', i);
// ProxMox API doesn't support limit parameter, we'll slice the results client-side
const response = await apiRequest_1.apiRequest.call(this, 'GET', '/nodes', {});
return Array.isArray(response) ? response.slice(0, limit) : [response];
}
}
async function getClusterTasks(i) {
const returnAll = this.getNodeParameter('returnAll', i);
const runningOnly = this.getNodeParameter('runningOnly', i, false);
const additionalFields = this.getNodeParameter('additionalFields', i, {});
let qs = {};
if (runningOnly) {
qs.running = 1;
}
// Add additional filters
if (additionalFields.node) {
qs.node = additionalFields.node;
}
if (additionalFields.vmid) {
qs.vmid = additionalFields.vmid;
}
if (additionalFields.user) {
qs.user = additionalFields.user;
}
logger_1.logger.debug('cluster', 'Getting cluster tasks', { runningOnly, additionalFields });
if (returnAll) {
return await apiRequest_1.apiRequestAllItems.call(this, 'GET', '/cluster/tasks', {}, qs);
}
else {
const limit = this.getNodeParameter('limit', i);
// ProxMox API doesn't support limit parameter, we'll slice the results client-side
const response = await apiRequest_1.apiRequest.call(this, 'GET', '/cluster/tasks', {}, qs);
return Array.isArray(response) ? response.slice(0, limit) : [response];
}
}
async function getClusterConfig() {
logger_1.logger.debug('cluster', 'Getting cluster configuration');
return await apiRequest_1.apiRequest.call(this, 'GET', '/cluster/config');
}