@@ -58,7 +58,6 @@ def attach(self, *args, **kwargs):
5858 self ._scheduler .servicecatalog .create_instance (
5959 self .app .id , self .name , ** kwargs
6060 )
61- # create/patch/put retrieve_task
6261 data = {
6362 "task_id" : uuid .uuid4 ().hex ,
6463 "resource_id" : str (self .uuid ),
@@ -71,7 +70,7 @@ def attach(self, *args, **kwargs):
7170
7271 @transaction .atomic
7372 def delete (self , * args , ** kwargs ):
74- if self .binding and self . binding == "Ready" :
73+ if self .binding == "Ready" :
7574 raise DryccException ("the plan is still binding" )
7675 # Deatch ServiceInstance, updates k8s
7776 self .detach (* args , ** kwargs )
@@ -84,7 +83,7 @@ def detach(self, *args, **kwargs):
8483 self ._scheduler .servicecatalog .get_instance (self .app .id , self .name )
8584 self ._scheduler .servicecatalog .delete_instance (self .app .id , self .name )
8685 except KubeException as e :
87- raise ServiceUnavailable ("Could not delete volume {} for application {}" .format (name , self .app_id )) from e # noqa
86+ raise ServiceUnavailable ("Could not delete resource {} for application {}" .format (self . name , self .app_id )) from e # noqa
8887
8988 def log (self , message , level = logging .INFO ):
9089 """Logs a message in the context of this service.
@@ -95,7 +94,7 @@ def log(self, message, level=logging.INFO):
9594 as "belonging" to the application instead of the controller and will be handled
9695 accordingly.
9796 """
98- logger .log (level , "[{}]: {}" .format (self .id , message ))
97+ logger .log (level , "[{}]: {}" .format (self .uuid , message ))
9998
10099 def bind (self , * args , ** kwargs ):
101100 if self .status != "Ready" :
@@ -112,7 +111,6 @@ def bind(self, *args, **kwargs):
112111 try :
113112 self ._scheduler .servicecatalog .create_binding (
114113 self .app .id , self .name , ** kwargs )
115- # create/patch/put retrieve_task
116114 data = {
117115 "task_id" : uuid .uuid4 ().hex ,
118116 "resource_id" : str (self .uuid ),
@@ -124,12 +122,15 @@ def bind(self, *args, **kwargs):
124122 raise ServiceUnavailable (msg ) from e
125123
126124 def unbind (self , * args , ** kwargs ):
127- if self .binding != "Ready" :
125+ if not self .binding :
128126 raise DryccException ("the resource is not binding" )
129127 try :
130128 # We raise an exception when a resource doesn't exist
131129 self ._scheduler .servicecatalog .get_binding (self .app .id , self .name )
132130 self ._scheduler .servicecatalog .delete_binding (self .app .id , self .name )
131+ self .binding = None
132+ self .data = {}
133+ self .save ()
133134 except KubeException as e :
134135 raise ServiceUnavailable ("Could not unbind resource {} for application {}" .format (self .name , self .app_id )) from e # noqa
135136
@@ -138,22 +139,19 @@ def attach_update(self, *args, **kwargs):
138139 data = self ._scheduler .servicecatalog .get_instance (
139140 self .app .id , self .name ).json ()
140141 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 )
142+ self .DryccException ("resource {} does not exist" .format (self .name ))
145143 try :
146144 version = data ["metadata" ]["resourceVersion" ]
147145 instance = self .plan .split (":" )
148146 kwargs = {
149147 "instance_class" : instance [0 ],
150148 "instance_plan" : ":" .join (instance [1 :]),
151149 "parameters" : self .options ,
150+ "external_id" : data ["spec" ]["externalID" ]
152151 }
153152 self ._scheduler .servicecatalog .put_instance (
154153 self .app .id , self .name , version , ** kwargs
155154 )
156- # create/patch/put retrieve_task
157155 data = {
158156 "task_id" : uuid .uuid4 ().hex ,
159157 "resource_id" : str (self .uuid ),
@@ -171,7 +169,8 @@ def retrieve(self, *args, **kwargs):
171169 resp_i = self ._scheduler .servicecatalog .get_instance (
172170 self .app .id , self .name ).json ()
173171 self .status = resp_i .get ('status' , {}).\
174- get ('lastConditionState' , '' ).lower ()
172+ get ('lastConditionState' )
173+ self .options = resp_i .get ('spec' , {}).get ('parameters' , {})
175174 update_flag = True
176175 except KubeException as e :
177176 logger .info ("retrieve instance info error: {}" .format (e ))
@@ -181,8 +180,7 @@ def retrieve(self, *args, **kwargs):
181180 resp_b = self ._scheduler .servicecatalog .get_binding (
182181 self .app .id , self .name ).json ()
183182 self .binding = resp_b .get ('status' , {}).\
184- get ('lastConditionState' , '' ).lower ()
185- self .options = resp_b .get ('spec' , {}).get ('parameters' , {})
183+ get ('lastConditionState' )
186184 update_flag = True
187185 secret_name = resp_b .get ('spec' , {}).get ('secretName' )
188186 if secret_name :
@@ -194,7 +192,7 @@ def retrieve(self, *args, **kwargs):
194192 logger .info ("retrieve binding info error: {}" .format (e ))
195193 if update_flag is True :
196194 self .save ()
197- if self .status and self .binding :
195+ if self .status == "Ready" and self .binding == "Ready" :
198196 return True
199197 else :
200198 return False
@@ -213,12 +211,8 @@ def detach_resource(self, *args, **kwargs):
213211 logger .info ("delete binding info error: {}" .format (e ))
214212 self .binding = None
215213
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 ))
214+ if (self .status != "Ready" ) or (not self .binding ):
215+ self .delete ()
222216
223217
224218@task
@@ -234,7 +228,7 @@ def retrieve_task(data):
234228 if _ :
235229 return True
236230 else :
237- t = time .time () - resource .created .timestamps ()
231+ t = time .time () - resource .created .timestamp ()
238232 if t < 3600 :
239233 apply_async (retrieve_task , delay = 30000 , args = (data , ))
240234 elif t < 3600 * 12 :
0 commit comments