@@ -7,6 +7,7 @@ angular.module('openshiftConsole').controller('OverviewController', [
7
7
'AlertMessageService' ,
8
8
'APIService' ,
9
9
'AppsService' ,
10
+ 'BindingService' ,
10
11
'BuildsService' ,
11
12
'CatalogService' ,
12
13
'Constants' ,
@@ -23,9 +24,9 @@ angular.module('openshiftConsole').controller('OverviewController', [
23
24
'OwnerReferencesService' ,
24
25
'PodsService' ,
25
26
'ProjectsService' ,
26
- 'BindingService' ,
27
27
'ResourceAlertsService' ,
28
28
'RoutesService' ,
29
+ 'ServiceInstancesService' ,
29
30
OverviewController
30
31
] ) ;
31
32
@@ -35,6 +36,7 @@ function OverviewController($scope,
35
36
AlertMessageService ,
36
37
APIService ,
37
38
AppsService ,
39
+ BindingService ,
38
40
BuildsService ,
39
41
CatalogService ,
40
42
Constants ,
@@ -51,9 +53,9 @@ function OverviewController($scope,
51
53
OwnerReferencesService ,
52
54
PodsService ,
53
55
ProjectsService ,
54
- BindingService ,
55
56
ResourceAlertsService ,
56
- RoutesService ) {
57
+ RoutesService ,
58
+ ServiceInstancesService ) {
57
59
var overview = this ;
58
60
var limitWatches = $filter ( 'isIE' ) ( ) || $filter ( 'isEdge' ) ( ) ;
59
61
var DEFAULT_POLL_INTERVAL = 60 * 1000 ; // milliseconds
@@ -63,6 +65,7 @@ function OverviewController($scope,
63
65
64
66
// Filters used by this controller.
65
67
var annotation = $filter ( 'annotation' ) ;
68
+ var canI = $filter ( 'canI' ) ;
66
69
var getBuildConfigName = $filter ( 'buildConfigForBuild' ) ;
67
70
var deploymentIsInProgress = $filter ( 'deploymentIsInProgress' ) ;
68
71
var imageObjectRef = $filter ( 'imageObjectRef' ) ;
@@ -71,6 +74,12 @@ function OverviewController($scope,
71
74
var label = $filter ( 'label' ) ;
72
75
var getPodTemplate = $filter ( 'podTemplate' ) ;
73
76
77
+ // API versions
78
+ var serviceBindingsVersion = APIService . getPreferredVersion ( 'servicebindings' ) ;
79
+ var serviceClassesVersion = APIService . getPreferredVersion ( 'clusterserviceclasses' ) ;
80
+ var serviceInstancesVersion = APIService . getPreferredVersion ( 'serviceinstances' ) ;
81
+ var servicePlansVersion = APIService . getPreferredVersion ( 'clusterserviceplans' ) ;
82
+
74
83
var deploymentsByUID ;
75
84
var imageStreams ;
76
85
var labelSuggestions = { } ;
@@ -102,6 +111,8 @@ function OverviewController($scope,
102
111
routesByService : { } ,
103
112
servicesByObjectUID : { } ,
104
113
serviceInstances : { } ,
114
+ serviceClasses : { } ,
115
+ servicePlans : { } ,
105
116
bindingsByInstanceRef : { } ,
106
117
bindingsByApplicationUID : { } ,
107
118
applicationsByBinding : { } ,
@@ -314,7 +325,7 @@ function OverviewController($scope,
314
325
} ;
315
326
316
327
// Updated on viewBy changes to include the app label when appropriate.
317
- var filterFields = [ 'metadata.name' , 'spec.serviceClassName ' ] ;
328
+ var filterFields = [ 'metadata.name' , 'spec.externalServiceClassName ' ] ;
318
329
var filterByName = function ( items ) {
319
330
return KeywordService . filterForKeywords ( items , filterFields , state . filterKeywords ) ;
320
331
} ;
@@ -1150,8 +1161,12 @@ function OverviewController($scope,
1150
1161
} ;
1151
1162
1152
1163
var sortServiceInstances = function ( ) {
1153
- state . bindableServiceInstances = BindingService . filterBindableServiceInstances ( state . serviceInstances , state . serviceClasses ) ;
1154
- state . orderedServiceInstances = BindingService . sortServiceInstances ( state . serviceInstances , state . serviceClasses ) ;
1164
+ state . bindableServiceInstances =
1165
+ BindingService . filterBindableServiceInstances ( state . serviceInstances ,
1166
+ state . serviceClasses ,
1167
+ state . servicePlans ) ;
1168
+ state . orderedServiceInstances =
1169
+ BindingService . sortServiceInstances ( state . serviceInstances , state . serviceClasses ) ;
1155
1170
} ;
1156
1171
1157
1172
var watches = [ ] ;
@@ -1312,29 +1327,60 @@ function OverviewController($scope,
1312
1327
setQuotaNotifications ( ) ;
1313
1328
} , { poll : true , pollInterval : DEFAULT_POLL_INTERVAL } ) ) ;
1314
1329
1315
- var canI = $filter ( 'canI' ) ;
1330
+ var fetchServiceClass , fetchServicePlan ;
1331
+
1332
+ // Avoid requesting the same service class or service plan twice.
1333
+ var serviceClassPromises = { } ;
1334
+ var servicePlanPromises = { } ;
1335
+
1316
1336
// The canI check on watch should be temporary until we have a different solution for handling secret parameters
1317
- if ( CatalogService . SERVICE_CATALOG_ENABLED && canI ( { resource : 'serviceinstances' , group : 'servicecatalog.k8s.io' } , 'watch' ) ) {
1318
- watches . push ( DataService . watch ( {
1319
- group : 'servicecatalog.k8s.io' ,
1320
- resource : 'serviceinstances'
1321
- } , context , function ( serviceInstances ) {
1337
+ if ( CatalogService . SERVICE_CATALOG_ENABLED && canI ( serviceInstancesVersion , 'watch' ) ) {
1338
+
1339
+ // Get the service class for this instance.
1340
+ fetchServiceClass = function ( instance ) {
1341
+ var serviceClassName = ServiceInstancesService . getServiceClassNameForInstance ( instance ) ;
1342
+
1343
+ // Check if we already have the service class or if a request is already in flight.
1344
+ if ( ! _ . has ( state , [ 'serviceClasses' , serviceClassName ] ) && ! serviceClassPromises [ serviceClassName ] ) {
1345
+ serviceClassPromises [ serviceClassName ] = DataService . get ( serviceClassesVersion , serviceClassName , { } ) . then ( function ( serviceClass ) {
1346
+ state . serviceClasses [ serviceClassName ] = serviceClass ;
1347
+ } ) . finally ( function ( ) {
1348
+ delete servicePlanPromises [ serviceClassName ] ;
1349
+ } ) ;
1350
+ }
1351
+ } ;
1352
+
1353
+ // Get the service plan for this instance.
1354
+ fetchServicePlan = function ( instance ) {
1355
+ var servicePlanName = ServiceInstancesService . getServicePlanNameForInstance ( instance ) ;
1356
+
1357
+ // Check if we already have the service plan or if a request is already in flight.
1358
+ if ( ! _ . has ( state , [ 'servicePlans' , servicePlanName ] ) && ! servicePlanPromises [ servicePlanName ] ) {
1359
+ servicePlanPromises [ servicePlanName ] = DataService . get ( servicePlansVersion , servicePlanName , { } ) . then ( function ( servicePlan ) {
1360
+ state . servicePlans [ servicePlanName ] = servicePlan ;
1361
+ } ) . finally ( function ( ) {
1362
+ delete servicePlanPromises [ servicePlanName ] ;
1363
+ } ) ;
1364
+ }
1365
+ } ;
1366
+
1367
+ watches . push ( DataService . watch ( serviceInstancesVersion , context , function ( serviceInstances ) {
1322
1368
state . serviceInstances = serviceInstances . by ( 'metadata.name' ) ;
1323
1369
_ . each ( state . serviceInstances , function ( instance ) {
1324
1370
var notifications = ResourceAlertsService . getServiceInstanceAlerts ( instance ) ;
1325
1371
setNotifications ( instance , notifications ) ;
1372
+
1373
+ fetchServiceClass ( instance ) ;
1374
+ fetchServicePlan ( instance ) ;
1326
1375
} ) ;
1327
1376
sortServiceInstances ( ) ;
1328
1377
updateLabelSuggestions ( state . serviceInstances ) ;
1329
1378
updateFilter ( ) ;
1330
1379
} , { poll : limitWatches , pollInterval : DEFAULT_POLL_INTERVAL } ) ) ;
1331
1380
}
1332
1381
1333
- if ( CatalogService . SERVICE_CATALOG_ENABLED && canI ( { resource : 'serviceinstancecredentials' , group : 'servicecatalog.k8s.io' } , 'watch' ) ) {
1334
- watches . push ( DataService . watch ( {
1335
- group : 'servicecatalog.k8s.io' ,
1336
- resource : 'serviceinstancecredentials'
1337
- } , context , function ( bindings ) {
1382
+ if ( CatalogService . SERVICE_CATALOG_ENABLED && canI ( serviceBindingsVersion , 'watch' ) ) {
1383
+ watches . push ( DataService . watch ( serviceBindingsVersion , context , function ( bindings ) {
1338
1384
state . bindings = bindings . by ( 'metadata.name' ) ;
1339
1385
overview . bindingsByInstanceRef = _ . groupBy ( state . bindings , 'spec.instanceRef.name' ) ;
1340
1386
groupBindings ( ) ;
@@ -1347,20 +1393,6 @@ function OverviewController($scope,
1347
1393
state . limitRanges = response . by ( "metadata.name" ) ;
1348
1394
} ) ;
1349
1395
1350
- if ( CatalogService . SERVICE_CATALOG_ENABLED && canI ( { resource : 'serviceinstances' , group : 'servicecatalog.k8s.io' } , 'watch' ) ) {
1351
- // TODO: update to behave like ImageStreamResolver
1352
- // - we may not even need to list these... perhaps just fetch the ones we need when needed
1353
- // If we can't watch instances don't bother getting service classes either
1354
- DataService . list ( {
1355
- group : 'servicecatalog.k8s.io' ,
1356
- resource : 'serviceclasses'
1357
- } , { } , function ( serviceClasses ) {
1358
- state . serviceClasses = serviceClasses . by ( 'metadata.name' ) ;
1359
- sortServiceInstances ( ) ;
1360
- updateFilter ( ) ;
1361
- } ) ;
1362
- }
1363
-
1364
1396
var samplePipelineTemplate = Constants . SAMPLE_PIPELINE_TEMPLATE ;
1365
1397
if ( samplePipelineTemplate ) {
1366
1398
DataService . get ( "templates" , samplePipelineTemplate . name , {
0 commit comments