Skip to content

Commit

Permalink
[DO NOT MERGE] [WIP] Adopt service catalog API changes
Browse files Browse the repository at this point in the history
  • Loading branch information
spadgett committed Sep 27, 2017
1 parent ac5246b commit 69a1fb4
Show file tree
Hide file tree
Showing 9 changed files with 112 additions and 62 deletions.
18 changes: 16 additions & 2 deletions app/scripts/controllers/overview.js
Expand Up @@ -1150,8 +1150,12 @@ function OverviewController($scope,
};

var sortServiceInstances = function() {
state.bindableServiceInstances = BindingService.filterBindableServiceInstances(state.serviceInstances, state.serviceClasses);
state.orderedServiceInstances = BindingService.sortServiceInstances(state.serviceInstances, state.serviceClasses);
state.bindableServiceInstances =
BindingService.filterBindableServiceInstances(state.serviceInstances,
state.serviceClasses,
state.servicePlans);
state.orderedServiceInstances =
BindingService.sortServiceInstances(state.serviceInstances, state.serviceClasses);
};

var watches = [];
Expand Down Expand Up @@ -1359,6 +1363,16 @@ function OverviewController($scope,
sortServiceInstances();
updateFilter();
});

// TODO: update to behave like ImageStreamResolver
// - we may not even need to list these... perhaps just fetch the ones we need when needed
// If we can't watch instances don't bother getting service classes either
DataService.list({
group: 'servicecatalog.k8s.io',
resource: 'serviceplans'
}, {}, function(servicePlans) {
state.servicePlans = servicePlans.by('metadata.name');
});
}

var samplePipelineTemplate = Constants.SAMPLE_PIPELINE_TEMPLATE;
Expand Down
50 changes: 20 additions & 30 deletions app/scripts/controllers/serviceInstance.js
Expand Up @@ -11,7 +11,6 @@ angular.module('openshiftConsole')
$scope.projectName = $routeParams.project;
$scope.serviceInstance = null;
$scope.serviceClass = null;
$scope.serviceClasses = null;

$scope.breadcrumbs = [
{
Expand All @@ -27,25 +26,11 @@ angular.module('openshiftConsole')
var watches = [];

var updateBreadcrumbs = function() {
if(!$scope.serviceInstance || !$scope.serviceClasses) {
return;
}

$scope.breadcrumbs.push({
title: $filter('serviceInstanceDisplayName')($scope.serviceInstance, $scope.serviceClasses)
title: $scope.displayName
});
};

var updateServiceClassMetadata = function() {
if(!$scope.serviceInstance || !$scope.serviceClasses) {
return;
}

var serviceClassName = _.get($scope.serviceInstance.spec, 'serviceClassName');
$scope.serviceClass = _.get($scope.serviceClasses, [serviceClassName]);
$scope.plan = _.find(_.get($scope.serviceClass, 'plans'), {name: $scope.serviceInstance.spec.planName });
};

var serviceResolved = function(service, action) {
$scope.loaded = true;
$scope.serviceInstance = service;
Expand All @@ -57,7 +42,16 @@ angular.module('openshiftConsole')
};
}

updateServiceClassMetadata();
var planName = service.spec.planName;
if (!$scope.plan || $scope.plan.metadata.name !== planName) {
$scope.plan = null;
DataService.get({
group: 'servicecatalog.k8s.io',
resource: 'serviceplans'
}, planName, {}).then(function(servicePlan) {
$scope.plan = servicePlan;
});
}
};

ProjectsService
Expand All @@ -72,15 +66,21 @@ angular.module('openshiftConsole')
resource: 'serviceinstances'
}, $routeParams.instance, context, { errorNotification: false })
.then(function(service) {

serviceResolved(service);
updateBreadcrumbs();

DataService.get({
group: 'servicecatalog.k8s.io',
resource: 'serviceclasses'
}, service.spec.serviceClassName, {}).then(function(serviceClass) {
$scope.serviceClass = serviceClass;
$scope.displayName = $filter('serviceClassDisplayName')(serviceClass) || service.metadata.name;
updateBreadcrumbs();
});

watches.push(DataService.watchObject({
group: 'servicecatalog.k8s.io',
resource: 'serviceinstances'
}, $routeParams.instance, context, serviceResolved));

}, function(error) {
$scope.loaded = true;
$scope.alerts["load"] = {
Expand All @@ -90,18 +90,8 @@ angular.module('openshiftConsole')
};
});

