@@ -705,19 +705,23 @@ def getrootdevID():
705705
706706
707707class APISession (contextlib .AbstractContextManager ):
708+ session = None
709+
708710 def __init__ (self , originator = "SM" ):
709711 self .originator = originator
710712 # First acquire a valid session
711713 self .session = self ._login ()
712- SMlog ("APISession [{}] login" .format (self .originator ), priority = LOG_DEBUG )
713714 atexit .register (self ._atexit )
714715
715716 def _login (self ):
717+ if self .session :
718+ return self .session
716719 session = XenAPI .xapi_local ()
717720 try :
718721 session .xenapi .login_with_password ('root' , '' , '' , self .originator )
719722 except Exception as exc :
720723 raise xs_errors .XenError (f"APISession [{ self .originator } ] Unable to open local XAPI session" ) from exc
724+ SMlog ("APISession [{}] login" .format (self .originator ), priority = LOG_DEBUG )
721725 return session
722726
723727 def _logout (self , log ):
@@ -742,8 +746,7 @@ def _atexit(self):
742746
743747 @override
744748 def __enter__ (self ):
745- if not self .session :
746- raise SyntaxError ("Session is already closed: wrong usage of context." )
749+ self .session = self ._login ()
747750 return self .session
748751
749752 @override
@@ -1384,7 +1387,7 @@ def is_active(self, name):
13841387 return os .path .exists ("/tmp/fist_%s" % name )
13851388
13861389 def mark_sr (self , name , sruuid , started ):
1387- with APISession ("SM-util-FistPoint-mark_sr " ) as session :
1390+ with APISession ("SM-sr-fist-point " ) as session :
13881391 sr = session .xenapi .SR .get_by_uuid (sruuid )
13891392 if started :
13901393 session .xenapi .SR .add_to_other_config (sr , name , "active" )
0 commit comments