smc-hub
Version:
CoCalc: Backend webserver component
115 lines (101 loc) • 3.02 kB
JavaScript
// Generated by CoffeeScript 2.5.1
(function() {
//########################################################################
// This file is part of CoCalc: Copyright © 2020 Sagemath, Inc.
// License: AGPLv3 s.t. "Commons Clause" – see LICENSE.md for details
//########################################################################
var SMC, async, defaults, misc, required, smc_gcloud, winston;
async = require('async');
winston = require('./logger').getLogger('smc-manager');
misc = require('smc-util/misc');
({defaults, required} = misc);
smc_gcloud = require('./smc_gcloud');
exports.smc = function(opts) {
return new SMC(opts);
};
SMC = class SMC {
constructor() {
this.create_compute_vm = this.create_compute_vm.bind(this);
this.create_web_vm = this.create_web_vm.bind(this);
this._gcloud = require('./smc_gcloud').gcloud();
}
dbg(f) {
return function(m) {
return winston.debug(`smc.${f}: ${m}`);
};
}
create_compute_vm(opts) {
var dbg;
opts = defaults(opts, {
name: required, // e.g., 'compute11'
base: 'compute0-us', // name of disk to clone
type: 'n1-standard-1',
preemptible: true,
cb: required
});
dbg = this.dbg(`create_compute_vm(name='${opts.name}')`);
return async.series([
(cb) => {
var disk;
dbg(`create base disk from current live disk '${opts.base}'`);
disk = this._gcloud.disk({
name: opts.base
});
return disk.copy({
name: opts.name,
cb: cb
});
},
(cb) => {
dbg("create vm");
return this._gcloud.create_vm({
name: opts.name,
type: opts.type,
preemptible: opts.preemptible,
tags: ['compute'],
disks: [opts.name],
cb: cb
});
}
], opts.cb);
}
create_web_vm(opts) {
var dbg;
opts = defaults(opts, {
name: required, // e.g., 'web10'
base: 'web0', // name of disk to clone
type: 'g1-small',
preemptible: true,
cb: required
});
dbg = this.dbg(`create_web_vm(name='${opts.name}')`);
return async.series([
(cb) => {
var disk;
dbg(`create base disk from current live disk '${opts.base}'`);
disk = this._gcloud.disk({
name: opts.base
});
return disk.copy({
name: opts.name,
cb: cb
});
},
(cb) => {
dbg("create vm");
return this._gcloud.create_vm({
name: opts.name,
type: opts.type,
preemptible: opts.preemptible,
tags: ['http-server',
'https-server',
'hub'],
disks: [opts.name],
cb: cb
});
}
], opts.cb);
}
};
}).call(this);
//# sourceMappingURL=smc-manager.js.map