n8n-nodes-awx
Version:
n8n node to interact with Ansible AWX/Tower with improved type safety
146 lines • 7.91 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.handleProjectOperations = handleProjectOperations;
const n8n_workflow_1 = require("n8n-workflow");
const SharedHelpers_1 = require("../utils/SharedHelpers");
const resourceHelpers_1 = require("../utils/resourceHelpers");
async function handleProjectOperations(action, itemIndex = 0) {
if (action === 'list') {
try {
const filter = this.getNodeParameter('filter', itemIndex, '');
const returnAll = this.getNodeParameter('returnAll', itemIndex, false);
const endpoint = '/projects/';
const queryParams = {};
if (filter) {
queryParams.search = filter;
}
const fetchMode = returnAll ? 'allPages' : 'firstPage';
const projects = await SharedHelpers_1.getAwxResources.call(this, endpoint, fetchMode, queryParams);
const responseFormat = this.getNodeParameter('responseFormat', itemIndex, 'friendly');
const formattedProjects = projects.map(project => (0, resourceHelpers_1.formatResourceResponse)(project, responseFormat, 'project'));
return [this.helpers.returnJsonArray(formattedProjects)];
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Failed to list projects: ${error.message}`, { itemIndex });
}
}
else if (action === 'get') {
try {
const idKeys = ['projectId'];
const nameKeys = ['projectName'];
const { id, name } = resourceHelpers_1.resolveResourceParameters.call(this, idKeys, nameKeys, 'project', itemIndex);
const project = await SharedHelpers_1.getAwxResource.call(this, 'projects', { id, name });
const responseFormat = this.getNodeParameter('responseFormat', itemIndex, 'friendly');
const formattedProject = (0, resourceHelpers_1.formatResourceResponse)(project, responseFormat, 'project');
return [[{ json: formattedProject }]];
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Failed to get project: ${error.message}`, { itemIndex });
}
}
else if (action === 'create') {
try {
const name = this.getNodeParameter('name', itemIndex);
const description = this.getNodeParameter('description', itemIndex, '');
const scmType = this.getNodeParameter('scmType', itemIndex);
const scmUrl = this.getNodeParameter('scmUrl', itemIndex);
const scmBranch = this.getNodeParameter('scmBranch', itemIndex, '');
const scmClean = this.getNodeParameter('scmClean', itemIndex, false);
const scmDeleteOnUpdate = this.getNodeParameter('scmDeleteOnUpdate', itemIndex, false);
const credentialId = this.getNodeParameter('credentialId', itemIndex, '');
const organizationId = this.getNodeParameter('organizationId', itemIndex, '');
const projectData = {
name,
description,
scm_type: scmType,
scm_url: scmUrl,
scm_branch: scmBranch,
scm_clean: scmClean,
scm_delete_on_update: scmDeleteOnUpdate,
};
if (credentialId) {
projectData.credential = credentialId;
}
if (organizationId) {
projectData.organization = organizationId;
}
const project = await SharedHelpers_1.createAwxResource.call(this, 'projects', projectData);
const responseFormat = this.getNodeParameter('responseFormat', itemIndex, 'friendly');
const formattedProject = (0, resourceHelpers_1.formatResourceResponse)(project, responseFormat, 'project');
return [[{ json: formattedProject }]];
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Failed to create project: ${error.message}`, { itemIndex });
}
}
else if (action === 'update') {
try {
const idKeys = ['projectId'];
const nameKeys = ['projectName'];
const { id, name } = resourceHelpers_1.resolveResourceParameters.call(this, idKeys, nameKeys, 'project', itemIndex);
let resolvedProjectId = id;
if (!resolvedProjectId && name) {
const project = await SharedHelpers_1.getAwxResource.call(this, 'projects', { name });
resolvedProjectId = project.id;
}
if (!resolvedProjectId) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Project ID could not be determined for update.');
}
const updateFields = this.getNodeParameter('updateFields', itemIndex, {});
const project = await SharedHelpers_1.updateAwxResource.call(this, `/projects/${resolvedProjectId}/`, updateFields);
const responseFormat = this.getNodeParameter('responseFormat', itemIndex, 'friendly');
const formattedProject = (0, resourceHelpers_1.formatResourceResponse)(project, responseFormat, 'project');
return [[{ json: formattedProject }]];
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Failed to update project: ${error.message}`, { itemIndex });
}
}
else if (action === 'delete') {
try {
const idKeys = ['projectId'];
const nameKeys = ['projectName'];
const { id, name } = resourceHelpers_1.resolveResourceParameters.call(this, idKeys, nameKeys, 'project', itemIndex);
let resolvedProjectId = id;
if (!resolvedProjectId && name) {
const project = await SharedHelpers_1.getAwxResource.call(this, 'projects', { name });
resolvedProjectId = project.id;
}
if (!resolvedProjectId) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Project ID could not be determined for deletion.');
}
await SharedHelpers_1.deleteAwxResourceWithLogging.call(this, `/projects/${resolvedProjectId}/`, itemIndex);
return [
this.helpers.returnJsonArray([{
success: true,
message: `Project ${name || resolvedProjectId} deleted successfully.`,
}]),
];
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Failed to delete project: ${error.message}`, { itemIndex });
}
}
else if (action === 'sync') {
try {
const idKeys = ['projectId'];
const nameKeys = ['projectName'];
const { id, name } = resourceHelpers_1.resolveResourceParameters.call(this, idKeys, nameKeys, 'project', itemIndex);
let resolvedProjectId = id;
if (!resolvedProjectId && name) {
const project = await SharedHelpers_1.getAwxResource.call(this, 'projects', { name });
resolvedProjectId = project.id;
}
if (!resolvedProjectId) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), 'Project ID could not be determined for sync.');
}
const response = await SharedHelpers_1.syncAwxResource.call(this, `/projects/${resolvedProjectId}/update/`);
return [[{ json: response }]];
}
catch (error) {
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Failed to sync project: ${error.message}`, { itemIndex });
}
}
throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The action "${action}" is not supported for projects`);
}
//# sourceMappingURL=ProjectResources.js.map