@controlplane/cli
Version:
Control Plane Corporation CLI
102 lines • 3.87 kB
JavaScript
;
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