]>
Commit | Line | Data |
---|---|---|
a6f80f0e | 1 | #!/usr/bin/python |
3e8ee54f | 2 | # |
904908bc | 3 | # Copyright 2014 Cumulus Networks, Inc. All rights reserved. |
3e8ee54f | 4 | # Author: Roopa Prabhu, roopa@cumulusnetworks.com |
5 | # | |
6 | # ifupdownBase -- | |
7 | # base object for various ifupdown objects | |
8 | # | |
a6f80f0e | 9 | |
10 | import logging | |
11 | import subprocess | |
12 | import re | |
f3215127 | 13 | import os |
2c0ad8b3 | 14 | from iface import * |
e74d01e1 | 15 | import rtnetlink_api as rtnetlink_api |
a6f80f0e | 16 | |
17 | class ifupdownBase(object): | |
18 | ||
19 | def __init__(self): | |
20 | modulename = self.__class__.__name__ | |
21 | self.logger = logging.getLogger('ifupdown.' + modulename) | |
22 | ||
23 | def exec_command(self, cmd, cmdenv=None, nowait=False): | |
24 | cmd_returncode = 0 | |
25 | cmdout = '' | |
a6f80f0e | 26 | try: |
20dd6242 | 27 | self.logger.info('Executing ' + cmd) |
525f0a30 | 28 | if self.DRYRUN: |
29 | return cmdout | |
a6f80f0e | 30 | ch = subprocess.Popen(cmd.split(), |
31 | stdout=subprocess.PIPE, | |
32 | shell=False, env=cmdenv, | |
068a7290 RP |
33 | stderr=subprocess.STDOUT, |
34 | close_fds=True) | |
a6f80f0e | 35 | cmdout = ch.communicate()[0] |
36 | cmd_returncode = ch.wait() | |
a6f80f0e | 37 | except OSError, e: |
38 | raise Exception('could not execute ' + cmd + | |
39 | '(' + str(e) + ')') | |
a6f80f0e | 40 | if cmd_returncode != 0: |
41 | raise Exception('error executing cmd \'%s\'' %cmd + | |
42 | '\n(' + cmdout.strip('\n ') + ')') | |
a6f80f0e | 43 | return cmdout |
3e8ee54f | 44 | |
45 | def ignore_error(self, errmsg): | |
46 | if (self.FORCE == True or re.search(r'exists', errmsg, | |
47 | re.IGNORECASE | re.MULTILINE) is not None): | |
48 | return True | |
49 | return False | |
50 | ||
51 | def log_warn(self, str): | |
52 | if self.ignore_error(str) == False: | |
53 | if self.logger.getEffectiveLevel() == logging.DEBUG: | |
54 | traceback.print_stack() | |
55 | self.logger.warn(str) | |
56 | pass | |
57 | ||
58 | def log_error(self, str): | |
59 | if self.ignore_error(str) == False: | |
739f665b | 60 | raise |
61 | #raise Exception(str) | |
3e8ee54f | 62 | else: |
63 | pass | |
f3215127 | 64 | |
65 | def link_exists(self, ifacename): | |
66 | return os.path.exists('/sys/class/net/%s' %ifacename) | |
be0b20f2 | 67 | |
68 | def link_up(self, ifacename): | |
e74d01e1 | 69 | rtnetlink_api.rtnl_api.link_set(ifacename, "up") |
be0b20f2 | 70 | |
71 | def link_down(self, ifacename): | |
e74d01e1 | 72 | rtnetlink_api.rtnl_api.link_set(ifacename, "down") |