@yawetse/pkgcloud
Version:
An infrastructure-as-a-service agnostic cloud library for node.js
66 lines (56 loc) • 1.8 kB
JavaScript
/*
* instances.js: Openstack Trove Database Instance
*
* (C) 2014 Hewlett-Packard Development Company, L.P.
*
*/
var util = require('util'),
model = require('../../core/base/model'),
computeStatus = require('../../common/status').compute;
var Instance = exports.Instance = function Instance(client, details) {
model.Model.call(this, client, details);
};
util.inherits(Instance, model.Model);
Instance.prototype.refresh = function (callback) {
this.client.getInstance(this, callback);
};
Instance.prototype.STATUS = computeStatus;
Instance.prototype._setProperties = function (details) {
this.id = details.id;
this.name = details.name;
this.links = details.links;
// Fix for name in rackspace
details.state = (details.status) ? details.status : details.state;
if (details.state) {
switch (details.state.toUpperCase()) {
case 'PROVISIONING':
case 'BUILD':
case 'REBOOT':
case 'RESIZE':
this.status = this.STATUS.provisioning;
break;
case 'RUNNING':
case 'ACTIVE': // Change for keep consistency
this.status = this.STATUS.running;
break;
case 'STOPPING':
case 'STOPPED':
case 'SHUTDOWN':
this.status = this.STATUS.stopped;
break;
case 'FAILED':
this.status = this.STATUS.error;
break;
default:
this.status = this.STATUS.unknown;
break;
}
}
// Seems Rackspace not will provide this fields so I comment it.
//this.created = details.created || this.created;
//this.updated = details.updated || this.updated;
this.flavor = details.flavor || {};
this.hostname = details.hostname || this.hostname;
this.volume = details.volume || this.volume;
this.original = this.rackspace = details;
};