UNPKG

n8n-nodes-netbox

Version:

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

371 lines (370 loc) 12.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.NetBox = void 0; const executeOperation_1 = require("./helpers/executeOperation"); class NetBox { description = { displayName: 'NetBox', name: 'netBox', icon: 'file:netbox.svg', group: ['transform'], version: 1, subtitle: '={{$parameter["domain"] + ": " + $parameter["resource"] + " - " + $parameter["operation"]}}', description: 'Consume NetBox API', defaults: { name: 'NetBox', }, usableAsTool: true, inputs: ['main'], outputs: ['main'], credentials: [ { name: 'netBoxApi', required: true, }, ], properties: [ { displayName: 'Domain', name: 'domain', type: 'options', options: [ { name: 'DCIM', value: 'dcim', }, { name: 'IPAM', value: 'ipam', }, { name: 'Tenancy', value: 'tenancy', }, { name: 'Extras', value: 'extras', }, { name: 'Virtualization', value: 'virtualization', }, { name: 'Circuits', value: 'circuits', }, { name: 'Wireless', value: 'wireless', }, ], default: 'dcim', required: true, description: 'Domain of the NetBox API', }, { displayName: 'Resource', name: 'resource', type: 'options', displayOptions: { show: { domain: ['dcim'], }, }, options: [ { name: 'Device', value: 'devices', }, { name: 'Device Type', value: 'device-types', }, { name: 'Interface', value: 'interfaces', }, { name: 'Manufacturer', value: 'manufacturers', }, // Temporarily disabled for community node compilation // { // name: 'Module', // value: 'modules', // }, // { // name: 'Module Bay', // value: 'module-bays', // }, // { // name: 'Module Type', // value: 'module-types', // }, { name: 'Platform', value: 'platforms', }, { name: 'Region', value: 'regions', }, { name: 'Site', value: 'sites', }, ], default: 'devices', required: true, description: 'Resource to consume', }, { displayName: 'Resource', name: 'resource', type: 'options', displayOptions: { show: { domain: ['ipam'], }, }, options: [ { name: 'Aggregate', value: 'aggregates', }, { name: 'IP Address', value: 'ip-addresses', }, { name: 'Prefix', value: 'prefixes', }, { name: 'Role', value: 'roles', }, { name: 'VLAN', value: 'vlans', }, { name: 'VLAN Group', value: 'vlanGroups', }, ], default: 'prefixes', required: true, description: 'Resource to consume', }, { displayName: 'Resource', name: 'resource', type: 'options', displayOptions: { show: { domain: ['tenancy'], }, }, options: [ { name: 'Contact', value: 'contacts', }, { name: 'Contact Assignment', value: 'contactAssignments', }, { name: 'Contact Group', value: 'contactGroups', }, { name: 'Contact Role', value: 'contactRoles', }, { name: 'Tenant', value: 'tenants', }, { name: 'Tenant Group', value: 'tenantGroups', }, ], default: 'tenants', required: true, description: 'Resource to consume', }, // Add resource dropdown for extras domain { displayName: 'Resource', name: 'resource', type: 'options', displayOptions: { show: { domain: ['extras'], }, }, options: [ { name: 'Config Context', value: 'config-contexts', }, { name: 'Config Template', value: 'config-templates', }, { name: 'Journal Entry', value: 'journal-entries', }, { name: 'Report', value: 'reports', }, { name: 'Tag', value: 'tags', }, ], default: 'tags', required: true, description: 'Resource to consume', }, // Add resource dropdown for virtualization domain { displayName: 'Resource', name: 'resource', type: 'options', displayOptions: { show: { domain: ['virtualization'], }, }, options: [ { name: 'Cluster', value: 'clusters', }, { name: 'Cluster Group', value: 'cluster-groups', }, { name: 'Cluster Type', value: 'cluster-types', }, { name: 'Virtual Machine', value: 'virtual-machines', }, { name: 'VM Interface', value: 'vm-interfaces', }, ], default: 'virtual-machines', required: true, description: 'Resource to consume', }, // Add resource dropdown for circuits domain { displayName: 'Resource', name: 'resource', type: 'options', displayOptions: { show: { domain: ['circuits'], }, }, options: [ { name: 'Provider', value: 'providers', }, { name: 'Provider Account', value: 'provider-accounts', }, { name: 'Provider Network', value: 'provider-networks', }, { name: 'Circuit Type', value: 'circuit-types', }, { name: 'Circuit', value: 'circuits', }, { name: 'Circuit Termination', value: 'circuit-terminations', }, ], default: 'circuits', required: true, description: 'Resource to consume', }, // Add resource dropdown for wireless domain { displayName: 'Resource', name: 'resource', type: 'options', displayOptions: { show: { domain: ['wireless'], }, }, options: [ { name: 'Wireless LAN Group', value: 'wireless-lan-groups', }, { name: 'Wireless LAN', value: 'wireless-lans', }, { name: 'Wireless Link', value: 'wireless-links', }, ], default: 'wireless-lans', required: true, description: 'Resource to consume', }, // Operations and fields for each resource are imported from their respective description files ...require('./descriptions/dcim.descriptions').dcimProperties, ...require('./descriptions/ipam.descriptions').ipamProperties, ...require('./descriptions/tenancy.descriptions').tenancyProperties, ...require('./descriptions/extras.descriptions').extrasProperties, ...require('./descriptions/virtualization.descriptions').virtualizationProperties, ...require('./descriptions/circuits.descriptions').circuitsProperties, ...require('./descriptions/wireless.descriptions').wirelessProperties, ], }; async execute() { console.log('\n\n========== NETBOX NODE EXECUTION STARTED =========='); try { // The key change is here - we need to ensure the return type matches const result = await executeOperation_1.executeOperation.call(this); return [result]; // result is already INodeExecutionData[] } catch (error) { console.log('ERROR in node execution:'); console.log(error); if (this.continueOnFail()) { console.log('Continue on fail is enabled, returning error as output'); return [[{ json: { error: error.message } }]]; } throw error; } finally { console.log('========== NETBOX NODE EXECUTION COMPLETED ==========\n\n'); } } } exports.NetBox = NetBox;