event-y jc.listMachines
This commit is contained in:
parent
67b170e68f
commit
5842875027
2
TODO.md
2
TODO.md
@ -4,7 +4,7 @@
|
|||||||
- short default output
|
- short default output
|
||||||
- long '-l' output, -H, -o, -s
|
- long '-l' output, -H, -o, -s
|
||||||
- get image defaults and fill those in
|
- get image defaults and fill those in
|
||||||
- couple commands: machines, machine, provision (create-machine?)
|
- couple commands: machine, provision (create-machine?)
|
||||||
- re-write of cloudapi.js (eventually a separate module)
|
- re-write of cloudapi.js (eventually a separate module)
|
||||||
- uuid caching
|
- uuid caching
|
||||||
- UUID prefix support
|
- UUID prefix support
|
||||||
|
32
lib/cli.js
32
lib/cli.js
@ -13,7 +13,6 @@ var child_process = require('child_process'),
|
|||||||
exec = child_process.exec;
|
exec = child_process.exec;
|
||||||
var fs = require('fs');
|
var fs = require('fs');
|
||||||
|
|
||||||
|
|
||||||
var assert = require('assert-plus');
|
var assert = require('assert-plus');
|
||||||
var async = require('async');
|
var async = require('async');
|
||||||
var bunyan = require('bunyan');
|
var bunyan = require('bunyan');
|
||||||
@ -21,6 +20,7 @@ var cmdln = require('cmdln'),
|
|||||||
Cmdln = cmdln.Cmdln;
|
Cmdln = cmdln.Cmdln;
|
||||||
|
|
||||||
var common = require('./common');
|
var common = require('./common');
|
||||||
|
var errors = require('./errors');
|
||||||
var JoyentCloud = require('./joyentcloud');
|
var JoyentCloud = require('./joyentcloud');
|
||||||
|
|
||||||
|
|
||||||
@ -188,16 +188,20 @@ CLI.prototype.do_machines = function (subcmd, opts, args, callback) {
|
|||||||
return callback(new Error('too many args: ' + args));
|
return callback(new Error('too many args: ' + args));
|
||||||
}
|
}
|
||||||
|
|
||||||
//XXX jc.listMachines should change to return a 'res' event emitter
|
var machines = [];
|
||||||
// that emits 'dcError' and 'data'.
|
var errs = [];
|
||||||
var listOpts = {
|
var res = this.jc.listMachines();
|
||||||
onDcError: function (dc, dcErr) {
|
res.on('data', function (dc, dcMachines) {
|
||||||
console.warn('%s machines: dc %s error: %s', self.name, dc, dcErr);
|
for (var i = 0; i < dcMachines.length; i++) {
|
||||||
|
dcMachines[i].dc = dc;
|
||||||
|
machines.push(dcMachines[i]);
|
||||||
}
|
}
|
||||||
};
|
});
|
||||||
this.jc.listMachines(listOpts, function (err, machines) {
|
res.on('dcError', function (dc, dcErr) {
|
||||||
if (err)
|
dcErr.dc = dc;
|
||||||
return callback(err);
|
errs.push(dcErr);
|
||||||
|
});
|
||||||
|
res.on('end', function () {
|
||||||
if (opts.json) {
|
if (opts.json) {
|
||||||
p(JSON.stringify(machines, null, 4));
|
p(JSON.stringify(machines, null, 4));
|
||||||
} else {
|
} else {
|
||||||
@ -213,7 +217,13 @@ CLI.prototype.do_machines = function (subcmd, opts, args, callback) {
|
|||||||
+ 'disk,created,updated,compute_node,primaryIp'
|
+ 'disk,created,updated,compute_node,primaryIp'
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
callback();
|
var err;
|
||||||
|
if (errs.length === 1) {
|
||||||
|
err = errs[0];
|
||||||
|
} else if (errs.length > 1) {
|
||||||
|
err = new errors.MultiError(errs);
|
||||||
|
}
|
||||||
|
callback(err);
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
CLI.prototype.do_machines.options = [
|
CLI.prototype.do_machines.options = [
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
var p = console.log;
|
var p = console.log;
|
||||||
var assert = require('assert-plus');
|
var assert = require('assert-plus');
|
||||||
var async = require('async');
|
var async = require('async');
|
||||||
|
var EventEmitter = require('events').EventEmitter;
|
||||||
var format = require('util').format;
|
var format = require('util').format;
|
||||||
var fs = require('fs');
|
var fs = require('fs');
|
||||||
var path = require('path');
|
var path = require('path');
|
||||||
@ -154,43 +155,46 @@ JoyentCloud.prototype._clientFromDc = function _clientFromDc(dc) {
|
|||||||
/**
|
/**
|
||||||
* List machines for the current profile.
|
* List machines for the current profile.
|
||||||
*
|
*
|
||||||
|
* var res = this.jc.listMachines();
|
||||||
|
* res.on('data', function (dc, dcMachines) {
|
||||||
|
* //...
|
||||||
|
* });
|
||||||
|
* res.on('dcError', function (dc, dcErr) {
|
||||||
|
* //...
|
||||||
|
* });
|
||||||
|
* res.on('end', function () {
|
||||||
|
* //...
|
||||||
|
* });
|
||||||
|
*
|
||||||
* @param {Object} options Optional
|
* @param {Object} options Optional
|
||||||
* - {Function} onDcError `function (dc, err)` called for each DC client
|
|
||||||
* error.
|
|
||||||
*/
|
*/
|
||||||
JoyentCloud.prototype.listMachines = function listMachines(options, callback) {
|
JoyentCloud.prototype.listMachines = function listMachines(options) {
|
||||||
var self = this;
|
var self = this;
|
||||||
if (callback === undefined) {
|
if (options === undefined) {
|
||||||
callback = options;
|
|
||||||
options = {};
|
options = {};
|
||||||
}
|
}
|
||||||
assert.object(options, 'options');
|
assert.object(options, 'options');
|
||||||
assert.optionalFunc(options.onDcError, 'options.onDcError');
|
|
||||||
assert.func(callback, 'callback');
|
|
||||||
|
|
||||||
var allMachines = [];
|
var emitter = new EventEmitter();
|
||||||
|
|
||||||
async.each(
|
async.each(
|
||||||
self.profile.dcs || Object.keys(self.config.dcs),
|
self.profile.dcs || Object.keys(self.config.dcs),
|
||||||
function oneDc(dc, next) {
|
function oneDc(dc, next) {
|
||||||
var client = self._clientFromDc(dc);
|
var client = self._clientFromDc(dc);
|
||||||
client.listMachines(function (err, machines) {
|
client.listMachines(function (err, machines) {
|
||||||
if (err) {
|
if (err) {
|
||||||
if (options.onDcError) {
|
emitter.emit('dcError', dc, err);
|
||||||
options.onDcError(dc, err);
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
for (var i = 0; i < machines.length; i++) {
|
emitter.emit('data', dc, machines);
|
||||||
machines[i].dc = dc;
|
|
||||||
allMachines.push(machines[i]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
next();
|
next();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
function done(err) {
|
function done(err) {
|
||||||
callback(err, allMachines);
|
emitter.emit('end');
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
return emitter;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user