VOLAPI-49 DELETE should delete (add support in node-triton)
This commit is contained in:
parent
471ea6f3fe
commit
0a65be8239
@ -19,55 +19,6 @@ var distractions = require('../distractions');
|
|||||||
var errors = require('../errors');
|
var errors = require('../errors');
|
||||||
|
|
||||||
|
|
||||||
function deleteVolume(volumeName, opts, cb) {
|
|
||||||
assert.string(volumeName, 'volumeName');
|
|
||||||
assert.object(opts, 'opts');
|
|
||||||
assert.object(opts.tritonapi, 'opts.tritonapi');
|
|
||||||
assert.func(cb, 'cb');
|
|
||||||
|
|
||||||
var tritonapi = opts.tritonapi;
|
|
||||||
|
|
||||||
vasync.pipeline({funcs: [
|
|
||||||
function getVolume(ctx, next) {
|
|
||||||
tritonapi.getVolume(volumeName,
|
|
||||||
function onGetVolume(getVolErr, volume) {
|
|
||||||
if (!getVolErr) {
|
|
||||||
ctx.volume = volume;
|
|
||||||
}
|
|
||||||
|
|
||||||
next(getVolErr);
|
|
||||||
});
|
|
||||||
},
|
|
||||||
function doDeleteVolume(ctx, next) {
|
|
||||||
assert.object(ctx.volume, 'ctx.volume');
|
|
||||||
|
|
||||||
tritonapi.cloudapi.deleteVolume(ctx.volume.id,
|
|
||||||
next);
|
|
||||||
},
|
|
||||||
function waitForVolumeStates(ctx, next) {
|
|
||||||
assert.object(ctx.volume, 'ctx.volume');
|
|
||||||
|
|
||||||
var distraction;
|
|
||||||
var volumeId = ctx.volume.id;
|
|
||||||
|
|
||||||
if (!opts.wait) {
|
|
||||||
next();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
distraction = distractions.createDistraction(opts.wait.length);
|
|
||||||
|
|
||||||
tritonapi.cloudapi.waitForVolumeStates({
|
|
||||||
id: volumeId,
|
|
||||||
states: ['deleted', 'failed']
|
|
||||||
}, function onWaitDone(waitErr, volume) {
|
|
||||||
distraction.destroy();
|
|
||||||
next(waitErr);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
], arg: {}}, cb);
|
|
||||||
}
|
|
||||||
|
|
||||||
function do_delete(subcmd, opts, args, cb) {
|
function do_delete(subcmd, opts, args, cb) {
|
||||||
var self = this;
|
var self = this;
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright 2016 Joyent, Inc.
|
* Copyright 2017 Joyent, Inc.
|
||||||
*
|
*
|
||||||
* `triton volume list ...`
|
* `triton volume list ...`
|
||||||
*/
|
*/
|
||||||
@ -66,12 +66,7 @@ function do_list(subcmd, opts, args, callback) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (jsprim.deepEqual(filterPredicate, {})) {
|
if (jsprim.deepEqual(filterPredicate, {})) {
|
||||||
filterPredicate = {
|
filterPredicate = { ne: ['state', 'failed'] };
|
||||||
and: [
|
|
||||||
{ ne: ['state', 'deleted']},
|
|
||||||
{ ne: ['state', 'failed']}
|
|
||||||
]
|
|
||||||
};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filterPredicate) {
|
if (filterPredicate) {
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright 2016 Joyent, Inc.
|
* Copyright 2017 Joyent, Inc.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* BEGIN JSSTYLED */
|
/* BEGIN JSSTYLED */
|
||||||
@ -122,6 +122,7 @@ var restifyBunyanSerializers =
|
|||||||
require('restify-clients/lib/helpers/bunyan').serializers;
|
require('restify-clients/lib/helpers/bunyan').serializers;
|
||||||
var tabula = require('tabula');
|
var tabula = require('tabula');
|
||||||
var vasync = require('vasync');
|
var vasync = require('vasync');
|
||||||
|
var verror = require('verror');
|
||||||
var sshpk = require('sshpk');
|
var sshpk = require('sshpk');
|
||||||
|
|
||||||
var cloudapi = require('./cloudapi2');
|
var cloudapi = require('./cloudapi2');
|
||||||
@ -2645,12 +2646,7 @@ TritonApi.prototype.getVolume = function getVolume(name, cb) {
|
|||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
this.cloudapi.listVolumes({
|
this.cloudapi.listVolumes({
|
||||||
predicate: JSON.stringify({
|
predicate: JSON.stringify({ ne: ['state', 'failed']})
|
||||||
and: [
|
|
||||||
{ ne: ['state', 'deleted']},
|
|
||||||
{ ne: ['state', 'failed']}
|
|
||||||
]
|
|
||||||
})
|
|
||||||
}, function (err, volumes) {
|
}, function (err, volumes) {
|
||||||
if (err) {
|
if (err) {
|
||||||
return cb(err);
|
return cb(err);
|
||||||
@ -2729,9 +2725,16 @@ TritonApi.prototype.deleteVolume = function deleteVolume(opts, cb) {
|
|||||||
}
|
}
|
||||||
self.cloudapi.waitForVolumeStates({
|
self.cloudapi.waitForVolumeStates({
|
||||||
id: arg.volId,
|
id: arg.volId,
|
||||||
states: ['deleted', 'failed'],
|
states: ['failed'],
|
||||||
timeout: opts.waitTimeout
|
timeout: opts.waitTimeout
|
||||||
}, next);
|
}, function onVolumeStateReached(err) {
|
||||||
|
if (verror.hasCauseWithName(err, 'VOLUME_NOT_FOUNDError')) {
|
||||||
|
// volume is gone, that's not an error
|
||||||
|
next();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
next(err);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
]}, function onDeletionComplete(err) {
|
]}, function onDeletionComplete(err) {
|
||||||
cb(err, null, res);
|
cb(err, null, res);
|
||||||
|
@ -27,7 +27,7 @@
|
|||||||
"strsplit": "1.0.0",
|
"strsplit": "1.0.0",
|
||||||
"tabula": "1.9.0",
|
"tabula": "1.9.0",
|
||||||
"vasync": "1.6.3",
|
"vasync": "1.6.3",
|
||||||
"verror": "1.6.0",
|
"verror": "1.10.0",
|
||||||
"which": "1.2.4",
|
"which": "1.2.4",
|
||||||
"wordwrap": "1.0.0"
|
"wordwrap": "1.0.0"
|
||||||
},
|
},
|
||||||
|
@ -170,7 +170,7 @@ test('triton volume create ...', testOpts, function (tt) {
|
|||||||
function onGetVolume(getVolErr, stdout, stderr) {
|
function onGetVolume(getVolErr, stdout, stderr) {
|
||||||
t.ok(getVolErr,
|
t.ok(getVolErr,
|
||||||
'Getting volume ' + validVolumeName + 'after deleting it ' +
|
'Getting volume ' + validVolumeName + 'after deleting it ' +
|
||||||
'should errorr');
|
'should error');
|
||||||
t.notEqual(stderr.indexOf('ResourceNotFound'), -1,
|
t.notEqual(stderr.indexOf('ResourceNotFound'), -1,
|
||||||
'Getting volume ' + validVolumeName + 'should not find it');
|
'Getting volume ' + validVolumeName + 'should not find it');
|
||||||
t.end();
|
t.end();
|
||||||
|
Reference in New Issue
Block a user