Fix repair

Call appropriate routes based on the error state
This commit is contained in:
Girish Ramakrishnan
2019-12-06 10:13:30 -08:00
parent 165ad229e2
commit a5b14e8d68

View File

@@ -828,7 +828,9 @@ angular.module('Application').controller('AppController', ['$scope', '$location'
var app = $scope.app;
if (app.error && app.error.domain) {
var errorState = ($scope.app.error && $scope.app.error.installationState) || ISTATES.PENDING_CONFIGURE;
if (errorState === ISTATES.PENDING_LOCATION_CHANGE) {
$scope.repair.location = app.location;
$scope.repair.domain = $scope.domains.filter(function (d) { return d.domain === app.domain; })[0];
$scope.repair.alternateDomains = $scope.app.alternateDomains;
@@ -841,7 +843,7 @@ angular.module('Application').controller('AppController', ['$scope', '$location'
});
}
if (app.error && app.error.backupId) {
if (errorState === ISTATES.PENDING_RESTORE) {
Client.getAppBackups($scope.app.id, function (error, backups) {
if (error) return Client.error(error);
@@ -860,20 +862,52 @@ angular.module('Application').controller('AppController', ['$scope', '$location'
$scope.repair.error = {};
$scope.repair.busy = true;
var errorState = ($scope.app.error && $scope.app.error.installationState) || ISTATES.PENDING_CONFIGURE;
var data = {};
if ($scope.app.error && $scope.app.error.domain) {
var repairFunc;
switch (errorState) {
case ISTATES.PENDING_INSTALL:
case ISTATES.PENDING_CLONE: // if manifest or bad image, use CLI to provide new manifest
repairFunc = Client.repairApp.bind(null, $scope.app.id, {}); // this will trigger a re-install
break;
case ISTATES.PENDING_LOCATION_CHANGE:
data.location = $scope.repair.location;
data.domain = $scope.repair.domain.domain;
data.alternateDomains = $scope.repair.alternateDomains.filter(function (a) { return a.enabled; })
.map(function (d) { return { subdomain: d.subdomain, domain: d.domain.domain }; });
data.overwriteDns = true; // always overwriteDns. user can anyway check and uncheck above
repairFunc = Client.configureApp.bind(null, $scope.app.id, 'location', data);
break;
case ISTATES.PENDING_DATA_DIR_MIGRATION:
repairFunc = Client.configureApp.bind(null, $scope.app.id, 'data_dir', { dataDir: null });
break;
// this also happens for import faliures. this UI can only show backup listing. use CLI for arbit id/config
case ISTATES.PENDING_RESTORE:
repairFunc = Client.restoreApp.bind(null, $scope.app.id, $scope.repair.backupId);
break;
case ISTATES.PENDING_UNINSTALL:
repairFunc = Client.uninstallApp.bind(null, $scope.app.id);
break;
case ISTATES.PENDING_START:
case ISTATES.PENDING_STOP:
case ISTATES.PENDING_RESIZE:
case ISTATES.PENDING_DEBUG:
case ISTATES.PENDING_RECREATE_CONTAINER:
case ISTATES.PENDING_CONFIGURE:
case ISTATES.PENDING_BACKUP: // only here for completeness, should never happen as this only set task error and not app erro
case ISTATES.PENDING_UPDATE: // when update failed, just bring it back to current state and user can click update again
default:
repairFunc = Client.repairApp.bind(null, $scope.app.id, {});
break;
}
if ($scope.app.error && $scope.app.error.backupId) {
data.backupId = $scope.repair.backupId;
}
Client.repairApp($scope.app.id, data, function (error) {
repairFunc(function (error) {
if (error) return Client.error(error);
$scope.repair.busy = false;