From 59f2f501aa6dfc2f238f670625c11d9fd3d49cef Mon Sep 17 00:00:00 2001 From: Alejandro Sirgo Rica Date: Thu, 12 Sep 2024 13:26:42 +0200 Subject: scopes: add scope filtering by name Implement the --name flag in scope list to filter by client name. Example usage: ogcli list scope --name test --- cli/objects/scopes.py | 47 ++++++++++++++++++++++++++++++----------------- 1 file changed, 30 insertions(+), 17 deletions(-) (limited to 'cli') diff --git a/cli/objects/scopes.py b/cli/objects/scopes.py index 7f70cdd..548b93c 100644 --- a/cli/objects/scopes.py +++ b/cli/objects/scopes.py @@ -10,27 +10,30 @@ import argparse from cli.utils import print_json import json -def _find_client_path(json_data, client_ip, res): +def _find_client_path(json_data, client_ip, client_name, res): if json_data['type'] == 'computer': if json_data['ip'] == client_ip: res.append(f'{json_data["type"]}: {client_ip}') return True + elif json_data['name'] == client_name: + res.append(f'{json_data["type"]}: {client_name}') + return True return False children = json_data['scope'] for child in children: - found = _find_client_path(child, client_ip, res) + found = _find_client_path(child, client_ip, client_name, res) if found: res.append(f'{json_data["type"]}: {json_data["name"]}') return True return False -def _get_client_path(json_data, client_ip): +def _get_client_path(json_data, client_ip, client_name): res = [] children = json_data['scope'] for child in children: - _find_client_path(child, client_ip, res) + _find_client_path(child, client_ip, client_name, res) res.reverse() return res @@ -39,11 +42,15 @@ class OgScope(): @staticmethod def list_scopes(rest, args): parser = argparse.ArgumentParser(prog='ogcli list scope') - parser.add_argument('--client-ip', - action='append', - default=[], - required=False, - help='Client(s) IP') + group = parser.add_mutually_exclusive_group(required=False) + group.add_argument('--client-ip', + action='append', + default=[], + help='Client(s) IP') + group.add_argument('--name', + nargs='?', + help='Name of the client') + parsed_args = parser.parse_args(args) ips = set() @@ -51,15 +58,21 @@ class OgScope(): ips.add(ip) r = rest.get('/scopes') + json_data = json.loads(r.text) - if not ips: + if parsed_args.name: + path = _get_client_path(json_data, None, parsed_args.name) + for i, item in enumerate(path): + print(' ' * i + item) + elif parsed_args.client_ip: + for idx, client_ip in enumerate(parsed_args.client_ip): + if idx != 0: + print('\n') + path = _get_client_path(json_data, client_ip, None) + for i, item in enumerate(path): + print(' ' * i + item) + return None + else: print_json(r.text) return None - json_data = json.loads(r.text) - for idx, client_ip in enumerate(ips): - if idx != 0: - print('\n') - path = _get_client_path(json_data, client_ip) - for i, item in enumerate(path): - print(' ' * i + item) -- cgit v1.2.3-18-g5258