99from .celery import app
1010from .utils import helm , format_params_to_helm_args , new_instance_lock , run_instance_hooks
1111
12- from .database .metadata import save_instance_meta , save_binding_meta , load_instance_meta
12+ from .database .metadata import save_instance_meta , save_binding_meta , load_instance_meta , \
13+ load_binding_meta
1314from .database .savepoint import save_addon_values , backup_instance
1415from .database .query import get_plan_path , get_chart_path , get_cred_value , get_binding_file
1516
1819
1920@app .task (serializer = 'pickle' )
2021def provision (instance_id : str , details : ProvisionDetails ):
21- with new_instance_lock (instance_id ), run_instance_hooks (instance_id , "provision" ):
22+ with (
23+ new_instance_lock (instance_id ),
24+ run_instance_hooks (instance_id , "provision" ) as (status , output )
25+ ):
2226 backup_instance (instance_id )
2327 # create instance.json
24- save_instance_meta ( instance_id , {
25- "id" : instance_id ,
28+ data = {
29+ "id" : instance_id , "last_operation" : {},
2630 "details" : {
2731 "service_id" : details .service_id , "plan_id" : details .plan_id ,
2832 "context" : details .context ,
2933 "parameters" : details .parameters if details .parameters else {},
3034 },
31- "last_operation" : {
32- "state" : OperationState .IN_PROGRESS .value , "operation" : "provision" ,
33- "description" : ("provision %s in progress at %s" % (instance_id , time .time ()))
34- }
35- })
36-
35+ }
36+ if status != 0 :
37+ data ["last_operation" ]["state" ] = OperationState .FAILED .value
38+ data ["last_operation" ]["description" ] = f"provision { instance_id } error: { output } "
39+ save_instance_meta (instance_id , data )
40+ return
41+ data ["last_operation" ]["state" ] = OperationState .IN_PROGRESS .value
42+ data ["last_operation" ]["operation" ] = "provision"
43+ data ["last_operation" ]["description" ] = (
44+ f"provision { instance_id } in progress at { time .time ()} " )
45+ save_instance_meta (instance_id , data )
3746 chart_path = get_chart_path (instance_id )
3847 bind_yaml = f'{ chart_path } /templates/bind.yaml'
3948 if os .path .exists (bind_yaml ):
@@ -56,19 +65,22 @@ def provision(instance_id: str, details: ProvisionDetails):
5665 args = format_params_to_helm_args (instance_id , details .parameters , args )
5766 logger .debug (f"helm install args:{ args } " )
5867 status , output = helm (instance_id , * args )
59- data = load_instance_meta (instance_id )
6068 if status != 0 :
6169 data ["last_operation" ]["state" ] = OperationState .FAILED .value
62- data ["last_operation" ]["description" ] = "provision error:\n %s" % output
70+ data ["last_operation" ]["description" ] = f "provision { instance_id } error: { output } "
6371 else :
6472 data ["last_operation" ]["state" ] = OperationState .SUCCEEDED .value
65- data ["last_operation" ]["description" ] = "provision succeeded at %s" % time .time ()
73+ data ["last_operation" ]["description" ] = (
74+ f"provision { instance_id } succeeded at { time .time ()} " )
6675 save_instance_meta (instance_id , data )
6776
6877
6978@app .task (serializer = 'pickle' )
7079def update (instance_id : str , details : UpdateDetails ):
71- with new_instance_lock (instance_id ), run_instance_hooks (instance_id , "update" ):
80+ with (
81+ new_instance_lock (instance_id ),
82+ run_instance_hooks (instance_id , "update" ) as (status , output )
83+ ):
7284 backup_instance (instance_id )
7385 data = load_instance_meta (instance_id )
7486 if details .service_id :
@@ -82,9 +94,14 @@ def update(instance_id: str, details: UpdateDetails):
8294 params .update (details .parameters )
8395 # remove the key which value is null
8496 data ['details' ]['parameters' ] = {k : v for k , v in params .items () if v != "" }
97+ if status != 0 :
98+ data ["last_operation" ]["state" ] = OperationState .FAILED .value
99+ data ["last_operation" ]["description" ] = f"update { instance_id } failed: { output } "
100+ save_instance_meta (instance_id , data )
101+ return
85102 data ['last_operation' ]["state" ] = OperationState .IN_PROGRESS .value
86- data ['last_operation' ]["description" ] = "update %s in progress at %s" % (
87- instance_id , time .time ())
103+ data ['last_operation' ]["description" ] = (
104+ f"update { instance_id } in progress at { time .time ()} " )
88105 save_instance_meta (instance_id , data )
89106 chart_path = get_chart_path (instance_id )
90107 values_file = os .path .join (get_plan_path (instance_id ), "values.yaml" )
@@ -105,11 +122,11 @@ def update(instance_id: str, details: UpdateDetails):
105122 status , output = helm (instance_id , * args )
106123 if status != 0 :
107124 data ["last_operation" ]["state" ] = OperationState .FAILED .value
108- data ["last_operation" ]["description" ] = "update %s failed: %s" % ( instance_id , output )
125+ data ["last_operation" ]["description" ] = f "update { time . time () } failed: { output } "
109126 else :
110127 data ["last_operation" ]["state" ] = OperationState .SUCCEEDED .value
111128 data ["last_operation" ]["description" ] = (
112- "update %s succeeded at %s" % ( instance_id , time .time ()) )
129+ f "update { instance_id } succeeded at { time .time ()} " )
113130 save_instance_meta (instance_id , data )
114131
115132
@@ -119,15 +136,17 @@ def bind(instance_id: str,
119136 details : BindDetails ,
120137 async_allowed : bool ,
121138 ** kwargs ):
122- with new_instance_lock (instance_id ), run_instance_hooks (instance_id , "bind" ):
139+ with (
140+ new_instance_lock (instance_id ),
141+ run_instance_hooks (instance_id , "bind" ) as (status , output )
142+ ):
123143 backup_instance (instance_id )
124- data = {
125- "binding_id" : binding_id , "credentials" : {},
126- "last_operation" : {
127- "state" : OperationState .IN_PROGRESS .value ,
128- "description" : "binding %s in progress at %s" % (binding_id , time .time ())
129- }
130- }
144+ data = {"binding_id" : binding_id , "credentials" : {}, "last_operation" : {}}
145+ if status != 0 :
146+ data ["last_operation" ]["state" ] = OperationState .FAILED .value
147+ data ["last_operation" ]["description" ] = f"binding { instance_id } failed: { output } "
148+ save_binding_meta (instance_id , data )
149+ return
131150 save_binding_meta (instance_id , data )
132151 chart_path = get_chart_path (instance_id )
133152 values_file = os .path .join (get_plan_path (instance_id ), "values.yaml" )
@@ -145,9 +164,7 @@ def bind(instance_id: str,
145164 status , templates = helm (instance_id , * args ) # output: templates.yaml
146165 if status != 0 :
147166 data ["last_operation" ]["state" ] = OperationState .FAILED .value
148- data ["last_operation" ]["description" ] = "binding %s failed: %s" % (
149- instance_id , templates )
150-
167+ data ["last_operation" ]["description" ] = f"binding { instance_id } failed: { templates } "
151168 credential_template = yaml .load (templates .split ('bind.yaml' )[1 ], Loader = yaml .Loader )
152169 success_flag = True
153170 errors = []
@@ -164,15 +181,13 @@ def bind(instance_id: str,
164181 else :
165182 data ['credentials' ][_ ['name' ]] = val
166183 if success_flag :
167- data ['last_operation' ] = {
168- 'state' : OperationState .SUCCEEDED .value ,
169- 'description' : "binding %s succeeded at %s" % (instance_id , time .time ())
170- }
184+ data ['last_operation' ]['state' ] = OperationState .SUCCEEDED .value
185+ data ['last_operation' ]['description' ] = (
186+ f"binding { instance_id } succeeded at { time .time ()} " )
171187 else :
172- data ['last_operation' ] = {
173- 'state' : OperationState .FAILED .value ,
174- 'description' : "binding %s failed: %s" % (instance_id , ',' .join (errors ))
175- }
188+ data ['last_operation' ]['state' ] = OperationState .FAILED .value
189+ data ['last_operation' ]['description' ] = (
190+ f"binding { instance_id } failed: { ',' .join (errors )} " )
176191 bind_yaml = f'{ chart_path } /templates/bind.yaml'
177192 if os .path .exists (bind_yaml ):
178193 os .remove (bind_yaml )
@@ -181,22 +196,43 @@ def bind(instance_id: str,
181196
182197@app .task (serializer = 'pickle' )
183198def unbind (instance_id ):
184- with new_instance_lock (instance_id ), run_instance_hooks (instance_id , "deprovision" ):
199+ with (
200+ new_instance_lock (instance_id ),
201+ run_instance_hooks (instance_id , "deprovision" ) as (status , output )
202+ ):
185203 backup_instance (instance_id )
204+ data = load_binding_meta (instance_id )
205+ if status != 0 :
206+ data ['last_operation' ]['state' ] = OperationState .FAILED .value
207+ data ['last_operation' ]['description' ] = f"unbind { instance_id } failed: { output } "
208+ save_binding_meta (instance_id , data )
209+ return
186210 binding_file = get_binding_file (instance_id )
187211 if os .path .exists (binding_file ):
188212 os .remove (binding_file )
213+ data ['last_operation' ]['state' ] = OperationState .SUCCEEDED .value
214+ data ['last_operation' ]['description' ] = f"unbind { instance_id } succeeded at { time .time ()} "
215+ save_binding_meta (instance_id , data )
189216
190217
191218@app .task (serializer = 'pickle' )
192219def deprovision (instance_id : str ):
193- with new_instance_lock (instance_id ), run_instance_hooks (instance_id , "deprovision" ):
220+ with (
221+ new_instance_lock (instance_id ),
222+ run_instance_hooks (instance_id , "deprovision" ) as (status , output )
223+ ):
194224 backup_instance (instance_id )
195225 data = load_instance_meta (instance_id )
226+ if status != 0 :
227+ data ["last_operation" ]["operation" ] = "deprovision"
228+ data ["last_operation" ]["state" ] = OperationState .FAILED .value
229+ data ["last_operation" ]["description" ] = f"deprovision { instance_id } failed: { output } "
230+ save_instance_meta (instance_id , data )
231+ return
196232 data ["last_operation" ]["operation" ] = "deprovision"
197233 data ["last_operation" ]["state" ] = OperationState .IN_PROGRESS .value
198234 data ["last_operation" ]["description" ] = (
199- "deprovision %s in progress at %s" % ( instance_id , time .time ()) )
235+ f "deprovision { instance_id } in progress at { time .time ()} " )
200236 save_instance_meta (instance_id , data )
201237 args = [
202238 "uninstall" , data ["details" ]["context" ]["instance_name" ],
@@ -206,8 +242,9 @@ def deprovision(instance_id: str):
206242 status , output = helm (instance_id , * args )
207243 if status != 0 :
208244 data ["last_operation" ]["state" ] = OperationState .FAILED .value
209- data ["last_operation" ]["description" ] = "deprovision error: \n %s" % output
245+ data ["last_operation" ]["description" ] = f "deprovision { instance_id } failed: { output } "
210246 else :
211247 data ["last_operation" ]["state" ] = OperationState .SUCCEEDED .value
212- data ["last_operation" ]["description" ] = "deprovision succeeded at %s" % time .time ()
248+ data ["last_operation" ]["description" ] = (
249+ f"deprovision { instance_id } succeeded at { time .time ()} " )
213250 save_instance_meta (instance_id , data )
0 commit comments