lxc_manager_node/doapi.js
2016-07-21 23:45:21 -04:00

179 lines
4.1 KiB
JavaScript

var request = require('request');
api = function(key){
key = key || require('./secrets.js').doAPI;
this.BASEURL = 'https://api.digitalocean.com/v2/';
this.headers = {
'Content-Type': 'application/json',
'Authorization': 'Bearer '+key
}
this.calls = 0;
this.account = function(callback){
var options = {
url: this.BASEURL+'account',
headers: this.headers
};
this.calls++;
return request.get(options, function(error, response, body){
return callback(body, response, error);
});
};
this.dropletsByTag = function(tag, callback){
var options = {
url: this.BASEURL+'droplets?tag_name='+tag,
headers: this.headers
};
this.calls++;
return request.get(options, function(error, response, body){
return callback(body, response, error);
});
};
this.dropletSetTag = function(tag, dropletID, callback) {
callback = callback || function(){};
var data = {
resources: [
{
resource_id: dropletID,
resource_type: 'droplet'
}
]
};
var options = {
url: this.BASEURL+'tags/'+tag+'/resources',
headers: this.headers,
body: JSON.stringify(data)
};
this.calls++;
return request.post(options, function(error, response, body){
return callback(body, response, error);
});
};
this.dropletCreate = function(args, callback){
callback = callback || function(){};
var data = {
name: args.name, // || return false,
region: args.region || 'nyc3',
size: args.size || '512mb',
image: args.image || 'ubuntu-14-04-x64',
ssh_keys: args.ssh_key || null,
backups: args.backup || false,
private_networking: args.private_networking || true,
user_data: args.user_data || null
};
var options = {
url: this.BASEURL+'droplets',
headers: this.headers,
body: JSON.stringify(data)
};
this.calls++;
return request.post(options, function(error, response, body){
return callback(body, response, error);
});
}
this.dropletToActive = function(args){
args.__doapi = this; // hold the DO api in the agrs scope
args.onCreated = args.onCreate || function(){};
this.dropletCreate(args, function(data){
data = JSON.parse(data);
args.onCreate(data, args);
// check if the server is ready, giving time to allow
// digital ocean to do its thing
setTimeout(function check(id, args){
time = args.time || 10000;
args.__doapi.dropletInfo(id, function (data){
var droplet = JSON.parse(data)['droplet'];
if(droplet.status == 'active'){
return args.onActive(droplet, args);
}else{
setTimeout(function(check, id){
check(id, args);
}, time, check, droplet.id);
}
});
}, 70000, data.droplet.id, args);
});
};
this.dropletDestroy = function(dropletID, callback){
callback = callback || function(){};
var options = {
url: this.BASEURL+'droplets/'+dropletID,
headers: this.headers
};
this.calls++;
return request.del(options, function(error, response, body){
callback(body, response, error);
});
};
this.dropletInfo = function(dropletID, callback){
var options = {
url: this.BASEURL+'droplets/'+dropletID,
headers: this.headers
};
this.calls++;
return request.get(options, function(error, response, body){
callback(body, response, error);
});
};
this.tagCreate = function(tag, callback){
callback = callback || function(){};
var options = {
url: this.BASEURL+'tags',
headers: this.headers,
body: JSON.stringify({name: tag})
};
this.calls++;
return request.post(options, function(error, response, body){
return callback(body, response, error);
});
};
this.tagsList = function(callback){
var options = {
url: this.BASEURL+'tags',
headers: this.headers
};
this.calls++;
return request.get(options, function(e,r,b){
callback(b,r,e);
});
};
this.domianAddRecord = function(args, callback){
callback = callback || function(){};
var options = {
url: this.BASEURL+'domains/'+ args.domain +'/records',
headers: this.headers,
body: JSON.stringify(args)
};
this.calls++;
return request.post(options, function(error, response, body){
return callback(body, response, error);
});
}
return this;
}
module.exports = api;