UNPKG

n8n-nodes-awx

Version:

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

197 lines 11.2 kB
"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