全体的なアイデアは、ローカル操作のために UNIX ソケットを介して LXD RESTful API を使用することです。次のコードは、エラーが発生した 2 または 3 ごとに 1 回実行されます。node.js に関連するのか、lxd api に関連するのかはわかりません。
エラーのある出力
リクエストの問題: write EPIPE { [エラー: write EPIPE] code: 'EPIPE', errno: 'EPIPE', syscall: 'write', address: undefined }
コード:
/*
Adapted from
http://rapiddg.com/blog/calling-rest-api-nodejs-script
*/
var querystring = require('querystring');
var http = require('http'), req, response;
var socketUSD='/var/lib/lxd/unix.socket';
function RestConsume(){ };
RestConsume.prototype._doRequest_=function(httpMethod,pathAPI,data,fnCallBack){
var dataString = JSON.stringify(data);
var headers = {};
if (httpMethod==='GET'){
pathAPI+='?'+querystring.stringify(data);
}else{
headers = {
'Content-Type': 'application/json',
'Content-Length': dataString.length
};
}
var options = {
socketPath: socketUSD,
path: pathAPI,
method: httpMethod,
headers: headers
};
var req=http.request(options, function (res){
res.setEncoding('utf-8');
var resultString="";
res.on('data',function(data){
resultString +=data;
});//end res.on('data')//
res.on('end',function(){
console.log(resultString);
var responseObject = JSON.parse(resultString);
fnCallBack(resultString);
});
});
req.write(dataString);
req.end();
req.on('error', function(e) {
console.log('Haciendo '+httpMethod);
console.log('problem with request: ' + e.message);
console.log(e);
});
};
RestConsume.prototype.doGet=function(pathAPI,data,fnCallBack){
return this._doRequest_('GET',pathAPI,data,fnCallBack);
};
RestConsume.prototype.doPost=function(pathAPI,data,fnCallBack){
this._doRequest_('POST',pathAPI,data,fnCallBack);
};
RestConsume.prototype.doPut=function(pathAPI,data,fnCallBack){
this._doRequest_('PUT',pathAPI,data,fnCallBack);
};
RestConsume.prototype.doDelete=function(pathAPI,data,fnCallBack){
return this._doRequest_('DELETE',pathAPI,data,fnCallBack);
};
var obj=new RestConsume();
obj.doGet("/1.0/containers/pc01/logs",{},function(data) {
console.log('get Respuesta:\r\n' + data);
});