cli: add list scopes --client-ip

Implement a --client-ip filter to ease the task of finding the
hierarchy associated to a client or list of clients.

Usage:
/ogcli list scopes --client-ip 10.141.10.23

/ogcli list scopes --client-ip 10.141.10.23 --client-ip 10.141.10.22
master
Alejandro Sirgo Rica 2024-06-03 12:46:28 +02:00
parent e92e38bcca
commit 10d7b972ca
2 changed files with 50 additions and 3 deletions

View File

@ -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':

View File

@ -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)