Due to problems with SELinux and a general reconsideration of packet
capture, this patch makes all the dumps saved temporary.
They will be transfered to the controller as soon as the recipe finishes
and removed imediately to avoid disk usage issues on slave side.
Signed-off-by: Radek Pazdera <rpazdera(a)redhat.com>
---
lnst/Controller/NetTestController.py | 11 +++++++----
lnst/Slave/NetTestSlave.py | 18 +++++++++++++-----
2 files changed, 20 insertions(+), 9 deletions(-)
diff --git a/lnst/Controller/NetTestController.py b/lnst/Controller/NetTestController.py
index 1b3bad0..2e66b2a 100644
--- a/lnst/Controller/NetTestController.py
+++ b/lnst/Controller/NetTestController.py
@@ -501,7 +501,7 @@ class NetTestController:
for machine_id in self._recipe["machines"]:
hostname = self._recipe["machines"][machine_id]['info']['hostname']
- slave_logging_dir = os.path.join(logging_root, hostname)
+ slave_logging_dir = os.path.join(logging_root, hostname + "/")
try:
os.mkdir(slave_logging_dir)
except OSError as err:
@@ -511,11 +511,14 @@ class NetTestController:
raise NetTestError(msg)
capture_files = self._remote_capture_files[machine_id]
- for remote_path in capture_files:
- filename = os.path.basename(remote_path)
+ for dev_id, remote_path in capture_files.iteritems():
+ filename = "%s.pcap" % dev_id
local_path = os.path.join(slave_logging_dir, filename)
self._copy_from_slave(machine_id, remote_path, local_path)
+ logging.info("pcap files from machine %s stored at %s",
+ machine_id, slave_logging_dir)
+
def _update_system_config(self, machine_id, res_data, persistent=False):
info = self._get_machineinfo(machine_id)
system_config = info["system_config"]
@@ -589,7 +592,7 @@ class NetTestController:
status = self._rpc_call(machine_id, "start_copy_from", remote_path)
if not status:
raise NetTestError("The requested file cannot be transfered." \
- "It file does not exist on machine %d" % machine_id)
+ "It does not exist on machine %s" % machine_id)
local_file = open(local_path, "wb")
diff --git a/lnst/Slave/NetTestSlave.py b/lnst/Slave/NetTestSlave.py
index 4106f2d..4dc2d19 100644
--- a/lnst/Slave/NetTestSlave.py
+++ b/lnst/Slave/NetTestSlave.py
@@ -59,6 +59,7 @@ class NetTestSlaveXMLRPC:
self.clear_resource_table()
self._cache.del_old_entries()
self.reset_file_transfers()
+ self._remove_capture_files()
return "bye"
def get_new_logs(self):
@@ -110,14 +111,15 @@ class NetTestSlaveXMLRPC:
return self._netconfig.dump_config().items()
def start_packet_capture(self, filt):
- logging_dir = Logs.get_logging_root_path()
- logging_dir = os.path.abspath(logging_dir)
netconfig = self._netconfig.dump_config()
- files = []
+ files = {}
for dev_id, dev_spec in netconfig.iteritems():
- dump_file = os.path.join(logging_dir, "%s.pcap" % dev_id)
- files.append(dump_file)
+ df_handle = NamedTemporaryFile(delete=False)
+ dump_file = df_handle.name
+ df_handle.close()
+
+ files[dev_id] = dump_file
pcap = PacketCapture()
pcap.set_interface(dev_spec["name"])
@@ -127,6 +129,7 @@ class NetTestSlaveXMLRPC:
self._packet_captures[dev_id] = pcap
+ self._capture_files = files
return files
def stop_packet_capture(self):
@@ -137,6 +140,11 @@ class NetTestSlaveXMLRPC:
return True
+ def _remove_capture_files(self):
+ for name in self._capture_files.itervalues():
+ logging.debug("Removing temporary packet capture file %s", name)
+ os.unlink(name)
+
def run_command(self, command):
try:
cmd_cls = NetTestCommand(self._command_context, command,
--
1.7.7.6