n8n-nodes-awx
Version:
n8n node to interact with Ansible AWX/Tower with improved type safety
392 lines • 17.1 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.AwxTool = void 0;
const SharedHelpers_1 = require("../utils/SharedHelpers");
const index_1 = require("../resources/options/index");
class AwxTool {
constructor() {
this.description = {
displayName: 'AWX',
name: 'awxTool',
icon: 'file:awx-logo.svg',
group: ['transform'],
version: 1,
subtitle: '={{$parameter["resource"] + ": " + $parameter["action"]}}',
description: 'Consume AWX/Ansible Automation Platform API',
usableAsTool: true,
defaults: {
name: 'AWX Tool',
},
inputs: ['main'],
outputs: ['main'],
credentials: [
(0, index_1.generateCredentialParameter)('awxApi', true),
],
properties: [
(0, index_1.generateResourceSelectionParameter)(index_1.allResources, 'job'),
(0, index_1.generateActionProperty)('jobTemplate'),
{
displayName: 'Job Template ID',
name: 'jobTemplateId',
type: 'string',
default: '',
required: false,
description: 'ID of the job template. If provided, takes precedence over Template Name.',
displayOptions: {
show: {
resource: ['jobTemplate'],
action: ['get', 'launch', 'delete', 'list-parameters'],
},
},
},
{
displayName: 'Template Name',
name: 'templateName',
type: 'string',
default: '',
required: false,
description: 'Name of the job template (used if ID is not provided)',
displayOptions: {
show: {
resource: ['jobTemplate'],
action: ['get', 'launch', 'delete', 'list-parameters'],
},
},
},
(0, index_1.generateTemplateNameIContainsParameter)(),
(0, index_1.generateDateFilterParameter)('jobTemplate'),
(0, index_1.generateFilterParameter)('jobTemplate'),
{
displayName: 'Extra Variables',
name: 'extraVars',
type: 'string',
typeOptions: {
rows: 4,
},
default: '',
required: false,
description: 'Extra variables to pass to the job template (JSON format or key:value format like "foo:bar")',
displayOptions: {
show: {
resource: ['jobTemplate'],
action: ['launch'],
},
},
},
(0, index_1.generateActionProperty)('job'),
{
displayName: 'Job ID',
name: 'jobId',
type: 'string',
default: '',
required: false,
description: 'ID of the job. If provided, takes precedence over Job Name.',
displayOptions: {
show: {
resource: ['job'],
action: ['get', 'cancel', 'delete', 'list-parameters'],
},
},
},
(0, index_1.generateFilterParameter)('job'),
(0, index_1.generateDateFilterParameter)('job'),
(0, index_1.generateSortOrderParameter)(['job']),
(0, index_1.generateActionProperty)('workflowJobTemplate'),
{
displayName: 'Workflow Job Template ID',
name: 'workflowJobTemplateId',
type: 'string',
default: '',
required: false,
description: 'ID of the workflow job template. If provided, takes precedence over Workflow Template Name.',
displayOptions: {
show: {
resource: ['workflowJobTemplate'],
action: ['get', 'launch', 'delete', 'list-parameters'],
},
},
},
{
displayName: 'Workflow Template Name',
name: 'workflowTemplateName',
type: 'string',
default: '',
required: false,
description: 'Name of the workflow job template (used if ID is not provided)',
displayOptions: {
show: {
resource: ['workflowJobTemplate'],
action: ['get', 'launch', 'list-parameters'],
},
},
},
(0, index_1.generateWorkflowTemplateNameIContainsParameter)(),
(0, index_1.generateFilterParameter)('workflowJobTemplate'),
{
displayName: 'Extra Variables',
name: 'extraVariables',
type: 'json',
typeOptions: {
alwaysOpenEditWindow: true,
editorLanguage: 'json',
multipleValues: false,
},
default: {},
required: false,
description: 'Extra variables to pass to the workflow job template (JSON format, or key:value format like "foo:bar")',
displayOptions: {
show: {
resource: ['workflowJobTemplate'],
action: ['launch'],
},
},
},
(0, index_1.generateActionProperty)('workflowJob'),
{
displayName: 'Workflow Job ID',
name: 'workflowJobId',
type: 'string',
default: '',
required: false,
description: 'ID of the workflow job. If provided, takes precedence over Workflow Job Name.',
displayOptions: {
show: {
resource: ['workflowJob'],
action: ['get', 'getOutput', 'cancel', 'delete', 'list-parameters'],
},
},
},
(0, index_1.generateActionProperty)('project'),
{
displayName: 'Project ID',
name: 'projectId',
type: 'string',
default: '',
required: false,
description: 'ID of the project. If provided, takes precedence over Project Name.',
displayOptions: {
show: {
resource: ['project'],
action: ['get', 'sync', 'update', 'delete', 'list-parameters'],
},
},
},
(0, index_1.generateNameParameter)('project', ['get', 'sync', 'update', 'delete', 'list-parameters']),
(0, index_1.generateProjectNameIContainsParameter)(),
(0, index_1.generateFilterParameter)('project'),
(0, index_1.generateActionProperty)('inventory'),
{
displayName: 'Inventory ID',
name: 'inventoryId',
type: 'string',
default: '',
required: false,
description: 'ID of the inventory. If provided, takes precedence over Inventory Name.',
displayOptions: {
show: {
resource: ['inventory'],
action: ['get', 'update', 'delete', 'list-parameters'],
},
},
},
(0, index_1.generateNameParameter)('inventory', ['get', 'update', 'delete', 'list-parameters']),
(0, index_1.generateInventoryNameIContainsParameter)(),
(0, index_1.generateFilterParameter)('inventory'),
(0, index_1.generateActionProperty)('host'),
{
displayName: 'Host ID',
name: 'hostId',
type: 'string',
default: '',
required: false,
description: 'ID of the host. If provided, takes precedence over Host Name.',
displayOptions: {
show: {
resource: ['host'],
action: ['get', 'update', 'delete', 'list-parameters'],
},
},
},
(0, index_1.generateNameParameter)('host', ['get', 'update', 'delete', 'list-parameters']),
(0, index_1.generateHostNameIContainsParameter)(),
(0, index_1.generateFilterParameter)('host'),
(0, index_1.generateActionProperty)('group'),
{
displayName: 'Group ID',
name: 'groupId',
type: 'string',
default: '',
required: false,
description: 'ID of the group. If provided, takes precedence over Group Name.',
displayOptions: {
show: {
resource: ['group'],
action: ['get', 'update', 'delete', 'list-parameters'],
},
},
},
(0, index_1.generateNameParameter)('group', ['get', 'update', 'delete', 'list-parameters']),
(0, index_1.generateInventoryNameParameter)(['group', 'host'], ['get', 'list', 'create', 'update', 'delete', 'list-parameters']),
(0, index_1.generateGroupNameIContainsParameter)(),
(0, index_1.generateFilterParameter)('group'),
(0, index_1.generateResponseFormatParameter)(),
{
displayName: 'Return All',
name: 'returnAll',
type: 'boolean',
default: false,
description: 'Whether to fetch all results or just the first page',
displayOptions: {
show: {
resource: [
'jobTemplate',
'workflowJobTemplate',
'job',
'workflowJob',
'inventory',
'project',
'group',
'host'
],
action: ['list']
}
},
},
(0, index_1.generateLimitParameter)(['jobTemplate', 'workflowJobTemplate', 'job', 'workflowJob', 'inventory', 'project', 'group']),
{
displayName: 'Host Limit',
name: 'limit',
type: 'number',
default: 50,
description: 'Max number of hosts to return (used when Return All is false)',
typeOptions: {
minValue: 1,
maxValue: 1000,
},
displayOptions: {
show: {
resource: ['host'],
action: ['list'],
returnAll: [false],
},
},
},
]
};
}
async execute() {
const action = this.getNodeParameter('action', 0);
if (action === 'list-parameters') {
const resource = this.getNodeParameter('resource', 0);
const parameters = [];
parameters.push({
name: 'resource',
displayName: 'Resource',
type: 'string',
description: 'The AWX resource to operate on',
required: true,
});
parameters.push({
name: 'action',
displayName: 'Action',
type: 'string',
description: 'The action to perform on the resource',
required: true,
});
switch (resource) {
case 'jobTemplate':
parameters.push({
name: 'Job_Template_ID',
displayName: 'Job Template ID',
type: 'string',
description: 'ID of the job template',
required: false,
});
parameters.push({
name: 'Template_Name',
displayName: 'Template Name',
type: 'string',
description: 'Name of the job template',
required: false,
});
break;
case 'workflowJobTemplate':
parameters.push({
name: 'Workflow_Template_ID',
displayName: 'Workflow Template ID',
type: 'string',
description: 'ID of the workflow job template',
required: false,
});
parameters.push({
name: 'Workflow_Template_Name',
displayName: 'Workflow Template Name',
type: 'string',
description: 'Name of the workflow job template',
required: false,
});
break;
case 'inventory':
parameters.push({
name: 'inventoryName',
displayName: 'Inventory Name',
type: 'string',
description: 'Name of the inventory',
required: true,
});
break;
case 'host':
parameters.push({
name: 'inventoryName',
displayName: 'Inventory Name',
type: 'string',
description: 'Name of the inventory containing the host',
required: true,
});
parameters.push({
name: 'hostName',
displayName: 'Host Name',
type: 'string',
description: 'Name of the host',
required: true,
});
break;
case 'group':
parameters.push({
name: 'inventoryName',
displayName: 'Inventory Name',
type: 'string',
description: 'Name of the inventory containing the group',
required: true,
});
parameters.push({
name: 'groupName',
displayName: 'Group Name',
type: 'string',
description: 'Name of the group',
required: true,
});
break;
case 'project':
parameters.push({
name: 'projectName',
displayName: 'Project Name',
type: 'string',
description: 'Name of the project',
required: true,
});
break;
}
return [[{
json: {
resource,
action,
parameters,
},
}]];
}
return (0, SharedHelpers_1.executeAwxToolOperation)(this);
}
}
exports.AwxTool = AwxTool;
//# sourceMappingURL=AwxTool.class.js.map