diff options
-rw-r--r-- | cli/cli.py | 2 | ||||
-rw-r--r-- | cli/objects/scopes.py | 51 |
2 files changed, 50 insertions, 3 deletions
@@ -96,7 +96,7 @@ class OgCLI(): elif parsed_args.item == 'modes': OgModes.list_available_modes(self.rest) elif parsed_args.item == 'scopes': - OgScope.list_scopes(self.rest) + OgScope.list_scopes(self.rest, args[1:]) elif parsed_args.item == 'images': OgImage.list_images(self.rest) elif parsed_args.item == 'disks': diff --git a/cli/objects/scopes.py b/cli/objects/scopes.py index 1900b1b..6a9b71d 100644 --- a/cli/objects/scopes.py +++ b/cli/objects/scopes.py @@ -8,11 +8,58 @@ import argparse from cli.utils import print_json +import json +def _find_client_path(json_data, client_ip, res): + if json_data['type'] == 'computer': + if json_data['ip'] == client_ip: + res.append(f'{json_data['type']}: {client_ip}') + return True + return False + + children = json_data['scope'] + for child in children: + found = _find_client_path(child, client_ip, res) + if found: + res.append(f'{json_data['type']}: {json_data['name']}') + return True + return False + + +def _get_client_path(json_data, client_ip): + res = [] + children = json_data['scope'] + for child in children: + _find_client_path(child, client_ip, res) + res.reverse() + return res class OgScope(): @staticmethod - def list_scopes(rest): + def list_scopes(rest, args): + parser = argparse.ArgumentParser(prog='ogcli list scopes') + parser.add_argument('--client-ip', + action='append', + default=[], + required=False, + help='Client(s) IP') + parsed_args = parser.parse_args(args) + + ips = set() + for ip in parsed_args.client_ip: + ips.add(ip) + r = rest.get('/scopes') - print_json(r.text) + + if not ips: + 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) |