Make the repair re-issue the install command
Otherwise, repairing a repair has to be handled
This commit is contained in:
20
src/apps.js
20
src/apps.js
@@ -73,7 +73,6 @@ exports = module.exports = {
|
||||
ISTATE_PENDING_DATA_DIR_MIGRATION: 'pending_data_dir_migration',
|
||||
ISTATE_PENDING_RESIZE: 'pending_resize',
|
||||
ISTATE_PENDING_DEBUG: 'pending_debug',
|
||||
ISTATE_PENDING_REPAIR: 'pending_repair',
|
||||
ISTATE_PENDING_UNINSTALL: 'pending_uninstall', // uninstallation
|
||||
ISTATE_PENDING_RESTORE: 'pending_restore', // restore to previous backup or on upgrade
|
||||
ISTATE_PENDING_UPDATE: 'pending_update', // update from installed state preserving data
|
||||
@@ -668,7 +667,7 @@ function checkAppState(app, state) {
|
||||
if (app.taskId) return new AppsError(AppsError.BAD_STATE, `Not allowed in this app state : ${app.installationState} / ${app.runState}`);
|
||||
|
||||
if (app.installationState === exports.ISTATE_ERROR) {
|
||||
if (state !== exports.ISTATE_PENDING_REPAIR && state !== exports.ISTATE_PENDING_UNINSTALL) return new AppsError(AppsError.BAD_STATE, 'Not allowed in error state');
|
||||
if (state !== exports.ISTATE_PENDING_UNINSTALL) return new AppsError(AppsError.BAD_STATE, 'Not allowed in error state');
|
||||
}
|
||||
|
||||
return null;
|
||||
@@ -1344,20 +1343,23 @@ function repair(appId, data, auditSource, callback) {
|
||||
|
||||
get(appId, function (error, app) {
|
||||
if (error) return callback(error);
|
||||
if (app.installationState !== exports.ISTATE_ERROR) return new AppsError(AppsError.BAD_STATE, 'Only allowed in error state');
|
||||
|
||||
error = checkAppState(app, exports.ISTATE_PENDING_REPAIR);
|
||||
if (error) return callback(error);
|
||||
const appError = app.error || {};
|
||||
const newState = appError.task ? appError.task.installationState : exports.ISTATE_PENDING_CONFIGURE;
|
||||
debug(`Repairing app with error: ${JSON.stringify(error)} and state: ${newState}`);
|
||||
|
||||
let values = _.pick(data, 'location', 'domain', 'alternateDomains'); // FIXME: validate
|
||||
values.installationState = exports.ISTATE_PENDING_REPAIR;
|
||||
values.installationState = newState;
|
||||
|
||||
const restoreConfig = data.backupId ? { backupId: data.backupId, backupFormat: data.backupFormat, oldManifest: app.manifest } : null; // when null, apptask simply reinstalls
|
||||
const overwriteDns = 'overwriteDns' in data ? data.overwriteDns : false;
|
||||
let args = appError.task ? appError.task.args : {};
|
||||
args.restoreConfig = data.backupId ? { backupId: data.backupId, backupFormat: data.backupFormat, oldManifest: app.manifest } : null; // when null, apptask simply reinstalls
|
||||
args.overwriteDns = 'overwriteDns' in data ? data.overwriteDns : false;
|
||||
|
||||
scheduleTask(appId, { restoreConfig, overwriteDns, error: app.error }, values, function (error, result) {
|
||||
scheduleTask(appId, args, values, function (error, result) {
|
||||
if (error) return callback(error);
|
||||
|
||||
eventlog.add(eventlog.ACTION_APP_REPAIR, auditSource, { taskId: result.taskId, app });
|
||||
eventlog.add(eventlog.ACTION_APP_REPAIR, auditSource, { taskId: result.taskId, app, newState });
|
||||
|
||||
callback(null, { taskId: result.taskId });
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user