docker/dist/dockersock.classes.dockersock.js

261 lines
19 KiB
JavaScript
Raw Normal View History

2016-06-15 23:56:53 +00:00
"use strict";
2017-03-26 11:02:20 +00:00
Object.defineProperty(exports, "__esModule", { value: true });
2016-06-15 23:56:53 +00:00
require("typings-global");
2016-07-15 10:52:33 +00:00
const plugins = require("./dockersock.plugins");
const rxjs_1 = require("rxjs");
class Dockersock {
constructor(pathArg = "http://unix:/var/run/docker.sock:") {
this.requestObjectmap = new plugins.lik.Objectmap();
2016-06-15 23:56:53 +00:00
this.sockPath = pathArg;
}
// methods
2016-07-15 10:52:33 +00:00
auth(userArg, passArg) {
let done = plugins.q.defer();
this.request("POST", "");
return done.promise;
2016-07-15 10:52:33 +00:00
}
listContainers() {
let done = plugins.q.defer();
2016-06-15 23:56:53 +00:00
this.request("GET", "/containers")
.then(done.resolve);
return done.promise;
2016-07-15 10:52:33 +00:00
}
2016-06-15 23:56:53 +00:00
;
2016-07-15 10:52:33 +00:00
listContainersDetailed() {
let done = plugins.q.defer();
let detailedDataObject = [];
2016-06-15 23:56:53 +00:00
this.listContainers()
2016-07-15 10:52:33 +00:00
.then((dataArg) => {
let recursiveCounter = 0;
let makeDetailed = () => {
2016-06-15 23:56:53 +00:00
if (typeof dataArg[recursiveCounter] != "undefined") {
2016-07-15 10:52:33 +00:00
this.request("GET", "/containers/" + dataArg[recursiveCounter].Id)
.then((dataArg2) => {
2016-06-16 02:18:10 +00:00
detailedDataObject.push(dataArg2);
2016-06-15 23:56:53 +00:00
recursiveCounter++;
2016-06-16 02:18:10 +00:00
// recursive call
2016-06-15 23:56:53 +00:00
makeDetailed();
});
}
else {
done.resolve(detailedDataObject);
}
};
makeDetailed();
});
return done.promise;
2016-07-15 10:52:33 +00:00
}
2016-06-15 23:56:53 +00:00
;
2016-07-15 10:52:33 +00:00
listContainersRunning() {
let done = plugins.q.defer();
2016-06-15 23:56:53 +00:00
return done.promise;
2016-07-15 10:52:33 +00:00
}
listContainersStopped() {
let done = plugins.q.defer();
2016-06-15 23:56:53 +00:00
return done.promise;
2016-07-15 10:52:33 +00:00
}
listImages() {
2016-06-16 04:43:34 +00:00
return this.request("GET", "/images", "?all=true");
2016-07-15 10:52:33 +00:00
}
listImagesDangling() {
2016-06-16 04:43:34 +00:00
return this.request("GET", "/images", "?dangling=true");
2016-07-15 10:52:33 +00:00
}
2016-07-17 22:54:41 +00:00
pullImage(imageLabelArg) {
let imageLabel = encodeURI(imageLabelArg);
2016-06-16 06:47:21 +00:00
return this.requestStream("POST", "/images/create?fromImage=" + imageLabel);
2016-07-15 10:52:33 +00:00
}
2016-06-16 04:43:34 +00:00
;
2016-07-15 10:52:33 +00:00
createContainer(optionsArg, pullFirstArg = true) {
let done = plugins.q.defer();
let create = () => {
return this.request("POST", "/containers/create", "", optionsArg);
2016-06-17 00:38:00 +00:00
};
if (pullFirstArg) {
this.pullImage(optionsArg.Image)
.then(create)
.then(done.resolve);
}
else {
create()
.then(done.resolve);
}
return done.promise;
2016-07-15 10:52:33 +00:00
}
2016-06-16 04:43:34 +00:00
;
2016-07-15 10:52:33 +00:00
getContainerId() {
}
2016-06-16 04:43:34 +00:00
;
2016-07-15 10:52:33 +00:00
startContainer(containerNameArg) {
return this.request("POST", "/containers/" + containerNameArg + "/start");
2016-07-15 10:52:33 +00:00
}
;
2016-07-15 10:52:33 +00:00
stopContainer(containerNameArg) {
return this.request("POST", "/containers/" + containerNameArg + "/stop");
2016-07-15 10:52:33 +00:00
}
2016-06-16 04:43:34 +00:00
;
2016-07-15 10:52:33 +00:00
removeContainer(containerNameArg) {
2016-06-16 04:43:34 +00:00
return this.request("DELETE", "/containers/" + containerNameArg + "?v=1");
2016-07-15 10:52:33 +00:00
}
2016-06-16 04:43:34 +00:00
;
2016-07-15 10:52:33 +00:00
clean() {
let done = plugins.q.defer();
2016-06-15 23:56:53 +00:00
return done.promise;
2016-07-15 10:52:33 +00:00
}
;
2016-07-15 10:52:33 +00:00
callOnChange(cb) {
let cbPromise;
let changeBuffered = false; // when cb is running then buffer any consequent change
let requestStream = plugins.request.get(this.sockPath + "/events");
requestStream.on("response", (response) => {
2016-06-17 00:38:00 +00:00
if (response.statusCode == 200) {
plugins.beautylog.ok("request returned status 200, so we are good!");
}
else {
plugins.beautylog.error("request returned error: " + response.statusCode);
}
});
2016-07-15 10:52:33 +00:00
requestStream.on("data", (data) => {
let status = JSON.parse(data.toString()).status;
2016-06-17 00:38:00 +00:00
plugins.beautylog.logReduced(status);
if (typeof cbPromise == "undefined" || cbPromise.state == "pending") {
cbPromise = cb();
}
else if (changeBuffered) {
changeBuffered = true;
2016-07-15 10:52:33 +00:00
cbPromise.then(() => {
2016-06-17 00:38:00 +00:00
changeBuffered = false;
cbPromise = cb();
});
}
});
2016-07-15 10:52:33 +00:00
requestStream.on("end", () => {
2016-06-17 00:38:00 +00:00
});
2016-07-15 10:52:33 +00:00
}
;
/**
* gets you an observable that reports changes in the docker infrastructure
*/
2016-07-15 10:52:33 +00:00
getChangeObservable() {
2016-07-29 18:41:27 +00:00
let options = {
method: "GET",
url: this.sockPath + "/events",
headers: {
"Content-Type": "application/json",
"Host": "docker.sock"
}
};
let requestStream = plugins.request(options, (err, res, body) => {
if (!err && res.statusCode == 200) {
}
else {
console.log(err);
console.log(res);
}
;
});
let incomingMessage;
2016-07-15 10:52:33 +00:00
requestStream.on("response", (response) => {
incomingMessage = response;
this.requestObjectmap.add(incomingMessage);
2016-07-12 11:36:34 +00:00
if (response.statusCode == 200) {
plugins.beautylog.ok("request returned status 200, so we are good!");
}
else {
plugins.beautylog.error("request returned error: " + response.statusCode);
}
});
2016-07-15 10:52:33 +00:00
let changeObservable = rxjs_1.Observable.fromEvent(requestStream, "data");
requestStream.on("end", () => {
this.requestObjectmap.remove(incomingMessage);
2016-07-12 11:36:34 +00:00
});
return changeObservable;
2016-07-15 10:52:33 +00:00
}
request(methodArg, routeArg, queryArg = "", dataArg = {}) {
let done = plugins.q.defer();
let jsonArg = JSON.stringify(dataArg);
let suffix = "";
if (methodArg == "GET")
suffix = "/json";
2016-07-15 10:52:33 +00:00
let options = {
2016-06-15 23:56:53 +00:00
method: methodArg,
2016-06-16 04:43:34 +00:00
url: this.sockPath + routeArg + suffix + queryArg,
2016-06-15 23:56:53 +00:00
headers: {
2016-07-18 00:50:28 +00:00
"Content-Type": "application/json",
"Host": "docker.sock"
2016-06-15 23:56:53 +00:00
},
body: jsonArg
};
2016-07-17 23:35:04 +00:00
//console.log(options);
2016-07-15 10:52:33 +00:00
plugins.request(options, (err, res, body) => {
2016-06-15 23:56:53 +00:00
if (!err && res.statusCode == 200) {
var responseObj = JSON.parse(body);
done.resolve(responseObj);
}
else {
console.log(err);
2016-07-17 23:35:04 +00:00
console.log(res);
2016-06-15 23:56:53 +00:00
done.reject(err);
}
;
});
return done.promise;
2016-07-15 10:52:33 +00:00
}
2016-07-18 00:50:28 +00:00
requestStream(methodArg, routeArg, queryArg = "", dataArg = {}) {
2016-07-15 10:52:33 +00:00
let done = plugins.q.defer();
2016-07-18 00:50:28 +00:00
let jsonArg = JSON.stringify(dataArg);
let suffix = "";
let options = {
method: methodArg,
url: this.sockPath + routeArg + suffix + queryArg,
headers: {
"Content-Type": "application/json",
"Host": "docker.sock"
},
body: jsonArg
};
let requestStream = plugins.request(options, (err, res, body) => {
if (!err && res.statusCode == 200) {
2016-06-16 18:25:18 +00:00
done.resolve();
2016-07-18 00:50:28 +00:00
}
else {
console.log(err);
console.log(res);
done.reject(err);
}
;
});
let incomingMessage;
2016-07-18 00:50:28 +00:00
requestStream.on("response", (response) => {
incomingMessage = response;
this.requestObjectmap.add(incomingMessage);
2016-07-18 00:50:28 +00:00
if (response.statusCode == 200) {
plugins.beautylog.ok("request returned status 200, so we are good!");
}
else {
plugins.beautylog.error("request returned error: " + response.statusCode);
done.reject(response);
}
});
requestStream.on("data", (data) => {
let status;
status = JSON.parse(data.toString()).status;
plugins.beautylog.logReduced(status);
});
requestStream.on("end", () => {
this.requestObjectmap.remove(incomingMessage);
});
2016-06-16 06:47:21 +00:00
return done.promise;
2016-07-15 10:52:33 +00:00
}
;
endRequests() {
setTimeout(() => {
this.requestObjectmap.forEach((itemArg) => {
itemArg.emit("end");
});
this.requestObjectmap.wipe();
}, 5000);
}
;
2016-07-15 10:52:33 +00:00
}
2016-06-15 23:56:53 +00:00
exports.Dockersock = Dockersock;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9ja2Vyc29jay5jbGFzc2VzLmRvY2tlcnNvY2suanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9kb2NrZXJzb2NrLmNsYXNzZXMuZG9ja2Vyc29jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDBCQUF1QjtBQUN2QixnREFBZ0Q7QUFDaEQsK0JBQWtDO0FBS2xDO0lBR0ksWUFBWSxVQUFrQixtQ0FBbUM7UUFEakUscUJBQWdCLEdBQUcsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBMkIsQ0FBQztRQUVwRSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztJQUM1QixDQUFDO0lBRUQsVUFBVTtJQUNWLElBQUksQ0FBQyxPQUFlLEVBQUUsT0FBZTtRQUNqQyxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxjQUFjO1FBQ1YsSUFBSSxJQUFJLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUM7YUFDN0IsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQztJQUN4QixDQUFDO0lBQUEsQ0FBQztJQUNGLHNCQUFzQjtRQUNsQixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLElBQUksa0JBQWtCLEdBQUcsRUFBRSxDQUFDO1FBQzVCLElBQUksQ0FBQyxjQUFjLEVBQUU7YUFDaEIsSUFBSSxDQUFDLENBQUMsT0FBTztZQUNWLElBQUksZ0JBQWdCLEdBQUcs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