]> git.proxmox.com Git - mirror_ifupdown2.git/blame - sbin/ifupdown
Update TODO lists
[mirror_ifupdown2.git] / sbin / ifupdown
CommitLineData
a6f80f0e 1#!/usr/bin/python
2
3import sys
4import os
5import re
6import argparse
3e8ee54f 7from ifupdown.ifupdownmain import *
a6f80f0e 8
9import logging
10
11lockfile="/run/network/.lock"
12logger = None
13
14def run(args, op):
a6f80f0e 15 logger.debug('args = %s' %str(args))
16
17 try:
18 logger.debug('creating ifupdown object ..')
a6f80f0e 19 if op == 'up' or op == 'down':
3e8ee54f 20 ifupdown_handle = ifupdownMain(force=args.force,
eab25b7c 21 nodepends=args.nodepends,
22 perfmode=args.perfmode,
3e8ee54f 23 njobs=args.jobs,
24 dryrun=args.noact)
eab25b7c 25 elif op == 'query':
3e8ee54f 26 ifupdown_handle = ifupdownMain(nodepends=args.nodepends,
27 perfmode=args.perfmode,
551a3627 28 njobs=args.jobs,
29 format=args.format)
a6f80f0e 30
31 iflist = args.iflist
32 if len(args.iflist) == 0:
33 iflist = None
34
35 logger.debug('calling %s' %op + ' for all interfaces ..')
36 if op == 'up':
3e8ee54f 37 ifupdown_handle.up(args.all, args.CLASS, iflist,
38 excludepats=args.excludepats)
a6f80f0e 39 elif op == 'down':
3e8ee54f 40 ifupdown_handle.down(args.all, args.CLASS, iflist,
41 excludepats=args.excludepats)
a6f80f0e 42 elif op == 'query':
43 if args.curstate == True:
44 qstate='curr'
45 elif args.presumedstate == True:
46 qstate='presumed'
47 elif args.presumedstatedetailed == True:
48 qstate='presumeddetailed'
49 else:
50 qstate=None
eab25b7c 51 ifupdown_handle.query(args.all, args.CLASS, iflist,
3e8ee54f 52 query_state=qstate,
53 excludepats=args.excludepats)
a6f80f0e 54 except:
55 raise
56
a6f80f0e 57def init(args):
58 global logger
59
60 log_level = logging.WARNING
61
62 if args.verbose == True:
63 log_level = logging.INFO
64
65 if args.debug == True:
66 log_level = logging.DEBUG
67
68 try:
69 logging.basicConfig(level=log_level,
eab25b7c 70 format='%(levelname)s: %(message)s')
a6f80f0e 71 logger = logging.getLogger('ifupdown')
72 except:
73 raise
74
75
76def deinit():
eab25b7c 77 {}
a6f80f0e 78
79def update_argparser(argparser):
a6f80f0e 80 argparser.add_argument('iflist', metavar='IFACE',
81 nargs='*', help='interfaces list')
a6f80f0e 82 argparser.add_argument('-v', '--verbose', dest='verbose',
83 action='store_true', help='verbose')
84 argparser.add_argument('-d', '--debug', dest='debug',
85 action='store_true',
86 help='output debug info')
87 argparser.add_argument('-q', '--quiet', dest='quiet',
88 action='store_true',
89 help=argparse.SUPPRESS)
eab25b7c 90 argparser.add_argument('--allow', dest='CLASS',
91 help='ignore non-\"allow-CLASS\" interfaces')
a6f80f0e 92 argparser.add_argument('--nodepends', dest='nodepends',
eab25b7c 93 action='store_true', help=argparse.SUPPRESS)
3e8ee54f 94 argparser.add_argument('--perfmode', dest='perfmode',
eab25b7c 95 action='store_true', help=argparse.SUPPRESS)
3e8ee54f 96 argparser.add_argument('-j', '--jobs', dest='jobs', type=int,
97 default=-1, choices=range(1,12), help=argparse.SUPPRESS)
98 argparser.add_argument('-X', '--exclude', dest='excludepats',
10720a53 99 action='append', help='exclude interfaces from the list of '
100 + 'interfaces to operate on by a PATTERN '
101 + '(note that this option doesn\'t disable mappings)')
a6f80f0e 102
103
104def update_ifupdown_argparser(argparser):
3e8ee54f 105 argparser.add_argument('-a', '--all', action='store_true',
106 help='process all interfaces marked \"auto\"')
a6f80f0e 107 argparser.add_argument('-f', '--force', dest='force',
108 action='store_true',
109 help='force run all operations')
3e8ee54f 110 argparser.add_argument('-n', '--no-act', dest='noact',
111 action='store_true', help='print out what would happen,' +
112 'but don\'t do it')
a6f80f0e 113
114def update_ifup_argparser(argparser):
115 update_ifupdown_argparser(argparser)
116
117def update_ifdown_argparser(argparser):
118 update_ifupdown_argparser(argparser)
119
120def update_ifquery_argparser(argparser):
3e8ee54f 121 argparser.add_argument('-l', '--list', action='store_true', dest='all',
122 help='process all interfaces marked \"auto\"')
a6f80f0e 123 group = argparser.add_mutually_exclusive_group(required=False)
eab25b7c 124 group.add_argument('-r', '--running-state', dest='curstate',
125 action='store_true',
126 help='query running state of an interface')
127
128 # presumed-state is state maintained by ifupdown
a6f80f0e 129 group.add_argument('--presumed-state', dest='presumedstate',
130 action='store_true', help=argparse.SUPPRESS)
eab25b7c 131
132 # presumed-state-detailed prints all details about the object stored
133 # by ifupdown
a6f80f0e 134 group.add_argument('--presumed-state-detailed',
135 dest='presumedstatedetailed',
136 action='store_true', help=argparse.SUPPRESS)
137
551a3627 138 group.add_argument('--format', dest='format', default='nwifaces',
139 choices=['nwifaces', 'json'], help=argparse.SUPPRESS)
140
3e8ee54f 141
a6f80f0e 142def parse_args(argsv, op):
143 descr = 'interface management'
144
145 argparser = argparse.ArgumentParser(description=descr)
146 update_argparser(argparser)
147 if op == 'up':
148 update_ifup_argparser(argparser)
149 elif op == 'down':
150 update_ifdown_argparser(argparser)
151 elif op == 'query':
152 update_ifquery_argparser(argparser)
153
154 return argparser.parse_args(argsv)
155
156def main(argv):
157 """ main function """
158 try:
159 op = None
160 if re.search(r'ifup', argv[0]) != None:
161 op = 'up'
162 elif re.search(r'ifdown', argv[0]) != None:
163 op = 'down'
164 elif re.search(r'ifquery', argv[0]) != None:
165 op = 'query'
166 else:
167 print ('Unexpected executable.' +
168 ' Should be \'ifup\' or \'ifdown\' or \'ifquery\'')
169 exit(1)
170
171 # Command line arg parser
172 args = parse_args(argv[1:], op)
173 if len(args.iflist) > 0 and args.all is True:
3e8ee54f 174 print 'interface list and \'-a\' are mutually exclusive'
a6f80f0e 175 exit(1)
176
177 init(args)
178 run(args, op)
179 except Exception, e:
eab25b7c 180 if str(e) == '':
181 exit(1)
182
a6f80f0e 183 if args.debug == True:
184 raise
185 else:
186 logger.error(str(e))
eab25b7c 187 exit(1)
a6f80f0e 188 finally:
189 deinit()
190
a6f80f0e 191if __name__ == "__main__":
192
193 if not os.geteuid() == 0:
194 print 'Error: Must be root to run this command'
195 exit(1)
196
197 """
eab25b7c 198 XXX: Cannot use this. A spawned dhclient process can hold the lock
a6f80f0e 199 if not utilities.lockFile(lockfile):
200 print 'Another instance of this program is already running.'
201 exit(0)
202 """
203
204 main(sys.argv)