]> git.proxmox.com Git - mirror_ifupdown2.git/blame - ifupdown2/ifupdown/utils.py
Merge 'vlan filtering bridge + vxlan + mlag + vrr' support from internal
[mirror_ifupdown2.git] / ifupdown2 / ifupdown / utils.py
CommitLineData
2c8c4ce7
RP
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#
9import os
10import fcntl
f82758bf 11import re
2c8c4ce7
RP
12
13class 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
f82758bf
RP
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
2c8c4ce7 52