|
|
|
@ -43,6 +43,7 @@ class VPCSDevice(object):
|
|
|
|
|
:param working_dir: path to a working directory
|
|
|
|
|
:param host: host/address to bind for console and UDP connections
|
|
|
|
|
:param name: name of this VPCS device
|
|
|
|
|
:param console: TCP console port
|
|
|
|
|
:param console_start_port_range: TCP console port range start
|
|
|
|
|
:param console_end_port_range: TCP console port range end
|
|
|
|
|
"""
|
|
|
|
@ -55,6 +56,7 @@ class VPCSDevice(object):
|
|
|
|
|
working_dir,
|
|
|
|
|
host="127.0.0.1",
|
|
|
|
|
name=None,
|
|
|
|
|
console=None,
|
|
|
|
|
console_start_port_range=4512,
|
|
|
|
|
console_end_port_range=5000):
|
|
|
|
|
|
|
|
|
@ -77,7 +79,7 @@ class VPCSDevice(object):
|
|
|
|
|
self._name = "VPCS{}".format(self._id)
|
|
|
|
|
|
|
|
|
|
self._path = path
|
|
|
|
|
self._console = None
|
|
|
|
|
self._console = console
|
|
|
|
|
self._working_dir = None
|
|
|
|
|
self._command = []
|
|
|
|
|
self._process = None
|
|
|
|
@ -94,15 +96,18 @@ class VPCSDevice(object):
|
|
|
|
|
# update the working directory
|
|
|
|
|
self.working_dir = working_dir
|
|
|
|
|
|
|
|
|
|
# allocate a console port
|
|
|
|
|
try:
|
|
|
|
|
self._console = find_unused_port(self._console_start_port_range,
|
|
|
|
|
self._console_end_port_range,
|
|
|
|
|
self._host,
|
|
|
|
|
ignore_ports=self._allocated_console_ports)
|
|
|
|
|
except Exception as e:
|
|
|
|
|
raise VPCSError(e)
|
|
|
|
|
|
|
|
|
|
if not self._console:
|
|
|
|
|
# allocate a console port
|
|
|
|
|
try:
|
|
|
|
|
self._console = find_unused_port(self._console_start_port_range,
|
|
|
|
|
self._console_end_port_range,
|
|
|
|
|
self._host,
|
|
|
|
|
ignore_ports=self._allocated_console_ports)
|
|
|
|
|
except Exception as e:
|
|
|
|
|
raise VPCSError(e)
|
|
|
|
|
|
|
|
|
|
if self._console in self._allocated_console_ports:
|
|
|
|
|
raise VPCSError("Console port {} is already used by another VPCS device".format(console))
|
|
|
|
|
self._allocated_console_ports.append(self._console)
|
|
|
|
|
|
|
|
|
|
log.info("VPCS device {name} [id={id}] has been created".format(name=self._name,
|
|
|
|
@ -250,7 +255,7 @@ class VPCSDevice(object):
|
|
|
|
|
"""
|
|
|
|
|
|
|
|
|
|
if console in self._allocated_console_ports:
|
|
|
|
|
raise VPCSError("Console port {} is already in used by another VPCS device".format(console))
|
|
|
|
|
raise VPCSError("Console port {} is already used by another VPCS device".format(console))
|
|
|
|
|
|
|
|
|
|
self._allocated_console_ports.remove(self._console)
|
|
|
|
|
self._console = console
|
|
|
|
|