<p>pespin <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/18482">View Change</a></p><div style="white-space:pre-wrap">Approvals:
pespin: Looks good to me, approved
Jenkins Builder: Verified
</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">enb: Reuse run_node to hold run info<br><br>Change-Id: If396940f154813d42ff3d3364c44b8979179127f<br>---<br>M doc/examples/4g_srsLTE/resources.conf<br>M src/osmo_gsm_tester/obj/enb.py<br>M src/osmo_gsm_tester/obj/enb_amarisoft.py<br>M src/osmo_gsm_tester/obj/enb_srs.py<br>M src/osmo_gsm_tester/obj/run_node.py<br>M sysmocom/resources.conf.prod<br>6 files changed, 58 insertions(+), 50 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/doc/examples/4g_srsLTE/resources.conf b/doc/examples/4g_srsLTE/resources.conf</span><br><span>index a1bdcbc..f0db3c0 100644</span><br><span>--- a/doc/examples/4g_srsLTE/resources.conf</span><br><span>+++ b/doc/examples/4g_srsLTE/resources.conf</span><br><span>@@ -11,15 +11,21 @@</span><br><span> - label: srsENB-zmq</span><br><span> type: srsenb</span><br><span> rf_dev_type: zmq</span><br><span style="color: hsl(0, 100%, 40%);">- remote_user: jenkins</span><br><span style="color: hsl(0, 100%, 40%);">- addr: 172.18.50.101</span><br><span style="color: hsl(120, 100%, 40%);">+ run_node:</span><br><span style="color: hsl(120, 100%, 40%);">+ run_type: ssh</span><br><span style="color: hsl(120, 100%, 40%);">+ run_addr: 172.18.50.101</span><br><span style="color: hsl(120, 100%, 40%);">+ ssh_user: jenkins</span><br><span style="color: hsl(120, 100%, 40%);">+ ssh_addr: 172.18.50.101</span><br><span> </span><br><span> - label: srsENB-B200</span><br><span> type: srsenb</span><br><span> rf_dev_type: uhd</span><br><span> rf_dev_args: 'type=b200,serial=317B9FE'</span><br><span style="color: hsl(0, 100%, 40%);">- remote_user: jenkins</span><br><span style="color: hsl(0, 100%, 40%);">- addr: 172.18.50.102</span><br><span style="color: hsl(120, 100%, 40%);">+ run_node:</span><br><span style="color: hsl(120, 100%, 40%);">+ run_type: ssh</span><br><span style="color: hsl(120, 100%, 40%);">+ run_addr: 172.18.50.102</span><br><span style="color: hsl(120, 100%, 40%);">+ ssh_user: jenkins</span><br><span style="color: hsl(120, 100%, 40%);">+ ssh_addr: 172.18.50.102</span><br><span> </span><br><span> modem:</span><br><span> - label: srsUE-zmq</span><br><span>diff --git a/src/osmo_gsm_tester/obj/enb.py b/src/osmo_gsm_tester/obj/enb.py</span><br><span>index 9db0d69..7004805 100644</span><br><span>--- a/src/osmo_gsm_tester/obj/enb.py</span><br><span>+++ b/src/osmo_gsm_tester/obj/enb.py</span><br><span>@@ -20,13 +20,12 @@</span><br><span> from abc import ABCMeta, abstractmethod</span><br><span> from ..core import log, config</span><br><span> from ..core import schema</span><br><span style="color: hsl(120, 100%, 40%);">+from . import run_node</span><br><span> </span><br><span> def on_register_schemas():</span><br><span> resource_schema = {</span><br><span> 'label': schema.STR,</span><br><span> 'type': schema.STR,</span><br><span style="color: hsl(0, 100%, 40%);">- 'remote_user': schema.STR,</span><br><span style="color: hsl(0, 100%, 40%);">- 'addr': schema.IPV4,</span><br><span> 'gtp_bind_addr': schema.IPV4,</span><br><span> 'id': schema.UINT,</span><br><span> 'num_prb': schema.UINT,</span><br><span>@@ -60,6 +59,8 @@</span><br><span> 'cell_list[].dl_rfemu.addr': schema.IPV4,</span><br><span> 'cell_list[].dl_rfemu.ports[]': schema.UINT,</span><br><span> }</span><br><span style="color: hsl(120, 100%, 40%);">+ for key, val in run_node.RunNode.schema().items():</span><br><span style="color: hsl(120, 100%, 40%);">+ resource_schema['run_node.%s' % key] = val</span><br><span> schema.register_resource_schema('enb', resource_schema)</span><br><span> </span><br><span> class eNodeB(log.Origin, metaclass=ABCMeta):</span><br><span>@@ -70,13 +71,11 @@</span><br><span> def __init__(self, testenv, conf, name):</span><br><span> super().__init__(log.C_RUN, '%s' % name)</span><br><span> self._conf = conf</span><br><span style="color: hsl(0, 100%, 40%);">- self._addr = conf.get('addr', None)</span><br><span style="color: hsl(0, 100%, 40%);">- if self._addr is None:</span><br><span style="color: hsl(0, 100%, 40%);">- raise log.Error('addr not set')</span><br><span style="color: hsl(120, 100%, 40%);">+ self._run_node = run_node.RunNode.from_conf(conf.get('run_node', {}))</span><br><span> self._gtp_bind_addr = conf.get('gtp_bind_addr', None)</span><br><span> if self._gtp_bind_addr is None:</span><br><span style="color: hsl(0, 100%, 40%);">- self._gtp_bind_addr = self._addr</span><br><span style="color: hsl(0, 100%, 40%);">- self.set_name('%s_%s' % (name, self._addr))</span><br><span style="color: hsl(120, 100%, 40%);">+ self._gtp_bind_addr = self._run_node.run_addr()</span><br><span style="color: hsl(120, 100%, 40%);">+ self.set_name('%s_%s' % (name, self._run_node.run_addr()))</span><br><span> self._txmode = 0</span><br><span> self._id = None</span><br><span> self._num_prb = 0</span><br><span>@@ -99,6 +98,7 @@</span><br><span> assert self._txmode</span><br><span> config.overlay(values, dict(enb={ 'num_ports': self.num_ports() }))</span><br><span> assert self._epc is not None</span><br><span style="color: hsl(120, 100%, 40%);">+ config.overlay(values, dict(enb={ 'addr': self.addr() }))</span><br><span> config.overlay(values, dict(enb={ 'mme_addr': self._epc.addr() }))</span><br><span> config.overlay(values, dict(enb={ 'gtp_bind_addr': self._gtp_bind_addr }))</span><br><span> self._num_cells = int(values['enb'].get('num_cells', None))</span><br><span>@@ -235,7 +235,7 @@</span><br><span> pass</span><br><span> </span><br><span> def addr(self):</span><br><span style="color: hsl(0, 100%, 40%);">- return self._addr</span><br><span style="color: hsl(120, 100%, 40%);">+ return self._run_node.run_addr()</span><br><span> </span><br><span> def ue_max_rate(self, downlink=True):</span><br><span> # The max rate for a single UE per PRB configuration in TM1 with MCS 28 QAM64</span><br><span>diff --git a/src/osmo_gsm_tester/obj/enb_amarisoft.py b/src/osmo_gsm_tester/obj/enb_amarisoft.py</span><br><span>index fa79cbf..c331cd8 100644</span><br><span>--- a/src/osmo_gsm_tester/obj/enb_amarisoft.py</span><br><span>+++ b/src/osmo_gsm_tester/obj/enb_amarisoft.py</span><br><span>@@ -69,7 +69,6 @@</span><br><span> self.remote_log_file = None</span><br><span> self.enable_measurements = False</span><br><span> self.testenv = testenv</span><br><span style="color: hsl(0, 100%, 40%);">- self.remote_user = conf.get('remote_user', None)</span><br><span> if not rf_type_valid(conf.get('rf_dev_type', None)):</span><br><span> raise log.Error('Invalid rf_dev_type=%s' % conf.get('rf_dev_type', None))</span><br><span> </span><br><span>@@ -83,7 +82,7 @@</span><br><span> def cleanup(self):</span><br><span> if self.process is None:</span><br><span> return</span><br><span style="color: hsl(0, 100%, 40%);">- if self.setup_runs_locally():</span><br><span style="color: hsl(120, 100%, 40%);">+ if self._run_node.is_local():</span><br><span> return</span><br><span> # copy back files (may not exist, for instance if there was an early error of process):</span><br><span> try:</span><br><span>@@ -91,10 +90,6 @@</span><br><span> except Exception as e:</span><br><span> self.log(repr(e))</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">- def setup_runs_locally(self):</span><br><span style="color: hsl(0, 100%, 40%);">- return self.remote_user is None</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> def start(self, epc):</span><br><span> self.log('Starting AmarisoftENB')</span><br><span> self._epc = epc</span><br><span>@@ -107,7 +102,7 @@</span><br><span> self.process.stdin_write('t\n')</span><br><span> </span><br><span> def _start(self):</span><br><span style="color: hsl(0, 100%, 40%);">- if self.setup_runs_locally():</span><br><span style="color: hsl(120, 100%, 40%);">+ if self._run_node.is_local():</span><br><span> env = { 'LD_LIBRARY_PATH': util.prepend_library_path(self.inst) }</span><br><span> binary = self.inst.child('.', AmarisoftENB.BINFILE)</span><br><span> self.dbg(run_dir=self.run_dir, binary=binary, env=env)</span><br><span>@@ -141,8 +136,8 @@</span><br><span> self.config_drb_file = self.run_dir.child(AmarisoftENB.CFGFILE_DRB)</span><br><span> self.log_file = self.run_dir.child(AmarisoftENB.LOGFILE)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if not self.setup_runs_locally():</span><br><span style="color: hsl(0, 100%, 40%);">- self.rem_host = remote.RemoteHost(self.run_dir, self.remote_user, self._addr)</span><br><span style="color: hsl(120, 100%, 40%);">+ if not self._run_node.is_local():</span><br><span style="color: hsl(120, 100%, 40%);">+ self.rem_host = remote.RemoteHost(self.run_dir, self._run_node.ssh_user(), self._run_node.ssh_addr())</span><br><span> remote_prefix_dir = util.Dir(AmarisoftENB.REMOTE_DIR)</span><br><span> self.remote_inst = util.Dir(remote_prefix_dir.child(os.path.basename(str(self.inst))))</span><br><span> remote_run_dir = util.Dir(remote_prefix_dir.child(AmarisoftENB.BINFILE))</span><br><span>@@ -186,7 +181,7 @@</span><br><span> </span><br><span> config.overlay(values, dict(enb=dict(rf_dev_args=rf_dev_args)))</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- logfile = self.log_file if self.setup_runs_locally() else self.remote_log_file</span><br><span style="color: hsl(120, 100%, 40%);">+ logfile = self.log_file if self._run_node.is_local() else self.remote_log_file</span><br><span> config.overlay(values, dict(enb=dict(log_filename=logfile)))</span><br><span> </span><br><span> # rf driver is shared between amarisoft enb and ue, so it has a</span><br><span>@@ -205,7 +200,7 @@</span><br><span> self.gen_conf_file(self.config_rf_file, AmarisoftENB.CFGFILE_RF, values)</span><br><span> self.gen_conf_file(self.config_drb_file, AmarisoftENB.CFGFILE_DRB, values)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if not self.setup_runs_locally():</span><br><span style="color: hsl(120, 100%, 40%);">+ if not self._run_node.is_local():</span><br><span> self.rem_host.recreate_remote_dir(self.remote_inst)</span><br><span> self.rem_host.scp('scp-inst-to-remote', str(self.inst), remote_prefix_dir)</span><br><span> self.rem_host.recreate_remote_dir(remote_run_dir)</span><br><span>diff --git a/src/osmo_gsm_tester/obj/enb_srs.py b/src/osmo_gsm_tester/obj/enb_srs.py</span><br><span>index 47b373e..9e93541 100644</span><br><span>--- a/src/osmo_gsm_tester/obj/enb_srs.py</span><br><span>+++ b/src/osmo_gsm_tester/obj/enb_srs.py</span><br><span>@@ -68,7 +68,6 @@</span><br><span> self.remote_pcap_file = None</span><br><span> self.enable_pcap = False</span><br><span> self.testenv = testenv</span><br><span style="color: hsl(0, 100%, 40%);">- self.remote_user = conf.get('remote_user', None)</span><br><span> self._additional_args = []</span><br><span> if not rf_type_valid(conf.get('rf_dev_type', None)):</span><br><span> raise log.Error('Invalid rf_dev_type=%s' % conf.get('rf_dev_type', None))</span><br><span>@@ -76,7 +75,7 @@</span><br><span> def cleanup(self):</span><br><span> if self.process is None:</span><br><span> return</span><br><span style="color: hsl(0, 100%, 40%);">- if self.setup_runs_locally():</span><br><span style="color: hsl(120, 100%, 40%);">+ if self._run_node.is_local():</span><br><span> return</span><br><span> # copy back files (may not exist, for instance if there was an early error of process):</span><br><span> try:</span><br><span>@@ -89,18 +88,15 @@</span><br><span> except Exception as e:</span><br><span> self.log(repr(e))</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- def setup_runs_locally(self):</span><br><span style="color: hsl(0, 100%, 40%);">- return self.remote_user is None</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> def start(self, epc):</span><br><span> self.log('Starting srsENB')</span><br><span> self._epc = epc</span><br><span> self.run_dir = util.Dir(self.testenv.test().get_run_dir().new_dir(self.name()))</span><br><span> self.configure()</span><br><span style="color: hsl(0, 100%, 40%);">- if self.remote_user:</span><br><span style="color: hsl(0, 100%, 40%);">- self.start_remotely()</span><br><span style="color: hsl(0, 100%, 40%);">- else:</span><br><span style="color: hsl(120, 100%, 40%);">+ if self._run_node.is_local():</span><br><span> self.start_locally()</span><br><span style="color: hsl(120, 100%, 40%);">+ else:</span><br><span style="color: hsl(120, 100%, 40%);">+ self.start_remotely()</span><br><span> </span><br><span> # send t+Enter to enable console trace</span><br><span> self.dbg('Enabling console trace')</span><br><span>@@ -149,8 +145,8 @@</span><br><span> self.log_file = self.run_dir.child(srsENB.LOGFILE)</span><br><span> self.pcap_file = self.run_dir.child(srsENB.PCAPFILE)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if not self.setup_runs_locally():</span><br><span style="color: hsl(0, 100%, 40%);">- self.rem_host = remote.RemoteHost(self.run_dir, self.remote_user, self._addr)</span><br><span style="color: hsl(120, 100%, 40%);">+ if not self._run_node.is_local():</span><br><span style="color: hsl(120, 100%, 40%);">+ self.rem_host = remote.RemoteHost(self.run_dir, self._run_node.ssh_user(), self._run_node.ssh_addr())</span><br><span> remote_prefix_dir = util.Dir(srsENB.REMOTE_DIR)</span><br><span> self.remote_inst = util.Dir(remote_prefix_dir.child(os.path.basename(str(self.inst))))</span><br><span> self.remote_run_dir = util.Dir(remote_prefix_dir.child(srsENB.BINFILE))</span><br><span>@@ -164,11 +160,11 @@</span><br><span> </span><br><span> values = super().configure(['srsenb'])</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- sibfile = self.config_sib_file if self.setup_runs_locally() else self.remote_config_sib_file</span><br><span style="color: hsl(0, 100%, 40%);">- rrfile = self.config_rr_file if self.setup_runs_locally() else self.remote_config_rr_file</span><br><span style="color: hsl(0, 100%, 40%);">- drbfile = self.config_drb_file if self.setup_runs_locally() else self.remote_config_drb_file</span><br><span style="color: hsl(0, 100%, 40%);">- logfile = self.log_file if self.setup_runs_locally() else self.remote_log_file</span><br><span style="color: hsl(0, 100%, 40%);">- pcapfile = self.pcap_file if self.setup_runs_locally() else self.remote_pcap_file</span><br><span style="color: hsl(120, 100%, 40%);">+ sibfile = self.config_sib_file if self._run_node.is_local() else self.remote_config_sib_file</span><br><span style="color: hsl(120, 100%, 40%);">+ rrfile = self.config_rr_file if self._run_node.is_local() else self.remote_config_rr_file</span><br><span style="color: hsl(120, 100%, 40%);">+ drbfile = self.config_drb_file if self._run_node.is_local() else self.remote_config_drb_file</span><br><span style="color: hsl(120, 100%, 40%);">+ logfile = self.log_file if self._run_node.is_local() else self.remote_log_file</span><br><span style="color: hsl(120, 100%, 40%);">+ pcapfile = self.pcap_file if self._run_node.is_local() else self.remote_pcap_file</span><br><span> config.overlay(values, dict(enb=dict(sib_filename=sibfile,</span><br><span> rr_filename=rrfile,</span><br><span> drb_filename=drbfile,</span><br><span>@@ -209,7 +205,7 @@</span><br><span> self.gen_conf_file(self.config_rr_file, srsENB.CFGFILE_RR, values)</span><br><span> self.gen_conf_file(self.config_drb_file, srsENB.CFGFILE_DRB, values)</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">- if not self.setup_runs_locally():</span><br><span style="color: hsl(120, 100%, 40%);">+ if not self._run_node.is_local():</span><br><span> self.rem_host.recreate_remote_dir(self.remote_inst)</span><br><span> self.rem_host.scp('scp-inst-to-remote', str(self.inst), remote_prefix_dir)</span><br><span> self.rem_host.recreate_remote_dir(self.remote_run_dir)</span><br><span>diff --git a/src/osmo_gsm_tester/obj/run_node.py b/src/osmo_gsm_tester/obj/run_node.py</span><br><span>index bd502af..6a030ac 100644</span><br><span>--- a/src/osmo_gsm_tester/obj/run_node.py</span><br><span>+++ b/src/osmo_gsm_tester/obj/run_node.py</span><br><span>@@ -21,13 +21,7 @@</span><br><span> from ..core import schema</span><br><span> </span><br><span> def on_register_schemas():</span><br><span style="color: hsl(0, 100%, 40%);">- resource_schema = {</span><br><span style="color: hsl(0, 100%, 40%);">- 'run_type': schema.STR,</span><br><span style="color: hsl(0, 100%, 40%);">- 'run_addr': schema.IPV4,</span><br><span style="color: hsl(0, 100%, 40%);">- 'ssh_user': schema.STR,</span><br><span style="color: hsl(0, 100%, 40%);">- 'ssh_addr': schema.IPV4,</span><br><span style="color: hsl(0, 100%, 40%);">- 'run_label': schema.STR,</span><br><span style="color: hsl(0, 100%, 40%);">- }</span><br><span style="color: hsl(120, 100%, 40%);">+ resource_schema = RunNode.schema()</span><br><span> schema.register_resource_schema('run_node', resource_schema)</span><br><span> </span><br><span> </span><br><span>@@ -63,6 +57,17 @@</span><br><span> conf.get('ssh_user', None), conf.get('ssh_addr', None),</span><br><span> conf.get('run_label', None))</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ @classmethod</span><br><span style="color: hsl(120, 100%, 40%);">+ def schema(cls):</span><br><span style="color: hsl(120, 100%, 40%);">+ resource_schema = {</span><br><span style="color: hsl(120, 100%, 40%);">+ 'run_type': schema.STR,</span><br><span style="color: hsl(120, 100%, 40%);">+ 'run_addr': schema.IPV4,</span><br><span style="color: hsl(120, 100%, 40%);">+ 'ssh_user': schema.STR,</span><br><span style="color: hsl(120, 100%, 40%);">+ 'ssh_addr': schema.IPV4,</span><br><span style="color: hsl(120, 100%, 40%);">+ 'run_label': schema.STR,</span><br><span style="color: hsl(120, 100%, 40%);">+ }</span><br><span style="color: hsl(120, 100%, 40%);">+ return resource_schema</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> def is_local(self):</span><br><span> return self._type == RunNode.T_LOCAL</span><br><span> </span><br><span>diff --git a/sysmocom/resources.conf.prod b/sysmocom/resources.conf.prod</span><br><span>index c66cafa..ec148f3 100644</span><br><span>--- a/sysmocom/resources.conf.prod</span><br><span>+++ b/sysmocom/resources.conf.prod</span><br><span>@@ -159,15 +159,21 @@</span><br><span> type: srsenb</span><br><span> rf_dev_type: zmq</span><br><span> rf_dev_args: auto</span><br><span style="color: hsl(0, 100%, 40%);">- remote_user: jenkins</span><br><span style="color: hsl(0, 100%, 40%);">- addr: 10.42.42.117</span><br><span style="color: hsl(120, 100%, 40%);">+ run_node:</span><br><span style="color: hsl(120, 100%, 40%);">+ run_type: ssh</span><br><span style="color: hsl(120, 100%, 40%);">+ run_addr: 10.42.42.117</span><br><span style="color: hsl(120, 100%, 40%);">+ ssh_user: jenkins</span><br><span style="color: hsl(120, 100%, 40%);">+ ssh_addr: 10.42.42.117</span><br><span> </span><br><span> - label: srsENB-B200</span><br><span> type: srsenb</span><br><span> rf_dev_type: uhd</span><br><span> rf_dev_args: "type=b200,serial=306BD11"</span><br><span style="color: hsl(0, 100%, 40%);">- remote_user: jenkins</span><br><span style="color: hsl(0, 100%, 40%);">- addr: 10.42.42.117</span><br><span style="color: hsl(120, 100%, 40%);">+ run_node:</span><br><span style="color: hsl(120, 100%, 40%);">+ run_type: ssh</span><br><span style="color: hsl(120, 100%, 40%);">+ run_addr: 10.42.42.117</span><br><span style="color: hsl(120, 100%, 40%);">+ ssh_user: jenkins</span><br><span style="color: hsl(120, 100%, 40%);">+ ssh_addr: 10.42.42.117</span><br><span> </span><br><span> arfcn:</span><br><span> - arfcn: 512</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/18482">change 18482</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/18482"/><meta itemprop="name" content="View Change"/></div></div>
<div style="display:none"> Gerrit-Project: osmo-gsm-tester </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: If396940f154813d42ff3d3364c44b8979179127f </div>
<div style="display:none"> Gerrit-Change-Number: 18482 </div>
<div style="display:none"> Gerrit-PatchSet: 3 </div>
<div style="display:none"> Gerrit-Owner: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>