UNPKG

portainer-redeploy

Version:

A TypeScript client for redeploy a stack in Portainer

123 lines 4.57 kB
#!/usr/bin/env node "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const portainerClient_1 = __importDefault(require("./portainerClient")); const argparse = __importStar(require("argparse")); async function main() { const parser = new argparse.ArgumentParser({ description: 'Portainer Client', }); parser.add_argument('action', { help: 'Action to perform', default: 'redeploy', nargs: '?', }); parser.add_argument('-s', '--stack_id', { help: 'Stack ID', required: true, }); parser.add_argument('-u', '--selfsigned', { action: 'store_true', help: 'Use self signed certificate', default: false, }); parser.add_argument('-d', '--docker_id', { help: 'Docker image tag', }); parser.add_argument('-n', '--docker_id_name', { help: 'Docker ID in compose file (default: DOCKER_IMAGE)', default: 'DOCKER_IMAGE', }); parser.add_argument('-b', '--base_domain', { help: 'Base Domain', }); parser.add_argument('-a', '--api_key', { help: 'Portainer Api Key', }); const args = parser.parse_args(); let baseDomain = 'https://portainer.example.com'; if (args.base_domain !== undefined) { if (!args.base_domain.startsWith('http')) { baseDomain = 'https://' + args.base_domain; } else { baseDomain = args.base_domain; } } const apiKey = args.api_key || 'exampleApiKey'; const stackId = args.stack_id; const client = new portainerClient_1.default(baseDomain, apiKey, args.selfsigned); try { if (args.action === 'stack') { const astack = await client.getStack(stackId); console.log(`The Stack ${stackId}`, JSON.stringify(astack.data, null, 2)); } if (args.action === 'redeploy') { const astack = await client.getStack(stackId); const astackJson = astack.data; if (args.docker_id) { if (astackJson.Env && astackJson.Env.length > 0) { let found = false; for (const env of astackJson.Env) { if (env.name === args.docker_id_name) { env.value = args.docker_id; found = true; break; } } if (!found) { astackJson.Env.push({ name: args.docker_id_name, value: args.docker_id, }); } } } console.log(astackJson.Env); const response = await client.redeployStack(stackId, astackJson); const jsonResponse = response.data; if (String(jsonResponse.Id) === stackId) { console.log('Stack redeployed successfully'); } else { console.log('Stack redeployment failed'); console.log(JSON.stringify(jsonResponse, null, 2)); process.exit(1); } } } catch (error) { console.error('An error occurred:', error); process.exit(1); } } if (require.main === module) { main(); } //# sourceMappingURL=main.js.map