From 4bf4f91f5466131bf278a97a6e3685f66106fc6f Mon Sep 17 00:00:00 2001 From: Javier Hernandez Date: Fri, 27 Oct 2023 11:38:24 +0200 Subject: client: support for adding clients Add a new client with command: $ ogcli add client --repo-id --netmask --room-id --hostname --mac --ip --boot-mode For example: To add a new client with hostname "javipc", netmask 255.255.255.0, mac address a2:54:00:2e:05:7a, ip address 192.168.56.101, assign it to repo id 1, room id 1 and set its boot mode to oglive use: $ ogcli add client --hostname javipc --netmask 255.255.255.0 --mac a2:54:00:2e:05:7a --ip 192.168.56.101 --repo-id 1 --room-id 1 --boot-mode oglive Notes: - ogserver API REST json payload does not allow to specify a server (table 'entorno') for the client. It will automatically assign client to server with id 1 - ogserver API REST json payload specifies mac address without ':'. - payload must contain 'netiface', ogcli specifies 'eth0' is specified which is the default value in netiface column in db (table 'ordenadores') - netdriver column uses "generic" as default, this field is not used anymore, but it is set to "generic" by now. - ogserver should validate that boot mode set is correct. --- cli/objects/client.py | 69 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 67 insertions(+), 2 deletions(-) (limited to 'cli/objects/client.py') 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) -- cgit v1.2.3-18-g5258