Skip to content
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

Updates to service instance page, show failed bindings #2141

Merged
merged 1 commit into from Sep 22, 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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
1 change: 1 addition & 0 deletions app/scripts/directives/overview/serviceBindings.js
Expand Up @@ -3,6 +3,7 @@
angular.module('openshiftConsole').component('overviewServiceBindings', {
controllerAs: '$ctrl',
bindings: {
sectionTitle: '@',
namespace: '<',
bindings: '<',
bindableServiceInstances: '<',
Expand Down
16 changes: 6 additions & 10 deletions app/scripts/directives/overview/serviceInstanceRow.js
Expand Up @@ -25,6 +25,9 @@
ListRowUtils,
ServiceInstancesService) {
var row = this;
var isBindingFailed = $filter('isBindingFailed');
var isBindingReady = $filter('isBindingReady');

_.extend(row, ListRowUtils.ui);

var serviceInstanceDisplayName = $filter('serviceInstanceDisplayName');
Expand All @@ -35,20 +38,14 @@
};

var updateInstanceStatus = function() {
var conditions = _.get(row.apiObject, 'status.conditions');
var readyCondition = _.find(conditions, {type: 'Ready'});

row.instanceError = _.find(conditions, {type: 'Failed', status: 'True'});

if (_.get(row.apiObject, 'metadata.deletionTimestamp')) {
row.instanceStatus = 'deleted';
} else if (row.instanceError) {
} else if (isBindingFailed(row.apiObject)) {
row.instanceStatus = 'failed';
} else if (readyCondition && readyCondition.status === 'True') {
} else if (isBindingReady(row.apiObject)) {
row.instanceStatus = 'ready';
} else {
row.instanceStatus = 'pending';
row.pendingMessage = _.get(readyCondition, 'message') || 'The instance is being provisioned asynchronously.';
}
};

Expand All @@ -57,8 +54,7 @@

row.notifications = ListRowUtils.getNotifications(row.apiObject, row.state);
row.displayName = serviceInstanceDisplayName(row.apiObject, row.state.serviceClasses);
row.isBindable = !row.instanceError &&
BindingService.isServiceBindable(row.apiObject, row.state.serviceClasses);
row.isBindable = BindingService.isServiceBindable(row.apiObject, row.state.serviceClasses);
row.description = getDescription();
};

Expand Down
3 changes: 2 additions & 1 deletion app/scripts/directives/serviceBinding.js
Expand Up @@ -11,7 +11,8 @@
binding: '<',
refApiObject: '<?',
serviceClasses: '<',
serviceInstances: '<'
serviceInstances: '<',
isOverview: '<?'
},
templateUrl: 'views/directives/_service-binding.html'
});
Expand Down
14 changes: 14 additions & 0 deletions app/styles/_components.less
Expand Up @@ -173,6 +173,20 @@ code.command {
}
}
}

.component-label {
font-size: @component-label;
font-weight: 500;
padding: 0 0 4px 0;
.text-muted();
text-transform: uppercase;
.sublabel {
font-size: (@component-label - 1);
margin-left: 2px;
text-transform: none;
}
}

