@@ -71,7 +71,7 @@ def attach(self, *args, **kwargs):
7171
7272 @transaction .atomic
7373 def delete (self , * args , ** kwargs ):
74- if self .binding and self . binding == "Ready" :
74+ if self .binding == "Ready" :
7575 raise DryccException ("the plan is still binding" )
7676 # Deatch ServiceInstance, updates k8s
7777 self .detach (* args , ** kwargs )
@@ -84,18 +84,18 @@ def detach(self, *args, **kwargs):
8484 self ._scheduler .servicecatalog .get_instance (self .app .id , self .name )
8585 self ._scheduler .servicecatalog .delete_instance (self .app .id , self .name )
8686 except KubeException as e :
87- raise ServiceUnavailable ("Could not delete volume {} for application {}" .format (name , self .app_id )) from e # noqa
87+ raise ServiceUnavailable ("Could not delete resource {} for application {}" .format (self . name , self .app_id )) from e # noqa
8888
8989 def log (self , message , level = logging .INFO ):
9090 """Logs a message in the context of this service.
9191
9292 This prefixes log messages with an application "tag" that the customized
9393 drycc-logspout will be on the lookout for. When it's seen, the message-- usually
9494 an application event of some sort like releasing or scaling, will be considered
95- as "belonging" to the application instead of the controller and will be handled
95+ as "belonging" to the application instead of the contoller and will be handled
9696 accordingly.
9797 """
98- logger .log (level , "[{}]: {}" .format (self .id , message ))
98+ logger .log (level , "[{}]: {}" .format (self .uuid , message ))
9999
100100 def bind (self , * args , ** kwargs ):
101101 if self .status != "Ready" :
@@ -124,12 +124,14 @@ def bind(self, *args, **kwargs):
124124 raise ServiceUnavailable (msg ) from e
125125
126126 def unbind (self , * args , ** kwargs ):
127- if self .binding != "Ready" :
127+ if not self .binding :
128128 raise DryccException ("the resource is not binding" )
129129 try :
130130 # We raise an exception when a resource doesn't exist
131131 self ._scheduler .servicecatalog .get_binding (self .app .id , self .name )
132132 self ._scheduler .servicecatalog .delete_binding (self .app .id , self .name )
133+ self .binding = None
134+ self .save ()
133135 except KubeException as e :
134136 raise ServiceUnavailable ("Could not unbind resource {} for application {}" .format (self .name , self .app_id )) from e # noqa
135137
@@ -138,21 +140,22 @@ def attach_update(self, *args, **kwargs):
138140 data = self ._scheduler .servicecatalog .get_instance (
139141 self .app .id , self .name ).json ()
140142 except KubeException as e :
141- self .log ("certificate {} does not exist" .format (self .app .id ),
142- level = logging .INFO )
143- data = None
144- logger .info (e )
143+ self .DryccException ("resource {} does not exist" .format (self .name ))
145144 try :
146145 version = data ["metadata" ]["resourceVersion" ]
147146 instance = self .plan .split (":" )
148147 kwargs = {
149148 "instance_class" : instance [0 ],
150149 "instance_plan" : ":" .join (instance [1 :]),
151150 "parameters" : self .options ,
151+ "external_id" : data ["spec" ]["externalID" ]
152152 }
153153 self ._scheduler .servicecatalog .put_instance (
154154 self .app .id , self .name , version , ** kwargs
155155 )
156+ # self._scheduler.servicecatalog.patch_instance(
157+ # self.app.id, self.name, version, **kwargs
158+ # )
156159 # create/patch/put retrieve_task
157160 data = {
158161 "task_id" : uuid .uuid4 ().hex ,
@@ -171,7 +174,7 @@ def retrieve(self, *args, **kwargs):
171174 resp_i = self ._scheduler .servicecatalog .get_instance (
172175 self .app .id , self .name ).json ()
173176 self .status = resp_i .get ('status' , {}).\
174- get ('lastConditionState' , '' ). lower ( )
177+ get ('lastConditionState' )
175178 update_flag = True
176179 except KubeException as e :
177180 logger .info ("retrieve instance info error: {}" .format (e ))
@@ -181,7 +184,7 @@ def retrieve(self, *args, **kwargs):
181184 resp_b = self ._scheduler .servicecatalog .get_binding (
182185 self .app .id , self .name ).json ()
183186 self .binding = resp_b .get ('status' , {}).\
184- get ('lastConditionState' , '' ). lower ( )
187+ get ('lastConditionState' )
185188 self .options = resp_b .get ('spec' , {}).get ('parameters' , {})
186189 update_flag = True
187190 secret_name = resp_b .get ('spec' , {}).get ('secretName' )
@@ -213,12 +216,8 @@ def detach_resource(self, *args, **kwargs):
213216 logger .info ("delete binding info error: {}" .format (e ))
214217 self .binding = None
215218
216- if (self .status != "Ready" ) or (self .binding is None ):
217- try :
218- self ._scheduler .servicecatalog .delete_instance (
219- self .app .id , self .name )
220- except KubeException as e :
221- logger .info ("retrieve instance info error: {}" .format (e ))
219+ if (self .status != "Ready" ) or (not self .binding ):
220+ self .delete ()
222221
223222
224223@task
@@ -234,7 +233,7 @@ def retrieve_task(data):
234233 if _ :
235234 return True
236235 else :
237- t = time .time () - resource .created .timestamps ()
236+ t = time .time () - resource .created .timestamp ()
238237 if t < 3600 :
239238 apply_async (retrieve_task , delay = 30000 , args = (data , ))
240239 elif t < 3600 * 12 :
0 commit comments