add basic instance-audit support
This commit is contained in:
parent
219912beb1
commit
9d314def3d
@ -615,34 +615,16 @@ CloudApi.prototype.createMachine = function createMachine(options, callback) {
|
|||||||
*
|
*
|
||||||
* XXX IMO this endpoint should be called ListMachineAudit in cloudapi.
|
* XXX IMO this endpoint should be called ListMachineAudit in cloudapi.
|
||||||
*
|
*
|
||||||
* @param {Object} options
|
* @param {String} id (required) The machine id.
|
||||||
* - {String} id (required) The machine id.
|
|
||||||
* @param {Function} callback of the form `function (err, audit, response)`
|
* @param {Function} callback of the form `function (err, audit, response)`
|
||||||
*/
|
*/
|
||||||
CloudApi.prototype.machineAudit = function machineAudit(options, callback) {
|
CloudApi.prototype.machineAudit = function machineAudit(id, cb) {
|
||||||
var self = this;
|
assert.uuid(id, 'id');
|
||||||
assert.object(options, 'options');
|
assert.func(cb, 'cb');
|
||||||
assert.string(options.id, 'options.id');
|
|
||||||
assert.func(callback, 'callback');
|
|
||||||
|
|
||||||
var path = format('/%s/machines/%s/audit', self.user, options.id);
|
var endpoint = format('/%s/machines/%s/audit', this.user, id);
|
||||||
// XXX This `client.get` block is duplicated. Add a convenience func for it:
|
this._request(endpoint, function (err, req, res, body) {
|
||||||
self._getAuthHeaders(function (hErr, headers) {
|
cb(err, body, res);
|
||||||
if (hErr) {
|
|
||||||
callback(hErr);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
var opts = {
|
|
||||||
path: path,
|
|
||||||
headers: headers
|
|
||||||
};
|
|
||||||
self.client.get(opts, function (err, req, res, body) {
|
|
||||||
if (err) {
|
|
||||||
callback(err, null, res);
|
|
||||||
} else {
|
|
||||||
callback(null, body, res);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -16,53 +16,80 @@ var tabula = require('tabula');
|
|||||||
var common = require('./common');
|
var common = require('./common');
|
||||||
var errors = require('./errors');
|
var errors = require('./errors');
|
||||||
|
|
||||||
|
// columns default without -o
|
||||||
|
var columnsDefault = 'id,time,action,success';
|
||||||
|
|
||||||
|
// sort default with -s
|
||||||
|
var sortDefault = 'id,time';
|
||||||
|
|
||||||
|
function do_instance_audit(subcmd, opts, args, cb) {
|
||||||
|
var self = this;
|
||||||
|
|
||||||
function do_instance_audit(subcmd, opts, args, callback) {
|
|
||||||
if (opts.help) {
|
if (opts.help) {
|
||||||
this.do_help('help', {}, [subcmd], callback);
|
this.do_help('help', {}, [subcmd], cb);
|
||||||
return;
|
return;
|
||||||
} else if (args.length > 1) {
|
} else if (args.length !== 1) {
|
||||||
//XXX Support multiple machines.
|
//XXX Support multiple machines.
|
||||||
return callback(new Error('too many args: ' + args));
|
return cb(new Error('incorrect args: ' + args));
|
||||||
}
|
}
|
||||||
|
|
||||||
var id = args[0];
|
var columns = opts.o.split(',');
|
||||||
this.sdc.machineAudit({machine: id}, function (err, audit, dc) {
|
var sort = opts.s.split(',');
|
||||||
|
|
||||||
|
var arg = args[0];
|
||||||
|
var uuid;
|
||||||
|
|
||||||
|
if (common.isUUID(arg)) {
|
||||||
|
uuid = arg;
|
||||||
|
go1();
|
||||||
|
} else {
|
||||||
|
self.tritonapi.getInstance(arg, function (err, inst) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return callback(err);
|
cb(err);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
for (var i = 0; i < audit.length; i++) {
|
uuid = inst.id;
|
||||||
audit[i].dc = dc;
|
go1();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function go1() {
|
||||||
|
self.tritonapi.cloudapi.machineAudit(uuid, function (err, audit) {
|
||||||
|
if (err) {
|
||||||
|
cb(err);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
audit.forEach(function (a) {
|
||||||
|
a.id = uuid;
|
||||||
|
});
|
||||||
|
|
||||||
if (opts.json) {
|
if (opts.json) {
|
||||||
common.jsonStream(audit);
|
common.jsonStream(audit);
|
||||||
} else {
|
} else {
|
||||||
// XXX what to tabulate here?
|
tabula(audit, {
|
||||||
return callback(
|
skipHeader: opts.H,
|
||||||
new errors.InternalError('tabular output for audit NYI'));
|
columns: columns,
|
||||||
// common.tabulate(audit, {
|
sort: sort,
|
||||||
// columns: 'dc,id,name,state,created',
|
dottedLookup: true
|
||||||
// sort: 'created',
|
|
||||||
// validFields: 'dc,id,name,type,state,image,package,memory,'
|
|
||||||
// + 'disk,created,updated,compute_node,primaryIp'
|
|
||||||
// });
|
|
||||||
}
|
|
||||||
callback();
|
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
cb();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
do_instance_audit.options = [
|
do_instance_audit.options = [
|
||||||
{
|
{
|
||||||
names: ['help', 'h'],
|
names: ['help', 'h'],
|
||||||
type: 'bool',
|
type: 'bool',
|
||||||
help: 'Show this help.'
|
help: 'Show this help.'
|
||||||
},
|
|
||||||
{
|
|
||||||
names: ['json', 'j'],
|
|
||||||
type: 'bool',
|
|
||||||
help: 'JSON output.'
|
|
||||||
}
|
}
|
||||||
];
|
].concat(common.getCliTableOptions({
|
||||||
|
columnsDefault: columnsDefault,
|
||||||
|
sortDefault: sortDefault
|
||||||
|
}));
|
||||||
|
|
||||||
do_instance_audit.help = (
|
do_instance_audit.help = (
|
||||||
'List instance actions.\n'
|
'List instance actions.\n'
|
||||||
+ '\n'
|
+ '\n'
|
||||||
|
Reference in New Issue
Block a user