@yawetse/pkgcloud
Version:
An infrastructure-as-a-service agnostic cloud library for node.js
78 lines (67 loc) • 3.33 kB
JavaScript
/*
* flavor.js: AWS Cloud Package
*
* (C) 2012 Charlie Robbins, Ken Perkins, Ross Kukulinski & the Contributors.
*
*/
var util = require('util'),
base = require('../../core/compute/flavor'),
_ = require('underscore');
var Flavor = exports.Flavor = function Flavor(client, details) {
base.Flavor.call(this, client, details);
};
util.inherits(Flavor, base.Flavor);
Flavor.options = {
// Previous Generation Instance Types
'm1.small': { id: 'm1.small', ram: 1.7 * 1024, disk: 160 },
'm1.medium': { id: 'm1.medium', ram: 3.75 * 1024, disk: 410 },
'm1.large': { id: 'm1.large', ram: 7.5 * 1024, disk: 2 * 420 },
'm1.xlarge': { id: 'm1.xlarge', ram: 15 * 1024, disk: 4 * 420 },
'c1.medium': { id: 'c1.medium', ram: 1.7 * 1024, disk: 350 },
'c1.xlarge': { id: 'c1.xlarge', ram: 7 * 1024, disk: 4 * 420 },
'cc2.8xlarge': { id: 'cc2.8xlarge', ram: 60.5 * 1024, disk: 4 * 840 },
'm2.xlarge': { id: 'm2.xlarge', ram: 17.1 * 1024, disk: 420 },
'm2.2xlarge': { id: 'm2.2xlarge', ram: 34.2 * 1024, disk: 850 },
'm2.4xlarge': { id: 'm2.4xlarge', ram: 68.4 * 1024, disk: 2 * 840 },
'cr1.8xlarge': { id: 'cr1.8xlarge', ram: 244 * 1024, disk: 2 * 120 },
'hi1.4xlarge': { id: 'hi1.4xlarge', ram: 60.5 * 1024, disk: 2 * 1024 },
'cg1.4xlarge': { id: 'cg1.4xlarge', ram: 22.5 * 1024, disk: 2 * 840 },
't1.micro': { id: 't1.micro', ram: 613, disk: 0},
// Current Generation Instance Types
't2.micro': { id: 't2.micro', ram: 1024, disk: 0 },
't2.small': { id: 't2.small', ram: 2 * 1024, disk: 0 },
't2.medium': { id: 't2.medium', ram: 4 * 1024, disk: 0 },
'm3.medium': { id: 'm3.medium', ram: 3.75 * 1024, disk: 4 },
'm3.large': { id: 'm3.large', ram: 7.5 * 1024, disk: 32 },
'm3.xlarge': { id: 'm3.xlarge', ram: 15 * 1024, disk: 2 * 40 },
'm3.2xlarge': { id: 'm3.2xlarge', ram: 30 * 1024, disk: 2 * 80 },
'c3.large': { id: 'c3.large', ram: 3.75 * 1024, disk: 2 * 16 },
'c3.xlarge': { id: 'c3.xlarge', ram: 7.5 * 1024, disk: 2 * 40 },
'c3.2xlarge': { id: 'c3.2xlarge', ram: 15 * 1024, disk: 2 * 80 },
'c3.4xlarge': { id: 'c3.4xlarge', ram: 30 * 1024, disk: 2 * 160 },
'c3.8xlarge': { id: 'c3.8xlarge', ram: 60 * 1024, disk: 2 * 320 },
'g2.2xlarge': { id: 'g2.2xlarge', ram: 15 * 1024, disk: 60 },
'r3.large': { id: 'r3.large', ram: 15.25 * 1024, disk: 32 },
'r3.xlarge': { id: 'r3.xlarge', ram: 30.5 * 1024, disk: 80 },
'r3.2xlarge': { id: 'r3.2xlarge', ram: 61 * 1024, disk: 160 },
'r3.4xlarge': { id: 'r3.4xlarge', ram: 122 * 1024, disk: 320 },
'r3.8xlarge': { id: 'r3.8xlarge', ram: 244 * 1024, disk: 2 * 320 },
'i2.xlarge': { id: 'i2.xlarge', ram: 30.5 * 1024, disk: 800 },
'i2.2xlarge': { id: 'i2.2xlarge', ram: 61 * 1024, disk: 2 * 800 },
'i2.4xlarge': { id: 'i2.4xlarge', ram: 122 * 1024, disk: 4 * 800 },
'i2.8xlarge': { id: 'i2.8xlarge', ram: 244 * 1024, disk: 8 * 800 },
'hs1.8xlarge': { id: 'hs1.8xlarge', ram: 117 * 1024, disk: 24 * 2000 }
};
Flavor.prototype._setProperties = function (details) {
var id = details.name || 'm1.small';
if (!Flavor.options[id]) {
throw new TypeError('No such AWS Flavor: ' + id);
}
this.id = id;
this.name = id;
this.ram = Flavor.options[id].ram;
this.disk = Flavor.options[id].disk;
};
Flavor.prototype.toJSON = function () {
return _.pick(this, ['id', 'name', 'ram', 'disk' ]);
};