UNPKG

n8n-nodes-awx

Version:

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

138 lines 7.96 kB
"use strict"; 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