diff options
author | Roberto Hueso Gómez <rhueso@soleta.eu> | 2020-08-12 15:17:10 +0200 |
---|---|---|
committer | Roberto Hueso Gómez <rhueso@soleta.eu> | 2020-08-12 15:17:10 +0200 |
commit | 015a43ac3a418c074dbcd5bf64f4f6e20d9be021 (patch) | |
tree | 44f22e0911428b5c72a2c30184caa778bd7c922b /cli/objects/modes.py | |
parent | d4f4497056582c379722fcc92c3372c98825865e (diff) |
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'
}
Diffstat (limited to 'cli/objects/modes.py')
-rw-r--r-- | cli/objects/modes.py | 43 |
1 files changed, 39 insertions, 4 deletions
diff --git a/cli/objects/modes.py b/cli/objects/modes.py index 6171c84..ccb32f5 100644 --- a/cli/objects/modes.py +++ b/cli/objects/modes.py @@ -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) |