n8n-nodes-awx
Version:
n8n node to interact with Ansible AWX/Tower with improved type safety
687 lines • 29.6 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: 'Job Template ID (alias)',
name: 'Job_Template_ID',
type: 'string',
default: '',
required: false,
description: 'Alias for jobTemplateId. Not shown in UI.',
displayOptions: {
show: {
resource: ['jobTemplate'],
action: ['get', 'launch', 'delete', 'list-parameters'],
},
},
noDataExpression: true,
},
{
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: true,
description: 'ID of the job to fetch',
displayOptions: {
show: {
resource: ['job'],
action: ['get'],
},
},
},
{
displayName: 'Job ID (alias)',
name: 'Job_ID',
type: 'string',
default: '',
required: false,
description: 'Alias for jobId. Set this to test legacy/AI compatibility. Not shown in UI.',
displayOptions: {
show: {
resource: ['job'],
action: ['get'],
},
},
noDataExpression: true,
},
{
displayName: 'Job ID',
name: 'jobId',
type: 'string',
default: '',
required: false,
description: 'ID of the job (optional for actions other than get)',
displayOptions: {
show: {
resource: ['job'],
action: ['cancel', 'delete', 'list-parameters'],
},
},
},
{
displayName: 'Additional Fields',
name: 'additionalFields',
type: 'collection',
default: {},
placeholder: 'Add Field',
options: [
{
displayName: 'Created By',
name: 'createdBy',
type: 'string',
default: '',
description: 'Username of the creator of the job',
},
{
displayName: 'Status',
name: 'status',
type: 'options',
options: [
{ name: 'New', value: 'new' },
{ name: 'Pending', value: 'pending' },
{ name: 'Waiting', value: 'waiting' },
{ name: 'Running', value: 'running' },
{ name: 'Successful', value: 'successful' },
{ name: 'Failed', value: 'failed' },
{ name: 'Error', value: 'error' },
{ name: 'Canceled', value: 'canceled' },
{ name: 'Never Updated', value: 'never updated' },
],
default: 'new',
description: 'Status of the job',
},
{
displayName: 'Type',
name: 'type',
type: 'options',
options: [
{ name: 'Run', value: 'run' },
{ name: 'Check', value: 'check' },
{ name: 'Scan', value: 'scan' },
],
default: 'run',
description: 'Type of the job',
},
{
displayName: 'Limit',
name: 'limit',
type: 'number',
default: 0,
placeholder: 'Max number of jobs to return',
description: 'Maximum number of jobs to return',
},
],
displayOptions: {
show: {
resource: ['job'],
action: ['get', 'list'],
},
},
},
(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 Job Template ID (alias)',
name: 'Workflow_Job_Template_ID',
type: 'string',
default: '',
required: false,
description: 'Alias for workflowJobTemplateId. Not shown in UI.',
displayOptions: {
show: {
resource: ['workflowJobTemplate'],
action: ['get', 'launch', 'delete', 'list-parameters'],
},
},
noDataExpression: true,
},
{
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. Provide either Project ID or Project Name. If both are set, ID takes precedence. Required for get/update/delete.',
displayOptions: {
show: {
resource: ['project'],
action: ['get', 'update', 'delete'],
},
},
},
{
displayName: 'Project ID (alias)',
name: 'Project_ID',
type: 'string',
default: '',
required: false,
description: 'Alias for projectId. Not shown in UI.',
displayOptions: {
show: {
resource: ['project'],
action: ['get', 'update', 'delete'],
},
},
noDataExpression: true,
},
{
displayName: 'Project Name',
name: 'projectName',
type: 'string',
default: '',
required: false,
description: 'Name of the project. Provide either Project Name or Project ID. If both are set, ID takes precedence. Required for get/update/delete.',
displayOptions: {
show: {
resource: ['project'],
action: ['get', 'update', 'delete'],
},
},
},
{
displayName: 'Project Name (alias)',
name: 'Project_Name',
type: 'string',
default: '',
required: false,
description: 'Alias for projectName. Not shown in UI.',
displayOptions: {
show: {
resource: ['project'],
action: ['get', 'update', 'delete'],
},
},
noDataExpression: true,
},
{
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'],
},
},
},
{
displayName: 'Project ID (alias)',
name: 'Project_ID',
type: 'string',
default: '',
required: false,
description: 'Alias for projectId. Not shown in UI.',
displayOptions: {
show: {
resource: ['project'],
action: ['get', 'sync', 'update', 'delete', 'list-parameters'],
},
},
noDataExpression: true,
},
(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. Provide either Inventory ID or Inventory Name. If both are set, ID takes precedence.',
displayOptions: {
show: {
resource: ['inventory'],
action: ['get', 'update', 'delete'],
},
},
},
{
displayName: 'Inventory Name',
name: 'inventoryName',
type: 'string',
default: '',
required: false,
description: 'Name of the inventory. Provide either Inventory Name or Inventory ID. If both are set, ID takes precedence.',
displayOptions: {
show: {
resource: ['inventory'],
action: ['get', 'update', 'delete'],
},
},
},
{
displayName: 'Inventory Name (alias)',
name: 'Inventory_Name',
type: 'string',
default: '',
required: false,
description: 'Alias for inventoryName. Not shown in UI.',
displayOptions: {
show: {
resource: ['inventory'],
action: ['get', 'update', 'delete'],
},
},
noDataExpression: true,
},
(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'],
},
},
},
{
displayName: 'Host ID (alias)',
name: 'Host_ID',
type: 'string',
default: '',
required: false,
description: 'Alias for hostId. Not shown in UI.',
displayOptions: {
show: {
resource: ['host'],
action: ['get', 'update', 'delete', 'list-parameters'],
},
},
noDataExpression: true,
},
(0, index_1.generateNameParameter)('host', ['get', 'update', 'delete', 'list-parameters']),
{
displayName: 'Host Name (alias)',
name: 'Host_Name',
type: 'string',
default: '',
required: false,
description: 'Alias for hostName. Not shown in UI.',
displayOptions: {
show: {
resource: ['host'],
action: ['get', 'update', 'delete', 'list-parameters'],
},
},
noDataExpression: true,
},
(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'],
},
},
},
{
displayName: 'Group ID (alias)',
name: 'Group_ID',
type: 'string',
default: '',
required: false,
description: 'Alias for groupId. Not shown in UI.',
displayOptions: {
show: {
resource: ['group'],
action: ['get', 'update', 'delete', 'list-parameters'],
},
},
noDataExpression: true,
},
(0, index_1.generateNameParameter)('group', ['get', 'update', 'delete', 'list-parameters']),
{
displayName: 'Group Name (alias)',
name: 'Group_Name',
type: 'string',
default: '',
required: false,
description: 'Alias for groupName. Not shown in UI.',
displayOptions: {
show: {
resource: ['group'],
action: ['get', 'update', 'delete', 'list-parameters'],
},
},
noDataExpression: true,
},
(0, index_1.generateInventoryNameParameter)(['group', 'host'], ['get', 'list', 'create', 'update', 'delete', 'list-parameters']),
{
displayName: 'Inventory Name (alias)',
name: 'Inventory_Name',
type: 'string',
default: '',
required: false,
description: 'Alias for inventoryName. Not shown in UI.',
displayOptions: {
show: {
resource: ['group', 'host'],
action: ['get', 'list', 'create', 'update', 'delete', 'list-parameters'],
},
},
noDataExpression: true,
},
(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