2626from XSConsoleState import *
2727from XSConsoleUtils import *
2828
29+ # PR #22: Add py3-compatible wrapper for commands.getstatusoutput() to keep the code base functional:
30+ if sys .version_info >= (3 , 0 ):
31+ getoutput = subprocess .getoutput
32+ getstatusoutput = subprocess .getstatusoutput
33+
34+ else :
35+ import commands
36+
37+ getoutput = commands .getoutput
38+
39+ def getstatusoutput (command ):
40+ """getstatusoutput with status = exit code, compatible with Python3 getstatusoutput()"""
41+
42+ status , output = commands .getstatusoutput (command )
43+ return os .WEXITSTATUS (status ), output # https://github.com/benjaminp/six/issues/207
44+
45+
2946class DataMethod :
3047 def __init__ (self , inSend , inName ):
3148 self .send = inSend
@@ -98,31 +115,31 @@ def Create(self):
98115 self .ReadTimezones ()
99116 self .ReadKeymaps ()
100117
101- (status , output ) = subprocess . getstatusoutput ("dmidecode" )
118+ (status , output ) = getstatusoutput ("dmidecode" )
102119 if status != 0 :
103120 # Use test dmidecode file if there's no real output
104- (status , output ) = subprocess . getstatusoutput ("/bin/cat ./dmidecode.txt" )
121+ (status , output ) = getstatusoutput ("/bin/cat ./dmidecode.txt" )
105122
106123 if status == 0 :
107124 self .ScanDmiDecode (output .split ("\n " ))
108125
109- (status , output ) = subprocess . getstatusoutput ("/sbin/lspci -m" )
126+ (status , output ) = getstatusoutput ("/sbin/lspci -m" )
110127 if status != 0 :
111- (status , output ) = subprocess . getstatusoutput ("/usr/bin/lspci -m" )
128+ (status , output ) = getstatusoutput ("/usr/bin/lspci -m" )
112129
113130 if status == 0 :
114131 self .ScanLspci (output .split ("\n " ))
115132
116133 if os .path .isfile ("/usr/bin/ipmitool" ):
117- (status , output ) = subprocess . getstatusoutput ("/usr/bin/ipmitool mc info" )
134+ (status , output ) = getstatusoutput ("/usr/bin/ipmitool mc info" )
118135 if status == 0 :
119136 self .ScanIpmiMcInfo (output .split ("\n " ))
120137
121- (status , output ) = subprocess . getstatusoutput ("/bin/cat /etc/xensource-inventory" )
138+ (status , output ) = getstatusoutput ("/bin/cat /etc/xensource-inventory" )
122139 if status == 0 :
123140 self .ScanInventory (output .split ("\n " ))
124141
125- (status , output ) = subprocess . getstatusoutput ("/usr/bin/openssl x509 -in %s/xapi-ssl.pem -fingerprint -noout" % (Config .Inst ().XCPConfigDir ()))
142+ (status , output ) = getstatusoutput ("/usr/bin/openssl x509 -in %s/xapi-ssl.pem -fingerprint -noout" % (Config .Inst ().XCPConfigDir ()))
126143 if status == 0 :
127144 fp = output .split ("=" )
128145 if len (fp ) >= 2 :
@@ -454,30 +471,30 @@ def LoggingDestinationSet(self, inDestination):
454471 self .session .xenapi .host .syslog_reconfigure (self .host .opaqueref ())
455472
456473 def UpdateFromResolveConf (self ):
457- (status , output ) = subprocess . getstatusoutput ("/usr/bin/grep -v \" ^;\" /etc/resolv.conf" )
474+ (status , output ) = getstatusoutput ("/usr/bin/grep -v \" ^;\" /etc/resolv.conf" )
458475 if status == 0 :
459476 self .ScanResolvConf (output .split ("\n " ))
460477
461478 def UpdateFromSysconfig (self ):
462- (status , output ) = subprocess . getstatusoutput ("/bin/cat /etc/sysconfig/network" )
479+ (status , output ) = getstatusoutput ("/bin/cat /etc/sysconfig/network" )
463480 if status == 0 :
464481 self .ScanSysconfigNetwork (output .split ("\n " ))
465482
466483 def UpdateFromHostname (self ):
467- (status , output ) = subprocess . getstatusoutput ("/bin/cat /etc/hostname" )
484+ (status , output ) = getstatusoutput ("/bin/cat /etc/hostname" )
468485 if status == 0 :
469486 self .ScanHostname (output .split ("\n " ))
470487
471488 def UpdateFromNTPConf (self ):
472- (status , output ) = subprocess . getstatusoutput ("/bin/cat /etc/chrony.conf" )
489+ (status , output ) = getstatusoutput ("/bin/cat /etc/chrony.conf" )
473490 if status == 0 :
474491 self .ScanNTPConf (output .split ("\n " ))
475492
476493 def StringToBool (self , inString ):
477494 return inString .lower ().startswith ('true' )
478495
479496 def RootLabel (self ):
480- output = subprocess . getoutput ('/bin/cat /proc/cmdline' )
497+ output = getoutput ('/bin/cat /proc/cmdline' )
481498 match = re .search (r'root=\s*LABEL\s*=\s*(\S+)' , output )
482499 if match :
483500 retVal = match .group (1 )
@@ -675,7 +692,7 @@ def ScanIpmiMcInfo(self, inLines):
675692 self .data ['bmc' ]['version' ] = match .group (1 )
676693
677694 def ScanService (self , service ):
678- (status , output ) = subprocess . getstatusoutput ("systemctl is-enabled %s" % (service ,))
695+ (status , output ) = getstatusoutput ("systemctl is-enabled %s" % (service ,))
679696 self .data ['chkconfig' ][service ] = status == 0
680697
681698 def ScanResolvConf (self , inLines ):
@@ -779,7 +796,7 @@ def TimezoneSet(self, inTimezone):
779796 cfg .write ('/etc/sysconfig/clock' )
780797
781798 def CurrentTimeString (self ):
782- return subprocess . getoutput ('/bin/date -R' )
799+ return getoutput ('/bin/date -R' )
783800
784801 def ReadKeymaps (self ):
785802 self .data ['keyboard' ] = {
@@ -811,7 +828,7 @@ def KeymapSet(self, inKeymap):
811828
812829 keymapParam = ShellUtils .MakeSafeParam (inKeymap )
813830 # Load the keymap now
814- status , output = subprocess . getstatusoutput ('/bin/loadkeys "' + keymapParam + '"' )
831+ status , output = getstatusoutput ('/bin/loadkeys "' + keymapParam + '"' )
815832 if status != 0 :
816833 raise Exception (output )
817834
@@ -914,7 +931,7 @@ def ReconfigureManagement(self, inPIF, inMode, inIP, inNetmask, inGateway, in
914931 self .RequireSession ()
915932 self .session .xenapi .PIF .reconfigure_ip (inPIF ['opaqueref' ], inMode , inIP , inNetmask , inGateway , FirstValue (inDNS , '' ))
916933 self .session .xenapi .host .management_reconfigure (inPIF ['opaqueref' ])
917- status , output = subprocess . getstatusoutput ('%s host-signal-networking-change' % (Config .Inst ().XECLIPath ()))
934+ status , output = getstatusoutput ('%s host-signal-networking-change' % (Config .Inst ().XECLIPath ()))
918935 if status != 0 :
919936 raise Exception (output )
920937 finally :
@@ -1090,32 +1107,32 @@ def StartXAPI(self):
10901107 State .Inst ().SaveIfRequired ()
10911108
10921109 def EnableService (self , service ):
1093- status , output = subprocess . getstatusoutput ("systemctl enable %s" % (service ,))
1110+ status , output = getstatusoutput ("systemctl enable %s" % (service ,))
10941111 if status != 0 :
10951112 raise Exception (output )
10961113
10971114 def DisableService (self , service ):
1098- status , output = subprocess . getstatusoutput ("systemctl disable %s" % (service ,))
1115+ status , output = getstatusoutput ("systemctl disable %s" % (service ,))
10991116 if status != 0 :
11001117 raise Exception (output )
11011118
11021119 def RestartService (self , service ):
1103- status , output = subprocess . getstatusoutput ("systemctl restart %s" % (service ,))
1120+ status , output = getstatusoutput ("systemctl restart %s" % (service ,))
11041121 if status != 0 :
11051122 raise Exception (output )
11061123
11071124 def StartService (self , service ):
1108- status , output = subprocess . getstatusoutput ("systemctl start %s" % (service ,))
1125+ status , output = getstatusoutput ("systemctl start %s" % (service ,))
11091126 if status != 0 :
11101127 raise Exception (output )
11111128
11121129 def StopService (self , service ):
1113- status , output = subprocess . getstatusoutput ("systemctl stop %s" % (service ,))
1130+ status , output = getstatusoutput ("systemctl stop %s" % (service ,))
11141131 if status != 0 :
11151132 raise Exception (output )
11161133
11171134 def NTPStatus (self ):
1118- status , output = subprocess . getstatusoutput ("/usr/bin/ntpstat" )
1135+ status , output = getstatusoutput ("/usr/bin/ntpstat" )
11191136 return output
11201137
11211138 def SetVerboseBoot (self , inVerbose ):
@@ -1124,7 +1141,7 @@ def SetVerboseBoot(self, inVerbose):
11241141 else :
11251142 name = 'quiet'
11261143
1127- status , output = subprocess . getstatusoutput (
1144+ status , output = getstatusoutput (
11281145 "(export TERM=xterm && /opt/xensource/libexec/set-boot " + name + ")" )
11291146 if status != 0 :
11301147 raise Exception (output )
0 commit comments