n8n-nodes-awx
Version:
n8n node to interact with Ansible AWX/Tower with improved type safety
138 lines • 7.96 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.handleJobTemplateOperations = handleJobTemplateOperations;
const n8n_workflow_1 = require("n8n-workflow");
const SharedHelpers_1 = require("../utils/SharedHelpers");
const resourceHelpers_1 = require("../utils/resourceHelpers");
async function handleJobTemplateOperations(action, itemIndex = 0) {
if (action === 'list') {
try {
const filter = this.getNodeParameter('filter', itemIndex, '');
const returnAll = this.getNodeParameter('returnAll', itemIndex, false);
const endpoint = '/job_templates/';
const queryParams = {};
const searchFilter = (0, resourceHelpers_1.normalizeSearchFilter)(filter);
if (searchFilter) {
queryParams.search = searchFilter;
}
const fetchMode = returnAll ? 'allPages' : 'firstPage';
const jobTemplates = await SharedHelpers_1.getAwxResources.call(this, endpoint, fetchMode, queryParams);
const responseFormat = this.getNodeParameter('responseFormat', itemIndex, 'friendly');
const formattedJobTemplates = jobTemplates.map(template => (0, resourceHelpers_1.formatResourceResponse)(template, responseFormat, 'job_template'));
return [this.helpers.returnJsonArray(formattedJobTemplates)];
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Failed to list job templates: ${error.message}`, { itemIndex });
}
}
else if (action === 'get') {
try {
const jobTemplateIdParam = this.getNodeParameter('jobTemplateId', itemIndex, '')
|| this.getNodeParameter('Job_Template_ID', itemIndex, '')
|| this.getNodeParameter('jobTemplateID', itemIndex, '');
const templateNameParam = this.getNodeParameter('templateName', itemIndex, '');
const resolvedJobTemplateId = jobTemplateIdParam || undefined;
const resolvedJobTemplateName = !resolvedJobTemplateId && templateNameParam ? templateNameParam : undefined;
if (!resolvedJobTemplateId && !resolvedJobTemplateName) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Either Job Template ID or Name must be provided.');
}
const jobTemplate = await SharedHelpers_1.getAwxResource.call(this, 'job_templates', {
id: resolvedJobTemplateId,
name: resolvedJobTemplateName,
});
const responseFormat = this.getNodeParameter('responseFormat', itemIndex, 'friendly');
const formattedJobTemplate = (0, resourceHelpers_1.formatResourceResponse)(jobTemplate, responseFormat, 'job_template');
return [[{ json: formattedJobTemplate }]];
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Failed to get job template: ${error.message}`, { itemIndex });
}
}
else if (action === 'delete') {
try {
const jobTemplateIdParam = this.getNodeParameter('jobTemplateId', itemIndex, '');
const templateNameParam = this.getNodeParameter('templateName', itemIndex, '');
let resolvedJobTemplateId = jobTemplateIdParam || undefined;
const resolvedJobTemplateName = !resolvedJobTemplateId && templateNameParam ? templateNameParam : undefined;
if (!resolvedJobTemplateId && !resolvedJobTemplateName) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Either Job Template ID or Name must be provided for deletion.');
}
if (!resolvedJobTemplateId && resolvedJobTemplateName) {
const jt = await SharedHelpers_1.getAwxResource.call(this, 'job_templates', { name: resolvedJobTemplateName });
resolvedJobTemplateId = jt.id;
}
await SharedHelpers_1.deleteAwxResourceWithLogging.call(this, `/job_templates/${resolvedJobTemplateId}/`, itemIndex);
return [
this.helpers.returnJsonArray([{
success: true,
message: `Job Template ${resolvedJobTemplateName || resolvedJobTemplateId} deleted successfully.`,
}]),
];
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Failed to delete job template: ${error.message}`, { itemIndex });
}
}
else if (action === 'launch') {
try {
const jobTemplateIdParam = this.getNodeParameter('jobTemplateId', itemIndex, '');
const templateNameParam = this.getNodeParameter('templateName', itemIndex, '');
let resolvedJobTemplateId = jobTemplateIdParam || undefined;
const resolvedJobTemplateName = !resolvedJobTemplateId && templateNameParam ? templateNameParam : undefined;
if (!resolvedJobTemplateId && !resolvedJobTemplateName) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Either Job Template ID or Name must be provided for launch.');
}
if (!resolvedJobTemplateId && resolvedJobTemplateName) {
const jt = await SharedHelpers_1.getAwxResource.call(this, 'job_templates', { name: resolvedJobTemplateName });
resolvedJobTemplateId = jt.id;
}
if (resolvedJobTemplateId === undefined) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Job Template ID could not be determined for launch.');
}
const jobTemplateId = resolvedJobTemplateId;
const extraVarsRaw = this.getNodeParameter('extraVars', itemIndex, '');
let extraVarsObj = {};
if (extraVarsRaw) {
try {
let parsed = extraVarsRaw;
if (typeof parsed === 'string') {
parsed = JSON.parse(parsed);
}
if (typeof parsed === 'string') {
parsed = JSON.parse(parsed);
}
if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {
throw new Error('Parsed extraVars is not a JSON object');
}
extraVarsObj = parsed;
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Invalid JSON in extraVars field – expected a JSON object string', { itemIndex });
}
}
const launchPayload = {};
if (Object.keys(extraVarsObj).length > 0) {
launchPayload.extra_vars = JSON.stringify(extraVarsObj);
}
console.log(`[AWX Node DEBUG] Launch payload:`, JSON.stringify(launchPayload));
const launchResponse = await SharedHelpers_1.launchAwxTemplate.call(this, 'job_templates', jobTemplateId, launchPayload);
let finalResponse = launchResponse;
if (launchResponse.id) {
try {
const createdJobId = launchResponse.id;
const jobDetails = await SharedHelpers_1.getAwxResource.call(this, 'jobs', { id: createdJobId });
finalResponse = jobDetails;
}
catch (innerErr) {
finalResponse = launchResponse;
}
}
return [[{ json: finalResponse }]];
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Failed to launch job template: ${error.message}`, { itemIndex });
}
}
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The action "${action}" is not supported for job templates`);
}
//# sourceMappingURL=JobTemplateResources.js.map