diff options
-rw-r--r-- | cli/cli.py | 4 | ||||
-rw-r--r-- | cli/objects/client.py | 69 | ||||
-rw-r--r-- | cli/utils.py | 9 |
3 files changed, 79 insertions, 3 deletions
@@ -215,7 +215,7 @@ class OgCLI(): OgRoom.delete_room(self.rest, args[1:]) def add(self, args): - choices = ['server', 'repo', 'center', 'room'] + choices = ['server', 'repo', 'center', 'room', 'client'] parser = argparse.ArgumentParser(prog='ogcli add') parser.add_argument('add_obj', choices=choices) @@ -233,3 +233,5 @@ class OgCLI(): OgCenter.add_center(self.rest, args[1:]) elif parsed_args.add_obj == 'room': OgRoom.add_room(self.rest, args[1:]) + elif parsed_args.add_obj == 'client': + OgClient.add_client(self.rest, args[1:]) diff --git a/cli/objects/client.py b/cli/objects/client.py index c3ad760..d438742 100644 --- a/cli/objects/client.py +++ b/cli/objects/client.py @@ -6,9 +6,9 @@ # (at your option) any later version. import argparse +import requests -from cli.utils import print_json - +from cli.utils import print_json, check_address, check_mac_address class OgClient(): @@ -56,3 +56,68 @@ class OgClient(): payload = {'clients': parsed_args.client_ip} rest.post('/refresh', payload=payload) + + @staticmethod + def add_client(rest, args): + parser = argparse.ArgumentParser(prog='ogcli add client') + parser.add_argument('--repo-id', + type=int, + nargs='?', + required=True, + help='specify the id of the repo') + parser.add_argument('--netmask', + nargs='?', + required=True, + help='specify netmask address') + parser.add_argument('--room-id', + nargs='?', + type=int, + required=True, + help='specify the id of the room where the client is') + parser.add_argument('--hostname', + nargs='?', + required=True, + help='give a name to the client') + parser.add_argument('--mac', + nargs='?', + required=True, + help='mac address should have this format xx:xx:xx:xx:xx:xx') + parser.add_argument('--ip', + nargs='?', + required=True, + help='specify the ip address of the client') + r = rest.get('/mode') + boot_choices = r.json()['modes'] + parser.add_argument('--boot-mode', + nargs='?', + required=True, + choices=boot_choices, + help='set a valid boot mode for the client') + parsed_args = parser.parse_args(args) + + err = False + if not check_address(parsed_args.netmask): + print('netmask address is not valid', file=sys.stderr) + err = True + if not check_address(parsed_args.ip): + print('client\'s ip address is not valid', file=sys.stderr) + err = True + if not check_mac_address(parsed_args.mac): + print('client\'s mac address is not valid', file=sys.stderr) + err = True + if err: + parser.print_help(file=sys.stderr) + sys.exit(1) + payload = { + 'name': parsed_args.hostname, + 'netmask': parsed_args.netmask, + 'ip': parsed_args.ip, + 'mac': parsed_args.mac.replace(":", ""), + 'repo_id': parsed_args.repo_id, + 'room': parsed_args.room_id, + 'boot': parsed_args.boot_mode, + 'netiface': 'eth0', + 'netdriver': 'generic', + 'livedir': 'ogLive' + } + rest.post('/client/add', payload=payload) diff --git a/cli/utils.py b/cli/utils.py index 88c15a4..185e7ee 100644 --- a/cli/utils.py +++ b/cli/utils.py @@ -7,6 +7,7 @@ import json import ipaddress +import re def scope_lookup(scope_id, scope_type, d): if scope_id == d.get('id') and scope_type == d.get('type'): @@ -39,3 +40,11 @@ def check_address(addr): return True except: return False + +def check_mac_address(addr): + if re.match("[a-f0-9]{2}(:[a-f0-9]{2}){5}$", addr.lower()): + return True + else: + print(addr.lower()) + return False + |