File tree Expand file tree Collapse file tree 3 files changed +25
-2
lines changed Expand file tree Collapse file tree 3 files changed +25
-2
lines changed Original file line number Diff line number Diff line change @@ -110,12 +110,15 @@ def host_info_obtainer(conn, vc):
110110 signal .signal (signal .SIGTERM , signal_handler )
111111 signal .signal (signal .SIGINT , signal_handler )
112112 vc = None
113- if Settings .app ["vsphere" ]["hosts_folder_name" ]:
113+ vc_needed = Settings .app ["vsphere" ]["hosts_folder_name" ] is not None
114+ loop_counter = 0
115+ if vc_needed :
114116 vc = vcenter .VCenter ()
115117 vc .connect (quick = True )
116118
117119 process_actions = True
118120 while process_actions :
121+ loop_counter = loop_counter + 1
119122
120123 with data .Connection .use ('conn2' ) as conn :
121124 try :
@@ -158,6 +161,15 @@ def host_info_obtainer(conn, vc):
158161 logger .error ('Exception while processing request: ' , exc_info = True )
159162 break
160163
161- time .sleep (Settings .app ['delayed' ]['sleep' ])
164+ # check whether we shouldn't re-connect
165+ if vc_needed and \
166+ (loop_counter % Settings .app ['delayed' ]['reconnect_every_n' ]) == 0 :
167+ vc .disconnect ()
168+ logger .debug (f'vCenter disconnected at: { loop_counter } iteration' )
169+ vc .connect (quick = True )
170+ logger .debug (f'vCenter re-connected at: { loop_counter } iteration' )
162171
172+ time .sleep (Settings .app ['delayed' ]['sleep' ])
173+ if vc_needed :
174+ vc .disconnect ()
163175 logger .debug ("Delayed finished" )
Original file line number Diff line number Diff line change @@ -39,6 +39,7 @@ def __init__(self):
3939 self .vm_folders = None
4040 self .destination_datastore = None
4141 self .destination_resource_pool = None
42+ self .service_instance = None
4243
4344 def __check_connection (self ):
4445 result = self .__get_objects_list_from_container (self .content .rootFolder , vim .Datastore )
@@ -64,6 +65,7 @@ def connect(self, quick=False):
6465 )
6566
6667 self .content = si .content
68+ self .service_instance = si
6769 self ._connection_cookie = si ._stub .cookie
6870 self .si_stub = si ._stub # to be used for rapid managed object creation
6971 self ._connected = True
@@ -72,6 +74,14 @@ def connect(self, quick=False):
7274 self .refresh_destination_datastore ()
7375 self .refresh_destination_resource_pool ()
7476
77+ @log_to (vcenter_logger )
78+ def disconnect (self ):
79+ try :
80+ self .service_instance .Disconnect ()
81+ except Exception as ex :
82+ self .__logger .debug ('cannot disconnect from vCenter server' , exc_info = True )
83+ self .service_instance = None
84+
7585 def idle (self ):
7686 self .__check_connection ()
7787 self .__logger .debug ('keeping connection alive: {}' .format (self .content .about .vendor ))
Original file line number Diff line number Diff line change @@ -117,6 +117,7 @@ class Settings:
117117 },
118118 'delayed' : {
119119 'sleep' : 1.5 ,
120+ 'reconnect_every_n' : 10 ,
120121 },
121122 'ticketeer' : {
122123 'sleep' : 6 ,
You can’t perform that action at this time.
0 commit comments