Source code for dnszonetest.cli

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# vim: ai et ts=4 sw=4 sts=4 fenc=UTF-8 ft=python

'''
dnszonetest.cli
-------------

Main dnszonetest CLI.
'''

from __future__ import print_function
from __future__ import unicode_literals
import argparse
import logging
import logging.handlers
import sys

from dnszonetest.main import DnsZoneTest

logger = logging.getLogger(__name__)


[docs]def setup_logging(verbose, quiet, logfile=None): ''' Sets up logging. :param bool verbose: verbose output. :param bool quiet: suppress output. ''' if verbose: log_level = logging.DEBUG elif quiet: log_level = logging.CRITICAL else: log_level = logging.INFO # Root logger logger = logging.getLogger() # Clear all handlers [handler.close() for handler in logger.handlers] logger.handlers = [] # Root logger logs all logger.setLevel(logging.DEBUG) if logfile is None: # Console handler console_handler = logging.StreamHandler() console_handler.setFormatter( logging.Formatter(fmt='%(levelname)-10s%(message)s',) ) console_handler.setLevel(log_level) logger.addHandler(console_handler) else: # File handler file_handler = logging.FileHandler(logfile) file_handler.setFormatter( logging.Formatter(fmt='%(levelname)-10s%(message)s',) ) file_handler.setLevel(log_level) logger.addHandler(file_handler)
[docs]def parse_args(args): ''' Parse the command-line arguments to dnszonetest. :param list args: list of arguments (example: sys.argv[1:]) :returns: argparse.Namespace :rtype: argparse.Namespace ''' parser = argparse.ArgumentParser( prog='dnszonetest', description='DNS Zone Test', ) parser.add_argument( 'zonename', help='zone name', ) parser.add_argument( 'zonefile', help='zone file', ) parser.add_argument( '-d', '--nameserver', help='DNS server to query.', ) parser.add_argument( '-p', '--protocol', default='udp', help='Protocol to use (udp/tcp) .', ) parser.add_argument( '-v', '--verbose', action='store_true', help='Show verbose info (level DEBUG).', ) parser.add_argument( '-q', '--quiet', action='store_true', help='No output.', ) parser.add_argument( '-r', '--norec', action='store_true', dest='no_recursion', help='Set No Recursion flag.', ) parser.add_argument( '-t', '--ttl', action='store_true', dest='compare_ttl', help='Compare TTL values.', ) parser.add_argument( '-n', '--ns', action='store_true', dest='compare_ns', help='Compare NS records.', ) parser.add_argument( '-s', '--soa', action='store_true', dest='compare_soa', help='Compare SOA records.', ) return parser.parse_args(args)
[docs]def main(): ''' Entry point for the package defined in setup.py. :returns: 0 when records from zone file correctly resolve against nameserver, 2 when not, 3 on errors. :rtype: int ''' # Parse args args = parse_args(sys.argv[1:]) # Setup basic logging setup_logging(args.verbose, args.quiet) logger.debug('Arguments: %s', args) dnszonetest = DnsZoneTest( args.zonename, args.zonefile, nameserver=args.nameserver, protocol=args.protocol, verbose=args.verbose, quiet=args.quiet, no_recursion=args.no_recursion, compare_ttl=args.compare_ttl, compare_ns=args.compare_ns, compare_soa=args.compare_soa, ) dnszonetest.compare() return dnszonetest.errno