@yawetse/pkgcloud
Version:
An infrastructure-as-a-service agnostic cloud library for node.js
99 lines (88 loc) • 2.51 kB
JavaScript
/*
* keys.js: Implementation of AWS SSH keys Client.
*
* (C) 2012 Charlie Robbins, Ken Perkins, Ross Kukulinski & the Contributors.
*
*/
var errs = require('errs');
//
// ### function listKeys (options, callback)
// #### @options {Object} **Optional** Filter parameters when listing keys
// #### @callback {function} Continuation to respond to when complete.
//
// Lists all EC2 Key Pairs matching the specified `options`.
//
exports.listKeys = function (options, callback) {
if (!callback && typeof options === 'function') {
callback = options;
options = {};
}
var self = this,
requestOpts = {};
options = options || {};
if (options.keyNames) {
requestOpts.KeyNames = options.keyNames;
}
self.ec2.describeKeyPairs(requestOpts, function(err, data) {
return err
? callback(err)
: callback(err, data.KeyPairs);
});
};
//
// ### function getKey (name, callback)
// #### @name {string} Name of the EC2 key pair to get
// #### @callback {function} Continuation to respond to when complete.
//
// Gets the details of the EC2 Key Pair with the specified `name`.
//
exports.getKey = function (name, callback) {
return this.listKeys({
keyNames: [ name ]
}, function (err, body) {
return err
? callback(err)
: callback(null, body[0]);
});
};
//
// ### function addKey (options, callback)
// #### @options {Object} SSH Public Key details
// #### @name {string} String name of the key
// #### @key {string} SSH Public Key
// #### @callback {function} Continuation to respond to when complete.
//
// Adds an EC2 Key Pair with the specified `options`.
//
exports.addKey = function (options, callback) {
if (!options || !options.key || !options.name) {
return errs.handle(
errs.create({ message: '`key` and `name` are required options.' }),
callback
);
}
this.ec2.importKeyPair({
KeyName: options.name,
PublicKeyMaterial: new Buffer(options.key).toString('base64')
}, function (err) {
return err
? callback(err)
: callback(null, true);
});
};
//
// ### function destroyKey (name, callback)
// #### @name {string} Name of the EC2 key pair to destroy
// #### @callback {function} Continuation to respond to when complete.
//
// Destroys EC2 Key Pair with the specified `name`.
//
exports.destroyKey = function (name, callback) {
this.ec2.deleteKeyPair({
KeyName: name
}, function (err) {
return err
? callback(err)
: callback(null, true);
});
};