<p>pespin <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/17132">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  pespin: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">Inroduce RunNode class<br><br>This class will be used to hold information for a run node, that is, a<br>target system or environment were a process or task is run.<br>It superseeds in functionality the old ip_address resource, which will<br>eventually be droped in favor of RunNode.<br><br>Change-Id: I647bedf116aa9a570d925a5281c9491c9032e343<br>---<br>M src/osmo_gsm_tester/resource.py<br>A src/osmo_gsm_tester/run_node.py<br>M src/osmo_gsm_tester/suite.py<br>3 files changed, 79 insertions(+), 1 deletion(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/src/osmo_gsm_tester/resource.py b/src/osmo_gsm_tester/resource.py</span><br><span>index 992734d..0cdcb8a 100644</span><br><span>--- a/src/osmo_gsm_tester/resource.py</span><br><span>+++ b/src/osmo_gsm_tester/resource.py</span><br><span>@@ -40,14 +40,19 @@</span><br><span> RESERVED_RESOURCES_FILE = 'reserved_resources.state'</span><br><span> </span><br><span> R_IP_ADDRESS = 'ip_address'</span><br><span style="color: hsl(120, 100%, 40%);">+R_RUN_NODE = 'run_node'</span><br><span> R_BTS = 'bts'</span><br><span> R_ARFCN = 'arfcn'</span><br><span> R_MODEM = 'modem'</span><br><span> R_OSMOCON = 'osmocon_phone'</span><br><span style="color: hsl(0, 100%, 40%);">-R_ALL = (R_IP_ADDRESS, R_BTS, R_ARFCN, R_MODEM, R_OSMOCON)</span><br><span style="color: hsl(120, 100%, 40%);">+R_ALL = (R_IP_ADDRESS, R_RUN_NODE, R_BTS, R_ARFCN, R_MODEM, R_OSMOCON)</span><br><span> </span><br><span> RESOURCES_SCHEMA = {</span><br><span>         'ip_address[].addr': schema.IPV4,</span><br><span style="color: hsl(120, 100%, 40%);">+        'run_node[].run_type': schema.STR,</span><br><span style="color: hsl(120, 100%, 40%);">+        'run_node[].run_addr': schema.IPV4,</span><br><span style="color: hsl(120, 100%, 40%);">+        'run_node[].ssh_user': schema.STR,</span><br><span style="color: hsl(120, 100%, 40%);">+        'run_node[].ssh_addr': schema.IPV4,</span><br><span>         'bts[].label': schema.STR,</span><br><span>         'bts[].type': schema.STR,</span><br><span>         'bts[].ipa_unit_id': schema.UINT,</span><br><span>diff --git a/src/osmo_gsm_tester/run_node.py b/src/osmo_gsm_tester/run_node.py</span><br><span>new file mode 100644</span><br><span>index 0000000..88555a6</span><br><span>--- /dev/null</span><br><span>+++ b/src/osmo_gsm_tester/run_node.py</span><br><span>@@ -0,0 +1,69 @@</span><br><span style="color: hsl(120, 100%, 40%);">+# osmo_gsm_tester: run_node: object holding information on a target env to run stuff.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# Copyright (C) 2020 by sysmocom - s.f.m.c. GmbH</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# Author: Pau Espin Pedrol <pespin@sysmocom.de></span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# This program is free software: you can redistribute it and/or modify</span><br><span style="color: hsl(120, 100%, 40%);">+# it under the terms of the GNU General Public License as</span><br><span style="color: hsl(120, 100%, 40%);">+# published by the Free Software Foundation, either version 3 of the</span><br><span style="color: hsl(120, 100%, 40%);">+# License, or (at your option) any later version.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# This program is distributed in the hope that it will be useful,</span><br><span style="color: hsl(120, 100%, 40%);">+# but WITHOUT ANY WARRANTY; without even the implied warranty of</span><br><span style="color: hsl(120, 100%, 40%);">+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span><br><span style="color: hsl(120, 100%, 40%);">+# GNU General Public License for more details.</span><br><span style="color: hsl(120, 100%, 40%);">+#</span><br><span style="color: hsl(120, 100%, 40%);">+# You should have received a copy of the GNU General Public License</span><br><span style="color: hsl(120, 100%, 40%);">+# along with this program.  If not, see <http://www.gnu.org/licenses/>.</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+from . import log</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+class RunNode(log.Origin):</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    T_LOCAL = 'local'</span><br><span style="color: hsl(120, 100%, 40%);">+    T_REM_SSH = 'ssh'</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    def __init__(self, type=None, run_addr=None, ssh_user=None, ssh_addr=None):</span><br><span style="color: hsl(120, 100%, 40%);">+        super().__init__(log.C_RUN, 'runnode')</span><br><span style="color: hsl(120, 100%, 40%);">+        self._type = type</span><br><span style="color: hsl(120, 100%, 40%);">+        self._run_addr = run_addr</span><br><span style="color: hsl(120, 100%, 40%);">+        self._ssh_user = ssh_user</span><br><span style="color: hsl(120, 100%, 40%);">+        self._ssh_addr = ssh_addr</span><br><span style="color: hsl(120, 100%, 40%);">+        if not self._type:</span><br><span style="color: hsl(120, 100%, 40%);">+            raise log.Error('run_type not set')</span><br><span style="color: hsl(120, 100%, 40%);">+        if not self._run_addr:</span><br><span style="color: hsl(120, 100%, 40%);">+            raise log.Error('run_addr not set')</span><br><span style="color: hsl(120, 100%, 40%);">+        if self._type == RunNode.T_LOCAL and (self._ssh_user or self._ssh_addr):</span><br><span style="color: hsl(120, 100%, 40%);">+            raise log.Error('run_type=%s but ssh info set' % RunNode.T_LOCAL)</span><br><span style="color: hsl(120, 100%, 40%);">+        if self._type == RunNode.T_REM_SSH and not (self._ssh_user and self._ssh_addr):</span><br><span style="color: hsl(120, 100%, 40%);">+            raise log.Error('run_type=%s but ssh info NOT set' % RunNode.T_LOCAL)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+        if self._type == RunNode.T_LOCAL:</span><br><span style="color: hsl(120, 100%, 40%);">+            self.set_name('run-' + self._run_addr)</span><br><span style="color: hsl(120, 100%, 40%);">+        else:</span><br><span style="color: hsl(120, 100%, 40%);">+            self.set_name('run-' + self._run_addr + "(" + self._ssh_user + '@' + self._ssh_addr + ")")</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    @classmethod</span><br><span style="color: hsl(120, 100%, 40%);">+    def from_conf(cls, conf):</span><br><span style="color: hsl(120, 100%, 40%);">+        return cls(conf.get('run_type', None), conf.get('run_addr', None), conf.get('ssh_user', None), conf.get('ssh_addr', None))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    def is_local(self):</span><br><span style="color: hsl(120, 100%, 40%);">+        return self._type == RunNode.T_LOCAL</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    def __str__(self):</span><br><span style="color: hsl(120, 100%, 40%);">+        return self.name()</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    def run_type(self):</span><br><span style="color: hsl(120, 100%, 40%);">+        return self._type</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    def run_addr(self):</span><br><span style="color: hsl(120, 100%, 40%);">+        return self._run_addr</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    def ssh_user(self):</span><br><span style="color: hsl(120, 100%, 40%);">+        return self._ssh_user</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+    def ssh_addr(self):</span><br><span style="color: hsl(120, 100%, 40%);">+        return self._ssh_addr</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# vim: expandtab tabstop=4 shiftwidth=4</span><br><span>diff --git a/src/osmo_gsm_tester/suite.py b/src/osmo_gsm_tester/suite.py</span><br><span>index 0738e96..457bfb3 100644</span><br><span>--- a/src/osmo_gsm_tester/suite.py</span><br><span>+++ b/src/osmo_gsm_tester/suite.py</span><br><span>@@ -24,6 +24,7 @@</span><br><span> from . import config, log, util, resource, test</span><br><span> from .event_loop import MainLoop</span><br><span> from . import osmo_nitb, osmo_hlr, osmo_mgcpgw, osmo_mgw, osmo_msc, osmo_bsc, osmo_stp, osmo_ggsn, osmo_sgsn, esme, osmocon, ms_driver, iperf3, process</span><br><span style="color: hsl(120, 100%, 40%);">+from . import run_node</span><br><span> </span><br><span> class Timeout(Exception):</span><br><span>     pass</span><br><span>@@ -358,6 +359,9 @@</span><br><span>         self.register_for_cleanup(esme_obj)</span><br><span>         return esme_obj</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+    def run_node(self, specifics=None):</span><br><span style="color: hsl(120, 100%, 40%);">+        return run_node.RunNode.from_conf(self.reserved_resources.get(resource.R_RUN_NODE, specifics=specifics))</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     def osmocon(self, specifics=None):</span><br><span>         conf = self.reserved_resources.get(resource.R_OSMOCON, specifics=specifics)</span><br><span>         osmocon_obj = osmocon.Osmocon(self, conf=conf)</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-gsm-tester/+/17132">change 17132</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/+/17132"/><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: I647bedf116aa9a570d925a5281c9491c9032e343 </div>
<div style="display:none"> Gerrit-Change-Number: 17132 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </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>