]> git.proxmox.com Git - mirror_ifupdown2.git/blob - ifupdown2/ifupdown/utils.py
Merge 'vlan filtering bridge + vxlan + mlag + vrr' support from internal
[mirror_ifupdown2.git] / ifupdown2 / ifupdown / utils.py
1 #!/usr/bin/python
2 #
3 # Copyright 2014 Cumulus Networks, Inc. All rights reserved.
4 # Author: Roopa Prabhu, roopa@cumulusnetworks.com
5 #
6 # utils --
7 # helper class
8 #
9 import os
10 import fcntl
11 import re
12
13 class utils():
14
15 @classmethod
16 def importName(cls, modulename, name):
17 """ Import a named object """
18 try:
19 module = __import__(modulename, globals(), locals(), [name])
20 except ImportError:
21 return None
22 return getattr(module, name)
23
24 @classmethod
25 def lockFile(cls, lockfile):
26 try:
27 fp = os.open(lockfile, os.O_CREAT | os.O_TRUNC | os.O_WRONLY)
28 fcntl.flock(fp, fcntl.LOCK_EX | fcntl.LOCK_NB)
29 except IOError:
30 return False
31 return True
32
33 @classmethod
34 def parse_iface_range(cls, name):
35 range_match = re.match("^([\w\.]+)\[([\d]+)-([\d]+)\]", name)
36 if range_match:
37 range_groups = range_match.groups()
38 if range_groups[1] and range_groups[2]:
39 return (range_groups[0], int(range_groups[1], 10),
40 int(range_groups[2], 10))
41 return None
42
43 @classmethod
44 def expand_iface_range(cls, name):
45 ifacenames = []
46 iface_range = cls.parse_iface_range(name)
47 if iface_range:
48 for i in range(iface_range[1], iface_range[2]):
49 ifacenames.append('%s-%d' %(iface_range[0], i))
50 return ifacenames
51
52