UNPKG

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
"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'); }