UNPKG

n8n-nodes-awx

Version:

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

230 lines 13 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.processExtraVars = processExtraVars; exports.launchAwxJobTemplate = launchAwxJobTemplate; exports.launchAwxWorkflowJobTemplate = launchAwxWorkflowJobTemplate; exports.cancelAwxJob = cancelAwxJob; const n8n_workflow_1 = require("n8n-workflow"); const GenericFunctions_1 = require("./GenericFunctions"); const SpecialCaseHandler_1 = require("./SpecialCaseHandler"); function processExtraVars(extraVars) { return SpecialCaseHandler_1.handleSpecialCaseExtraVars.call(this, extraVars); } async function launchAwxJobTemplate(endpoint, launchData = {}, itemIndex = 0) { try { console.log('=== DEBUG: JOB TEMPLATE LAUNCH ==='); console.log('Original launch data:', JSON.stringify(launchData)); console.log('Launch data type:', typeof launchData); console.log('Launch data keys:', Object.keys(launchData)); if (launchData.raw_extra_vars === true) { console.log('raw_extra_vars flag detected - skipping extra_vars reprocessing'); delete launchData.raw_extra_vars; } else { try { const nodeParams = this.getNode().parameters; console.log('Raw node parameters:', JSON.stringify(nodeParams)); const extraVarsKeys = ['extraVars', 'extraVariables', 'extra_vars']; let foundExtraVars = false; for (const key of extraVarsKeys) { if (nodeParams[key]) { console.log(`Found extra vars in node parameters under key '${key}':`, JSON.stringify(nodeParams[key])); foundExtraVars = true; if (!launchData.extra_vars) { let extraVarsValue = nodeParams[key]; if (typeof extraVarsValue === 'object') { console.log(`Found extra vars as object in '${key}':`, JSON.stringify(extraVarsValue)); } else if (typeof extraVarsValue === 'string') { if (extraVarsValue.includes('/*n8n-auto-generated-fromAI')) { const match = extraVarsValue.match(/\$fromAI\('([^']+)',\s*'([^']*)',\s*'([^']+)'\)/); if (match && match[3] === 'json') { try { const jsonValue = match[2].trim(); if (jsonValue) { extraVarsValue = JSON.parse(jsonValue); console.log(`Extracted JSON from AI template:`, JSON.stringify(extraVarsValue)); } else { extraVarsValue = {}; } } catch (e) { console.log(`Failed to parse JSON from AI template:`, e.message); extraVarsValue = {}; } } } else if (extraVarsValue.trim().startsWith('{')) { try { extraVarsValue = JSON.parse(extraVarsValue); console.log(`Parsed extra vars string from '${key}':`, JSON.stringify(extraVarsValue)); } catch (e) { console.log(`Failed to parse extra vars string from '${key}':`, e.message); extraVarsValue = { value: extraVarsValue }; } } else { console.log(`Converting simple string from '${key}' to object`); extraVarsValue = { value: extraVarsValue }; } } console.log(`Adding missing extra_vars to launch data from '${key}':`, JSON.stringify(extraVarsValue)); launchData.extra_vars = extraVarsValue; } } } if (!foundExtraVars) { console.log('No extra variables found in raw node parameters'); } } catch (paramError) { console.log('Error checking raw node parameters:', paramError.message); } } const processedLaunchData = { ...launchData }; if (processedLaunchData.extra_vars) { if (typeof processedLaunchData.extra_vars === 'object') { console.log('Converting extra_vars from object to string:', JSON.stringify(processedLaunchData.extra_vars)); processedLaunchData.extra_vars = JSON.stringify(processedLaunchData.extra_vars); } else if (typeof processedLaunchData.extra_vars === 'string') { try { JSON.parse(processedLaunchData.extra_vars); console.log('extra_vars is already a valid JSON string'); } catch (e) { console.log('extra_vars is not a valid JSON string, converting to JSON object'); processedLaunchData.extra_vars = JSON.stringify({ value: processedLaunchData.extra_vars }); } } else { console.log('extra_vars is an unexpected type, converting to JSON object'); processedLaunchData.extra_vars = JSON.stringify({ value: String(processedLaunchData.extra_vars) }); } } else { console.log('No extra_vars found in launch data'); } console.log(`AWX Node: Launching job template at ${endpoint} with data:`, JSON.stringify(processedLaunchData)); const response = await GenericFunctions_1.awxApiRequest.call(this, 'POST', endpoint, processedLaunchData); return response; } catch (error) { console.error(`AWX Node: Error launching job template at ${endpoint}:`, error); throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Error launching job template: ${error.message}`, { itemIndex }); } } async function launchAwxWorkflowJobTemplate(endpoint, launchData = {}, itemIndex = 0) { try { console.log('=== DEBUG: WORKFLOW JOB TEMPLATE LAUNCH ==='); console.log('Original launch data:', JSON.stringify(launchData)); console.log('Launch data type:', typeof launchData); console.log('Launch data keys:', Object.keys(launchData)); try { const nodeParams = this.getNode().parameters; console.log('Raw node parameters:', JSON.stringify(nodeParams)); const extraVarsKeys = ['extraVars', 'extraVariables', 'extra_vars']; let foundExtraVars = false; for (const key of extraVarsKeys) { if (nodeParams[key]) { console.log(`Found extra vars in node parameters under key '${key}':`, JSON.stringify(nodeParams[key])); foundExtraVars = true; if (!launchData.extra_vars) { let extraVarsValue = nodeParams[key]; if (typeof extraVarsValue === 'object') { console.log(`Found extra vars as object in '${key}':`, JSON.stringify(extraVarsValue)); } else if (typeof extraVarsValue === 'string') { if (extraVarsValue.includes('/*n8n-auto-generated-fromAI')) { const match = extraVarsValue.match(/\$fromAI\('([^']+)',\s*'([^']*)',\s*'([^']+)'\)/); if (match && match[3] === 'json') { try { const jsonValue = match[2].trim(); if (jsonValue) { extraVarsValue = JSON.parse(jsonValue); console.log(`Extracted JSON from AI template:`, JSON.stringify(extraVarsValue)); } else { extraVarsValue = {}; } } catch (e) { console.log(`Failed to parse JSON from AI template:`, e.message); extraVarsValue = {}; } } } else if (extraVarsValue.trim().startsWith('{')) { try { extraVarsValue = JSON.parse(extraVarsValue); console.log(`Parsed extra vars string from '${key}':`, JSON.stringify(extraVarsValue)); } catch (e) { console.log(`Failed to parse extra vars string from '${key}':`, e.message); extraVarsValue = { value: extraVarsValue }; } } else { console.log(`Converting simple string from '${key}' to object`); extraVarsValue = { value: extraVarsValue }; } } console.log(`Adding missing extra_vars to launch data from '${key}':`, JSON.stringify(extraVarsValue)); launchData.extra_vars = extraVarsValue; } } } if (!foundExtraVars) { console.log('No extra variables found in raw node parameters'); } } catch (paramError) { console.log('Error checking raw node parameters:', paramError.message); } const processedLaunchData = { ...launchData }; if (processedLaunchData.extra_vars) { if (typeof processedLaunchData.extra_vars === 'object') { console.log('Converting extra_vars from object to string:', JSON.stringify(processedLaunchData.extra_vars)); processedLaunchData.extra_vars = JSON.stringify(processedLaunchData.extra_vars); } else if (typeof processedLaunchData.extra_vars === 'string') { try { JSON.parse(processedLaunchData.extra_vars); console.log('extra_vars is already a valid JSON string'); } catch (e) { console.log('extra_vars is not a valid JSON string, converting to JSON object'); processedLaunchData.extra_vars = JSON.stringify({ value: processedLaunchData.extra_vars }); } } else { console.log('extra_vars is an unexpected type, converting to JSON object'); processedLaunchData.extra_vars = JSON.stringify({ value: String(processedLaunchData.extra_vars) }); } } else { console.log('No extra_vars found in launch data'); } console.log(`AWX Node: Launching workflow job template at ${endpoint} with data:`, JSON.stringify(processedLaunchData)); const response = await GenericFunctions_1.awxApiRequest.call(this, 'POST', endpoint, processedLaunchData); return response; } catch (error) { console.error(`AWX Node: Error launching workflow job template at ${endpoint}:`, error); throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Error launching workflow job template: ${error.message}`, { itemIndex }); } } async function cancelAwxJob(endpoint, itemIndex = 0) { try { console.log(`AWX Node: Canceling job at ${endpoint}`); const response = await GenericFunctions_1.awxApiRequest.call(this, 'POST', endpoint, {}); return response; } catch (error) { console.error(`AWX Node: Error canceling job at ${endpoint}:`, error); throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Error canceling job: ${error.message}`, { itemIndex }); } } //# sourceMappingURL=JobTemplateHelpers.js.map