UNPKG

@controlplane/cli

Version:

Control Plane Corporation CLI

102 lines 3.87 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.AgentV2 = void 0; const _ = require("lodash"); const os = require("os"); const path = require("path"); const version_1 = require("../util/version"); const logger_1 = require("../util/logger"); const io_1 = require("../util/io"); const child_process_1 = require("child_process"); class AgentV2 { constructor(session, client, bootstrap) { this.session = session; this.client = client; this.bootstrap = bootstrap; } async manifests(args) { const yaml = await this.client.post(`/org/${this.session.context.org}/agent/-helpwith/k8s`, { namespace: args.namespace, bootstrap: this.bootstrap, replicas: args.replicas, createNamespace: !!args.createNamespace, }); this.session.out(yaml); } async dockerUp(args) { const absBootstrapPath = path.resolve((0, io_1.resolvePath)(args.bootstrapFile)); const info = await this.client.post(`/org/${this.session.context.org}/agent/-helpwith/docker`, { bootstrap: this.bootstrap, }); const volName = await this.createVol(this.bootstrap.agentId); const dockerArgs = ['run']; info.cap_add.forEach((cap) => { dockerArgs.push('--cap-add'); dockerArgs.push(cap); }); dockerArgs.push('--name'); dockerArgs.push(`agent-${this.bootstrap.agentId}`); dockerArgs.push('--net'); dockerArgs.push(args.net); if (args.net != 'host') { info.devices.forEach((dev) => { dockerArgs.push('--device'); dockerArgs.push(dev); }); } dockerArgs.push('--mount'); dockerArgs.push(`source=${volName},target=${info.stateDir}`); dockerArgs.push('--volume'); dockerArgs.push(`${absBootstrapPath}:/etc/controlplane/bootstrap.json:ro`); dockerArgs.push('--env'); dockerArgs.push(`BOOTSTRAP_PATH=/etc/controlplane/bootstrap.json`); if (args.exposeProxy && args.net != 'host') { dockerArgs.push('--publish=3128:3128'); } if (args.background) { dockerArgs.push('-td'); } else { dockerArgs.push('--env'); dockerArgs.push(`XDG_SESSION_DESKTOP=x`); dockerArgs.push('-ti'); dockerArgs.push('--rm'); } Object.entries(info.env).forEach(([k, v]) => { dockerArgs.push('--env'); dockerArgs.push(`${k}=${v}`); }); // same structure as in v1 const dynamic = { cloudProvider: 'docker', image: args.image || info.image, cliVersion: version_1.About.build, session: this.session.id, username: os.userInfo().username, hostname: os.hostname(), }; Object.entries(dynamic).forEach(([k, v]) => { dockerArgs.push('--env'); dockerArgs.push(`DISCOVERY_${_.snakeCase(k)}=${v}`); }); dockerArgs.push(args.image || info.image); logger_1.logger.debug('Running docker as docker ' + dockerArgs.join(' ')); (0, child_process_1.spawn)('docker', dockerArgs, { stdio: 'inherit', }); } async createVol(agentId) { const volName = `agent-${agentId}`; return new Promise((resolve, reject) => { const child = (0, child_process_1.spawn)('docker', ['volume', 'create', volName]); child .on('close', () => resolve(volName)) .on('error', (err) => { logger_1.logger.info('Volume already exists - reusing it'); resolve(volName); }); }); } } exports.AgentV2 = AgentV2; //# sourceMappingURL=agentV2.js.map