Skip to content

Bug 1462205 - Delete binding shouldn't show up when all bindings are pending deletion #1738

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Jun 20, 2017
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions app/scripts/controllers/overview.js
Original file line number Diff line number Diff line change
Expand Up @@ -1101,6 +1101,7 @@ function OverviewController($scope,
// - API objects by binding name
state.bindingsByApplicationUID = {};
state.applicationsByBinding = {};
state.deleteableBindingsByApplicationUID = {};

// If there are no bindings, nothing to do.
if (_.isEmpty(state.bindings)) {
Expand Down Expand Up @@ -1139,6 +1140,7 @@ function OverviewController($scope,
// pod preset covers the selector.
var applicationSelector = new LabelSelector(_.get(apiObject, 'spec.selector'));
state.bindingsByApplicationUID[applicationUID] = [];
state.deleteableBindingsByApplicationUID[applicationUID] = [];

// Look at each pod preset selector to see if it covers this API object selector.
_.each(podPresetSelectors, function(podPresetSelector, bindingName) {
Expand All @@ -1147,6 +1149,9 @@ function OverviewController($scope,
// the target. We want to show bindings both in the "application"
// object rows and the service instance rows.
state.bindingsByApplicationUID[applicationUID].push(state.bindings[bindingName]);
if (!_.get(state.bindings[bindingName], 'metadata.deletionTimestamp')) {
state.deleteableBindingsByApplicationUID[applicationUID].push(state.bindings[bindingName]);
}
state.applicationsByBinding[bindingName] = state.applicationsByBinding[bindingName] || [];
state.applicationsByBinding[bindingName].push(apiObject);
}
Expand Down
6 changes: 6 additions & 0 deletions app/scripts/directives/overview/serviceInstanceRow.js
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,12 @@
row.description = getDescription();
};

row.$onChanges = function(changes) {
if (changes.bindings) {
row.deleteableBindings = _.reject(row.bindings, 'metadata.deletionTimestamp');
}
};

row.getSecretForBinding = function(binding) {
return binding && _.get(row, ['state', 'secrets', binding.spec.secretName]);
};
Expand Down
4 changes: 2 additions & 2 deletions app/views/overview/_list-row-actions.html
Original file line number Diff line number Diff line change
Expand Up @@ -25,10 +25,10 @@
</li>
<!-- FIXME: Can't enable canI checks on svc cat resources until we have aggregation
<li ng-if="(row.state.serviceInstances | hashSize) > 0 && {resource: 'bindings', group: 'servicecatalog.k8s.io'} | canI : 'create'" role="menuitem"> -->
<li ng-if-start="('pod_presets' | enableTechPreviewFeature) && row.state.bindableServiceInstances.length" role="menuitem">
<li ng-if="('pod_presets' | enableTechPreviewFeature) && row.state.bindableServiceInstances.length" role="menuitem">
<a href="" ng-click="row.showOverlayPanel('bindService', {target: row.apiObject})">Create Binding</a>
</li>
<li ng-if-end role="menuitem">
<li ng-if="('pod_presets' | enableTechPreviewFeature) && row.state.deleteableBindingsByApplicationUID[row.apiObject.metadata.uid].length" role="menuitem">
<a href="" ng-click="row.showOverlayPanel('unbindService', {target: row.apiObject})">Delete Binding</a>
</li>
<li ng-if="row.current && ('deploymentconfigs/log' | canI : 'get')" role="menuitem">
Expand Down
2 changes: 1 addition & 1 deletion app/views/overview/_list-row.html
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
<div ng-if="row.overlay.panelName === 'unbindService'">
<unbind-service
target="row.overlay.state.target"
bindings="row.bindings"
bindings="row.state.deleteableBindingsByApplicationUID[row.overlay.state.target.metadata.uid]"
on-close="row.closeOverlayPanel"></unbind-service>
</div>
</overlay-panel>
9 changes: 6 additions & 3 deletions app/views/overview/_service-instance-row.html
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ <h3>
<li role="menuitem" ng-if="('pod_presets' | enableTechPreviewFeature) && row.isBindable">
<a href="" ng-click="row.showOverlayPanel('bindService', {target: row.apiObject})">Create Binding</a>
</li>
<li role="menuitem" ng-if="('pod_presets' | enableTechPreviewFeature) && row.bindings.length">
<li role="menuitem" ng-if="('pod_presets' | enableTechPreviewFeature) && row.deleteableBindings.length">
<a href="" ng-click="row.showOverlayPanel('unbindService', {target: row.apiObject})">Delete Binding</a>
</li>
<li role="menuitem">
Expand Down Expand Up @@ -127,7 +127,10 @@ <h3>
</div>
</div>
<div class="col-sm-7 col-md-6 overview-bindings">
<span ng-if="!(binding | isBindingReady)">
<span ng-if="binding.metadata.deletionTimestamp">
<status-icon status="'Pending'"></status-icon> Deleting
</span>
<span ng-if="!(binding | isBindingReady) && !binding.metadata.deletionTimestamp">
<status-icon status="'Pending'"></status-icon> Pending
</span>
<a
Expand All @@ -154,7 +157,7 @@ <h3>
<div ng-if="row.overlay.panelName === 'unbindService'">
<unbind-service
target="row.overlay.state.target"
bindings="row.bindings"
bindings="row.deleteableBindings"
applications-by-binding="row.state.applicationsByBinding"
on-close="row.closeOverlayPanel"></unbind-service>
</div>
Expand Down
8 changes: 5 additions & 3 deletions dist/scripts/scripts.js
Original file line number Diff line number Diff line change
Expand Up @@ -368,7 +368,7 @@ errorNotification:!1
Q.secrets = a.by("metadata.name");
});
}, 300), $a = function() {
if (Q.bindingsByApplicationUID = {}, Q.applicationsByBinding = {}, !_.isEmpty(Q.bindings)) {
if (Q.bindingsByApplicationUID = {}, Q.applicationsByBinding = {}, Q.deleteableBindingsByApplicationUID = {}, !_.isEmpty(Q.bindings)) {
var a = [ z.deploymentConfigs, z.vanillaReplicationControllers, z.deployments, z.vanillaReplicaSets, z.statefulSets ];
if (!_.some(a, function(a) {
return !a;
Expand All @@ -380,8 +380,8 @@ c && (b[a.metadata.name] = new LabelSelector(c));
}), _.each(a, function(a) {
_.each(a, function(a) {
var c = T(a), d = new LabelSelector(_.get(a, "spec.selector"));
Q.bindingsByApplicationUID[c] = [], _.each(b, function(b, e) {
b.covers(d) && (Q.bindingsByApplicationUID[c].push(Q.bindings[e]), Q.applicationsByBinding[e] = Q.applicationsByBinding[e] || [], Q.applicationsByBinding[e].push(a));
Q.bindingsByApplicationUID[c] = [], Q.deleteableBindingsByApplicationUID[c] = [], _.each(b, function(b, e) {
b.covers(d) && (Q.bindingsByApplicationUID[c].push(Q.bindings[e]), _.get(Q.bindings[e], "metadata.deletionTimestamp") || Q.deleteableBindingsByApplicationUID[c].push(Q.bindings[e]), Q.applicationsByBinding[e] = Q.applicationsByBinding[e] || [], Q.applicationsByBinding[e].push(a));
});
});
});
Expand Down Expand Up @@ -13092,6 +13092,8 @@ return _.get(g, [ "state", "serviceClasses", a, "description" ]);
};
g.$doCheck = function() {
g.notifications = e.getNotifications(g.apiObject, g.state), g.displayName = i(g.apiObject, g.serviceClasses), g.description = j();
}, g.$onChanges = function(a) {
a.bindings && (g.deleteableBindings = _.reject(g.bindings, "metadata.deletionTimestamp"));
}, g.getSecretForBinding = function(a) {
return a && _.get(g, [ "state", "secrets", a.spec.secretName ]);
}, g.isBindable = d.isServiceBindable(g.apiObject, g.state.serviceClasses), g.closeOverlayPanel = function() {
Expand Down
15 changes: 9 additions & 6 deletions dist/scripts/templates.js
Original file line number Diff line number Diff line change
Expand Up @@ -11649,10 +11649,10 @@ angular.module('openshiftConsoleTemplates', []).run(['$templateCache', function(
"<a ng-href=\"{{row.apiObject | editResourceURL}}\">Edit</a>\n" +
"</li>\n" +
"\n" +
"<li ng-if-start=\"('pod_presets' | enableTechPreviewFeature) && row.state.bindableServiceInstances.length\" role=\"menuitem\">\n" +
"<li ng-if=\"('pod_presets' | enableTechPreviewFeature) && row.state.bindableServiceInstances.length\" role=\"menuitem\">\n" +
"<a href=\"\" ng-click=\"row.showOverlayPanel('bindService', {target: row.apiObject})\">Create Binding</a>\n" +
"</li>\n" +
"<li ng-if-end role=\"menuitem\">\n" +
"<li ng-if=\"('pod_presets' | enableTechPreviewFeature) && row.state.deleteableBindingsByApplicationUID[row.apiObject.metadata.uid].length\" role=\"menuitem\">\n" +
"<a href=\"\" ng-click=\"row.showOverlayPanel('unbindService', {target: row.apiObject})\">Delete Binding</a>\n" +
"</li>\n" +
"<li ng-if=\"row.current && ('deploymentconfigs/log' | canI : 'get')\" role=\"menuitem\">\n" +
Expand Down Expand Up @@ -11995,7 +11995,7 @@ angular.module('openshiftConsoleTemplates', []).run(['$templateCache', function(
"<bind-service target=\"row.overlay.state.target\" on-close=\"row.closeOverlayPanel\"></bind-service>\n" +
"</div>\n" +
"<div ng-if=\"row.overlay.panelName === 'unbindService'\">\n" +
"<unbind-service target=\"row.overlay.state.target\" bindings=\"row.bindings\" on-close=\"row.closeOverlayPanel\"></unbind-service>\n" +
"<unbind-service target=\"row.overlay.state.target\" bindings=\"row.state.deleteableBindingsByApplicationUID[row.overlay.state.target.metadata.uid]\" on-close=\"row.closeOverlayPanel\"></unbind-service>\n" +
"</div>\n" +
"</overlay-panel>"
);
Expand Down Expand Up @@ -12247,7 +12247,7 @@ angular.module('openshiftConsoleTemplates', []).run(['$templateCache', function(
"<li role=\"menuitem\" ng-if=\"('pod_presets' | enableTechPreviewFeature) && row.isBindable\">\n" +
"<a href=\"\" ng-click=\"row.showOverlayPanel('bindService', {target: row.apiObject})\">Create Binding</a>\n" +
"</li>\n" +
"<li role=\"menuitem\" ng-if=\"('pod_presets' | enableTechPreviewFeature) && row.bindings.length\">\n" +
"<li role=\"menuitem\" ng-if=\"('pod_presets' | enableTechPreviewFeature) && row.deleteableBindings.length\">\n" +
"<a href=\"\" ng-click=\"row.showOverlayPanel('unbindService', {target: row.apiObject})\">Delete Binding</a>\n" +
"</li>\n" +
"<li role=\"menuitem\">\n" +
Expand Down Expand Up @@ -12297,7 +12297,10 @@ angular.module('openshiftConsoleTemplates', []).run(['$templateCache', function(
"</div>\n" +
"</div>\n" +
"<div class=\"col-sm-7 col-md-6 overview-bindings\">\n" +
"<span ng-if=\"!(binding | isBindingReady)\">\n" +
"<span ng-if=\"binding.metadata.deletionTimestamp\">\n" +
"<status-icon status=\"'Pending'\"></status-icon> Deleting\n" +
"</span>\n" +
"<span ng-if=\"!(binding | isBindingReady) && !binding.metadata.deletionTimestamp\">\n" +
"<status-icon status=\"'Pending'\"></status-icon> Pending\n" +
"</span>\n" +
"<a ng-if=\"(binding | isBindingReady) && ('secrets' | canI : 'get')\" ng-href=\"{{row.getSecretForBinding(binding) | navigateResourceURL}}\">\n" +
Expand All @@ -12319,7 +12322,7 @@ angular.module('openshiftConsoleTemplates', []).run(['$templateCache', function(
"<bind-service target=\"row.overlay.state.target\" on-close=\"row.closeOverlayPanel\"></bind-service>\n" +
"</div>\n" +
"<div ng-if=\"row.overlay.panelName === 'unbindService'\">\n" +
"<unbind-service target=\"row.overlay.state.target\" bindings=\"row.bindings\" applications-by-binding=\"row.state.applicationsByBinding\" on-close=\"row.closeOverlayPanel\"></unbind-service>\n" +
"<unbind-service target=\"row.overlay.state.target\" bindings=\"row.deleteableBindings\" applications-by-binding=\"row.state.applicationsByBinding\" on-close=\"row.closeOverlayPanel\"></unbind-service>\n" +
"</div>\n" +
"</overlay-panel>"
);
Expand Down