1616 'upload_url' : {'required' : False , 'type' : 'str' },
1717 'cluster_cookie' : {'required' : False , 'type' : 'str' },
1818 'tdg_token' : {'required' : False , 'type' : 'str' },
19+ 'http_timeout' : {'required' : False , 'type' : 'int' },
20+
21+ 'netbox_call_timeout' : {'required' : False , 'type' : 'int' },
22+ 'upload_config_timeout' : {'required' : False , 'type' : 'int' },
23+ 'apply_config_timeout' : {'required' : False , 'type' : 'int' },
1924}
2025
2126LUA_MODE = 'lua'
@@ -50,14 +55,14 @@ def patch_file_clusterwide(control_console, file_path):
5055 return changed
5156
5257
53- def send_on_http (upload_url , headers , config_path ):
58+ def send_on_http (upload_url , headers , config_path , http_timeout ):
5459 headers .update ({
5560 'Content-Length' : os .stat (config_path ).st_size
5661 })
5762
5863 with open (config_path , 'rb' ) as data :
5964 try :
60- resp = open_url (upload_url , method = 'PUT' , headers = headers , data = data )
65+ resp = open_url (upload_url , method = 'PUT' , headers = headers , data = data , timeout = http_timeout )
6166 except Exception as e :
6267 assert hasattr (e , 'code' ), str (e )
6368 resp = e
@@ -77,8 +82,7 @@ def send_on_http(upload_url, headers, config_path):
7782 return True
7883
7984
80- def apply_tdg_config (console_sock , path ):
81- control_console = helpers .get_control_console (console_sock )
85+ def apply_tdg_config (control_console , path ):
8286 _ , err = control_console .eval_res_err ('''
8387 return admin.upload_config_api(...)
8488 ''' , path )
@@ -147,11 +151,7 @@ def prepare_config(config_path, output_format, upload_mode):
147151####################
148152
149153
150- def get_tdg_upload_mode (console_sock ):
151- if console_sock is None :
152- return 'http'
153-
154- control_console = helpers .get_control_console (console_sock )
154+ def get_tdg_upload_mode (control_console ):
155155 return control_console .eval_res_err ('''
156156 if rawget(_G, 'admin') ~= nil and rawget(_G.admin, 'upload_config_api') ~= nil then
157157 return 'lua'
@@ -160,13 +160,10 @@ def get_tdg_upload_mode(console_sock):
160160 ''' )[0 ]
161161
162162
163- def get_tdg_http_headers (console_sock , tdg_token ):
163+ def get_tdg_http_headers (control_console , tdg_token ):
164164 if tdg_token is None :
165165 return {}
166166
167- assert console_sock is not None , "Console socket is required for TDG mode"
168- control_console = helpers .get_control_console (console_sock )
169-
170167 tdg_version = control_console .eval_res_err ('''
171168 local ok, app_version = pcall(require, 'common.app_version')
172169 if not ok then
@@ -208,54 +205,51 @@ def prepare_upload_mode(upload_mode, remote_config_path):
208205 return upload_mode
209206
210207
211- def get_output_format_and_apply_config_func_for_lua (console_sock ):
212- assert console_sock is not None , "Console socket is required for Lua mode"
213-
214- control_console = helpers .get_control_console (console_sock )
215-
208+ def get_output_format_and_apply_config_func_for_lua (control_console ):
216209 return FILE_OUTPUT_FORMAT , lambda path : patch_file_clusterwide (control_console , path )
217210
218211
219- def get_output_format_and_apply_config_func_for_http (upload_url , cluster_cookie ):
212+ def get_output_format_and_apply_config_func_for_http (upload_url , cluster_cookie , http_timeout ):
220213 assert cluster_cookie is not None , 'Cluster cookie is required for HTTP mode'
221214 assert upload_url is not None , 'Upload URL is required for HTTP mode'
222215
223216 headers = {'Authorization' : basic_auth_header ('admin' , cluster_cookie )}
224217
225- return FILE_OUTPUT_FORMAT , lambda path : send_on_http (upload_url , headers , path )
218+ return FILE_OUTPUT_FORMAT , lambda path : send_on_http (upload_url , headers , path , http_timeout )
226219
227220
228- def get_output_format_and_apply_config_func_for_tdg (console_sock , upload_url , tdg_token ):
229- tdg_upload_mode = get_tdg_upload_mode (console_sock )
221+ def get_output_format_and_apply_config_func_for_tdg (control_console , upload_url , tdg_token , http_timeout ):
222+ tdg_upload_mode = get_tdg_upload_mode (control_console )
230223
231224 if tdg_upload_mode == 'http' :
232225 assert upload_url is not None , 'Upload URL is required for TDG mode'
233226
234- headers = get_tdg_http_headers (console_sock , tdg_token )
227+ headers = get_tdg_http_headers (control_console , tdg_token )
235228
236- return ZIP_OUTPUT_FORMAT , lambda path : send_on_http (upload_url , headers , path )
229+ return ZIP_OUTPUT_FORMAT , lambda path : send_on_http (upload_url , headers , path , http_timeout )
237230
238231 elif tdg_upload_mode == 'lua' :
239- return DIR_OUTPUT_FORMAT , lambda path : apply_tdg_config (console_sock , path )
232+ return DIR_OUTPUT_FORMAT , lambda path : apply_tdg_config (control_console , path )
240233
241234 raise AssertionError ("Unknown TDG upload mode '%s'" % tdg_upload_mode )
242235
243236
244237def get_output_format_and_apply_config_func (
245238 upload_mode ,
246- console_sock = None ,
239+ control_console = None ,
247240 upload_url = None ,
248241 cluster_cookie = None ,
249242 tdg_token = None ,
243+ http_timeout = None ,
250244):
251245 if upload_mode == LUA_MODE :
252- return get_output_format_and_apply_config_func_for_lua (console_sock )
246+ return get_output_format_and_apply_config_func_for_lua (control_console )
253247
254248 elif upload_mode == HTTP_MODE :
255- return get_output_format_and_apply_config_func_for_http (upload_url , cluster_cookie )
249+ return get_output_format_and_apply_config_func_for_http (upload_url , cluster_cookie , http_timeout )
256250
257251 elif upload_mode == TDG_MODE :
258- return get_output_format_and_apply_config_func_for_tdg (console_sock , upload_url , tdg_token )
252+ return get_output_format_and_apply_config_func_for_tdg (control_console , upload_url , tdg_token , http_timeout )
259253
260254 raise AssertionError ("Unknown upload mode '%s'" % upload_mode )
261255
@@ -266,6 +260,10 @@ def get_output_format_and_apply_config_func(
266260
267261
268262def apply_app_config (params ):
263+ console_sock = params ['console_sock' ]
264+ control_console = helpers .get_control_console (console_sock )
265+ helpers .set_twophase_options_from_params (control_console , params )
266+
269267 # We cannot use the fact 'dest' from the copy task,
270268 # because in the case of transferring a folder with one file,
271269 # 'dest' will contain the path to the file, not the path to the folder.
@@ -279,10 +277,11 @@ def apply_app_config(params):
279277
280278 output_format , apply_config_func = get_output_format_and_apply_config_func (
281279 upload_mode ,
282- console_sock = params [ 'console_sock' ] ,
280+ control_console = control_console ,
283281 upload_url = params ['upload_url' ],
284282 cluster_cookie = params ['cluster_cookie' ],
285283 tdg_token = params ['tdg_token' ],
284+ http_timeout = params .get ('http_timeout' ),
286285 )
287286
288287 temp_paths = [remote_config_path ]
0 commit comments