@@ -6,13 +6,19 @@ angular.module('openshiftConsole')
6
6
$routeParams ,
7
7
APIService ,
8
8
BindingService ,
9
+ AuthorizationService ,
10
+ Catalog ,
9
11
DataService ,
12
+ Logger ,
10
13
ProjectsService ,
14
+ SecretsService ,
11
15
ServiceInstancesService ) {
12
16
$scope . alerts = { } ;
13
17
$scope . projectName = $routeParams . project ;
14
18
$scope . serviceInstance = null ;
15
19
$scope . serviceClass = null ;
20
+ $scope . serviceClasses = null ;
21
+ $scope . editDialogShown = false ;
16
22
17
23
$scope . breadcrumbs = [
18
24
{
@@ -28,9 +34,26 @@ angular.module('openshiftConsole')
28
34
ServiceInstancesService . deprovision ( $scope . serviceInstance , $scope . bindings ) ;
29
35
} ;
30
36
37
+ $scope . showEditDialog = function ( ) {
38
+ $scope . editDialogShown = true ;
39
+ } ;
40
+
41
+ $scope . showParameterValues = false ;
42
+
43
+ $scope . toggleShowParameterValues = function ( ) {
44
+ $scope . showParameterValues = ! $scope . showParameterValues ;
45
+ } ;
46
+
47
+ $scope . closeEditDialog = function ( ) {
48
+ $scope . editDialogShown = false ;
49
+ } ;
50
+
31
51
var watches = [ ] ;
52
+ var secretWatchers = [ ] ;
53
+ var serviceClassPromise ;
32
54
33
55
var serviceInstanceDisplayName = $filter ( 'serviceInstanceDisplayName' ) ;
56
+ var serviceInstanceReady = $filter ( 'isServiceInstanceReady' ) ;
34
57
35
58
// API Versions
36
59
var serviceBindingsVersion = APIService . getPreferredVersion ( 'servicebindings' ) ;
@@ -42,28 +65,76 @@ angular.module('openshiftConsole')
42
65
} ) ;
43
66
} ;
44
67
45
- var serviceClassPromise ;
68
+ var updateParameterData = function ( ) {
69
+ if ( ! $scope . serviceInstance || ! $scope . parameterSchema ) {
70
+ return ;
71
+ }
72
+
73
+ DataService . unwatchAll ( secretWatchers ) ;
74
+ secretWatchers = [ ] ;
75
+
76
+ $scope . parameterData = { } ;
77
+ _ . each ( _ . keys ( _ . get ( $scope . parameterSchema , 'properties' ) ) , function ( key ) {
78
+ $scope . parameterData [ key ] = $scope . parameterSchema . properties [ key ] . default ;
79
+ } ) ;
80
+
81
+ $scope . parameterData = angular . extend ( $scope . parameterData , _ . get ( $scope . serviceInstance , 'spec.parameters' , { } ) ) ;
82
+
83
+ if ( AuthorizationService . canI ( 'secrets' , 'get' , $scope . projectName ) ) {
84
+ _ . each ( _ . get ( $scope . serviceInstance , 'spec.parametersFrom' ) , function ( parametersSource ) {
85
+ secretWatchers . push ( DataService . watchObject ( "secrets" , _ . get ( parametersSource , 'secretKeyRef.name' ) , $scope . projectContext , function ( secret ) {
86
+ try {
87
+ _ . extend ( $scope . parameterData , JSON . parse ( SecretsService . decodeSecretData ( secret . data ) [ parametersSource . secretKeyRef . key ] ) ) ;
88
+ } catch ( e ) {
89
+ Logger . warn ( 'Unable to load parameters from secret ' + _ . get ( parametersSource , 'secretKeyRef.name' ) , e ) ;
90
+ }
91
+ } ) ) ;
92
+ } ) ;
93
+ }
94
+ } ;
95
+
96
+ var updateEditable = function ( ) {
97
+ if ( ! $scope . plan || ! $scope . serviceClass || ! $scope . serviceInstance ) {
98
+ return ;
99
+ }
100
+
101
+ var updateSchema = _ . get ( $scope . plan , 'spec.instanceUpdateParameterSchema' ) ;
102
+ var planUpdatable = ( _ . size ( _ . get ( updateSchema , 'properties' ) ) > 0 ) || ( _ . get ( $scope . serviceClass , 'spec.planUpdatable' ) && ( _ . size ( $scope . servicePlans ) > 1 ) ) ;
103
+
104
+ $scope . editAvailable = planUpdatable && serviceInstanceReady ( $scope . serviceInstance ) && ! _ . get ( $scope . serviceInstance , 'metadata.deletionTimestamp' ) ;
105
+ } ;
106
+
107
+ var updateParameterSchema = function ( ) {
108
+ $scope . parameterFormDefinition = angular . copy ( _ . get ( $scope . plan , 'spec.externalMetadata.schemas.service_instance.update.openshift_form_definition' ) ) ;
109
+ $scope . parameterSchema = _ . get ( $scope . plan , 'spec.instanceCreateParameterSchema' ) ;
110
+ } ;
111
+
46
112
var updateServiceClass = function ( ) {
47
113
// If we've previously loaded the service class or a request is in flight, don't do anything.
48
- if ( $scope . serviceClass || serviceClassPromise ) {
114
+ if ( ! $scope . serviceInstance || $scope . serviceClass || serviceClassPromise ) {
49
115
return ;
50
116
}
51
117
52
- serviceClassPromise = ServiceInstancesService . fetchServiceClassForInstance ( $scope . serviceInstance ) . then ( function ( serviceClass ) {
118
+ serviceClassPromise = ServiceInstancesService . fetchServiceClassForInstance ( $scope . serviceInstance ) . then ( function ( serviceClass ) {
53
119
$scope . serviceClass = serviceClass ;
54
- $scope . displayName = serviceInstanceDisplayName ( $scope . serviceInstance , serviceClass ) ;
120
+ $scope . displayName = serviceInstanceDisplayName ( $scope . serviceInstance , $scope . serviceClass ) ;
121
+
55
122
updateBreadcrumbs ( ) ;
56
123
serviceClassPromise = null ;
57
- } ) ;
58
- } ;
59
124
60
- var updatePlan = function ( ) {
61
- if ( ServiceInstancesService . isCurrentPlan ( $scope . serviceInstance , $scope . plan ) ) {
62
- return ;
63
- }
125
+ Catalog . getServicePlans ( ) . then ( function ( plans ) {
126
+ plans = plans . by ( 'metadata.name' ) ;
127
+
128
+ var plansByServiceClassName = Catalog . groupPlansByServiceClassName ( plans ) ;
129
+ $scope . servicePlans = plansByServiceClassName [ $scope . serviceClass . metadata . name ] ;
64
130
65
- ServiceInstancesService . fetchServicePlanForInstance ( $scope . serviceInstance ) . then ( function ( plan ) {
66
- $scope . plan = plan ;
131
+ var servicePlanName = _ . get ( $scope . serviceInstance , 'spec.clusterServicePlanRef.name' ) ;
132
+ $scope . plan = plans [ servicePlanName ] ;
133
+
134
+ updateParameterSchema ( ) ;
135
+ updateParameterData ( ) ;
136
+ updateEditable ( ) ;
137
+ } ) ;
67
138
} ) ;
68
139
} ;
69
140
@@ -79,7 +150,8 @@ angular.module('openshiftConsole')
79
150
}
80
151
81
152
updateServiceClass ( ) ;
82
- updatePlan ( ) ;
153
+ updateParameterData ( ) ;
154
+ updateEditable ( ) ;
83
155
} ;
84
156
85
157
ProjectsService
@@ -106,9 +178,17 @@ angular.module('openshiftConsole')
106
178
details : $filter ( 'getErrorDetails' ) ( error )
107
179
} ;
108
180
} ) ;
181
+ } , function ( error ) {
182
+ $scope . loaded = true ;
183
+ $scope . alerts [ "load" ] = {
184
+ type : "error" ,
185
+ message : "The service details could not be loaded." ,
186
+ details : $filter ( 'getErrorDetails' ) ( error )
187
+ } ;
188
+ } ) ) ;
109
189
110
- $scope . $on ( '$destroy' , function ( ) {
111
- DataService . unwatchAll ( watches ) ;
112
- } ) ;
113
- } ) ) ;
190
+ $scope . $on ( '$destroy' , function ( ) {
191
+ DataService . unwatchAll ( watches ) ;
192
+ DataService . unwatchAll ( secretWatchers ) ;
193
+ } ) ;
114
194
} ) ;
0 commit comments