Contact
CoCalc Logo Icon
StoreFeaturesDocsShareSupport News AboutSign UpSign In
| Download
Views: 39539
1
async = require('async')
2
winston = require('winston')
3
winston.remove(winston.transports.Console)
4
winston.add(winston.transports.Console, {level: 'debug', timestamp:true, colorize:true})
5
6
misc = require('smc-util/misc')
7
{defaults, required} = misc
8
9
smc_gcloud = require('./smc_gcloud')
10
11
exports.smc = (opts) -> new SMC(opts)
12
13
class SMC
14
constructor: ->
15
@_gcloud = require('./smc_gcloud').gcloud()
16
17
dbg: (f) ->
18
return (m) -> winston.debug("smc.#{f}: #{m}")
19
20
create_compute_vm: (opts) =>
21
opts = defaults opts,
22
name : required # e.g., 'compute11'
23
base : 'compute0-us' # name of disk to clone
24
type : 'n1-standard-1'
25
preemptible : true
26
cb : required
27
dbg = @dbg("create_compute_vm(name='#{opts.name}')")
28
async.series([
29
(cb) =>
30
dbg("create base disk from current live disk '#{opts.base}'")
31
disk = @_gcloud.disk(name:opts.base)
32
disk.copy
33
name : opts.name
34
cb : cb
35
(cb) =>
36
dbg("create vm")
37
@_gcloud.create_vm
38
name : opts.name
39
type : opts.type
40
preemptible : opts.preemptible
41
tags : ['compute']
42
disks : [opts.name]
43
cb : cb
44
], opts.cb)
45
46
create_web_vm: (opts) =>
47
opts = defaults opts,
48
name : required # e.g., 'web10'
49
base : 'web0' # name of disk to clone
50
type : 'g1-small'
51
preemptible : true
52
cb : required
53
dbg = @dbg("create_web_vm(name='#{opts.name}')")
54
async.series([
55
(cb) =>
56
dbg("create base disk from current live disk '#{opts.base}'")
57
disk = @_gcloud.disk(name:opts.base)
58
disk.copy
59
name : opts.name
60
cb : cb
61
(cb) =>
62
dbg("create vm")
63
@_gcloud.create_vm
64
name : opts.name
65
type : opts.type
66
preemptible : opts.preemptible
67
tags : ['http-server', 'https-server', 'hub']
68
disks : [opts.name]
69
cb : cb
70
], opts.cb)
71
72