.resource-details & {
h3 {
border-bottom: 0;
Expand Down
3 changes: 1 addition & 2 deletions app/styles/_overview.less
Expand Up @@ -190,8 +190,7 @@
@media (min-width: @screen-lg-min) {
// aligns 2nd columns with metrics
&.overview-builds-msg,
&.overview-routes,
&.overview-bindings {
&.overview-routes {
padding-left: 0;
}
}
Expand Down
15 changes: 9 additions & 6 deletions app/views/browse/service-instance.html
Expand Up @@ -29,7 +29,10 @@ <h1 class="contains-actions">
</ul>
</div>
{{serviceInstance | serviceInstanceDisplayName:serviceClasses}}
<small class="meta">created <span am-time-ago="serviceInstance.metadata.creationTimestamp"></span></small>
<small class="list-row-longname">{{serviceInstance.metadata.name}}</small>
<div>
<small class="meta">created <span am-time-ago="serviceInstance.metadata.creationTimestamp"></span></small>
</div>
</h1>
<labels labels="serviceInstance.metadata.labels" clickable="true" kind="service-instances" project-name="{{serviceInstance.metadata.namespace}}" limit="3"></labels>
</div>
Expand All @@ -53,11 +56,6 @@ <h1 class="contains-actions">
<div class="col-lg-6">
<p ng-bind-html="plan.description | linkify : '_blank'"></p>
<dl class="dl-horizontal left">
<dt ng-if-start="serviceClass.description || serviceClass.externalMetadata.longDescription">Description:</dt>
<dd ng-if-end>
<p class="pre-wrap" ng-bind-html="serviceClass.description | linkify : '_blank'"></p>
<p class="pre-wrap" ng-bind-html="serviceClass.externalMetadata.longDescription | linkify : '_blank'"></p>
</dd>
<dt>Status:</dt>
<dd>
<status-icon status="serviceInstance | serviceInstanceStatus" disable-animation></status-icon>
Expand All @@ -67,6 +65,11 @@ <h1 class="contains-actions">
<dd ng-if-end>
{{serviceInstance | serviceInstanceConditionMessage}}
</dd>
<dt ng-if-start="serviceClass.description || serviceClass.externalMetadata.longDescription">Description:</dt>
<dd ng-if-end>
<p class="pre-wrap" ng-bind-html="serviceClass.description | linkify : '_blank'"></p>
<p class="pre-wrap" ng-bind-html="serviceClass.externalMetadata.longDescription | linkify : '_blank'"></p>
</dd>
</dl>
</div>
<div class="col-lg-6">
Expand Down
34 changes: 25 additions & 9 deletions app/views/directives/_service-binding.html
@@ -1,12 +1,16 @@
<div class="service-binding">
<div class="row">
<div class="col-sm-5 col-md-6">
<h3 ng-if="$ctrl.serviceClass">
<div ng-class="{'col-sm-5 col-md-6': $ctrl.isOverview,
'col-sm-8 col-md-6 col-lg-8': !$ctrl.isOverview}">
<h3>
<div class="component-label">
Secret
</div>
<span ng-if="$ctrl.serviceClass">
<span ng-if="$ctrl.refApiObject.kind !== 'Instance'">
<span ng-if="$ctrl.refApiObject.kind !== 'ServiceInstance'">
{{$ctrl.serviceClass.externalMetadata.displayName || $ctrl.serviceClass.metadata.name}}
</span>
<span ng-if="$ctrl.refApiObject.kind === 'Instance'">
<span ng-if="$ctrl.refApiObject.kind === 'ServiceInstance'">
{{$ctrl.binding.spec.secretName}}
</span>
</span>
Expand All @@ -17,25 +21,37 @@ <h3 ng-if="$ctrl.serviceClass">
<small>created <span am-time-ago="$ctrl.binding.metadata.creationTimestamp"></span></small>
</h3>
</div>
<div class="col-sm-7 col-md-6" ng-if="$ctrl.binding.metadata.deletionTimestamp">
<div ng-if="$ctrl.binding.metadata.deletionTimestamp"
ng-class="{'col-sm-7 col-md-6': $ctrl.isOverview,
'col-sm-4 col-md-3': !$ctrl.isOverview}">
<span class="pficon pficon-warning-triangle-o" aria-hidden="true"></span>
Marked for Deletion
</div>
<div class="col-sm-7 col-md-6" ng-if="!$ctrl.binding.metadata.deletionTimestamp && !($ctrl.binding | isBindingReady)">
<div ng-if="!$ctrl.binding.metadata.deletionTimestamp && ($ctrl.binding | isBindingFailed)"
ng-class="{'col-sm-7 col-md-6': $ctrl.isOverview,
'col-sm-4 col-md-6 col-lg-4': !$ctrl.isOverview}">
<span dynamic-content="{{$ctrl.binding | bindingFailedMessage}}" data-toggle="tooltip" data-trigger="hover">
<span class="pficon pficon-error-circle-o" aria-hidden="true"></span>
<span>Error</span>
</span>
</div>
<div ng-if="!$ctrl.binding.metadata.deletionTimestamp && !($ctrl.binding | isBindingFailed) && !($ctrl.binding | isBindingReady)"
ng-class="{'col-sm-7 col-md-6': $ctrl.isOverview,
'col-sm-4 col-md-6 col-lg-4': !$ctrl.isOverview}">
<status-icon status="'Pending'"></status-icon>Pending
</div>
</div>
<div class="service-binding-actions" ng-if="!ctrl.binding.metadata.deletionTimestamp">
<delete-link
ng-if="({resource: 'serviceinstancecredentials', group: 'servicecatalog.k8s.io'} | canI : 'delete')"
label="Delete Binding"
kind="binding"
kind="serviceinstancecredential"
group="servicecatalog.k8s.io"
resource-name="{{$ctrl.binding.metadata.name}}"
project-name="{{$ctrl.binding.metadata.namespace}}"
stay-on-current-page="true">
</delete-link>
<a ng-if="('secrets' | canI : 'get') && ($ctrl.binding | isBindingReady)" ng-href="{{$ctrl.binding.spec.secretName | navigateResourceURL : 'Secret' : $ctrl.namespace}}">
<a ng-if="('secrets' | canI : 'get') && !($ctrl.binding | isBindingFailed) && !(binding | isBindingReady)"
ng-href="{{$ctrl.binding.spec.secretName | navigateResourceURL : 'Secret' : $ctrl.namespace}}">
View Secret
</a>
</div>
Expand Down
2 changes: 2 additions & 0 deletions app/views/overview/_list-row-expanded.html
Expand Up @@ -178,6 +178,7 @@ <h4 class="h5">Average Usage <small>Last 15 Minutes</small></h4>
<uib-tab ng-if="row.showBindings && (row.bindings | size)" active="row.selectedTab.bindings">
<uib-tab-heading>Bindings</uib-tab-heading>
<overview-service-bindings
section-title="Service Bindings"
namespace="row.apiObject.metadata.namespace"
bindings="row.bindings"
bindable-service-instances="row.state.bindableServiceInstances"
Expand Down Expand Up @@ -213,6 +214,7 @@ <h4 class="h5">Average Usage <small>Last 15 Minutes</small></h4>
</overview-builds>

