n8n-nodes-awx
Version:
n8n node to interact with Ansible AWX/Tower with improved type safety
197 lines • 11.2 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.handleWorkflowJobTemplateOperations = handleWorkflowJobTemplateOperations;
exports.handleWorkflowJobOperations = handleWorkflowJobOperations;
const n8n_workflow_1 = require("n8n-workflow");
const SharedHelpers_1 = require("../utils/SharedHelpers");
const resourceHelpers_1 = require("../utils/resourceHelpers");
async function handleWorkflowJobTemplateOperations(action, itemIndex = 0) {
if (action === 'list') {
try {
const filter = this.getNodeParameter('filter', itemIndex, '');
const returnAll = this.getNodeParameter('returnAll', itemIndex, false);
const endpoint = '/workflow_job_templates/';
const queryParams = {};
if (filter) {
queryParams.search = filter;
}
const fetchMode = returnAll ? 'allPages' : 'firstPage';
const workflowJobTemplates = await SharedHelpers_1.getAwxResources.call(this, endpoint, fetchMode, queryParams);
const responseFormat = this.getNodeParameter('responseFormat', itemIndex, 'friendly');
const formattedWorkflowJobTemplates = workflowJobTemplates.map(template => (0, resourceHelpers_1.formatResourceResponse)(template, responseFormat, 'workflow_job_template'));
return [this.helpers.returnJsonArray(formattedWorkflowJobTemplates)];
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Failed to list workflow job templates: ${error.message}`, { itemIndex });
}
}
else if (action === 'get') {
try {
const idKeys = ['workflowJobTemplateId'];
const nameKeys = ['workflowJobTemplateName'];
const { id, name } = resourceHelpers_1.resolveResourceParameters.call(this, idKeys, nameKeys, 'workflow_job_template', itemIndex);
const workflowJobTemplate = await SharedHelpers_1.getAwxResource.call(this, 'workflow_job_templates', { id, name });
const responseFormat = this.getNodeParameter('responseFormat', itemIndex, 'friendly');
const formattedWorkflowJobTemplate = (0, resourceHelpers_1.formatResourceResponse)(workflowJobTemplate, responseFormat, 'workflow_job_template');
return [[{ json: formattedWorkflowJobTemplate }]];
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Failed to get workflow job template: ${error.message}`, { itemIndex });
}
}
else if (action === 'create') {
try {
const name = this.getNodeParameter('name', itemIndex);
const description = this.getNodeParameter('description', itemIndex, '');
const organizationId = this.getNodeParameter('organizationId', itemIndex, '');
const inventoryId = this.getNodeParameter('inventoryId', itemIndex, '');
const extraVars = this.getNodeParameter('extraVars', itemIndex, '');
const workflowJobTemplateData = {
name,
description,
};
if (organizationId) {
workflowJobTemplateData.organization = organizationId;
}
if (inventoryId) {
workflowJobTemplateData.inventory = inventoryId;
}
if (extraVars) {
try {
workflowJobTemplateData.extra_vars = JSON.parse(extraVars);
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Invalid JSON in extraVars field');
}
}
const workflowJobTemplate = await SharedHelpers_1.createAwxResource.call(this, 'workflow_job_templates', workflowJobTemplateData);
const responseFormat = this.getNodeParameter('responseFormat', itemIndex, 'friendly');
const formattedWorkflowJobTemplate = (0, resourceHelpers_1.formatResourceResponse)(workflowJobTemplate, responseFormat, 'workflow_job_template');
return [[{ json: formattedWorkflowJobTemplate }]];
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Failed to create workflow job template: ${error.message}`, { itemIndex });
}
}
else if (action === 'update') {
try {
const idKeys = ['workflowJobTemplateId'];
const nameKeys = ['workflowJobTemplateName'];
const { id, name } = resourceHelpers_1.resolveResourceParameters.call(this, idKeys, nameKeys, 'workflow_job_template', itemIndex);
let resolvedWorkflowJobTemplateId = id;
if (!resolvedWorkflowJobTemplateId && name) {
const workflowJobTemplate = await SharedHelpers_1.getAwxResource.call(this, 'workflow_job_templates', { name });
resolvedWorkflowJobTemplateId = workflowJobTemplate.id;
}
if (!resolvedWorkflowJobTemplateId) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Workflow Job Template ID could not be determined for update.');
}
const updateFields = this.getNodeParameter('updateFields', itemIndex, {});
const workflowJobTemplate = await SharedHelpers_1.updateAwxResource.call(this, `/workflow_job_templates/${resolvedWorkflowJobTemplateId}/`, updateFields);
const responseFormat = this.getNodeParameter('responseFormat', itemIndex, 'friendly');
const formattedWorkflowJobTemplate = (0, resourceHelpers_1.formatResourceResponse)(workflowJobTemplate, responseFormat, 'workflow_job_template');
return [[{ json: formattedWorkflowJobTemplate }]];
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Failed to update workflow job template: ${error.message}`, { itemIndex });
}
}
else if (action === 'delete') {
try {
const idKeys = ['workflowJobTemplateId'];
const nameKeys = ['workflowJobTemplateName'];
const { id, name } = resourceHelpers_1.resolveResourceParameters.call(this, idKeys, nameKeys, 'workflow_job_template', itemIndex);
let resolvedWorkflowJobTemplateId = id;
if (!resolvedWorkflowJobTemplateId && name) {
const workflowJobTemplate = await SharedHelpers_1.getAwxResource.call(this, 'workflow_job_templates', { name });
resolvedWorkflowJobTemplateId = workflowJobTemplate.id;
}
if (!resolvedWorkflowJobTemplateId) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Workflow Job Template ID could not be determined for deletion.');
}
await SharedHelpers_1.deleteAwxResourceWithLogging.call(this, `/workflow_job_templates/${resolvedWorkflowJobTemplateId}/`, itemIndex);
return [
this.helpers.returnJsonArray([{
success: true,
message: `Workflow Job Template ${name || resolvedWorkflowJobTemplateId} deleted successfully.`,
}]),
];
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Failed to delete workflow job template: ${error.message}`, { itemIndex });
}
}
else if (action === 'launch') {
try {
const idKeys = ['workflowJobTemplateId'];
const nameKeys = ['workflowJobTemplateName'];
const { id, name } = resourceHelpers_1.resolveResourceParameters.call(this, idKeys, nameKeys, 'workflow_job_template', itemIndex);
let resolvedWorkflowJobTemplateId = id;
if (!resolvedWorkflowJobTemplateId && name) {
const workflowJobTemplate = await SharedHelpers_1.getAwxResource.call(this, 'workflow_job_templates', { name });
resolvedWorkflowJobTemplateId = workflowJobTemplate.id;
}
if (!resolvedWorkflowJobTemplateId) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Workflow Job Template ID could not be determined for launch.');
}
const extraVars = this.getNodeParameter('extraVars', itemIndex, '');
let extraVarsObj = {};
if (extraVars) {
try {
extraVarsObj = JSON.parse(extraVars);
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Invalid JSON in extraVars field');
}
}
const response = await SharedHelpers_1.launchAwxTemplate.call(this, 'workflow_job_templates', resolvedWorkflowJobTemplateId, extraVarsObj);
return [[{ json: response }]];
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Failed to launch workflow job template: ${error.message}`, { itemIndex });
}
}
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The action "${action}" is not supported for workflow job templates`);
}
async function handleWorkflowJobOperations(action) {
if (action === 'list') {
const filter = this.getNodeParameter('workflowJobFilter', 0, '');
const returnAll = this.getNodeParameter('returnAll', 0, false);
const queryParams = {};
if (filter) {
queryParams.search = filter;
}
const fetchMode = returnAll ? 'allPages' : 'firstPage';
const response = await SharedHelpers_1.getAwxResources.call(this, '/workflow_jobs/', fetchMode, queryParams);
return [this.helpers.returnJsonArray(response)];
}
else if (action === 'get' || action === 'cancel') {
const idKeys = ['Workflow_Job_ID', 'Job_ID', 'workflowJobId', 'jobId', 'id'];
let jobId;
for (const key of idKeys) {
const val = this.getNodeParameter(key, 0, undefined);
if ((typeof val === 'string' || typeof val === 'number') && val !== '') {
jobId = val;
break;
}
}
if (!jobId) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Workflow Job ID must be provided');
}
if (action === 'get') {
const jobResponse = await SharedHelpers_1.getAwxResource.call(this, 'workflow_jobs', { id: jobId });
const jobStatus = jobResponse.status;
if (jobStatus === 'successful' || jobStatus === 'failed') {
const output = await SharedHelpers_1.getAwxJobOutput.call(this, 'workflow_jobs', String(jobId));
jobResponse.output = output;
}
return [[{ json: jobResponse }]];
}
else {
const response = await SharedHelpers_1.cancelAwxJobGeneric.call(this, 'workflow_jobs', String(jobId));
return [this.helpers.returnJsonArray([response])];
}
}
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The action "${action}" is not supported for workflow jobs`);
}
//# sourceMappingURL=WorkflowJobTemplateResources.js.map