Skip to content

Commit 77a0e61

Browse files
author
suraksha
committed
Soft restart - Handled code even if os file is removed
Signed-off-by: suraksha <p.v.sai.suraksha@ibm.com>
1 parent 8fa3736 commit 77a0e61

File tree

1 file changed

+68
-49
lines changed

1 file changed

+68
-49
lines changed

zvmsdk/smtclient.py

Lines changed: 68 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -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 name and version of the VM from release file.
1411+
:param userid: User ID of the VM.
1412+
:return: A string containing the OS name and version information.
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

Comments
 (0)