diff --git a/app/scripts/controllers/serviceInstance.js b/app/scripts/controllers/serviceInstance.js index 10d1ad4f6d..458c042851 100644 --- a/app/scripts/controllers/serviceInstance.js +++ b/app/scripts/controllers/serviceInstance.js @@ -54,7 +54,7 @@ angular.module('openshiftConsole') var servicePlansPromise; var serviceInstanceDisplayName = $filter('serviceInstanceDisplayName'); - var serviceInstanceReady = $filter('isServiceInstanceReady'); + var isServiceInstanceFailed = $filter('isServiceInstanceFailed'); // API Versions var serviceBindingsVersion = APIService.getPreferredVersion('servicebindings'); @@ -120,7 +120,14 @@ angular.module('openshiftConsole') var updateSchema = _.get($scope.plan, 'spec.instanceUpdateParameterSchema'); var planUpdatable = (_.size(_.get(updateSchema, 'properties')) > 0) || (_.get($scope.serviceClass, 'spec.planUpdatable') && (_.size($scope.servicePlans) > 1)); - $scope.editAvailable = planUpdatable && serviceInstanceReady($scope.serviceInstance) && !_.get($scope.serviceInstance, 'metadata.deletionTimestamp'); + $scope.editAvailable = + (updateSchema || planUpdatable) && + // Instances in failed state are considered permanently failed and shouldn't be updated. + !isServiceInstanceFailed($scope.serviceInstance) && + // Wait until either the provision or other async operation completes before letting the user edit. + !_.get($scope.serviceInstance, 'status.asyncOpInProgress') && + // Don't allow editing deleted instances. + !_.get($scope.serviceInstance, 'metadata.deletionTimestamp'); }; var updateParameterSchema = function() { diff --git a/dist/scripts/scripts.js b/dist/scripts/scripts.js index b329d75a9e..ab5fe70435 100644 --- a/dist/scripts/scripts.js +++ b/dist/scripts/scripts.js @@ -6359,7 +6359,7 @@ e.showParameterValues = !e.showParameterValues; }, e.closeEditDialog = function() { e.editDialogShown = !1; }; -var m, p, f = [], g = [], v = t("serviceInstanceDisplayName"), h = t("isServiceInstanceReady"), y = a.getPreferredVersion("servicebindings"); +var m, p, f = [], g = [], v = t("serviceInstanceDisplayName"), h = t("isServiceInstanceFailed"), y = a.getPreferredVersion("servicebindings"); e.serviceInstancesVersion = a.getPreferredVersion("serviceinstances"); var b = function() { e.breadcrumbs.push({ @@ -6389,7 +6389,7 @@ c.warn("Unable to load parameters from secret " + _.get(t, "secretKeyRef.name"), }, S = function() { if (e.plan && e.serviceClass && e.serviceInstance) { var t = _.get(e.plan, "spec.instanceUpdateParameterSchema"), n = _.size(_.get(t, "properties")) > 0 || _.get(e.serviceClass, "spec.planUpdatable") && _.size(e.servicePlans) > 1; -e.editAvailable = n && h(e.serviceInstance) && !_.get(e.serviceInstance, "metadata.deletionTimestamp"); +e.editAvailable = (t || n) && !h(e.serviceInstance) && !_.get(e.serviceInstance, "status.asyncOpInProgress") && !_.get(e.serviceInstance, "metadata.deletionTimestamp"); } }, w = function() { e.parameterFormDefinition = angular.copy(_.get(e.plan, "spec.externalMetadata.schemas.service_instance.update.openshift_form_definition")), e.parameterSchema = _.get(e.plan, "spec.instanceCreateParameterSchema"), C();