mirror of https://git.48k.eu/ogcli/
scopes: add scope filtering by name
Implement the --name flag in scope list to filter by client name. Example usage: ogcli list scope --name testmaster v0.3.3-13
parent
8f5b709212
commit
59f2f501aa
|
@ -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)
|
||||
|
|
Loading…
Reference in New Issue