Skip to content

Commit c43968b

Browse files
authored
Add kernel info and timezone info (#127)
* Add kernel info and timezone info * added tests for new functionality * Redundant negative tests removed
1 parent 2914855 commit c43968b

File tree

2 files changed

+69
-0
lines changed

2 files changed

+69
-0
lines changed

rrmngmnt/operatingsystem.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ def __init__(self, host):
1313
self._release_str = None
1414
self._release_info = None
1515
self._dist = None
16+
self._kernel = None
17+
self._timezone = None
1618

1719
def _exec_command(self, cmd, err_msg=None):
1820
host_executor = self.host.executor()
@@ -114,6 +116,58 @@ def distribution(self):
114116
self._dist = self.get_distribution()
115117
return self._dist
116118

119+
def get_kernel_info(self):
120+
"""
121+
Get kernel info (release, version and type)
122+
123+
Returns:
124+
namedtuple Kernel: Results tuple(release, version and type)
125+
126+
Examples:
127+
kernel(
128+
release='4.18.0-135.el8.x86_64',
129+
version='#1 SMP Fri Aug 16 19:31:40 UTC 2019',
130+
type'='x86_64'
131+
)
132+
"""
133+
values = ["release", "version", "type"]
134+
cmd = ["uname", "-r", ";", "uname", "-v", ";", "uname", "-m"]
135+
out = self._exec_command(
136+
cmd=cmd, err_msg="Failed to obta kernel info"
137+
)
138+
Kernel = namedtuple('Kernel', values)
139+
return Kernel(*[i.strip() for i in out.strip().split("\n")])
140+
141+
@property
142+
def kernel_info(self):
143+
if not self._kernel:
144+
self._kernel = self.get_kernel_info()
145+
return self._kernel
146+
147+
def get_timezone(self):
148+
"""
149+
Get timezone (name and offset)
150+
151+
Returns:
152+
namedtuple Timezone: Results tuple(name and offset)
153+
154+
Examples:
155+
kernel(name='IDT', offset='+0300')
156+
"""
157+
values = ["name", "offset"]
158+
cmd = ["date", "+%Z\\", "%z"]
159+
out = self._exec_command(
160+
cmd=cmd, err_msg="Failed to obtain timezone info"
161+
)
162+
Timezone = namedtuple('Timezone', values)
163+
return Timezone(*[i.strip() for i in out.split()])
164+
165+
@property
166+
def timezone(self):
167+
if not self._timezone:
168+
self._timezone = self.get_timezone()
169+
return self._timezone
170+
117171
def stat(self, path):
118172
"""
119173
Get file or directory stats

tests/test_os.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,10 @@ class TestOperatingSystem(object):
4848
),
4949
'python -c "import platform;print(\',\'.join('
5050
'platform.linux_distribution()))"': (0, 'Fedora,23,Twenty Three', ''),
51+
'uname -r ; uname -v ; uname -m': (
52+
0, '4.18.0-135.el8\n#1 SMP Fri Aug 16 19:31:40 UTC\nx86_64\n', '',
53+
),
54+
'date +%Z\\ %z': (0, 'IDT +0300', ''),
5155
}
5256
files = {}
5357

@@ -84,6 +88,17 @@ def test_old_distro(self):
8488
assert result['ver'] == '23'
8589
assert result['name'] == 'Twenty Three'
8690

91+
def test_get_kernel_info(self):
92+
result = self.get_host().os.kernel_info
93+
assert result.release == '4.18.0-135.el8'
94+
assert result.version == '#1 SMP Fri Aug 16 19:31:40 UTC'
95+
assert result.type == 'x86_64'
96+
97+
def test_get_timezone(self):
98+
result = self.get_host().os.timezone
99+
assert result.name == 'IDT'
100+
assert result.offset == '+0300'
101+
87102

88103
class TestOperatingSystemNegative(object):
89104
data = {

0 commit comments

Comments
 (0)