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');
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
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) {
 | 
			
		||||
    var self = this;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -5,7 +5,7 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright 2016 Joyent, Inc.
 | 
			
		||||
 * Copyright 2017 Joyent, Inc.
 | 
			
		||||
 *
 | 
			
		||||
 * `triton volume list ...`
 | 
			
		||||
 */
 | 
			
		||||
@ -66,12 +66,7 @@ function do_list(subcmd, opts, args, callback) {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (jsprim.deepEqual(filterPredicate, {})) {
 | 
			
		||||
        filterPredicate = {
 | 
			
		||||
            and: [
 | 
			
		||||
                { ne: ['state', 'deleted']},
 | 
			
		||||
                { ne: ['state', 'failed']}
 | 
			
		||||
            ]
 | 
			
		||||
        };
 | 
			
		||||
        filterPredicate = { ne: ['state', 'failed'] };
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (filterPredicate) {
 | 
			
		||||
 | 
			
		||||
@ -5,7 +5,7 @@
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Copyright 2016 Joyent, Inc.
 | 
			
		||||
 * Copyright 2017 Joyent, Inc.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
/* BEGIN JSSTYLED */
 | 
			
		||||
@ -122,6 +122,7 @@ var restifyBunyanSerializers =
 | 
			
		||||
    require('restify-clients/lib/helpers/bunyan').serializers;
 | 
			
		||||
var tabula = require('tabula');
 | 
			
		||||
var vasync = require('vasync');
 | 
			
		||||
var verror = require('verror');
 | 
			
		||||
var sshpk = require('sshpk');
 | 
			
		||||
 | 
			
		||||
var cloudapi = require('./cloudapi2');
 | 
			
		||||
@ -2645,12 +2646,7 @@ TritonApi.prototype.getVolume = function getVolume(name, cb) {
 | 
			
		||||
        });
 | 
			
		||||
    } else {
 | 
			
		||||
        this.cloudapi.listVolumes({
 | 
			
		||||
            predicate: JSON.stringify({
 | 
			
		||||
                and: [
 | 
			
		||||
                    { ne: ['state', 'deleted']},
 | 
			
		||||
                    { ne: ['state', 'failed']}
 | 
			
		||||
                ]
 | 
			
		||||
            })
 | 
			
		||||
            predicate: JSON.stringify({ ne: ['state', 'failed']})
 | 
			
		||||
        }, function (err, volumes) {
 | 
			
		||||
            if (err) {
 | 
			
		||||
                return cb(err);
 | 
			
		||||
@ -2729,9 +2725,16 @@ TritonApi.prototype.deleteVolume = function deleteVolume(opts, cb) {
 | 
			
		||||
            }
 | 
			
		||||
            self.cloudapi.waitForVolumeStates({
 | 
			
		||||
                id: arg.volId,
 | 
			
		||||
                states: ['deleted', 'failed'],
 | 
			
		||||
                states: ['failed'],
 | 
			
		||||
                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) {
 | 
			
		||||
        cb(err, null, res);
 | 
			
		||||
 | 
			
		||||
@ -27,7 +27,7 @@
 | 
			
		||||
    "strsplit": "1.0.0",
 | 
			
		||||
    "tabula": "1.9.0",
 | 
			
		||||
    "vasync": "1.6.3",
 | 
			
		||||
    "verror": "1.6.0",
 | 
			
		||||
    "verror": "1.10.0",
 | 
			
		||||
    "which": "1.2.4",
 | 
			
		||||
    "wordwrap": "1.0.0"
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
@ -170,7 +170,7 @@ test('triton volume create ...', testOpts, function (tt) {
 | 
			
		||||
            function onGetVolume(getVolErr, stdout, stderr) {
 | 
			
		||||
                t.ok(getVolErr,
 | 
			
		||||
                    'Getting volume ' + validVolumeName + 'after deleting it ' +
 | 
			
		||||
                        'should errorr');
 | 
			
		||||
                        'should error');
 | 
			
		||||
                t.notEqual(stderr.indexOf('ResourceNotFound'), -1,
 | 
			
		||||
                    'Getting volume ' + validVolumeName + 'should not find it');
 | 
			
		||||
                t.end();
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user