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