@@ -5,13 +5,18 @@ angular.module('openshiftConsole')
55 $filter ,
66 $routeParams ,
77 APIService ,
8+ AuthorizationService ,
9+ Catalog ,
810 DataService ,
911 ProjectsService ,
12+ SecretsService ,
1013 ServiceInstancesService ) {
1114 $scope . alerts = { } ;
1215 $scope . projectName = $routeParams . project ;
1316 $scope . serviceInstance = null ;
1417 $scope . serviceClass = null ;
18+ $scope . serviceClasses = null ;
19+ $scope . editDialogShown = false ;
1520
1621 $scope . breadcrumbs = [
1722 {
@@ -24,9 +29,26 @@ angular.module('openshiftConsole')
2429 ServiceInstancesService . deprovision ( $scope . serviceInstance ) ;
2530 } ;
2631
32+ $scope . showEditDialog = function ( ) {
33+ $scope . editDialogShown = true ;
34+ } ;
35+
36+ $scope . showParameterValues = false ;
37+
38+ $scope . toggleShowParameterValues = function ( ) {
39+ $scope . showParameterValues = ! $scope . showParameterValues ;
40+ } ;
41+
42+ $scope . closeEditDialog = function ( ) {
43+ $scope . editDialogShown = false ;
44+ } ;
45+
2746 var watches = [ ] ;
47+ var secretWatchers = [ ] ;
48+ var serviceClassPromise ;
2849
2950 var serviceInstanceDisplayName = $filter ( 'serviceInstanceDisplayName' ) ;
51+ var serviceInstanceReady = $filter ( 'isServiceInstanceReady' ) ;
3052
3153 // API Versions
3254 $scope . serviceInstancesVersion = APIService . getPreferredVersion ( 'serviceinstances' ) ;
@@ -37,28 +59,71 @@ angular.module('openshiftConsole')
3759 } ) ;
3860 } ;
3961
40- var serviceClassPromise ;
62+ var updateParameterData = function ( ) {
63+ DataService . unwatchAll ( secretWatchers ) ;
64+ secretWatchers = [ ] ;
65+
66+ $scope . parameterData = { } ;
67+ _ . each ( _ . keys ( _ . get ( $scope . parameterSchema , 'properties' ) ) , function ( key ) {
68+ $scope . parameterData [ key ] = $scope . parameterSchema . properties [ key ] . default ;
69+ } ) ;
70+
71+ $scope . parameterData = angular . extend ( $scope . parameterData , _ . get ( $scope . serviceInstance , 'spec.parameters' , { } ) ) ;
72+
73+ if ( AuthorizationService . canI ( 'secrets' , 'get' , $scope . projectName ) ) {
74+ _ . each ( _ . get ( $scope . serviceInstance , 'spec.parametersFrom' ) , function ( parametersSource ) {
75+ secretWatchers . push ( DataService . watchObject ( "secrets" , _ . get ( parametersSource , 'secretKeyRef.name' ) , $scope . projectContext , function ( secret ) {
76+ try {
77+ _ . extend ( $scope . parameterData , JSON . parse ( SecretsService . decodeSecretData ( secret . data ) [ parametersSource . key ] ) ) ;
78+ } catch ( e ) {
79+ }
80+ } ) ) ;
81+ } ) ;
82+ }
83+ } ;
84+
85+ var updateParameterSchema = function ( ) {
86+ $scope . parameterFormDefinition = angular . copy ( _ . get ( $scope . plan , 'spec.externalMetadata.schemas.service_instance.update.openshift_form_definition' ) ) ;
87+
88+ $scope . parameterSchema = angular . copy ( _ . get ( $scope . plan , 'spec.instanceCreateParameterSchema' ) ) ;
89+ _ . set ( $scope . parameterSchema , 'readonly' , true ) ;
90+ _ . set ( $scope . parameterSchema , 'required' , [ ] ) ;
91+
92+ _ . each ( _ . get ( $scope . parameterSchema , 'properties' ) , function ( property ) {
93+ property . description = undefined ;
94+ property . title = property . title + ":" ;
95+ } ) ;
96+
97+ var planUpdatable = _ . get ( $scope . plan , 'spec.instanceUpdateParameterSchema' ) || ( _ . get ( $scope . serviceClass , 'spec.planUpdatable' ) && ( _ . size ( $scope . servicePlans ) > 1 ) ) ;
98+
99+ $scope . editAvailable = planUpdatable && serviceInstanceReady ( $scope . serviceInstance ) && ! _ . get ( $scope . serviceInstance , 'metadata.deletionTimestamp' ) ;
100+ } ;
101+
41102 var updateServiceClass = function ( ) {
42103 // If we've previously loaded the service class or a request is in flight, don't do anything.
43- if ( $scope . serviceClass || serviceClassPromise ) {
104+ if ( ! $scope . serviceInstance || $scope . serviceClass || serviceClassPromise ) {
44105 return ;
45106 }
46107
47- serviceClassPromise = ServiceInstancesService . fetchServiceClassForInstance ( $scope . serviceInstance ) . then ( function ( serviceClass ) {
108+ serviceClassPromise = ServiceInstancesService . fetchServiceClassForInstance ( $scope . serviceInstance ) . then ( function ( serviceClass ) {
48109 $scope . serviceClass = serviceClass ;
49- $scope . displayName = serviceInstanceDisplayName ( $scope . serviceInstance , serviceClass ) ;
110+ $scope . displayName = serviceInstanceDisplayName ( $scope . serviceInstance , $scope . serviceClass ) ;
111+
50112 updateBreadcrumbs ( ) ;
51113 serviceClassPromise = null ;
52- } ) ;
53- } ;
54114
55- var updatePlan = function ( ) {
56- if ( ServiceInstancesService . isCurrentPlan ( $scope . serviceInstance , $scope . plan ) ) {
57- return ;
58- }
115+ Catalog . getServicePlans ( ) . then ( function ( plans ) {
116+ plans = plans . by ( 'metadata.name' ) ;
117+
118+ var plansByServiceClassName = Catalog . groupPlansByServiceClassName ( plans ) ;
119+ $scope . servicePlans = plansByServiceClassName [ $scope . serviceClass . metadata . name ] ;
59120
60- ServiceInstancesService . fetchServicePlanForInstance ( $scope . serviceInstance ) . then ( function ( plan ) {
61- $scope . plan = plan ;
121+ var servicePlanName = _ . get ( $scope . serviceInstance , 'spec.clusterServicePlanRef.name' ) ;
122+ $scope . plan = plans [ servicePlanName ] ;
123+
124+ updateParameterSchema ( ) ;
125+ updateParameterData ( ) ;
126+ } ) ;
62127 } ) ;
63128 } ;
64129
@@ -74,7 +139,6 @@ angular.module('openshiftConsole')
74139 }
75140
76141 updateServiceClass ( ) ;
77- updatePlan ( ) ;
78142 } ;
79143
80144 ProjectsService
@@ -96,9 +160,17 @@ angular.module('openshiftConsole')
96160 details : $filter ( 'getErrorDetails' ) ( error )
97161 } ;
98162 } ) ;
163+ } , function ( error ) {
164+ $scope . loaded = true ;
165+ $scope . alerts [ "load" ] = {
166+ type : "error" ,
167+ message : "The service details could not be loaded." ,
168+ details : $filter ( 'getErrorDetails' ) ( error )
169+ } ;
170+ } ) ) ;
99171
100- $scope . $on ( '$destroy' , function ( ) {
101- DataService . unwatchAll ( watches ) ;
102- } ) ;
103- } ) ) ;
172+ $scope . $on ( '$destroy' , function ( ) {
173+ DataService . unwatchAll ( watches ) ;
174+ DataService . unwatchAll ( secretWatchers ) ;
175+ } ) ;
104176 } ) ;
0 commit comments