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