From 1def03d840b759598d31e6a37e4993ed460d0996 Mon Sep 17 00:00:00 2001 From: Phil Kunz Date: Thu, 16 Jun 2016 00:40:32 +0200 Subject: [PATCH] update structure --- Dockerfile | 4 ++- README.md | 28 ++++++++++++++++++++ dist/dockersock.class.dockersock.d.ts | 6 +++++ dist/dockersock.class.dockersock.js | 38 +++++++++++++++++++++++++++ dist/dockersock.plugins.d.ts | 4 +++ dist/dockersock.plugins.js | 7 +++++ package.json | 5 ++-- ts/dockersock.class.dockersock.ts | 25 ++++++++++++++++-- 8 files changed, 112 insertions(+), 5 deletions(-) create mode 100644 README.md create mode 100644 dist/dockersock.class.dockersock.d.ts create mode 100644 dist/dockersock.class.dockersock.js create mode 100644 dist/dockersock.plugins.d.ts create mode 100644 dist/dockersock.plugins.js diff --git a/Dockerfile b/Dockerfile index af6e43e..76425ba 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1 +1,3 @@ -FROM hosttoday/ht-docker-node:lts \ No newline at end of file +FROM hosttoday/ht-docker-node:lts +COPY ./node_modules /app-node/node_modules +COPY ./dist /app-node/dist \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..0d2836f --- /dev/null +++ b/README.md @@ -0,0 +1,28 @@ +# dockersock +easy communication with docker from node, TypeScript ready + +## Status +[![build status](https://gitlab.com/pushrocks/dockersock/badges/master/build.svg)](https://gitlab.com/pushrocks/dockersock/commits/master) + +## Usage +We recommend the use of TypeScript for best Intellisense. + +```TypeScript +import {Dockersock} from "dockersock"; // require Dockersock class + +let myDockersock = new Dockersock(); // optional: you can pass a domain to the contructor, defaults to /var/run/docker.sock + +myDockersock.listContainers() // promise, resolve gets container data +myDockersock.listContainersDetailed() // promise, resolve gets more detailed container data (by combining several requests internally) +myDockersock.listContainersRunning() // promise, resolve gets container data for currently running containers +myDockersock.listContainersStopped() // promise, resolve gets container data for stopped containers + +myDockersock.startContainer({ // starts a already present container + name: "somecontainername" +}) + +myDockersock.newContainer({ // start new Container, equals "docker run" shell command + image: "someimagetag" +}) + +``` \ No newline at end of file diff --git a/dist/dockersock.class.dockersock.d.ts b/dist/dockersock.class.dockersock.d.ts new file mode 100644 index 0000000..1df932c --- /dev/null +++ b/dist/dockersock.class.dockersock.d.ts @@ -0,0 +1,6 @@ +import "typings-global"; +export declare class dockersock { + sockPath: string; + constructor(pathArg: string); + request(methodArg: string, routeArg: string, dataArg?: {}): any; +} diff --git a/dist/dockersock.class.dockersock.js b/dist/dockersock.class.dockersock.js new file mode 100644 index 0000000..735c32a --- /dev/null +++ b/dist/dockersock.class.dockersock.js @@ -0,0 +1,38 @@ +"use strict"; +require("typings-global"); +var plugins = require("./dockersock.plugins"); +var dockersock = (function () { + function dockersock(pathArg) { + this.sockPath = pathArg; + } + dockersock.prototype.request = function (methodArg, routeArg, dataArg) { + if (dataArg === void 0) { dataArg = {}; } + var done = plugins.q.defer(); + var jsonArg = JSON.stringify(dataArg); + var options = { + method: methodArg, + url: "http://unix:/var/run/docker.sock:" + routeArg + "/json", + headers: { + "Content-Type": "application/json" + }, + body: jsonArg + }; + plugins.request(options, function (err, res, body) { + if (!err && res.statusCode == 200) { + var responseObj = JSON.parse(body); + done.resolve(responseObj); + } + else { + console.log(err); + console.log(res); + done.reject(err); + } + ; + }); + return done.promise; + }; + return dockersock; +}()); +exports.dockersock = dockersock; + +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRvY2tlcnNvY2suY2xhc3MuZG9ja2Vyc29jay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsUUFBTyxnQkFDUCxDQUFDLENBRHNCO0FBQ3ZCLElBQVksT0FBTyxXQUFNLHNCQUFzQixDQUFDLENBQUE7QUFFaEQ7SUFFSSxvQkFBWSxPQUFjO1FBQ3RCLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO0lBQzVCLENBQUM7SUFFRCw0QkFBTyxHQUFQLFVBQVEsU0FBZ0IsRUFBQyxRQUFlLEVBQUMsT0FBWTtRQUFaLHVCQUFZLEdBQVosWUFBWTtRQUNqRCxJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQzdCLElBQUksT0FBTyxHQUFVLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDN0MsSUFBSSxPQUFPLEdBQUc7WUFDVixNQUFNLEVBQUMsU0FBUztZQUNoQixHQUFHLEVBQUMsbUNBQW1DLEdBQUcsUUFBUSxHQUFHLE9BQU87WUFDNUQsT0FBTyxFQUFDO2dCQUNKLGNBQWMsRUFBQyxrQkFBa0I7YUFDcEM7WUFDRCxJQUFJLEVBQUMsT0FBTztTQUNmLENBQUM7UUFDRixPQUFPLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBQyxVQUFTLEdBQUcsRUFBRSxHQUFHLEVBQUUsSUFBSTtZQUMzQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksV0FBVyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDOUIsQ0FBQztZQUFDLElBQUksQ0FBQyxDQUFDO2dCQUNKLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7Z0JBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDckIsQ0FBQztZQUFBLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO0lBQ3hCLENBQUM7SUFDTCxpQkFBQztBQUFELENBN0JBLEFBNkJDLElBQUE7QUE3Qlksa0JBQVUsYUE2QnRCLENBQUEiLCJmaWxlIjoiZG9ja2Vyc29jay5jbGFzcy5kb2NrZXJzb2NrLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwidHlwaW5ncy1nbG9iYWxcIlxuaW1wb3J0ICogYXMgcGx1Z2lucyBmcm9tIFwiLi9kb2NrZXJzb2NrLnBsdWdpbnNcIjtcblxuZXhwb3J0IGNsYXNzIGRvY2tlcnNvY2sge1xuICAgIHNvY2tQYXRoOnN0cmluZztcbiAgICBjb25zdHJ1Y3RvcihwYXRoQXJnOnN0cmluZyl7XG4gICAgICAgIHRoaXMuc29ja1BhdGggPSBwYXRoQXJnO1xuICAgIH1cbiAgICBcbiAgICByZXF1ZXN0KG1ldGhvZEFyZzpzdHJpbmcscm91dGVBcmc6c3RyaW5nLGRhdGFBcmcgPSB7fSl7XG4gICAgICAgIGxldCBkb25lID0gcGx1Z2lucy5xLmRlZmVyKCk7XG4gICAgICAgIGxldCBqc29uQXJnOnN0cmluZyA9IEpTT04uc3RyaW5naWZ5KGRhdGFBcmcpO1xuICAgICAgICBsZXQgb3B0aW9ucyA9IHtcbiAgICAgICAgICAgIG1ldGhvZDptZXRob2RBcmcsXG4gICAgICAgICAgICB1cmw6XCJodHRwOi8vdW5peDovdmFyL3J1bi9kb2NrZXIuc29jazpcIiArIHJvdXRlQXJnICsgXCIvanNvblwiLFxuICAgICAgICAgICAgaGVhZGVyczp7XG4gICAgICAgICAgICAgICAgXCJDb250ZW50LVR5cGVcIjpcImFwcGxpY2F0aW9uL2pzb25cIlxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGJvZHk6anNvbkFyZ1xuICAgICAgICB9O1xuICAgICAgICBwbHVnaW5zLnJlcXVlc3Qob3B0aW9ucyxmdW5jdGlvbihlcnIsIHJlcywgYm9keSl7XG4gICAgICAgICAgICBpZiAoIWVyciAmJiByZXMuc3RhdHVzQ29kZSA9PSAyMDApIHtcbiAgICAgICAgICAgICAgICB2YXIgcmVzcG9uc2VPYmogPSBKU09OLnBhcnNlKGJvZHkpO1xuICAgICAgICAgICAgICAgIGRvbmUucmVzb2x2ZShyZXNwb25zZU9iaik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGVycik7XG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2cocmVzKTtcbiAgICAgICAgICAgICAgICBkb25lLnJlamVjdChlcnIpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBkb25lLnByb21pc2U7XG4gICAgfVxufSJdfQ== diff --git a/dist/dockersock.plugins.d.ts b/dist/dockersock.plugins.d.ts new file mode 100644 index 0000000..3a9ed6d --- /dev/null +++ b/dist/dockersock.plugins.d.ts @@ -0,0 +1,4 @@ +import "typings-global"; +export import beautylog = require("beautylog"); +export declare let q: any; +export declare let request: any; diff --git a/dist/dockersock.plugins.js b/dist/dockersock.plugins.js new file mode 100644 index 0000000..ede496b --- /dev/null +++ b/dist/dockersock.plugins.js @@ -0,0 +1,7 @@ +"use strict"; +require("typings-global"); +exports.beautylog = require("beautylog"); +exports.q = require("q"); +exports.request = require("request"); + +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImRvY2tlcnNvY2sucGx1Z2lucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsUUFBTyxnQkFBZ0IsQ0FBQyxDQUFBO0FBQ1YsaUJBQVMsV0FBVyxXQUFXLENBQUMsQ0FBQztBQUNwQyxTQUFDLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2pCLGVBQU8sR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMiLCJmaWxlIjoiZG9ja2Vyc29jay5wbHVnaW5zLmpzIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFwidHlwaW5ncy1nbG9iYWxcIjtcbmV4cG9ydCBpbXBvcnQgYmVhdXR5bG9nID0gcmVxdWlyZShcImJlYXV0eWxvZ1wiKTtcbmV4cG9ydCBsZXQgcSA9IHJlcXVpcmUoXCJxXCIpO1xuZXhwb3J0IGxldCByZXF1ZXN0ID0gcmVxdWlyZShcInJlcXVlc3RcIik7Il19 diff --git a/package.json b/package.json index 1e2d32e..5b4be40 100644 --- a/package.json +++ b/package.json @@ -1,10 +1,11 @@ { "name": "dockersock", "version": "1.0.0", - "description": "communicate with docker sock from node", + "description": "easy communication with docker from node, TypeScript ready", "main": "dist/index.js", "scripts": { - "test": "npmts" + "test": "npmts", + "testindocker":"npmts && docker-machine start default; eval \"$(docker-machine env default)\" && docker build -t test-image . && docker run test-image" }, "repository": { "type": "git", diff --git a/ts/dockersock.class.dockersock.ts b/ts/dockersock.class.dockersock.ts index 8c56249..0a45152 100644 --- a/ts/dockersock.class.dockersock.ts +++ b/ts/dockersock.class.dockersock.ts @@ -6,7 +6,28 @@ export class dockersock { constructor(pathArg:string){ this.sockPath = pathArg; } - request(){ - + + request(methodArg:string,routeArg:string,dataArg = {}){ + let done = plugins.q.defer(); + let jsonArg:string = JSON.stringify(dataArg); + let options = { + method:methodArg, + url:"http://unix:/var/run/docker.sock:" + routeArg + "/json", + headers:{ + "Content-Type":"application/json" + }, + body:jsonArg + }; + plugins.request(options,function(err, res, body){ + if (!err && res.statusCode == 200) { + var responseObj = JSON.parse(body); + done.resolve(responseObj); + } else { + console.log(err); + console.log(res); + done.reject(err); + }; + }); + return done.promise; } } \ No newline at end of file