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
JavaScript
;
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;