]>
Commit | Line | Data |
---|---|---|
a6f80f0e | 1 | #!/usr/bin/python |
2 | ||
3 | import sys | |
4 | import os | |
5 | import re | |
6 | import argparse | |
3e8ee54f | 7 | from ifupdown.ifupdownmain import * |
a6f80f0e | 8 | |
9 | import logging | |
10 | ||
11 | lockfile="/run/network/.lock" | |
12 | logger = None | |
13 | ||
14 | def 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 | 57 | def 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 | ||
76 | def deinit(): | |
eab25b7c | 77 | {} |
a6f80f0e | 78 | |
79 | def 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 | ||
104 | def 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 | |
114 | def update_ifup_argparser(argparser): | |
115 | update_ifupdown_argparser(argparser) | |
116 | ||
117 | def update_ifdown_argparser(argparser): | |
118 | update_ifupdown_argparser(argparser) | |
119 | ||
120 | def 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 | 142 | def 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 | ||
156 | def 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 | 191 | if __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) |