onedns/onedns/cli.py

86 lines
3.1 KiB
Python

import argparse
from onedns import utils
from onedns import server
from onedns import logger
from onedns import VERSION
def daemon(args, one_args, **kwargs):
test = kwargs.get('test', False)
test_vms = kwargs.get('test_vms')
srv = server.OneDNS(args.domain, one_kwargs=one_args)
srv.daemon(dns_address=args.dns_address,
dns_port=args.dns_port,
sync_interval=args.sync_interval,
user=args.user,
test=test, test_vms=test_vms)
def shell(args, one_args, **kwargs):
srv = server.OneDNS(args.domain, one_kwargs=one_args)
oneclient = srv._one
ns = dict(one_dns=srv, oneclient=oneclient, log=logger.log)
utils.shell(local_ns=ns)
def positive_int(value):
errmsg = "an integer greater than zero is required"
try:
ivalue = int(value)
except ValueError:
raise argparse.ArgumentTypeError(errmsg)
if ivalue <= 0:
raise argparse.ArgumentTypeError(errmsg)
return ivalue
def get_parser():
parser = argparse.ArgumentParser(
description='OneDNS - Dynamic DNS for OpenNebula')
parser.add_argument('--version', action='version', version=VERSION)
parser.add_argument('--debug', required=False,
action='store_true', default=False,
help='ONE controller host address')
parser.add_argument('-d', '--domain', required=False, default='one.local',
help='DNS domain to use')
parser.add_argument('--one-address', required=False,
help='ONE controller host address')
parser.add_argument('--one-secret', required=False,
help='ONE credentials to use (e.g. user:key)')
parser.add_argument('--one-proxy', required=False,
help='proxy host to use to connect to ONE controller')
subparsers = parser.add_subparsers()
daemon_parser = subparsers.add_parser('daemon')
daemon_parser.set_defaults(func=daemon)
daemon_parser.add_argument(
'--dns-address', required=False, default='0.0.0.0',
help="host for DNS server to listen on")
daemon_parser.add_argument(
'--dns-port', required=False, default=53, type=positive_int,
help="port for DNS server to listen on")
daemon_parser.add_argument(
'--sync-interval', required=False, default=5 * 60, type=positive_int,
help="time in seconds between ONE syncs")
daemon_parser.add_argument(
'--user', required=False, default='nobody',
help="system user name to setuid() to")
daemon_parser.add_argument(
'--no-tcp', dest='tcp', action='store_false',
help="disable TCP")
daemon_parser.set_defaults(tcp=True)
shell_parser = subparsers.add_parser('shell')
shell_parser.set_defaults(func=shell)
return parser
def main(**kwargs):
parser = get_parser()
args = parser.parse_args(args=kwargs.pop('args', None))
logger.configure_onedns_logging(debug=args.debug)
args_dict = vars(args)
one_args = utils.get_kwargs_from_dict(args_dict, 'one_')
args.func(args, one_args, **kwargs)