<overview-service-bindings
section-title="Service Bindings"
ng-if="row.showBindings && (row.bindings | size)"
namespace="row.apiObject.metadata.namespace"
bindings="row.bindings"
Expand Down
3 changes: 2 additions & 1 deletion app/views/overview/_service-bindings.html
@@ -1,7 +1,8 @@
<div class="expanded-section">
<div class="section-title hidden-xs">Service Bindings</div>
<div class="section-title hidden-xs">{{$ctrl.sectionTitle}}</div>
<service-binding
ng-repeat="binding in $ctrl.bindings track by (binding | uid)"
is-overview="true"
namespace="$ctrl.namespace"
binding="binding"
service-classes="$ctrl.serviceClasses"
Expand Down
64 changes: 11 additions & 53 deletions app/views/overview/_service-instance-row.html
Expand Up @@ -16,7 +16,7 @@ <h3>
<div class="list-pf-details" ng-if="!row.expanded" ng-switch="row.instanceStatus">

<span ng-switch-when="failed"
dynamic-content="{{row.instanceError.message}}"
dynamic-content="{{row.apiObject | serviceInstanceFailedMessage}}"
data-toggle="tooltip"
data-trigger="hover">
<span class="pficon pficon-error-circle-o" aria-hidden="true"></span>
Expand Down Expand Up @@ -111,7 +111,7 @@ <h3>
<div class="alert word-break alert-danger">
<span class="pficon pficon-error-circle-o" aria-hidden="true"></span>
<span class="sr-only">error</span>
<span class="strong">{{row.instanceError.message}}</span>
<span class="strong">{{row.apiObject | serviceInstanceFailedMessage}}</span>
</div>
</div>
</div>
Expand All @@ -132,57 +132,15 @@ <h3>
<p class="pre-wrap" ng-bind-html="row.description | linky"></p>
</div>
</div>
<div class="section-title" ng-if="row.isBindable || row.bindings">
Bindings
</div>
<div class="row overview-bindings" ng-repeat="(name, binding) in row.bindings">
<div class="col-sm-5 col-md-6">
<div ng-if="!(row.state.applicationsByBinding[binding.metadata.name] | size)">
<h3>
<div class="component-label">
Secret
</div>
<a ng-if="('secrets' | canI : 'get') && (binding | isBindingReady)"
ng-href="{{binding.spec.secretName | navigateResourceURL : 'Secret' : row.apiObject.metadata.namespace}}">
{{binding.spec.secretName}}
</a>
<span ng-if="!('secrets' | canI : 'get') || !(binding | isBindingReady)">
{{binding.spec.secretName}}
</span>
</h3>
</div>
<div ng-repeat="target in row.state.applicationsByBinding[binding.metadata.name] track by (target | uid)">
<h3>
<div class="component-label">
{{target.kind | humanizeKind : true}}
</div>
<a ng-href="{{target | navigateResourceURL}}">{{target.metadata.name}}</a>
</h3>
</div>
</div>
<div class="col-sm-7 col-md-6 overview-bindings">
<span ng-if="binding.metadata.deletionTimestamp">
<span class="pficon pficon-warning-triangle-o" aria-hidden="true"></span>
Marked for Deletion
</span>
<span ng-if="!(binding | isBindingReady) && !binding.metadata.deletionTimestamp">
<status-icon status="'Pending'"></status-icon> Pending
</span>
</div>
</div>
<div class="row" ng-if="row.isBindable && ({resource: 'serviceinstancecredentials', group: 'servicecatalog.k8s.io'} | canI : 'create')">
<div class="col-sm-12">
<a href="" ng-click="row.showOverlayPanel('bindService', {target: row.apiObject})">
<span class="pficon pficon-add-circle-o" aria-hidden="true"></span>
Create Binding
</a>
</div>
</div>
<div class="row" ng-if="!row.bindings.length && (!row.isBindable || !({resource: 'serviceinstancecredentials', group: 'servicecatalog.k8s.io'} | canI : 'create'))">
<div class="col-sm-12">
<em>No bindings</em>
</div>
</div>
<overview-service-bindings
ng-if="row.isBindable || row.bindings"
section-title="Bindings"
namespace="row.apiObject.metadata.namespace"
bindings="row.bindings"
bindable-service-instances="row.state.bindableServiceInstances"
service-classes="row.state.serviceClasses"
create-binding="row.showOverlayPanel('bindService', {target: row.apiObject})">
</overview-service-bindings>
</div>
</div>
</div>
Expand Down
3 changes: 2 additions & 1 deletion app/views/service-instances.html
Expand Up @@ -30,6 +30,7 @@ <h1>
<thead>
<tr>
<th>Name</th>
<th>Instance Name</th>
<th>Status</th>
<th>Created</th>
<th>Bindings</th>
Expand All @@ -43,7 +44,7 @@ <h1>
<tbody ng-if="(serviceInstances | size) > 0">
<tr ng-repeat="serviceInstance in serviceInstances track by (serviceInstance | uid)">
<td data-title="Name"><a ng-href="{{serviceInstance | navigateResourceURL}}">{{serviceInstance | serviceInstanceDisplayName:serviceClasses}}</a></td>

