UNPKG

n8n-nodes-netbox

Version:

n8n community node for NetBox API integration with comprehensive DCIM, IPAM, and data center management operations

165 lines (164 loc) 7.37 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.listVlanGroups = listVlanGroups; exports.getVlanGroup = getVlanGroup; exports.createVlanGroup = createVlanGroup; exports.updateVlanGroup = updateVlanGroup; exports.deleteVlanGroup = deleteVlanGroup; const apiRequest_1 = require("../../../helpers/apiRequest"); const responseFormatter_1 = require("../../../helpers/responseFormatter"); const resourceLookup_1 = require("../../../helpers/resourceLookup"); async function listVlanGroups() { const returnAll = this.getNodeParameter('returnAll', 0); const filters = this.getNodeParameter('filters', 0, {}); const qs = {}; Object.assign(qs, filters); if (returnAll) { const response = await apiRequest_1.apiRequestAllItems.call(this, 'GET', '/api/ipam/vlan-groups/', {}, qs); return responseFormatter_1.formatResponse.call(this, response); } else { const limit = this.getNodeParameter('limit', 0); qs.limit = limit; const response = await apiRequest_1.apiRequest.call(this, 'GET', '/api/ipam/vlan-groups/', {}, qs); return responseFormatter_1.formatResponse.call(this, response); } } async function getVlanGroup() { const vlanGroupIdentifier = this.getNodeParameter('vlanGroupId', 0); try { // Try to lookup by ID, name or slug let endpoint = '/api/ipam/vlan-groups/'; let response; // If looks like an ID (numeric), fetch directly if (!isNaN(Number(vlanGroupIdentifier))) { endpoint = `/api/ipam/vlan-groups/${vlanGroupIdentifier}/`; response = await apiRequest_1.apiRequest.call(this, 'GET', endpoint); } else { // Try name lookup first const query = { name: vlanGroupIdentifier }; response = await apiRequest_1.apiRequest.call(this, 'GET', endpoint, {}, query); // If no results by name, try slug if (!response.results || response.results.length === 0) { const slugQuery = { slug: vlanGroupIdentifier }; response = await apiRequest_1.apiRequest.call(this, 'GET', endpoint, {}, slugQuery); } // If still no results, throw error if (!response.results || response.results.length === 0) { throw new Error(`VLAN Group with identifier "${vlanGroupIdentifier}" not found`); } // Use the first result response = response.results[0]; } return responseFormatter_1.formatResponse.call(this, response); } catch (error) { throw new Error(`Failed to get VLAN Group: ${error.message}`); } } async function createVlanGroup() { const name = this.getNodeParameter('name', 0); const slug = this.getNodeParameter('slug', 0); const additionalFields = this.getNodeParameter('additionalFields', 0); const body = { name, }; if (slug) { body.slug = slug; } // Process site lookup if provided and not numeric if (additionalFields.site && isNaN(Number(additionalFields.site))) { try { additionalFields.site = await resourceLookup_1.lookupResourceByName.call(this, 'sites', additionalFields.site, 'dcim'); } catch (error) { throw new Error(`Site lookup failed: ${error.message}`); } } // Add all additional fields to body Object.assign(body, additionalFields); const endpoint = '/api/ipam/vlan-groups/'; const response = await apiRequest_1.apiRequest.call(this, 'POST', endpoint, body); return responseFormatter_1.formatResponse.call(this, response); } async function updateVlanGroup() { const vlanGroupIdentifier = this.getNodeParameter('vlanGroupId', 0); const updateFields = this.getNodeParameter('updateFields', 0); try { // Try to lookup by ID, name or slug let vlanGroupId = vlanGroupIdentifier; if (isNaN(Number(vlanGroupIdentifier))) { // Try name lookup const endpoint = '/api/ipam/vlan-groups/'; const nameQuery = { name: vlanGroupIdentifier }; const nameResponse = await apiRequest_1.apiRequest.call(this, 'GET', endpoint, {}, nameQuery); if (nameResponse.results && nameResponse.results.length > 0) { vlanGroupId = nameResponse.results[0].id; } else { // Try slug lookup const slugQuery = { slug: vlanGroupIdentifier }; const slugResponse = await apiRequest_1.apiRequest.call(this, 'GET', endpoint, {}, slugQuery); if (slugResponse.results && slugResponse.results.length > 0) { vlanGroupId = slugResponse.results[0].id; } else { throw new Error(`VLAN Group with identifier "${vlanGroupIdentifier}" not found`); } } } // Process site lookup if provided and not numeric if (updateFields.site && isNaN(Number(updateFields.site))) { try { updateFields.site = await resourceLookup_1.lookupResourceByName.call(this, 'sites', updateFields.site, 'dcim'); } catch (error) { throw new Error(`Site lookup failed: ${error.message}`); } } const endpoint = `/api/ipam/vlan-groups/${vlanGroupId}/`; const response = await apiRequest_1.apiRequest.call(this, 'PATCH', endpoint, updateFields); return responseFormatter_1.formatResponse.call(this, response); } catch (error) { throw new Error(`Failed to update VLAN Group: ${error.message}`); } } async function deleteVlanGroup() { const vlanGroupIdentifier = this.getNodeParameter('vlanGroupId', 0); try { // Try to lookup by ID, name or slug let vlanGroupId = vlanGroupIdentifier; if (isNaN(Number(vlanGroupIdentifier))) { // Use the lookup helper const endpoint = '/api/ipam/vlan-groups/'; let found = false; // Try name lookup const nameQuery = { name: vlanGroupIdentifier }; const nameResponse = await apiRequest_1.apiRequest.call(this, 'GET', endpoint, {}, nameQuery); if (nameResponse.results && nameResponse.results.length > 0) { vlanGroupId = nameResponse.results[0].id; found = true; } // If not found by name, try slug if (!found) { const slugQuery = { slug: vlanGroupIdentifier }; const slugResponse = await apiRequest_1.apiRequest.call(this, 'GET', endpoint, {}, slugQuery); if (slugResponse.results && slugResponse.results.length > 0) { vlanGroupId = slugResponse.results[0].id; found = true; } } if (!found) { throw new Error(`VLAN Group with identifier "${vlanGroupIdentifier}" not found`); } } const endpoint = `/api/ipam/vlan-groups/${vlanGroupId}/`; await apiRequest_1.apiRequest.call(this, 'DELETE', endpoint); return [{ json: { success: true } }]; } catch (error) { throw new Error(`Failed to delete VLAN Group: ${error.message}`); } }