cli: add room

add functionality to add and remove a room

to add a new room use the command: ogcli add room --name <name>
--netmask <netmask> --center <center> --gateway <gateway> [--location
<location>] [--ntp <ntp>] [--dns <dns>] [--group <group>]

for instance, to create a room with name 'dummyroom', netmask
'255.255.255.0' and gateway 10.141.10.1 that is inside the center with
id 1, use:

$ ogcli add room --name dummyroom --netmask 255.255.255.0 --gateway
10.141.10.1 --center 1

Optionally, it is possible to provide additional information such as
location (--location <location>), ntp server (--ntp <ntp>), dns server
(--dns <dns>), and a group to contain the room (--group <group>).

to delete a room use: ogcli delete room --id <id>

for instance, to delete room with id 4 use:

$ ogcli delete room --id 4
master
Javier Hernandez 2023-10-19 10:21:44 +02:00 committed by Jose M. Guisado
parent 7c30d56910
commit 1c2e5c4c96
3 changed files with 103 additions and 3 deletions

View File

@ -16,6 +16,7 @@ from cli.objects.reboot import OgReboot
from cli.objects.repo import OgRepo
from cli.objects.server import OgServer
from cli.objects.center import OgCenter
from cli.objects.room import OgRoom
import argparse
import requests
import sys
@ -196,7 +197,7 @@ class OgCLI():
OgImage.update_image(self.rest, args[1:])
def delete(self, args):
choices = ['server', 'center']
choices = ['server', 'center', 'room']
parser = argparse.ArgumentParser(prog='ogcli delete')
parser.add_argument('delete_obj', choices=choices)
@ -210,9 +211,11 @@ class OgCLI():
OgServer.delete_server(self.rest, args[1:])
elif parsed_args.delete_obj == 'center':
OgCenter.delete_center(self.rest, args[1:])
elif parsed_args.delete_obj == 'room':
OgRoom.delete_room(self.rest, args[1:])
def add(self, args):
choices = ['server', 'repo', 'center']
choices = ['server', 'repo', 'center', 'room']
parser = argparse.ArgumentParser(prog='ogcli add')
parser.add_argument('add_obj', choices=choices)
@ -228,3 +231,5 @@ class OgCLI():
OgRepo.add_repo(self.rest, args[1:])
elif parsed_args.add_obj == 'center':
OgCenter.add_center(self.rest, args[1:])
elif parsed_args.add_obj == 'room':
OgRoom.add_room(self.rest, args[1:])

View File

@ -0,0 +1,88 @@
import sys
import argparse
from cli.utils import check_address
class OgRoom():
@staticmethod
def add_room(rest, args):
parser = argparse.ArgumentParser(prog='ogcli add room')
parser.add_argument('--name',
nargs='?',
required=True,
help='give a name to the room')
parser.add_argument('--netmask',
nargs='?',
required=True,
help='provide the netmask for the room')
parser.add_argument('--center',
nargs='?',
type=int,
required=True,
help='provide the id of the center that will contain the room')
parser.add_argument('--location',
nargs='?',
required=False,
help='specify the location of the room')
parser.add_argument('--gateway',
nargs='?',
required=True,
help='address of the main gateway in the room')
parser.add_argument('--ntp',
nargs='?',
required=False,
help='address of the ntp server')
parser.add_argument('--dns',
nargs='?',
required=False,
help='address of the dns server')
parser.add_argument('--group',
nargs='?',
type=int,
required=False,
help='id of the group that will contain the room')
parsed_args = parser.parse_args(args)
err = False
if parsed_args.netmask and not check_address(parsed_args.netmask):
print('invalid netmask address', file=sys.stderr)
err = True
if parsed_args.gateway and not check_address(parsed_args.gateway):
print('invalid gateway address', file=sys.stderr)
err = True
if parsed_args.ntp and not check_address(parsed_args.ntp):
print('invalid ntp address', file=sys.stderr)
err = True
if parsed_args.dns and not check_address(parsed_args.dns):
print('invalid dns address', file=sys.stderr)
err = True
if err:
parser.print_help(file=sys.stderr)
sys.exit(1)
payload = {
'name': parsed_args.name,
'netmask': parsed_args.netmask,
'center': parsed_args.center
}
if parsed_args.gateway:
payload['gateway'] = parsed_args.gateway
if parsed_args.ntp:
payload['ntp'] = parsed_args.ntp
if parsed_args.dns:
payload['dns'] = parsed_args.dns
if parsed_args.group:
payload['group'] = parsed_args.group
rest.post('/room/add', payload=payload)
@staticmethod
def delete_room(rest, args):
parser = argparse.ArgumentParser(prog='ogcli delete room')
parser.add_argument('--id',
nargs='?',
required=True,
help='room id in database')
parsed_args = parser.parse_args(args)
payload = {'id': parsed_args.id}
rest.post('/room/delete', payload=payload)

View File

@ -6,7 +6,7 @@
# (at your option) any later version.
import json
import ipaddress
def scope_lookup(scope_id, scope_type, d):
if scope_id == d.get('id') and scope_type == d.get('type'):
@ -32,3 +32,10 @@ def ips_in_scope(scope):
def print_json(text):
payload = json.loads(text)
print(json.dumps(payload, sort_keys=True, indent=2))
def check_address(addr):
try:
ip = ipaddress.ip_address(addr)
return True
except:
return False