mirror of
https://github.com/CumulusNetworks/ifupdown2.git
synced 2024-05-06 15:54:50 +00:00
python-ifupdown initial checkin
Ticket: CM-1438 Reviewed By: TBD Testing Done: - Will checkin build files after some more testing and performance numbers. It will go into the testing repo for 2.0 - All TODO items are part of the checked in TODO file
This commit is contained in:
184
sbin/ifupdown
Executable file
184
sbin/ifupdown
Executable file
@@ -0,0 +1,184 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
import sys
|
||||
import os
|
||||
import re
|
||||
import argparse
|
||||
from ifupdown.ifupdown_main import *
|
||||
|
||||
import logging
|
||||
|
||||
lockfile="/run/network/.lock"
|
||||
logger = None
|
||||
|
||||
def run(args, op):
|
||||
|
||||
logger.debug('args = %s' %str(args))
|
||||
|
||||
try:
|
||||
logger.debug('creating ifupdown object ..')
|
||||
ifupdown_handle = ifupdown_main()
|
||||
|
||||
if op == 'up' or op == 'down':
|
||||
if args.force == True:
|
||||
ifupdown_handle.set_force(args.force)
|
||||
|
||||
if args.jobs > 0:
|
||||
ifupdown_handle.set_njobs(args.jobs)
|
||||
|
||||
if args.dryrun == True:
|
||||
ifupdown_handle.set_dryrun(args.dryrun)
|
||||
|
||||
if args.nodepends == True:
|
||||
ifupdown_handle.set_nodepends(args.nodepends)
|
||||
|
||||
iflist = args.iflist
|
||||
if len(args.iflist) == 0:
|
||||
iflist = None
|
||||
|
||||
logger.debug('calling %s' %op + ' for all interfaces ..')
|
||||
if op == 'up':
|
||||
ifupdown_handle.up(args.all, args.allow, iflist)
|
||||
elif op == 'down':
|
||||
ifupdown_handle.down(args.all, args.allow, iflist)
|
||||
elif op == 'query':
|
||||
if args.curstate == True:
|
||||
qstate='curr'
|
||||
elif args.presumedstate == True:
|
||||
qstate='presumed'
|
||||
elif args.presumedstatedetailed == True:
|
||||
qstate='presumeddetailed'
|
||||
else:
|
||||
qstate=None
|
||||
ifupdown_handle.query(args.all, args.allow, iflist,
|
||||
query_state=qstate)
|
||||
except:
|
||||
raise
|
||||
|
||||
|
||||
def init(args):
|
||||
global logger
|
||||
|
||||
log_level = logging.WARNING
|
||||
|
||||
if args.verbose == True:
|
||||
log_level = logging.INFO
|
||||
|
||||
if args.debug == True:
|
||||
log_level = logging.DEBUG
|
||||
|
||||
try:
|
||||
logging.basicConfig(level=log_level,
|
||||
format='%(message)s')
|
||||
logger = logging.getLogger('ifupdown')
|
||||
except:
|
||||
raise
|
||||
|
||||
|
||||
def deinit():
|
||||
print 'deinit called'
|
||||
|
||||
def update_argparser(argparser):
|
||||
|
||||
argparser.add_argument('iflist', metavar='IFACE',
|
||||
nargs='*', help='interfaces list')
|
||||
argparser.add_argument('-a', '--all', action='store_true',
|
||||
help='operate on all interfaces')
|
||||
argparser.add_argument('-n', '--dry-run', dest='dryrun',
|
||||
action='store_true', help='dry run')
|
||||
argparser.add_argument('-v', '--verbose', dest='verbose',
|
||||
action='store_true', help='verbose')
|
||||
argparser.add_argument('-d', '--debug', dest='debug',
|
||||
action='store_true',
|
||||
help='output debug info')
|
||||
argparser.add_argument('-q', '--quiet', dest='quiet',
|
||||
action='store_true',
|
||||
help=argparse.SUPPRESS)
|
||||
argparser.add_argument('--allow', dest='allow',
|
||||
help='allow class')
|
||||
argparser.add_argument('--nodepends', dest='nodepends',
|
||||
action='store_true', help='dont follow dependents')
|
||||
|
||||
|
||||
def update_ifupdown_argparser(argparser):
|
||||
argparser.add_argument('-f', '--force', dest='force',
|
||||
action='store_true',
|
||||
help='force run all operations')
|
||||
argparser.add_argument('-j', '--jobs', dest='jobs', type=int,
|
||||
default=-1, choices=range(1,12), help=argparse.SUPPRESS)
|
||||
|
||||
def update_ifup_argparser(argparser):
|
||||
update_ifupdown_argparser(argparser)
|
||||
|
||||
def update_ifdown_argparser(argparser):
|
||||
update_ifupdown_argparser(argparser)
|
||||
|
||||
def update_ifquery_argparser(argparser):
|
||||
group = argparser.add_mutually_exclusive_group(required=False)
|
||||
group.add_argument('-s', '--query-state', dest='curstate',
|
||||
action='store_true', help=argparse.SUPPRESS)
|
||||
group.add_argument('--presumed-state', dest='presumedstate',
|
||||
action='store_true', help=argparse.SUPPRESS)
|
||||
group.add_argument('--presumed-state-detailed',
|
||||
dest='presumedstatedetailed',
|
||||
action='store_true', help=argparse.SUPPRESS)
|
||||
|
||||
def parse_args(argsv, op):
|
||||
descr = 'interface management'
|
||||
|
||||
argparser = argparse.ArgumentParser(description=descr)
|
||||
update_argparser(argparser)
|
||||
if op == 'up':
|
||||
update_ifup_argparser(argparser)
|
||||
elif op == 'down':
|
||||
update_ifdown_argparser(argparser)
|
||||
elif op == 'query':
|
||||
update_ifquery_argparser(argparser)
|
||||
|
||||
return argparser.parse_args(argsv)
|
||||
|
||||
def main(argv):
|
||||
""" main function """
|
||||
try:
|
||||
op = None
|
||||
if re.search(r'ifup', argv[0]) != None:
|
||||
op = 'up'
|
||||
elif re.search(r'ifdown', argv[0]) != None:
|
||||
op = 'down'
|
||||
elif re.search(r'ifquery', argv[0]) != None:
|
||||
op = 'query'
|
||||
else:
|
||||
print ('Unexpected executable.' +
|
||||
' Should be \'ifup\' or \'ifdown\' or \'ifquery\'')
|
||||
exit(1)
|
||||
|
||||
# Command line arg parser
|
||||
args = parse_args(argv[1:], op)
|
||||
if len(args.iflist) > 0 and args.all is True:
|
||||
print 'iflist and all are mutually exclusive'
|
||||
exit(1)
|
||||
|
||||
init(args)
|
||||
run(args, op)
|
||||
except Exception, e:
|
||||
if args.debug == True:
|
||||
raise
|
||||
else:
|
||||
logger.error(str(e))
|
||||
finally:
|
||||
deinit()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
if not os.geteuid() == 0:
|
||||
print 'Error: Must be root to run this command'
|
||||
exit(1)
|
||||
|
||||
"""
|
||||
if not utilities.lockFile(lockfile):
|
||||
print 'Another instance of this program is already running.'
|
||||
exit(0)
|
||||
"""
|
||||
|
||||
main(sys.argv)
|
Reference in New Issue
Block a user