Skip to content

Commit fcdeab4

Browse files
committed
linux: add helpers from InfoDriver
This ports the functionality of the InfoDriver in labgrid to this library. The intention is to remove the InfoDriver from labgrid eventually. Signed-off-by: Rouven Czerwinski <[email protected]>
1 parent 75b192f commit fcdeab4

File tree

1 file changed

+61
-0
lines changed

1 file changed

+61
-0
lines changed

labgridhelper/linux.py

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,3 +57,64 @@ def get_commands(command, directories=None):
5757
commands.append(cmd)
5858

5959
return commands
60+
61+
def get_systemd_service_active(command, service):
62+
"""Returns True if service is active, False in all other cases
63+
Args:
64+
command (CommandProtocol): An instance of a Driver implementing the CommandProtocol
65+
service (str): name of the service
66+
Returns:
67+
bool: True if service is active, False otherwise
68+
"""
69+
assert isinstance(command, CommandProtocol), "command must be a CommandProtocol"
70+
_, _, exitcode = command.run(
71+
"systemctl --quiet is-active {}".format(service)
72+
)
73+
return exitcode == 0
74+
75+
def get_interface_ip(command, interface="eth0"):
76+
import re
77+
"""Returns the global valid IPv4 address of the supplied interface
78+
Args:
79+
command (CommandProtocol): An instance of a Driver implementing the CommandProtocol
80+
interface (string): name of the interface
81+
Returns:
82+
str: IPv4 address of the interface, None otherwise
83+
"""
84+
try:
85+
ip_string = command.run_check("ip -o -4 addr show")
86+
except ExecutionError:
87+
self.logger.debug('No ip address found')
88+
return None
89+
90+
regex = re.compile(
91+
r"""\d+: # Match the leading number
92+
\s+(?P<if>\w+) # Match whitespace and interfacename
93+
\s+inet\s+(?P<ip>[\d.]+) # Match IP Adress
94+
/(?P<prefix>\d+) # Match prefix
95+
.*global # Match global scope, not host scope""", re.X
96+
)
97+
result = {}
98+
99+
for line in ip_string:
100+
match = regex.match(line)
101+
if match:
102+
match = match.groupdict()
103+
result[match['if']] = match['ip']
104+
if result:
105+
return result[interface]
106+
107+
return None
108+
109+
def get_hostname(command):
110+
"""Returns the hostname
111+
Args:
112+
command (CommandProtocol): An instance of a Driver implementing the CommandProtocol
113+
Returns:
114+
str: hostname of the target, None otherwise
115+
"""
116+
try:
117+
hostname_string = command.run_check("hostname")
118+
except ExecutionError:
119+
return None
120+
return hostname_string[0]

0 commit comments

Comments
 (0)