mirror of https://github.com/docker/docs.git
276 lines
7.2 KiB
JavaScript
276 lines
7.2 KiB
JavaScript
var exec = require('exec');
|
|
var path = require('path');
|
|
|
|
boot2dockerexec = function (command, callback) {
|
|
exec(path.join(getBinDir(), 'boot2docker') + ' ' + command, function(err, stdout) {
|
|
callback(err, stdout);
|
|
});
|
|
};
|
|
|
|
getBoot2DockerIp = function (callback) {
|
|
boot2dockerexec('ip', function (err, stdout) {
|
|
if (err) {
|
|
callback(err, null);
|
|
} else {
|
|
callback(null, stdout);
|
|
}
|
|
});
|
|
};
|
|
|
|
getBoot2DockerState = function (callback) {
|
|
boot2dockerexec(' info', function (err, stdout) {
|
|
if (err) {
|
|
callback(err, null);
|
|
return;
|
|
}
|
|
try {
|
|
var info = JSON.parse(stdout);
|
|
callback(null, info.State);
|
|
} catch (e) {
|
|
callback(e, null);
|
|
}
|
|
});
|
|
};
|
|
|
|
getBoot2DockerDiskUsage = function (callback) {
|
|
boot2dockerexec('ssh "df"', function (err, stdout) {
|
|
if (err) {
|
|
callback(err, null);
|
|
return;
|
|
}
|
|
try {
|
|
var lines = stdout.split('\n');
|
|
var dataline = _.find(lines, function (line) {
|
|
return line.indexOf('/dev/sda1') !== -1;
|
|
});
|
|
var tokens = dataline.split(' ');
|
|
tokens = tokens.filter(function (token) {
|
|
return token !== '';
|
|
});
|
|
var usedGb = parseInt(tokens[2], 10) / 1000000;
|
|
var totalGb = parseInt(tokens[3], 10) / 1000000;
|
|
var percent = parseInt(tokens[4].replace('%', ''), 10);
|
|
callback(null, {
|
|
used_gb: usedGb.toFixed(2),
|
|
total_gb: totalGb.toFixed(2),
|
|
percent: percent
|
|
});
|
|
} catch (error) {
|
|
callback(err, null);
|
|
}
|
|
});
|
|
};
|
|
|
|
getBoot2DockerMemoryUsage = function (callback) {
|
|
boot2dockerexec('ssh "free -m"', function (err, stdout) {
|
|
if (err) {
|
|
callback(err, null);
|
|
return;
|
|
}
|
|
try {
|
|
var lines = stdout.split('\n');
|
|
var dataline = _.find(lines, function (line) {
|
|
return line.indexOf('-/+ buffers') !== -1;
|
|
});
|
|
var tokens = dataline.split(' ');
|
|
tokens = tokens.filter(function(token) {
|
|
return token !== '';
|
|
});
|
|
var usedGb = parseInt(tokens[2], 10) / 1000;
|
|
var freeGb = parseInt(tokens[3], 10) / 1000;
|
|
var totalGb = usedGb + freeGb;
|
|
var percent = Math.round(usedGb / totalGb * 100);
|
|
callback(null, {
|
|
used_gb: usedGb.toFixed(2),
|
|
total_gb: totalGb.toFixed(2),
|
|
free_gb: freeGb.toFixed(2),
|
|
percent: percent
|
|
});
|
|
} catch (error) {
|
|
callback(error, null);
|
|
}
|
|
});
|
|
};
|
|
|
|
getBoot2DockerInfo = function (callback) {
|
|
boot2dockerexec('ssh "sudo ifconfig eth1 192.168.59.103 netmask 255.255.255.0"', function (err, stdout) {
|
|
exec('VBoxManage dhcpserver remove --netname HostInterfaceNetworking-vboxnet0', function (err, stdout) {
|
|
getBoot2DockerState(function (err, state) {
|
|
if (err) {
|
|
callback(err, null);
|
|
return;
|
|
}
|
|
if (state === 'poweroff') {
|
|
callback(null, {state: state});
|
|
} else {
|
|
getBoot2DockerMemoryUsage(function (err, mem) {
|
|
if (err) { callback(null, {state: state}); }
|
|
getBoot2DockerDiskUsage(function (err, disk) {
|
|
if (err) { callback(null, {state: state}); }
|
|
callback(null, {
|
|
state: state,
|
|
memory: mem,
|
|
disk: disk
|
|
});
|
|
});
|
|
});
|
|
}
|
|
});
|
|
});
|
|
});
|
|
};
|
|
|
|
boot2DockerVMExists = function (callback) {
|
|
boot2dockerexec('info', function (err) {
|
|
if (err) {
|
|
callback(null, false);
|
|
} else {
|
|
callback(null, true);
|
|
}
|
|
});
|
|
};
|
|
|
|
eraseBoot2DockerVMFiles = function (callback) {
|
|
var VMFileLocation = path.join(getHomePath(), 'VirtualBox\\ VMs/boot2docker-vm');
|
|
exec('rm -rf ' + VMFileLocation, function (err) {
|
|
callback(err);
|
|
});
|
|
};
|
|
|
|
initBoot2Docker = function (callback) {
|
|
isVirtualBoxInstalled(function (err, installed) {
|
|
if (err) {
|
|
callback(err);
|
|
return;
|
|
}
|
|
if (installed) {
|
|
boot2dockerexec('init', function (err) {
|
|
console.log(err);
|
|
if (err) {
|
|
if (err.indexOf('exit status 1') !== -1) {
|
|
eraseBoot2DockerVMFiles(function () {
|
|
boot2dockerexec('init', function (err) {
|
|
callback(err);
|
|
});
|
|
});
|
|
} else {
|
|
callback(err);
|
|
}
|
|
} else {
|
|
callback();
|
|
}
|
|
});
|
|
} else {
|
|
callback(new Error('initBoot2Docker called but VirtualBox isn\'t installed.'));
|
|
}
|
|
});
|
|
};
|
|
|
|
upgradeBoot2Docker = function (callback) {
|
|
boot2dockerexec('upgrade', function (err, stdout) {
|
|
console.log(stdout);
|
|
callback(err);
|
|
});
|
|
};
|
|
|
|
installBoot2DockerAddons = function (callback) {
|
|
exec('/bin/cat ' + path.join(getBinDir(), 'kite-binaries.tar.gz') + ' | ' + path.join(getBinDir(), 'boot2docker') + ' ssh "tar zx -C /usr/local/bin"', function (err, stdout) {
|
|
console.log(stdout);
|
|
callback(err);
|
|
});
|
|
boot2dockerexec('ssh "sudo ifconfig eth1 192.168.59.103 netmask 255.255.255.0"', function (err, stdout) {});
|
|
exec('VBoxManage dhcpserver remove --netname HostInterfaceNetworking-vboxnet0', function (err, stdout) {});
|
|
};
|
|
|
|
startBoot2Docker = function (callback) {
|
|
isVirtualBoxInstalled(function (err, installed) {
|
|
if (err) {
|
|
callback(err);
|
|
return;
|
|
}
|
|
if (installed) {
|
|
boot2DockerVMExists(function (err, exists) {
|
|
if (exists) {
|
|
boot2dockerexec('up', function (err, stdout) {
|
|
console.log(err);
|
|
console.log(stdout);
|
|
if (err) {
|
|
if (err.indexOf('Waiting for VM to be started') !== -1 || err.indexOf('..........') !== -1) {
|
|
installBoot2DockerAddons(function (err) {
|
|
callback(err);
|
|
});
|
|
} else {
|
|
callback(err);
|
|
}
|
|
} else {
|
|
installBoot2DockerAddons(function (err) {
|
|
callback(err);
|
|
});
|
|
}
|
|
});
|
|
} else {
|
|
callback(new Error('startBoot2Docker called but boot2docker-vm doesn\'t exist.'));
|
|
}
|
|
});
|
|
} else {
|
|
callback(new Error('startBoot2Docker called but VirtualBox isn\'t installed.'));
|
|
}
|
|
});
|
|
};
|
|
|
|
stopBoot2Docker = function (callback) {
|
|
boot2dockerexec('stop', function (err, stdout) {
|
|
console.log(stdout);
|
|
console.log(err);
|
|
if (err) {
|
|
callback(err);
|
|
return;
|
|
}
|
|
callback(null);
|
|
});
|
|
};
|
|
|
|
checkBoot2DockerVM = function (callback) {
|
|
boot2DockerVMExists(function (err) {
|
|
if (err) {
|
|
callback(err);
|
|
return;
|
|
} else {
|
|
getBoot2DockerState(function (err, state) {
|
|
if (state !== 'running') {
|
|
callback('boot2docker not running');
|
|
} else {
|
|
callback();
|
|
}
|
|
});
|
|
}
|
|
});
|
|
};
|
|
|
|
// Make sure the VM exists, is up and is running.
|
|
resolveBoot2DockerVM = function (callback) {
|
|
boot2DockerVMExists(function (err, exists) {
|
|
|
|
// If somehow the boot2docker VM doesn't exist anymor then re-create it.
|
|
if (!exists) {
|
|
initBoot2Docker(function () {
|
|
startBoot2Docker(function (err) {
|
|
callback(err);
|
|
});
|
|
});
|
|
} else {
|
|
|
|
// If it exists but it's not running.. restart it.
|
|
getBoot2DockerState(function (err, state) {
|
|
if (state !== 'running') {
|
|
startBoot2Docker(function (err) {
|
|
callback(err);
|
|
});
|
|
} else {
|
|
callback();
|
|
}
|
|
});
|
|
}
|
|
});
|
|
};
|