1
0
mirror of https://github.com/ARM-software/workload-automation.git synced 2024-10-06 19:01:15 +01:00
workload-automation/wlauto/managers/linux.py
Sebastian Goscik 6f0de17201 LinuxManager: Added LinuxManager
Replaces BaseLinuxDevice & LinuxDevice
2016-02-19 15:26:54 +00:00

66 lines
2.9 KiB
Python

from wlauto.core.device_manager import DeviceManager
from wlauto import Parameter, Alias
from wlauto.utils.types import boolean
from wlauto.exceptions import ConfigError
from devlib.target import LinuxTarget
class LinuxManager(DeviceManager):
name = "linux"
target_type = LinuxTarget
aliases = [
Alias('generic_linux'),
]
parameters = [
Parameter('host', mandatory=True, description='Host name or IP address for the device.'),
Parameter('username', mandatory=True, description='User name for the account on the device.'),
Parameter('password', description='Password for the account on the device (for password-based auth).'),
Parameter('keyfile', description='Keyfile to be used for key-based authentication.'),
Parameter('port', kind=int, default=22, description='SSH port number on the device.'),
Parameter('password_prompt', default='[sudo] password',
description='Prompt presented by sudo when requesting the password.'),
Parameter('use_telnet', kind=boolean, default=False,
description='Optionally, telnet may be used instead of ssh, though this is discouraged.'),
Parameter('boot_timeout', kind=int, default=120,
description='How long to try to connect to the device after a reboot.'),
Parameter('working_directory', default="/root/wa", override=True),
Parameter('binaries_directory', default="/root/wa/bin", override=True),
]
def __init__(self, **kwargs):
super(LinuxManager, self).__init__(**kwargs)
self.platform = self.platform_type(core_names=self.core_names, # pylint: disable=E1102
core_clusters=self.core_clusters,
modules=self.modules)
self.target = self.target_type(connection_settings=self._make_connection_settings(),
connect=False,
platform=self.platform,
working_directory=self.working_directory,
executables_directory=self.binaries_directory,)
def validate(self):
if self.password and self.keyfile:
raise ConfigError("Either `password` or `keyfile` must be given but not both")
def connect(self):
self.target.connect(self.boot_timeout)
def _make_connection_settings(self):
connection_settings = {}
connection_settings['host'] = self.host
connection_settings['username'] = self.username
connection_settings['port'] = self.port
connection_settings['telnet'] = self.use_telnet
connection_settings['password_prompt'] = self.password_prompt
if self.keyfile:
connection_settings['keyfile'] = self.keyfilehollis
elif self.password:
connection_settings['password'] = self.password
return connection_settings