weegee: cli: add `peer` commands

This commit is contained in:
Shiz 2021-12-13 03:34:28 +01:00
parent d92ccb5b5f
commit 926d09d7ff
1 changed files with 84 additions and 0 deletions

View File

@ -407,6 +407,90 @@ def main():
disconnect_interface.set_defaults(func=do_disconnect_interface, parser=disconnect_interface)
# Peer commands
peer = commands.add_parser('peer', help='peer commands')
peer.set_defaults(parser=peer)
peer_commands = peer.add_subparsers(title='subcommand')
def do_add_peer(parser: argparse.ArgumentParser, args: argparse.Namespace, ctx: WeegeeContext) -> None:
interface = WeegeeInterface.load(ctx, args.interface)
peer = WeegeePeer.create(ctx, args.name, interface,
routes=args.route, host=args.endpoint, port=args.port,
)
peer.save()
add_peer = peer_commands.add_parser('create', help='add new peer')
add_peer.add_argument('-r', '--route', type=ipaddress.ip_network, action='append', default=[], help='peer route(s)')
add_peer.add_argument('-e', '--endpoint', metavar='HOST', help='peer endpoint host (optional)')
add_peer.add_argument('-p', '--port', type=int, help='peer endpoint port (optional)')
add_peer.add_argument('name', help='peer name')
add_peer.add_argument('interface', help='existing interface name')
add_peer.set_defaults(func=do_add_peer, parser=add_peer)
def do_del_peer(parser: argparse.ArgumentParser, args: argparse.Namespace, ctx: WeegeeContext) -> None:
if not args.yes_i_want_to_destroy_this:
parser.error('please pass --yes-i-want-to-destroy-this if you really want to destroy this peer')
peer = WeegeePeer.load(ctx, args.name)
peer.delete()
del_peer = peer_commands.add_parser('destroy', help='delete peer')
del_peer.add_argument('name', help='peer name')
del_peer.set_defaults(func=do_del_peer, parser=del_peer)
def do_get_peer(parser: argparse.ArgumentParser, args: argparse.Namespace, ctx: WeegeeContext) -> None:
peer = WeegeePeer.load(ctx, args.name)
for var in args.var:
do_get(peer, var)
get_peer = peer_commands.add_parser('get', help='get peer variable')
get_peer.add_argument('name', help='peer name')
get_peer.add_argument('var', nargs='*', help='variable spec')
get_peer.set_defaults(func=do_get_peer, parser=get_peer)
def do_connect_peer(parser: argparse.ArgumentParser, args: argparse.Namespace, ctx: WeegeeContext) -> None:
if not WeegeeConnection.exists(ctx, args.name):
connection = WeegeeConnection.create(ctx, args.name,
peers=[], preshared_key=args.preshared_key,
)
else:
connection = WeegeeConnection.load(ctx, args.name)
connections.peers.extend(WeegeePeer.load(ctx, peer).item for peer in args.peer)
if args.preshared_key:
connection.preshared_key = preshared_key
connection.save()
connect_peer = peer_commands.add_parser('connect', help='connect peers')
connect_peer.add_argument('-k', '--preshared-key', metavar='NAME', help='preshared key (optional)')
connect_peer.add_argument('name', help='connection name')
connect_peer.add_argument('peer', nargs='*', help='peer names')
connect_peer.set_defaults(func=do_connect_peer, parser=connect_peer)
def do_disconnect_peer(parser: argparse.ArgumentParser, args: argparse.Namespace, ctx: WeegeeContext) -> None:
connection = WeegeeConnection.load(ctx, args.name)
for peer in args.peer:
connection.peers.remove(WeegeePeer.load(ctx, peer).item)
if connection.peers:
connection.save()
else:
connection.delete()
disconnect_peer = peer_commands.add_parser('disconnect', help='disconnect peers')
disconnect_peer.add_argument('name', help='connection name')
disconnect_peer.add_argument('peer', nargs='+', help='peer names')
disconnect_peer.set_defaults(func=do_disconnect_peer, parser=disconnect_peer)
def do_get_connection(parser: argparse.ArgumentParser, args: argparse.Namespace, ctx: WeegeeContext) -> None:
connection = WeegeeConnection.load(ctx, args.name)
for var in args.var:
do_get(connection, var)
get_connection = peer_commands.add_parser('get-connect', help='get connection variable')
get_connection.add_argument('name', help='connection name')
get_connection.add_argument('var', nargs='*', help='variable spec')
get_connection.set_defaults(func=do_get_connection, parser=get_connection)
# Server commands
server = commands.add_parser('server', help='server commands')