UNPKG

n8n-nodes-netbox

Version:

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

587 lines (586 loc) 19.9 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: 'Core', value: 'core', }, { name: 'Users', value: 'users', }, { name: 'Plugins', value: 'plugins', }, { name: 'VPN', value: 'vpn', }, { name: 'Wireless', value: 'wireless', }, { name: 'Status', value: 'status', }, ], 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 Bay', value: 'device-bays', }, { name: 'Device Bay Template', value: 'device-bay-templates', }, { name: 'Device Role', value: 'deviceRoles', }, { name: 'Device Type', value: 'device-types', }, { name: 'Interface', value: 'interfaces', }, { name: 'Manufacturer', value: 'manufacturers', }, { name: 'Module', value: 'modules', }, { name: 'Module Bay', value: 'module-bays', }, { name: 'Module Bay Template', value: 'module-bay-templates', }, { name: 'Module Type', value: 'module-types', }, { name: 'Platform', value: 'platforms', }, { name: 'Region', value: 'regions', }, { name: 'Site', value: 'sites', }, { name: 'Virtual Chassis', value: 'virtual-chassis', }, { name: 'Virtual Device Context', value: 'virtual-device-contexts', }, ], 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: 'Route Target', value: 'route-targets', }, { name: 'VLAN', value: 'vlans', }, { name: 'VLAN Group', value: 'vlanGroups', }, { name: 'VRF', value: 'vrfs', }, ], 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 core domain { displayName: 'Resource', name: 'resource', type: 'options', displayOptions: { show: { domain: ['core'], }, }, options: [ { name: 'Data File', value: 'data-files', }, { name: 'Data Source', value: 'data-sources', }, { name: 'Job', value: 'jobs', }, ], default: 'data-files', required: true, description: 'Resource to consume', }, // Add resource dropdown for plugins domain { displayName: 'Resource', name: 'resource', type: 'options', displayOptions: { show: { domain: ['plugins'], }, }, options: [ { name: 'Installed Plugin', value: 'installed-plugins', }, ], default: 'installed-plugins', required: true, description: 'Resource to consume', }, // Add resource dropdown for users domain { displayName: 'Resource', name: 'resource', type: 'options', displayOptions: { show: { domain: ['users'], }, }, options: [ { name: 'Config', value: 'config', }, { name: 'Group', value: 'groups', }, { name: 'Permission', value: 'permissions', }, { name: 'Token', value: 'tokens', }, { name: 'User', value: 'users', }, ], default: 'users', required: true, description: 'Resource to consume', }, // Add resource dropdown for vpn domain { displayName: 'Resource', name: 'resource', type: 'options', displayOptions: { show: { domain: ['vpn'], }, }, options: [ { name: 'IKE Policy', value: 'ike-policies', }, { name: 'IKE Proposal', value: 'ike-proposals', }, { name: 'IPSec Policy', value: 'ipsec-policies', }, { name: 'IPSec Profile', value: 'ipsec-profiles', }, { name: 'IPSec Proposal', value: 'ipsec-proposals', }, { name: 'L2VPN Termination', value: 'l2vpn-terminations', }, { name: 'L2VPN', value: 'l2vpns', }, { name: 'Tunnel Group', value: 'tunnel-groups', }, { name: 'Tunnel Termination', value: 'tunnel-terminations', }, { name: 'Tunnel', value: 'tunnels', }, ], default: 'ike-policies', 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', }, // Add resource dropdown for status domain { displayName: 'Resource', name: 'resource', type: 'options', displayOptions: { show: { domain: ['status'], }, }, options: [ { name: 'Health Check', value: 'health-check', }, ], default: 'health-check', 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/core').coreProperties, ...require('./descriptions/plugins').pluginsProperties, ...require('./descriptions/users').usersProperties, ...require('./descriptions/vpn').vpnProperties, ...require('./descriptions/wireless.descriptions').wirelessProperties, ...require('./descriptions/status.descriptions').statusProperties, ], }; 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;