#!/usr/bin/python

#-------------------------------------------------------------------------------
#
# Copyright 2014-2020 Cumulus Networks, inc  all rights reserved
#
#-------------------------------------------------------------------------------

#
#   Import the necessary modules
#
try:
    import argparse
    import subprocess
    import re
    import json
    import logging
    import logging.handlers
except ImportError, e:
    raise ImportError (str(e) + "- required module not found")
except KeyboardInterrupt:
    exit(-1)

# Note: Currently we only use the clag-id info from the rendered
# ifquery output.
def clagGetIdConfig(logger):
    clagIdCfg = {}
    try:
        ifaceout = subprocess.check_output(['/sbin/ifquery', '-a'])
        logger.debug("/sbin/ifquery -a returned:")
        for line in ifaceout.splitlines():
            logger.debug("    " + line)
    except subprocess.CalledProcessError, e:
        return clagIdCfg

    ifPat = re.compile('^[ \t]*iface (?P<ifn>\S+)')
    clagIdPat = re.compile('^[ \t]*clag-id (?P<cid>\d+)')
    ifName = None
    for line in ifaceout.splitlines():
        obj = ifPat.search(line)
        if obj:
            ifName = obj.group('ifn')
        obj = clagIdPat.search(line)
        if obj:
            clagId = obj.group('cid')
            if ifName:
                clagIdInfo = {}
                clagIdInfo['clagId'] = int(clagId)
                clagIdCfg[ifName] = clagIdInfo
            ifName = None

    return clagIdCfg

parser = argparse.ArgumentParser(description="Get bond clagd ids")
parser.add_argument("--debug", "-d", action='store_true',
                    help="Enable debugging output")
parser.add_argument("--clagBondDump", "-c", action='store_true', 
                   help="Dump only clagBonds")
args = parser.parse_args()
logger = logging.getLogger("clagctlRestartConfig")
if args.debug:
    logger.setLevel(logging.DEBUG)
logger.addHandler(logging.handlers.SysLogHandler(address='/dev/log'))

clagCfg = {}
clagIdCfg = clagGetIdConfig(logger)
clagCfg['clagIntfs'] = clagIdCfg
if args.clagBondDump:
    clagBondList = clagCfg.get("clagIntfs", {})
    print " ".join(clagBondList)
else:
    print json.dumps(clagCfg) 


