mirror of https://git.48k.eu/ogcli/
Rework set mode command
This reworks the POST /mode command to the new API: POST /mode { 'clients': ['192.168.1.5', '192.168.1.6'] 'mode': 'pxe' }master
parent
d4f4497056
commit
015a43ac3a
|
@ -18,16 +18,51 @@ class OgModes():
|
|||
@staticmethod
|
||||
def set_modes(rest, args):
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--scope-name',
|
||||
parser.add_argument('--scope-id',
|
||||
nargs=1,
|
||||
required=True,
|
||||
help='Name of the scope (room or computer)')
|
||||
help='ID of the scope')
|
||||
parser.add_argument('--scope-type',
|
||||
nargs=1,
|
||||
required=True,
|
||||
help='Type of the scope')
|
||||
parser.add_argument('--mode',
|
||||
nargs=1,
|
||||
required=True,
|
||||
help='Mode for the scope')
|
||||
parsed_args = parser.parse_args(args)
|
||||
|
||||
payload = {'scope_name': parsed_args.scope_name[0],
|
||||
'mode': parsed_args.mode[0]}
|
||||
def scope_lookup(scope_id, scope_type, d):
|
||||
if scope_id == d.get('id') and \
|
||||
scope_type == d.get('type'):
|
||||
return d
|
||||
for scope in d['scope']:
|
||||
lookup = scope_lookup(scope_id,
|
||||
scope_type,
|
||||
scope)
|
||||
if lookup is not None:
|
||||
return lookup
|
||||
return None
|
||||
|
||||
def ips_in_scope(scope):
|
||||
if 'ip' in scope:
|
||||
return [scope['ip']]
|
||||
ips = []
|
||||
for child in scope['scope']:
|
||||
ips += ips_in_scope(child)
|
||||
return ips
|
||||
|
||||
r = rest.get('/scopes')
|
||||
scopes = r.json()
|
||||
found_scope = scope_lookup(int(parsed_args.scope_id[0]),
|
||||
parsed_args.scope_type[0],
|
||||
scopes)
|
||||
|
||||
if found_scope is None:
|
||||
print("Scope not found")
|
||||
return None
|
||||
|
||||
ips = ips_in_scope(found_scope)
|
||||
|
||||
payload = {'clients': ips, 'mode': parsed_args.mode[0]}
|
||||
r = rest.post('/mode', payload=payload)
|
||||
|
|
Loading…
Reference in New Issue