DataService.list({
group: 'servicecatalog.k8s.io',
resource: 'serviceclasses'
}, {}, function(serviceClasses) {
$scope.serviceClasses = serviceClasses.by('metadata.name');
updateServiceClassMetadata();
updateBreadcrumbs();
});

$scope.$on('$destroy', function(){
DataService.unwatchAll(watches);
});

}));
});
24 changes: 19 additions & 5 deletions app/scripts/directives/bindService.js
Expand Up @@ -50,10 +50,15 @@
};

var sortServiceInstances = function() {
// wait till both service instances and service classes are available so that the sort is stable and items dont jump around
// wait till both service instances and service classes are available so
// that the sort is stable and items dont jump around
if (ctrl.serviceClasses && ctrl.serviceInstances) {
ctrl.serviceInstances = BindingService.filterBindableServiceInstances(ctrl.serviceInstances, ctrl.serviceClasses);
ctrl.orderedServiceInstances = BindingService.sortServiceInstances(ctrl.serviceInstances, ctrl.serviceClasses);
ctrl.serviceInstances =
BindingService.filterBindableServiceInstances(ctrl.serviceInstances,
ctrl.serviceClasses,
ctrl.servicePlans);
ctrl.orderedServiceInstances =
BindingService.sortServiceInstances(ctrl.serviceInstances, ctrl.serviceClasses);

if (!ctrl.serviceToBind) {
preselectService();
Expand Down Expand Up @@ -157,8 +162,8 @@

ctrl.serviceClass = ctrl.serviceClasses[instance.spec.serviceClassName];
ctrl.serviceClassName = instance.spec.serviceClassName;
ctrl.plan = BindingService.getPlanForInstance(instance, ctrl.serviceClass);
ctrl.parameterSchema = _.get(ctrl.plan, 'serviceInstanceCredentialCreateParameterSchema');
ctrl.plan = ctrl.servicePlans[instance.spec.planName];
ctrl.parameterSchema = _.get(ctrl.plan, 'spec.serviceInstanceCredentialCreateParameterSchema');
bindParametersStep.hidden = !_.has(ctrl.parameterSchema, 'properties');
ctrl.nextTitle = bindParametersStep.hidden ? 'Bind' : 'Next >';
ctrl.hideBack = bindParametersStep.hidden;
Expand All @@ -185,6 +190,15 @@
sortServiceInstances();
});

// We'll need service plans for binding parameters.
// TODO: Only load plans for selected instance.
DataService.list({
group: 'servicecatalog.k8s.io',
resource: 'serviceplans'
}, {}).then(function(plans) {
ctrl.servicePlans = plans.by('metadata.name');
});

if (ctrl.target.kind === 'ServiceInstance') {
ctrl.bindType = "secret-only";
ctrl.appToBind = null;
Expand Down
13 changes: 11 additions & 2 deletions app/scripts/directives/overview/serviceInstanceRow.js
Expand Up @@ -32,6 +32,14 @@

var serviceInstanceDisplayName = $filter('serviceInstanceDisplayName');

var getServiceClass = function() {
return _.get(row, ['state','serviceClasses', row.apiObject.spec.serviceClassName]);
};

var getServicePlan = function() {
return _.get(row, ['state', 'servicePlans', row.apiObject.spec.planName]);
};

var updateInstanceStatus = function() {
if (_.get(row.apiObject, 'metadata.deletionTimestamp')) {
row.instanceStatus = 'deleted';
Expand All @@ -49,8 +57,9 @@

row.notifications = ListRowUtils.getNotifications(row.apiObject, row.state);
row.displayName = serviceInstanceDisplayName(row.apiObject, row.state.serviceClasses);
row.isBindable = BindingService.isServiceBindable(row.apiObject, row.state.serviceClasses);
row.serviceClass = _.get(row, ['state', 'serviceClasses', row.apiObject.spec.serviceClassName]);
row.serviceClass = getServiceClass();
row.servicePlan = getServicePlan();
row.isBindable = BindingService.isServiceBindable(row.apiObject, row.serviceClass, row.servicePlan);
};

row.$onChanges = function(changes) {
Expand Down
10 changes: 9 additions & 1 deletion app/scripts/directives/resourceServiceBindings.js
Expand Up @@ -22,6 +22,7 @@ angular.module('openshiftConsole').component('resourceServiceBindings', {
function ResourceServiceBindings($filter, DataService, BindingService, CatalogService) {
var ctrl = this;
var enableTechPreviewFeature = $filter('enableTechPreviewFeature');
var servicePlans;

ctrl.bindings = [];
ctrl.bindableServiceInstances = [];
Expand All @@ -44,7 +45,7 @@ function ResourceServiceBindings($filter, DataService, BindingService, CatalogSe
};

var sortServiceInstances = function() {
ctrl.bindableServiceInstances = BindingService.filterBindableServiceInstances(ctrl.serviceInstances, ctrl.serviceClasses);
ctrl.bindableServiceInstances = BindingService.filterBindableServiceInstances(ctrl.serviceInstances, ctrl.serviceClasses, servicePlans);
ctrl.orderedServiceInstances = BindingService.sortServiceInstances(ctrl.serviceInstances, ctrl.serviceClasses);
};

Expand Down Expand Up @@ -89,6 +90,13 @@ function ResourceServiceBindings($filter, DataService, BindingService, CatalogSe
ctrl.serviceClasses = serviceClasses.by('metadata.name');
sortServiceInstances();
});

DataService.list({
group: 'servicecatalog.k8s.io',
resource: 'serviceplans'
}, {}, function(planData) {
servicePlans = planData.by('metadata.name');
});
}
};

Expand Down
33 changes: 23 additions & 10 deletions app/scripts/filters/resources.js
Expand Up @@ -1316,17 +1316,30 @@ angular.module('openshiftConsole')
return !_.isEmpty(alternateBackends);
};
})
// .filter('serviceClassDisplayName', function() {
// return function(serviceClass) {
// TODO: this filter may also be useful.
// };
// })
.filter('serviceInstanceDisplayName', function() {
.filter('serviceClassDisplayName', function() {
return function(serviceClass) {
var serviceClassDisplayName = _.get(serviceClass, 'spec.externalMetadata.displayName');
if (serviceClassDisplayName) {
return serviceClassDisplayName;
}

var serviceClassExternalName = _.get(serviceClass, 'spec.externalName');
if (serviceClassExternalName) {
return serviceClassExternalName;
}

return _.get(serviceClass, 'metadata.name');
};
})
.filter('serviceInstanceDisplayName', function(serviceClassDisplayNameFilter) {
return function(instance, serviceClasses) {
var serviceClassName = instance.spec.serviceClassName;
var instanceName = instance.metadata.name;
var serviceClassDisplayName = _.get(serviceClasses, [serviceClassName, 'externalMetadata', 'displayName']);
return serviceClassDisplayName || serviceClassName || instanceName;
var serviceClassName = _.get(instance, 'spec.serviceClassName');
var serviceClass = _.get(serviceClasses, [serviceClassName]);
if (serviceClass) {
return serviceClassDisplayNameFilter(serviceClass);
}

return _.get(instance, 'metadata.name');
};
})
.filter('serviceInstanceStatus', function(isServiceInstanceReadyFilter) {
Expand Down
14 changes: 8 additions & 6 deletions app/views/browse/service-instance.html
Expand Up @@ -28,8 +28,10 @@ <h1 class="contains-actions">
</li>
</ul>
</div>
{{serviceInstance | serviceInstanceDisplayName:serviceClasses}}
<small class="list-row-longname">{{serviceInstance.metadata.name}}</small>
{{displayName}}
<small class="list-row-longname" ng-if="displayName !== serviceInstance.metadata.name">
{{serviceInstance.metadata.name}}
</small>
<div>
<small class="meta">created <span am-time-ago="serviceInstance.metadata.creationTimestamp"></span></small>
</div>
Expand All @@ -54,7 +56,7 @@ <h1 class="contains-actions">
<div class="resource-details">
<div class="row">
<div class="col-lg-6">
<p ng-bind-html="plan.description | linkify : '_blank'"></p>
<p ng-bind-html="plan.spec.description | linkify : '_blank'"></p>
<dl class="dl-horizontal left">
<dt>Status:</dt>
<dd>
Expand All @@ -65,10 +67,10 @@ <h1 class="contains-actions">
<dd ng-if-end>
{{serviceInstance | serviceInstanceConditionMessage}}
</dd>
<dt ng-if-start="serviceClass.description || serviceClass.externalMetadata.longDescription">Description:</dt>
<dt ng-if-start="serviceClass.spec.description || serviceClass.spec.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>
<p class="pre-wrap" ng-bind-html="serviceClass.spec.description | linkify : '_blank'"></p>
<p class="pre-wrap" ng-bind-html="serviceClass.spec.externalMetadata.longDescription | linkify : '_blank'"></p>
</dd>
</dl>
</div>
Expand Down
2 changes: 1 addition & 1 deletion app/views/directives/_service-binding.html
Expand Up @@ -9,7 +9,7 @@ <h3>
{{$ctrl.binding.metadata.name}}
<span ng-if="$ctrl.refApiObject.kind !== 'ServiceInstance'">
<small ng-if="$ctrl.serviceClass">
{{$ctrl.serviceClass.externalMetadata.displayName || $ctrl.serviceClass.metadata.name}}
{{$ctrl.serviceClass.spec.externalMetadata.displayName || $ctrl.serviceClass.metadata.name}}
</small>
<small>{{$ctrl.binding.spec.instanceRef.name}}</small>
</span>
Expand Down
10 changes: 5 additions & 5 deletions app/views/overview/_service-instance-row.html
Expand Up @@ -135,11 +135,11 @@ <h3>
</div>
<div>
<div class="row">
<div class="col-sm-12" ng-if="row.serviceClass.description">
<p class="pre-wrap" ng-bind-html="row.serviceClass.description | linky"></p>
<div ng-if="row.serviceClass.externalMetadata.documentationUrl || row.serviceClass.externalMetadata.supportUrl">
<a ng-if="row.serviceClass.externalMetadata.documentationUrl" ng-href="{{row.serviceClass.externalMetadata.documentationUrl}}" target="_blank" class="learn-more-link">View Documentation <i class="fa fa-external-link" aria-hidden="true"></i></a>
<a ng-if="row.serviceClass.externalMetadata.supportUrl" ng-href="{{row.serviceClass.externalMetadata.supportUrl}}" target="_blank" class="learn-more-link">Get Support <i class="fa fa-external-link" aria-hidden="true"></i></a>
<div class="col-sm-12" ng-if="row.serviceClass.spec.description">
<p class="pre-wrap" ng-bind-html="row.serviceClass.spec.description | linky"></p>
<div ng-if="row.serviceClass.spec.externalMetadata.documentationUrl || row.serviceClass.spec.externalMetadata.supportUrl">
<a ng-if="row.serviceClass.spec.externalMetadata.documentationUrl" ng-href="{{row.serviceClass.spec.externalMetadata.documentationUrl}}" target="_blank" class="learn-more-link">View Documentation <i class="fa fa-external-link" aria-hidden="true"></i></a>
<a ng-if="row.serviceClass.spec.externalMetadata.supportUrl" ng-href="{{row.serviceClass.spec.externalMetadata.supportUrl}}" target="_blank" class="learn-more-link">Get Support <i class="fa fa-external-link" aria-hidden="true"></i></a>
</div>
</div>
</div>
Expand Down

0 comments on commit 69a1fb4

Please sign in to comment.