node-docker
Version:
Node wrapper around the docker REST API - NOTE: alpha status
2 lines • 5.56 kB
JavaScript
/*! node-docker 2013-10-29 */
!function(a){"use strict";a.create=function(){return{_imageID:"",_containerID:"",_name:"",_containerPort:null,_use_export:!1,_settings:{},_helpers:require("helpersjs").create(),_isset:function(a,b,c){return this._helpers.isset(a)?(this._helpers.logDebug("_isset: returning true "),!0):(console.log(b),void 0!==c&&c?!1:!1)},_dockerRemoteAPI:function(a,b,c,d,e){var f=require("http");void 0===a.hostname&&(a.hostname="localhost"),void 0===a.port&&(a.port=4243);var g=f.request(a,function(a){a.setEncoding("utf8"),a.on("data",b.bind(this)),null!==c?a.on("end",c.bind(this)):a.on("end",function(){void 0!==e&&e(null,"_dockerRemoteAPI:")}.bind(this))}.bind(this));g.on("error",function(){void 0!==e&&e(null,"_dockerRemoteAPI:error"),console.log("ERROR: Problem doing docker call!")}.bind()),g.on("end",function(){void 0!==e&&e(null,"_dockerRemoteAPI:end")}.bind(this)),null!==d?d(g):g.end()},"import":function(a){var b,c={path:"/images/create?fromSrc=-",method:"POST",headers:{"Content-Type":"application/tar"}};this._dockerRemoteAPI(c,function(a){b=JSON.parse(a).status}.bind(this),function(){this._isset(b,"Import failed! No image was created."),void 0!==a&&a(null,"image:"+b)}.bind(this),function(a){var b,c=require("fs");try{b=c.createReadStream("webapp.export.tar")}catch(d){return console.log("ERROR: Could not open webapp.export.tar!"),void 0}b.on("end",function(){a.end()}.bind(this)),b.pipe(a)}.bind(this),a)},build:function(a){var b,c={path:"/build?nocache",method:"POST",headers:{"Content-Type":"application/tar"}};return this._dockerRemoteAPI(c,function(a){console.log("build: "+a),"Successfully built"===a.slice(0,18)&&(b=a.slice(19,31))}.bind(this),function(){this._isset(b,"Build failed! No image was created."),void 0!==a&&a(null,"image:"+b)}.bind(this),function(a){var b,c=require("fs");try{b=c.createReadStream("webapp.tar")}catch(d){return console.log("ERROR: Could not open webapp.tar!"),void 0}b.on("end",function(){a.end()}.bind(this)),b.pipe(a)}.bind(this),a),b},createContainer:function(a,b){this._isset(b,"createContainer: imageID not set");var c={Hostname:"",User:"",Memory:0,MemorySwap:0,AttachStdin:!1,AttachStdout:!0,AttachStderr:!0,PortSpecs:null,Tty:!1,OpenStdin:!1,StdinOnce:!1,Env:null,Dns:null,Image:b,Volumes:{},VolumesFrom:""},d={path:"/containers/create",method:"POST"};this._dockerRemoteAPI(d,function(b){try{this._containerID=JSON.parse(b).Id}catch(c){console.log("Create container failed: "+b),a(),process.exit()}}.bind(this),console.log,function(a){a.write(JSON.stringify(c)),a.end()}.bind(this),a)},start:function(a){this._isset(this._containerID,"start: this._containerID not set");var b={Binds:["/tmp:/tmp"]},c={path:"/containers/"+this._containerID+"/start",method:"POST"};this._dockerRemoteAPI(c,function(a){console.log("start: "+a)}.bind(this),null,function(a){a.write(JSON.stringify(b)),a.end()}.bind(this),a)},"delete":function(a,b){var c,d=require("async");d.series([function(a){this._isset(b,"Container missing, can't inspect",!0)&&(c=this.inspect(a,b)),a(null,"second func")}.bind(this),function(a){if(this._isset(b,"Container missing, can't stop",!0)){var c={path:"/containers/"+b+"/stop?t=10",method:"POST"};this._dockerRemoteAPI(c,function(a){this._helpers.logInfo("delete: "+a)}.bind(this),null,null,a)}a(null,"third func")}.bind(this),function(a){if(this._isset(b,"Container missing, can't delete",!0)){var c={path:"/containers/"+b+"?v=1",method:"DELETE"};this._dockerRemoteAPI(c,function(a){this._helpers.logInfo("delete: "+a)}.bind(this),null,null,a)}a(null,"fourth func")}.bind(this),function(a){if(this._isset(c,"Settngs with image ID missing, can't remove",!0)){var b={path:"/images/"+c.Image,method:"DELETE"};this._dockerRemoteAPI(b,function(a){this._helpers.logDebug("delete: "+a)}.bind(this),null,null,a)}a(null,"fith func")}.bind(this),function(b){void 0!==a&&a(null,"delete finished (outer)"),b(null,"delete finished (inner)")}])},inspect:function(a,b){if(!this._isset(b,"inspect: containerID not set",!0))return a(null,"inspect not possible without continer"),void 0;var c,d={path:"/containers/"+b+"/json",method:"GET"};return this._dockerRemoteAPI(d,function(a){try{c=this._settings=JSON.parse(a),this._imageID=this._settings.Image}catch(d){console.log("inspect: error fetching data for - "+b)}}.bind(this),null,null,a),c},logs:function(a){this._isset(this._containerID,"logs: this._containerID not set");var b={path:"/containers/"+this._containerID+"/attach?logs=1&stream=0&stdout=1",method:"POST",headers:{"Content-Type":"application/vnd.docker.raw-stream"}};this._dockerRemoteAPI(b,function(a){console.log("logs: "+a)},null,null,a)},containers:function(a){var b={path:"/containers/json",method:"GET"},c=require("prettyjson");this._dockerRemoteAPI(b,function(b){var d=JSON.parse(b);d.forEach(function(b){var c=b.Id;this._inspect(a,c)}),console.log("containers: "+c.render(d))},null,null,a)},status:function(a){var b=require("async"),c=require("prettyjson");void 0===a?b.series([function(a){this._proxyStatus(a)}.bind(this)],function(a,b){console.log("status: results of async functions - "+b),console.log("status: errors (if any) - "+a)}):b.series([function(b){this._isset(a,"There is no app with the name: "+this._name),this._inspect(b,a)}.bind(this),function(b){this._logs(b,a)}.bind(this),function(a){console.log(c.render(this._settings)),a(null,"settings printed")}.bind(this)],function(a,b){console.log("status: results of async functions - "+b),console.log("status: errors (if any) - "+a)})}}}}("undefined"==typeof exports?this["node-docker"]={}:exports);