diff --git a/src/addons.js b/src/addons.js index b58b01d5d..96f4674e4 100644 --- a/src/addons.js +++ b/src/addons.js @@ -728,8 +728,10 @@ function setupLocalStorage(app, options, callback) { debugApp(app, 'setupLocalStorage'); + const volumeDataDir = path.join(paths.APPS_DATA_DIR, app.id, 'data'); + // if you change the name, you have to change getMountsSync - docker.createVolume(app, `${app.id}-localstorage`, 'data', callback); + docker.createVolume(app, `${app.id}-localstorage`, volumeDataDir, callback); } function clearLocalStorage(app, options, callback) { @@ -739,7 +741,7 @@ function clearLocalStorage(app, options, callback) { debugApp(app, 'clearLocalStorage'); - docker.clearVolume(app, `${app.id}-localstorage`, 'data', callback); + docker.clearVolume(app, `${app.id}-localstorage`, callback); } function teardownLocalStorage(app, options, callback) { @@ -749,7 +751,7 @@ function teardownLocalStorage(app, options, callback) { debugApp(app, 'teardownLocalStorage'); - docker.removeVolume(app, `${app.id}-localstorage`, 'data', callback); + docker.removeVolume(app, `${app.id}-localstorage`, callback); } function setupOauth(app, options, callback) { diff --git a/src/docker.js b/src/docker.js index 58d693b99..cfc784d87 100644 --- a/src/docker.js +++ b/src/docker.js @@ -57,8 +57,6 @@ var addons = require('./addons.js'), mkdirp = require('mkdirp'), once = require('once'), path = require('path'), - paths = require('./paths.js'), - safe = require('safetydance'), shell = require('./shell.js'), spawn = child_process.spawn, util = require('util'), @@ -517,16 +515,14 @@ function execContainer(containerId, cmd, options, callback) { if (options.stdin) options.stdin.pipe(cp.stdin).on('error', callback); } -function createVolume(app, name, subdir, callback) { +function createVolume(app, name, volumeDataDir, callback) { assert.strictEqual(typeof app, 'object'); assert.strictEqual(typeof name, 'string'); - assert.strictEqual(typeof subdir, 'string'); + assert.strictEqual(typeof volumeDataDir, 'string'); assert.strictEqual(typeof callback, 'function'); let docker = exports.connection; - const volumeDataDir = path.join(paths.APPS_DATA_DIR, app.id, subdir); - const volumeOptions = { Name: name, Driver: 'local', @@ -552,30 +548,37 @@ function createVolume(app, name, subdir, callback) { }); } -function clearVolume(app, name, subdir, callback) { +function clearVolume(app, name, callback) { assert.strictEqual(typeof app, 'object'); assert.strictEqual(typeof name, 'string'); - assert.strictEqual(typeof subdir, 'string'); assert.strictEqual(typeof callback, 'function'); - shell.sudo('removeVolume', [ RMVOLUME_CMD, app.id, subdir ], {}, callback); + let docker = exports.connection; + let volume = docker.getVolume(name); + volume.inspect(function (error, v) { + if (error && error.statusCode === 404) return callback(); + if (error) return callback(error); + + const volumeDataDir = v.Options.device; + shell.sudo('removeVolume', [ RMVOLUME_CMD, volumeDataDir ], {}, callback); + }); } -function removeVolume(app, name, subdir, callback) { +function removeVolume(app, name, callback) { assert.strictEqual(typeof app, 'object'); assert.strictEqual(typeof name, 'string'); - assert.strictEqual(typeof subdir, 'string'); assert.strictEqual(typeof callback, 'function'); let docker = exports.connection; - let volume = docker.getVolume(name); - volume.remove(function (error) { - if (error && error.statusCode !== 404) { - debug(`removeVolume: Error removing volume of ${app.id} ${error}`); - callback(error); - } + clearVolume(app, name, function (error) { + if (error) return callback(error); - shell.sudo('removeVolume', [ RMVOLUME_CMD, app.id, subdir ], {}, callback); + let volume = docker.getVolume(name); + volume.remove(function (error) { + if (error && error.statusCode !== 404) return callback(new Error(`removeVolume: Error removing volume of ${app.id} ${error.message}`)); + + callback(); + }); }); } diff --git a/src/scripts/rmvolume.sh b/src/scripts/rmvolume.sh index f573e741b..2a120eb90 100755 --- a/src/scripts/rmvolume.sh +++ b/src/scripts/rmvolume.sh @@ -17,14 +17,11 @@ if [[ "$1" == "--check" ]]; then exit 0 fi -appid="$1" -subdir="$2" +volume_dir="$1" -if [[ "${BOX_ENV}" == "cloudron" ]]; then - readonly volume_dir="${HOME}/appsdata/${appid}/${subdir}" -else - readonly volume_dir="${HOME}/.cloudron_test/appsdata/${appid}/${subdir}" +if [[ "${BOX_ENV}" == "test" ]]; then + # be careful not to nuke some random directory when testing + [[ "${volume_dir}" != *"./cloudron_test/"* ]] && exit 1 fi rm -rf "${volume_dir}" -