<td data-title="Instance Name"><span>{{serviceInstance.metadata.name}}</span></td>
<td data-title="Status">
<div row class="status">
<status-icon status="serviceInstance | serviceInstanceStatus" disable-animation></status-icon>
Expand Down
2 changes: 1 addition & 1 deletion bower.json
Expand Up @@ -46,7 +46,7 @@
"angular-moment": "1.0.0",
"angular-utf8-base64": "0.0.5",
"file-saver": "1.3.3",
"origin-web-common": "0.0.58",
"origin-web-common": "0.0.59",
"origin-web-catalog": "0.0.49"
},
"devDependencies": {
Expand Down
20 changes: 8 additions & 12 deletions dist/scripts/scripts.js
Expand Up @@ -13181,7 +13181,8 @@ namespace: "<",
binding: "<",
refApiObject: "<?",
serviceClasses: "<",
serviceInstances: "<"
serviceInstances: "<",
isOverview: "<?"
},
templateUrl: "views/directives/_service-binding.html"
});
Expand Down Expand Up @@ -13528,22 +13529,16 @@ templateUrl: "views/overview/_list-row.html"
}(), function() {
angular.module("openshiftConsole").component("serviceInstanceRow", {
controller: [ "$filter", "AuthorizationService", "BindingService", "ListRowUtils", "ServiceInstancesService", function(e, t, n, a, r) {
var o = this;
var o = this, i = e("isBindingFailed"), s = e("isBindingReady");
_.extend(o, a.ui);
var i = e("serviceInstanceDisplayName"), s = function() {
var c = e("serviceInstanceDisplayName"), l = function() {
var e = o.apiObject.spec.serviceClassName;
return _.get(o, [ "state", "serviceClasses", e, "description" ]);
}, c = function() {
var e = _.get(o.apiObject, "status.conditions"), t = _.find(e, {
type: "Ready"
});
o.instanceError = _.find(e, {
type: "Failed",
status: "True"
}), _.get(o.apiObject, "metadata.deletionTimestamp") ? o.instanceStatus = "deleted" : o.instanceError ? o.instanceStatus = "failed" : t && "True" === t.status ? o.instanceStatus = "ready" : (o.instanceStatus = "pending", o.pendingMessage = _.get(t, "message") || "The instance is being provisioned asynchronously.");
}, u = function() {
_.get(o.apiObject, "metadata.deletionTimestamp") ? o.instanceStatus = "deleted" : i(o.apiObject) ? o.instanceStatus = "failed" : s(o.apiObject) ? o.instanceStatus = "ready" : o.instanceStatus = "pending";
};
o.$doCheck = function() {
c(), o.notifications = a.getNotifications(o.apiObject, o.state), o.displayName = i(o.apiObject, o.state.serviceClasses), o.isBindable = !o.instanceError && n.isServiceBindable(o.apiObject, o.state.serviceClasses), o.description = s();
u(), o.notifications = a.getNotifications(o.apiObject, o.state), o.displayName = c(o.apiObject, o.state.serviceClasses), o.isBindable = n.isServiceBindable(o.apiObject, o.state.serviceClasses), o.description = l();
}, o.$onChanges = function(e) {
e.bindings && (o.deleteableBindings = _.reject(o.bindings, "metadata.deletionTimestamp"));
}, o.getSecretForBinding = function(e) {
Expand Down Expand Up @@ -13592,6 +13587,7 @@ templateUrl: "views/overview/_pipelines.html"
}), angular.module("openshiftConsole").component("overviewServiceBindings", {
controllerAs: "$ctrl",
bindings: {
sectionTitle: "@",
namespace: "<",
bindings: "<",
bindableServiceInstances: "<",
Expand Down