diff --git a/src/apps.js b/src/apps.js index 60c70b56a..43e455622 100644 --- a/src/apps.js +++ b/src/apps.js @@ -1203,7 +1203,7 @@ function restoreInstalledApps(callback) { debug(`marking ${app.fqdn} for restore using restore config ${JSON.stringify(restoreConfig)}`); - appdb.setInstallationCommand(app.id, appdb.ISTATE_PENDING_RESTORE, { restoreConfig: restoreConfig, oldConfig: null }, function (error) { + appdb.setInstallationCommand(app.id, appdb.ISTATE_PENDING_RESTORE, { restoreConfig: restoreConfig, oldConfig: getAppConfig(app) }, function (error) { if (error) debug(`Error marking ${app.fqdn} for restore: ${JSON.stringify(error)}`); iteratorDone(); // always succeed diff --git a/src/apptask.js b/src/apptask.js index 516a1867d..6b1c530dd 100644 --- a/src/apptask.js +++ b/src/apptask.js @@ -374,8 +374,14 @@ function install(app, callback) { removeLogrotateConfig.bind(null, app), stopApp.bind(null, app), deleteContainers.bind(null, app), - // oldConfig can be null during upgrades - addons.teardownAddons.bind(null, app, app.oldConfig ? app.oldConfig.manifest.addons : app.manifest.addons), + function teardownAddons(next) { + // when restoring, app does not require these addons anymore. remove carefully to preserve the db passwords + var addonsToRemove = !isRestoring + ? app.manifest.addons + : _.omit(app.oldConfig.manifest.addons, Object.keys(app.manifest.addons)); + + addons.teardownAddons(app, addonsToRemove, next); + }, deleteVolume.bind(null, app, { removeDirectory: false }), // do not remove any symlinked volume // for restore case