n8n-nodes-awx
Version:
n8n node to interact with Ansible AWX/Tower with improved type safety
230 lines • 13 kB
JavaScript
;
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