@@ -1407,56 +1407,75 @@ def guest_capture(self, userid, image_name, capture_type='rootonly',
14071407 'successfully' % image_name )
14081408
14091409 def guest_get_os_version (self , userid ):
1410- os_version = ''
1411- release_file = self .execute_cmd (userid , 'ls /etc/*-release' )
1412- if '/etc/os-release' in release_file :
1413- # Parse os-release file, part of the output looks like:
1414- # NAME="Red Hat Enterprise Linux Server"
1415- # ID="rhel"
1416- # VERSION_ID="7.0"
1417-
1418- release_info = self .execute_cmd (userid , 'cat /etc/os-release' )
1419- release_dict = {}
1420- for item in release_info :
1421- if item :
1422- release_dict [item .split ('=' )[0 ]] = item .split ('=' )[1 ]
1423- distro = release_dict ['ID' ]
1424- version = release_dict ['VERSION_ID' ]
1425- if '"' in distro :
1426- distro = eval (distro )
1427- if '"' in version :
1428- version = eval (version )
1429- os_version = '%s%s' % (distro , version )
1430- return os_version
1431- elif '/etc/redhat-release' in release_file :
1432- # The output looks like:
1433- # "Red Hat Enterprise Linux Server release 6.7 (Santiago)"
1434- distro = 'rhel'
1435- release_info = self .execute_cmd (userid , 'cat /etc/redhat-release' )
1436- distro_version = release_info [0 ].split ()[6 ]
1437- os_version = '' .join ((distro , distro_version ))
1438- return os_version
1439- elif '/etc/SuSE-release' in release_file :
1440- # The output for this file looks like:
1441- # SUSE Linux Enterprise Server 11 (s390x)
1442- # VERSION = 11
1443- # PATCHLEVEL = 3
1444- distro = 'sles'
1445- release_info = self .execute_cmd (userid , 'cat /etc/SuSE-release' )
1446- LOG .debug ('OS release info is %s' % release_info )
1447- release_version = '.' .join ((release_info [1 ].split ('=' )[1 ].strip (),
1448- release_info [2 ].split ('=' )[1 ].strip ()))
1449- os_version = '' .join ((distro , release_version ))
1450- return os_version
1451- elif '/etc/system-release' in release_file :
1452- # For some rhel6.7 system, it only have system-release file and
1453- # the output looks like:
1454- # "Red Hat Enterprise Linux Server release 6.7 (Santiago)"
1455- distro = 'rhel'
1456- release_info = self .execute_cmd (userid , 'cat /etc/system-release' )
1457- distro_version = release_info [0 ].split ()[6 ]
1458- os_version = '' .join ((distro , distro_version ))
1410+ """
1411+ Retrieves the operating system name and version of the VM from release file.
1412+ :param userid: User ID of the VM.
1413+ :return: A string containing the OS name and version information.
1414+ Returns "" if IUCV is not configured.
1415+ Returns "NA" if no OS release file is found.
1416+ """
1417+
1418+ os_version = 'NA'
1419+ try :
1420+ release_file = self .execute_cmd (userid , 'ls /etc/*-release' )
1421+
1422+ if '/etc/os-release' in release_file :
1423+ # Parse os-release file, part of the output looks like:
1424+ # NAME="Red Hat Enterprise Linux Server"
1425+ # ID="rhel"
1426+ # VERSION_ID="7.0"
1427+
1428+ release_info = self .execute_cmd (userid , 'cat /etc/os-release' )
1429+ release_dict = {}
1430+ for item in release_info :
1431+ if item :
1432+ release_dict [item .split ('=' )[0 ]] = item .split ('=' )[1 ]
1433+ distro = release_dict ['ID' ]
1434+ version = release_dict ['VERSION_ID' ]
1435+ if '"' in distro :
1436+ distro = eval (distro )
1437+ if '"' in version :
1438+ version = eval (version )
1439+ os_version = '%s%s' % (distro , version )
1440+
1441+ elif '/etc/redhat-release' in release_file :
1442+ # The output looks like:
1443+ # "Red Hat Enterprise Linux Server release 6.7 (Santiago)"
1444+ distro = 'rhel'
1445+ release_info = self .execute_cmd (userid , 'cat /etc/redhat-release' )
1446+ distro_version = release_info [0 ].split ()[6 ]
1447+ os_version = '' .join ((distro , distro_version ))
1448+
1449+ elif '/etc/SuSE-release' in release_file :
1450+ # The output for this file looks like:
1451+ # SUSE Linux Enterprise Server 11 (s390x)
1452+ # VERSION = 11
1453+ # PATCHLEVEL = 3
1454+ distro = 'sles'
1455+ release_info = self .execute_cmd (userid , 'cat /etc/SuSE-release' )
1456+ LOG .debug ('OS release info is %s' % release_info )
1457+ release_version = '.' .join ((release_info [1 ].split ('=' )[1 ].strip (),
1458+ release_info [2 ].split ('=' )[1 ].strip ()))
1459+ os_version = '' .join ((distro , release_version ))
1460+
1461+ elif '/etc/system-release' in release_file :
1462+ # For some rhel6.7 system, it only have system-release file and
1463+ # the output looks like:
1464+ # "Red Hat Enterprise Linux Server release 6.7 (Santiago)"
1465+ distro = 'rhel'
1466+ release_info = self .execute_cmd (userid , 'cat /etc/system-release' )
1467+ distro_version = release_info [0 ].split ()[6 ]
1468+ os_version = '' .join ((distro , distro_version ))
1469+
14591470 return os_version
1471+ except Exception as e :
1472+ if e .results ['rc' ] in (1 , 4 ):
1473+ # rc = 1,Command was not authorized or a generic Linux error.
1474+ # rc = 4,IUCV socket error
1475+ return ""
1476+ elif e .results ['rc' ] == 8 :
1477+ # rc = 8,Executed command failed
1478+ return "NA"
14601479
14611480 def _get_capture_devices (self , userid , capture_type = 'rootonly' ):
14621481 capture_devices = []
0 commit comments