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