Commit e62c280c by Jeffrey Phillips

Fixes for binding status and bindable services

Fixes #154
Enables fix for
https://github.com/openshift/origin-web-console/issues/1466
parent 61adf8d0
...@@ -1218,13 +1218,17 @@ angular.module("openshiftCommonServices") ...@@ -1218,13 +1218,17 @@ angular.module("openshiftCommonServices")
}; };
var isServiceBindable = function(serviceInstance, serviceClasses) { var isServiceBindable = function(serviceInstance, serviceClasses) {
var serviceClass = getServiceClassForInstance(serviceInstance, serviceClasses);
// If being deleted, it is not bindable // If being deleted, it is not bindable
if (_.get(serviceInstance, 'metadata.deletionTimestamp')) { if (_.get(serviceInstance, 'metadata.deletionTimestamp')) {
return false; return false;
} }
// If provisioning failed, the service is not bindable
if ($filter('isServiceInstanceFailed')(serviceInstance, 'Failed')) {
return false;
}
var serviceClass = getServiceClassForInstance(serviceInstance, serviceClasses);
if (!serviceClass) { if (!serviceClass) {
return !!serviceInstance; return !!serviceInstance;
} }
......
...@@ -91,7 +91,7 @@ hawtioPluginLoader.addModule('openshiftCommonUI'); ...@@ -91,7 +91,7 @@ hawtioPluginLoader.addModule('openshiftCommonUI');
$templateCache.put('src/components/binding/bindResults.html', $templateCache.put('src/components/binding/bindResults.html',
"<div ng-if=\"!ctrl.error\">\n" + "<div ng-if=\"!ctrl.error && !(ctrl.binding | isBindingFailed)\">\n" +
" <div ng-if=\"ctrl.binding && !(ctrl.binding | isBindingReady)\" class=\"bind-status\" ng-class=\"{'text-center': !ctrl.progressInline, 'show-progress': !ctrl.progressInline}\">\n" + " <div ng-if=\"ctrl.binding && !(ctrl.binding | isBindingReady)\" class=\"bind-status\" ng-class=\"{'text-center': !ctrl.progressInline, 'show-progress': !ctrl.progressInline}\">\n" +
" <div class=\"spinner\" ng-class=\"{'spinner-sm': ctrl.progressInline, 'spinner-inline': ctrl.progressInline, 'spinner-lg': !ctrl.progressInline}\" aria-hidden=\"true\"></div>\n" + " <div class=\"spinner\" ng-class=\"{'spinner-sm': ctrl.progressInline, 'spinner-inline': ctrl.progressInline, 'spinner-lg': !ctrl.progressInline}\" aria-hidden=\"true\"></div>\n" +
" <h3 class=\"bind-message\">\n" + " <h3 class=\"bind-message\">\n" +
...@@ -123,7 +123,7 @@ hawtioPluginLoader.addModule('openshiftCommonUI'); ...@@ -123,7 +123,7 @@ hawtioPluginLoader.addModule('openshiftCommonUI');
" </div>\n" + " </div>\n" +
" </div>\n" + " </div>\n" +
"</div>\n" + "</div>\n" +
"<div ng-if=\"ctrl.error\">\n" + "<div ng-if=\"ctrl.error || (ctrl.binding | isBindingFailed)\">\n" +
" <div class=\"bind-status\">\n" + " <div class=\"bind-status\">\n" +
" <span class=\"pficon pficon-error-circle-o text-danger\" aria-hidden=\"true\"></span>\n" + " <span class=\"pficon pficon-error-circle-o text-danger\" aria-hidden=\"true\"></span>\n" +
" <span class=\"sr-only\">Error</span>\n" + " <span class=\"sr-only\">Error</span>\n" +
...@@ -131,7 +131,7 @@ hawtioPluginLoader.addModule('openshiftCommonUI'); ...@@ -131,7 +131,7 @@ hawtioPluginLoader.addModule('openshiftCommonUI');
" <span>Binding Failed</span>\n" + " <span>Binding Failed</span>\n" +
" </h3>\n" + " </h3>\n" +
" </div>\n" + " </div>\n" +
" <div class=\"sub-title\">\n" + " <div ng-if=\"ctrl.error\" class=\"sub-title\">\n" +
" <span ng-if=\"ctrl.error.data.message\">\n" + " <span ng-if=\"ctrl.error.data.message\">\n" +
" {{ctrl.error.data.message | upperFirst}}\n" + " {{ctrl.error.data.message | upperFirst}}\n" +
" </span>\n" + " </span>\n" +
...@@ -139,6 +139,9 @@ hawtioPluginLoader.addModule('openshiftCommonUI'); ...@@ -139,6 +139,9 @@ hawtioPluginLoader.addModule('openshiftCommonUI');
" An error occurred creating the binding.\n" + " An error occurred creating the binding.\n" +
" </span>\n" + " </span>\n" +
" </div>\n" + " </div>\n" +
" <div ng-if=\"!ctrl.error\" class=\"sub-title\">\n" +
" {{ctrl.binding | bindingFailedMessage}}\n" +
" </div>\n" +
"</div>\n" "</div>\n"
); );
...@@ -1718,9 +1721,35 @@ angular.module('openshiftCommonUI') ...@@ -1718,9 +1721,35 @@ angular.module('openshiftCommonUI')
return _.get(statusConditionFilter(apiObject, 'Ready'), 'status') === 'True'; return _.get(statusConditionFilter(apiObject, 'Ready'), 'status') === 'True';
}; };
}) })
.filter('serviceInstanceReadyMessage', function(statusConditionFilter) {
return function(apiObject) {
return _.get(statusConditionFilter(apiObject, 'Ready'), 'message');
};
})
.filter('isServiceInstanceFailed', function(statusConditionFilter) {
return function(apiObject) {
return _.get(statusConditionFilter(apiObject, 'Failed'), 'status') === 'True';
};
})
.filter('serviceInstanceFailedMessage', function(isServiceInstanceFailedFilter, statusConditionFilter) {
return function(apiObject) {
if (isServiceInstanceFailedFilter(apiObject)) {
return _.get(statusConditionFilter(apiObject, 'Failed'), 'message');
}
};
})
.filter('isBindingReady', function(isServiceInstanceReadyFilter) { .filter('isBindingReady', function(isServiceInstanceReadyFilter) {
return isServiceInstanceReadyFilter; return isServiceInstanceReadyFilter;
}) })
.filter('isBindingFailed', function(isServiceInstanceFailedFilter) {
return isServiceInstanceFailedFilter;
})
.filter('bindingFailedMessage', function(serviceInstanceFailedMessageFilter) {
return serviceInstanceFailedMessageFilter;
})
.filter('bindingReadyMessage', function(serviceInstanceReadyMessageFilter) {
return serviceInstanceReadyMessageFilter;
})
.filter('hasDeployment', function(annotationFilter) { .filter('hasDeployment', function(annotationFilter) {
return function(object) { return function(object) {
return !!annotationFilter(object, 'deployment.kubernetes.io/revision'); return !!annotationFilter(object, 'deployment.kubernetes.io/revision');
......
...@@ -262,7 +262,7 @@ hawtioPluginLoader.addModule('openshiftCommonUI'); ...@@ -262,7 +262,7 @@ hawtioPluginLoader.addModule('openshiftCommonUI');
$templateCache.put('src/components/binding/bindResults.html', $templateCache.put('src/components/binding/bindResults.html',
"<div ng-if=\"!ctrl.error\">\n" + "<div ng-if=\"!ctrl.error && !(ctrl.binding | isBindingFailed)\">\n" +
" <div ng-if=\"ctrl.binding && !(ctrl.binding | isBindingReady)\" class=\"bind-status\" ng-class=\"{'text-center': !ctrl.progressInline, 'show-progress': !ctrl.progressInline}\">\n" + " <div ng-if=\"ctrl.binding && !(ctrl.binding | isBindingReady)\" class=\"bind-status\" ng-class=\"{'text-center': !ctrl.progressInline, 'show-progress': !ctrl.progressInline}\">\n" +
" <div class=\"spinner\" ng-class=\"{'spinner-sm': ctrl.progressInline, 'spinner-inline': ctrl.progressInline, 'spinner-lg': !ctrl.progressInline}\" aria-hidden=\"true\"></div>\n" + " <div class=\"spinner\" ng-class=\"{'spinner-sm': ctrl.progressInline, 'spinner-inline': ctrl.progressInline, 'spinner-lg': !ctrl.progressInline}\" aria-hidden=\"true\"></div>\n" +
" <h3 class=\"bind-message\">\n" + " <h3 class=\"bind-message\">\n" +
...@@ -294,7 +294,7 @@ hawtioPluginLoader.addModule('openshiftCommonUI'); ...@@ -294,7 +294,7 @@ hawtioPluginLoader.addModule('openshiftCommonUI');
" </div>\n" + " </div>\n" +
" </div>\n" + " </div>\n" +
"</div>\n" + "</div>\n" +
"<div ng-if=\"ctrl.error\">\n" + "<div ng-if=\"ctrl.error || (ctrl.binding | isBindingFailed)\">\n" +
" <div class=\"bind-status\">\n" + " <div class=\"bind-status\">\n" +
" <span class=\"pficon pficon-error-circle-o text-danger\" aria-hidden=\"true\"></span>\n" + " <span class=\"pficon pficon-error-circle-o text-danger\" aria-hidden=\"true\"></span>\n" +
" <span class=\"sr-only\">Error</span>\n" + " <span class=\"sr-only\">Error</span>\n" +
...@@ -302,7 +302,7 @@ hawtioPluginLoader.addModule('openshiftCommonUI'); ...@@ -302,7 +302,7 @@ hawtioPluginLoader.addModule('openshiftCommonUI');
" <span>Binding Failed</span>\n" + " <span>Binding Failed</span>\n" +
" </h3>\n" + " </h3>\n" +
" </div>\n" + " </div>\n" +
" <div class=\"sub-title\">\n" + " <div ng-if=\"ctrl.error\" class=\"sub-title\">\n" +
" <span ng-if=\"ctrl.error.data.message\">\n" + " <span ng-if=\"ctrl.error.data.message\">\n" +
" {{ctrl.error.data.message | upperFirst}}\n" + " {{ctrl.error.data.message | upperFirst}}\n" +
" </span>\n" + " </span>\n" +
...@@ -310,6 +310,9 @@ hawtioPluginLoader.addModule('openshiftCommonUI'); ...@@ -310,6 +310,9 @@ hawtioPluginLoader.addModule('openshiftCommonUI');
" An error occurred creating the binding.\n" + " An error occurred creating the binding.\n" +
" </span>\n" + " </span>\n" +
" </div>\n" + " </div>\n" +
" <div ng-if=\"!ctrl.error\" class=\"sub-title\">\n" +
" {{ctrl.binding | bindingFailedMessage}}\n" +
" </div>\n" +
"</div>\n" "</div>\n"
); );
...@@ -1922,9 +1925,35 @@ angular.module('openshiftCommonUI') ...@@ -1922,9 +1925,35 @@ angular.module('openshiftCommonUI')
return _.get(statusConditionFilter(apiObject, 'Ready'), 'status') === 'True'; return _.get(statusConditionFilter(apiObject, 'Ready'), 'status') === 'True';
}; };
}]) }])
.filter('serviceInstanceReadyMessage', ["statusConditionFilter", function(statusConditionFilter) {
return function(apiObject) {
return _.get(statusConditionFilter(apiObject, 'Ready'), 'message');
};
}])
.filter('isServiceInstanceFailed', ["statusConditionFilter", function(statusConditionFilter) {
return function(apiObject) {
return _.get(statusConditionFilter(apiObject, 'Failed'), 'status') === 'True';
};
}])
.filter('serviceInstanceFailedMessage', ["isServiceInstanceFailedFilter", "statusConditionFilter", function(isServiceInstanceFailedFilter, statusConditionFilter) {
return function(apiObject) {
if (isServiceInstanceFailedFilter(apiObject)) {
return _.get(statusConditionFilter(apiObject, 'Failed'), 'message');
}
};
}])
.filter('isBindingReady', ["isServiceInstanceReadyFilter", function(isServiceInstanceReadyFilter) { .filter('isBindingReady', ["isServiceInstanceReadyFilter", function(isServiceInstanceReadyFilter) {
return isServiceInstanceReadyFilter; return isServiceInstanceReadyFilter;
}]) }])
.filter('isBindingFailed', ["isServiceInstanceFailedFilter", function(isServiceInstanceFailedFilter) {
return isServiceInstanceFailedFilter;
}])
.filter('bindingFailedMessage', ["serviceInstanceFailedMessageFilter", function(serviceInstanceFailedMessageFilter) {
return serviceInstanceFailedMessageFilter;
}])
.filter('bindingReadyMessage', ["serviceInstanceReadyMessageFilter", function(serviceInstanceReadyMessageFilter) {
return serviceInstanceReadyMessageFilter;
}])
.filter('hasDeployment', ["annotationFilter", function(annotationFilter) { .filter('hasDeployment', ["annotationFilter", function(annotationFilter) {
return function(object) { return function(object) {
return !!annotationFilter(object, 'deployment.kubernetes.io/revision'); return !!annotationFilter(object, 'deployment.kubernetes.io/revision');
...@@ -3141,13 +3170,17 @@ angular.module("openshiftCommonServices") ...@@ -3141,13 +3170,17 @@ angular.module("openshiftCommonServices")
}; };
var isServiceBindable = function(serviceInstance, serviceClasses) { var isServiceBindable = function(serviceInstance, serviceClasses) {
var serviceClass = getServiceClassForInstance(serviceInstance, serviceClasses);
// If being deleted, it is not bindable // If being deleted, it is not bindable
if (_.get(serviceInstance, 'metadata.deletionTimestamp')) { if (_.get(serviceInstance, 'metadata.deletionTimestamp')) {
return false; return false;
} }
// If provisioning failed, the service is not bindable
if ($filter('isServiceInstanceFailed')(serviceInstance, 'Failed')) {
return false;
}
var serviceClass = getServiceClassForInstance(serviceInstance, serviceClasses);
if (!serviceClass) { if (!serviceClass) {
return !!serviceInstance; return !!serviceInstance;
} }
......
...@@ -62,7 +62,7 @@ angular.module('openshiftCommonUI').run(['$templateCache', function($templateCac ...@@ -62,7 +62,7 @@ angular.module('openshiftCommonUI').run(['$templateCache', function($templateCac
$templateCache.put('src/components/binding/bindResults.html', $templateCache.put('src/components/binding/bindResults.html',
"<div ng-if=\"!ctrl.error\">\n" + "<div ng-if=\"!ctrl.error && !(ctrl.binding | isBindingFailed)\">\n" +
" <div ng-if=\"ctrl.binding && !(ctrl.binding | isBindingReady)\" class=\"bind-status\" ng-class=\"{'text-center': !ctrl.progressInline, 'show-progress': !ctrl.progressInline}\">\n" + " <div ng-if=\"ctrl.binding && !(ctrl.binding | isBindingReady)\" class=\"bind-status\" ng-class=\"{'text-center': !ctrl.progressInline, 'show-progress': !ctrl.progressInline}\">\n" +
" <div class=\"spinner\" ng-class=\"{'spinner-sm': ctrl.progressInline, 'spinner-inline': ctrl.progressInline, 'spinner-lg': !ctrl.progressInline}\" aria-hidden=\"true\"></div>\n" + " <div class=\"spinner\" ng-class=\"{'spinner-sm': ctrl.progressInline, 'spinner-inline': ctrl.progressInline, 'spinner-lg': !ctrl.progressInline}\" aria-hidden=\"true\"></div>\n" +
" <h3 class=\"bind-message\">\n" + " <h3 class=\"bind-message\">\n" +
...@@ -94,7 +94,7 @@ angular.module('openshiftCommonUI').run(['$templateCache', function($templateCac ...@@ -94,7 +94,7 @@ angular.module('openshiftCommonUI').run(['$templateCache', function($templateCac
" </div>\n" + " </div>\n" +
" </div>\n" + " </div>\n" +
"</div>\n" + "</div>\n" +
"<div ng-if=\"ctrl.error\">\n" + "<div ng-if=\"ctrl.error || (ctrl.binding | isBindingFailed)\">\n" +
" <div class=\"bind-status\">\n" + " <div class=\"bind-status\">\n" +
" <span class=\"pficon pficon-error-circle-o text-danger\" aria-hidden=\"true\"></span>\n" + " <span class=\"pficon pficon-error-circle-o text-danger\" aria-hidden=\"true\"></span>\n" +
" <span class=\"sr-only\">Error</span>\n" + " <span class=\"sr-only\">Error</span>\n" +
...@@ -102,7 +102,7 @@ angular.module('openshiftCommonUI').run(['$templateCache', function($templateCac ...@@ -102,7 +102,7 @@ angular.module('openshiftCommonUI').run(['$templateCache', function($templateCac
" <span>Binding Failed</span>\n" + " <span>Binding Failed</span>\n" +
" </h3>\n" + " </h3>\n" +
" </div>\n" + " </div>\n" +
" <div class=\"sub-title\">\n" + " <div ng-if=\"ctrl.error\" class=\"sub-title\">\n" +
" <span ng-if=\"ctrl.error.data.message\">\n" + " <span ng-if=\"ctrl.error.data.message\">\n" +
" {{ctrl.error.data.message | upperFirst}}\n" + " {{ctrl.error.data.message | upperFirst}}\n" +
" </span>\n" + " </span>\n" +
...@@ -110,6 +110,9 @@ angular.module('openshiftCommonUI').run(['$templateCache', function($templateCac ...@@ -110,6 +110,9 @@ angular.module('openshiftCommonUI').run(['$templateCache', function($templateCac
" An error occurred creating the binding.\n" + " An error occurred creating the binding.\n" +
" </span>\n" + " </span>\n" +
" </div>\n" + " </div>\n" +
" <div ng-if=\"!ctrl.error\" class=\"sub-title\">\n" +
" {{ctrl.binding | bindingFailedMessage}}\n" +
" </div>\n" +
"</div>\n" "</div>\n"
); );
......
<div ng-if="!ctrl.error"> <div ng-if="!ctrl.error && !(ctrl.binding | isBindingFailed)">
<div ng-if="ctrl.binding && !(ctrl.binding | isBindingReady)" class="bind-status" ng-class="{'text-center': !ctrl.progressInline, 'show-progress': !ctrl.progressInline}"> <div ng-if="ctrl.binding && !(ctrl.binding | isBindingReady)" class="bind-status" ng-class="{'text-center': !ctrl.progressInline, 'show-progress': !ctrl.progressInline}">
<div class="spinner" ng-class="{'spinner-sm': ctrl.progressInline, 'spinner-inline': ctrl.progressInline, 'spinner-lg': !ctrl.progressInline}" aria-hidden="true"></div> <div class="spinner" ng-class="{'spinner-sm': ctrl.progressInline, 'spinner-inline': ctrl.progressInline, 'spinner-lg': !ctrl.progressInline}" aria-hidden="true"></div>
<h3 class="bind-message"> <h3 class="bind-message">
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
</div> </div>
</div> </div>
</div> </div>
<div ng-if="ctrl.error"> <div ng-if="ctrl.error || (ctrl.binding | isBindingFailed)">
<div class="bind-status"> <div class="bind-status">
<span class="pficon pficon-error-circle-o text-danger" aria-hidden="true"></span> <span class="pficon pficon-error-circle-o text-danger" aria-hidden="true"></span>
<span class="sr-only">Error</span> <span class="sr-only">Error</span>
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
<span>Binding Failed</span> <span>Binding Failed</span>
</h3> </h3>
</div> </div>
<div class="sub-title"> <div ng-if="ctrl.error" class="sub-title">
<span ng-if="ctrl.error.data.message"> <span ng-if="ctrl.error.data.message">
{{ctrl.error.data.message | upperFirst}} {{ctrl.error.data.message | upperFirst}}
</span> </span>
...@@ -46,4 +46,7 @@ ...@@ -46,4 +46,7 @@
An error occurred creating the binding. An error occurred creating the binding.
</span> </span>
</div> </div>
<div ng-if="!ctrl.error" class="sub-title">
{{ctrl.binding | bindingFailedMessage}}
</div>
</div> </div>
...@@ -131,9 +131,35 @@ angular.module('openshiftCommonUI') ...@@ -131,9 +131,35 @@ angular.module('openshiftCommonUI')
return _.get(statusConditionFilter(apiObject, 'Ready'), 'status') === 'True'; return _.get(statusConditionFilter(apiObject, 'Ready'), 'status') === 'True';
}; };
}) })
.filter('serviceInstanceReadyMessage', function(statusConditionFilter) {
return function(apiObject) {
return _.get(statusConditionFilter(apiObject, 'Ready'), 'message');
};
})
.filter('isServiceInstanceFailed', function(statusConditionFilter) {
return function(apiObject) {
return _.get(statusConditionFilter(apiObject, 'Failed'), 'status') === 'True';
};
})
.filter('serviceInstanceFailedMessage', function(isServiceInstanceFailedFilter, statusConditionFilter) {
return function(apiObject) {
if (isServiceInstanceFailedFilter(apiObject)) {
return _.get(statusConditionFilter(apiObject, 'Failed'), 'message');
}
};
})
.filter('isBindingReady', function(isServiceInstanceReadyFilter) { .filter('isBindingReady', function(isServiceInstanceReadyFilter) {
return isServiceInstanceReadyFilter; return isServiceInstanceReadyFilter;
}) })
.filter('isBindingFailed', function(isServiceInstanceFailedFilter) {
return isServiceInstanceFailedFilter;
})
.filter('bindingFailedMessage', function(serviceInstanceFailedMessageFilter) {
return serviceInstanceFailedMessageFilter;
})
.filter('bindingReadyMessage', function(serviceInstanceReadyMessageFilter) {
return serviceInstanceReadyMessageFilter;
})
.filter('hasDeployment', function(annotationFilter) { .filter('hasDeployment', function(annotationFilter) {
return function(object) { return function(object) {
return !!annotationFilter(object, 'deployment.kubernetes.io/revision'); return !!annotationFilter(object, 'deployment.kubernetes.io/revision');
......
...@@ -110,13 +110,17 @@ angular.module("openshiftCommonServices") ...@@ -110,13 +110,17 @@ angular.module("openshiftCommonServices")
}; };
var isServiceBindable = function(serviceInstance, serviceClasses) { var isServiceBindable = function(serviceInstance, serviceClasses) {
var serviceClass = getServiceClassForInstance(serviceInstance, serviceClasses);
// If being deleted, it is not bindable // If being deleted, it is not bindable
if (_.get(serviceInstance, 'metadata.deletionTimestamp')) { if (_.get(serviceInstance, 'metadata.deletionTimestamp')) {
return false; return false;
} }
// If provisioning failed, the service is not bindable
if ($filter('isServiceInstanceFailed')(serviceInstance, 'Failed')) {
return false;
}
var serviceClass = getServiceClassForInstance(serviceInstance, serviceClasses);
if (!serviceClass) { if (!serviceClass) {
return !!serviceInstance; return !!serviceInstance;
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment