UNPKG

n8n-nodes-awx

Version:

n8n node to interact with Ansible AWX/Tower with improved type safety

687 lines 29.6 kB
"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