[spp] [PATCH 3/7] cli: add filter for running pri commands
Yasufumi Ogawa
yasufum.o at gmail.com
Thu Jan 16 13:02:31 CET 2020
For spp_primary, some of methods such as _run_add(), _run_del() or so,
should not be executed if forwarder thread is not running. This update
is to add util function for checking the forwarder is running, and
refuse required operation if the forwarder is not running.
Signed-off-by: Yasufumi Ogawa <yasufum.o at gmail.com>
---
src/cli/commands/pri.py | 59 ++++++++++++++++++++++++++++++++---------
1 file changed, 46 insertions(+), 13 deletions(-)
diff --git a/src/cli/commands/pri.py b/src/cli/commands/pri.py
index 9212897..1443e9e 100644
--- a/src/cli/commands/pri.py
+++ b/src/cli/commands/pri.py
@@ -46,6 +46,20 @@ class SppPrimary(object):
temp = temp + "{vhost_cli}"
self.launch_template = temp
+ def _do_if_forwarder_exists(self, status, func, params):
+ """Execute command of func if forwarder thread is existing.
+
+ Params status is a json object, func is a method of this class such
+ as _run_add() or _run_del() or so, and params is a set of given
+ parameters.
+ """
+
+ # It includes `forwarder` if spp_primary runs a forwarder thread.
+ if 'forwarder' in status:
+ func(params)
+ else:
+ print('No forwarder is running.')
+
def run(self, cmd, cli_config):
"""Called from do_pri() to Send command to primary process."""
@@ -60,11 +74,15 @@ class SppPrimary(object):
# use short name
common_err_codes = self.spp_ctl_cli.rest_common_error_codes
+ # Get status here for inspecting if forwarder exists. Do not run
+ # command such as `add` or `del` if forwarder does not exist.
+ res = self.spp_ctl_cli.get('primary/status')
+ status = res.json()
+
if subcmd == 'status':
- res = self.spp_ctl_cli.get('primary/status')
if res is not None:
if res.status_code == 200:
- self.print_status(res.json())
+ self.print_status(status)
elif res.status_code in common_err_codes:
# Print default error message
pass
@@ -72,16 +90,17 @@ class SppPrimary(object):
print('Error: unknown response from status.')
elif subcmd == 'add':
- self._run_add(params)
+ self._do_if_forwarder_exists(status, self._run_add, params)
elif subcmd == 'del':
- self._run_del(params)
+ self._do_if_forwarder_exists(status, self._run_del, params)
elif subcmd == 'forward' or cmd == 'stop':
- self._run_forward_or_stop(cmd)
+ self._do_if_forwarder_exists(status,
+ self._run_forward_or_stop, params)
elif subcmd == 'patch':
- self._run_patch(params)
+ self._do_if_forwarder_exists(status, self._run_patch, params)
elif subcmd == 'launch':
wait_time = float(cli_config['sec_wait_launch']['val'])
@@ -217,8 +236,10 @@ class SppPrimary(object):
temp = '{s6}{rid:2} {rx:10} {tx:10} {rx_d:10} {tx_d:10}'
for rports in json_obj['ring_ports']:
print(temp.format(s6=sep*6,
- rid=rports['id'], rx=rports['rx'], tx=rports['tx'],
- rx_d=rports['rx_drop'], tx_d=rports['tx_drop']))
+ rid=rports['id'],
+ rx=rports['rx'], tx=rports['tx'],
+ rx_d=rports['rx_drop'],
+ tx_d=rports['tx_drop']))
except KeyError as e:
logger.error('{} is not defined!'.format(e))
@@ -233,7 +254,11 @@ class SppPrimary(object):
if res is not None:
error_codes = self.spp_ctl_cli.rest_common_error_codes
if res.status_code == 200:
- return res.json()['forwarder']['ports']
+ if 'forwarder' in res.json():
+ return res.json()['forwarder']['ports']
+ else:
+ # Do nothing if there is no forwarder
+ pass
elif res.status_code in error_codes:
pass
else:
@@ -251,7 +276,11 @@ class SppPrimary(object):
if res is not None:
error_codes = self.spp_ctl_cli.rest_common_error_codes
if res.status_code == 200:
- return res.json()['forwarder']['patches']
+ if 'forwarder' in res.json():
+ return res.json()['forwarder']['patches']
+ else:
+ # Do nothing if there is no forwarder
+ pass
elif res.status_code in error_codes:
pass
else:
@@ -270,9 +299,13 @@ class SppPrimary(object):
if res is not None:
error_codes = self.spp_ctl_cli.rest_common_error_codes
if res.status_code == 200:
- ports = res.json()['forwarder']['ports']
- patches = res.json()['forwarder']['patches']
- return ports, patches
+ if 'forwarder' in res.json():
+ ports = res.json()['forwarder']['ports']
+ patches = res.json()['forwarder']['patches']
+ return ports, patches
+ else:
+ # Do nothing if there is no forwarder
+ pass
elif res.status_code in error_codes:
pass
else:
--
2.17.1
More information about the spp
mailing list