summaryrefslogtreecommitdiff
path: root/python/vyos
diff options
context:
space:
mode:
Diffstat (limited to 'python/vyos')
-rw-r--r--python/vyos/defaults.py3
-rw-r--r--python/vyos/interfaces.py30
-rw-r--r--python/vyos/util.py50
-rw-r--r--python/vyos/version.py7
4 files changed, 89 insertions, 1 deletions
diff --git a/python/vyos/defaults.py b/python/vyos/defaults.py
new file mode 100644
index 000000000..43f222cc7
--- /dev/null
+++ b/python/vyos/defaults.py
@@ -0,0 +1,3 @@
+directories = {
+ "data": "/usr/share/vyos/"
+}
diff --git a/python/vyos/interfaces.py b/python/vyos/interfaces.py
new file mode 100644
index 000000000..0759aaa2b
--- /dev/null
+++ b/python/vyos/interfaces.py
@@ -0,0 +1,30 @@
+import re
+import json
+
+import netifaces
+
+
+intf_type_data_file = '/usr/share/vyos/interface-types.json'
+
+def list_interfaces():
+ interfaces = netifaces.interfaces()
+
+ # Remove "fake" interfaces associated with drivers
+ for i in ["dummy0", "ip6tnl0", "tunl0", "ip_vti0", "ip6_vti0"]:
+ try:
+ interfaces.remove(i)
+ except ValueError:
+ pass
+
+ return interfaces
+
+def list_interfaces_of_type(typ):
+ with open(intf_type_data_file, 'r') as f:
+ types_data = json.load(f)
+
+ all_intfs = list_interfaces()
+ if not (typ in types_data.keys()):
+ raise ValueError("Unknown interface type: {0}".format(typ))
+ else:
+ r = re.compile('^{0}\d+'.format(types_data[typ]))
+ return list(filter(lambda i: re.match(r, i), all_intfs))
diff --git a/python/vyos/util.py b/python/vyos/util.py
new file mode 100644
index 000000000..9a36ef84f
--- /dev/null
+++ b/python/vyos/util.py
@@ -0,0 +1,50 @@
+import re
+
+
+def colon_separated_to_dict(data_string, uniquekeys=False):
+ """ Converts a string containing newline-separated entries
+ of colon-separated key-value pairs into a dict.
+
+ Such files are common in Linux /proc filesystem
+
+ Args:
+ data_string (str): data string
+ uniquekeys (bool): whether to insist that keys are unique or not
+
+ Returns: dict
+
+ Raises:
+ ValueError: if uniquekeys=True and the data string has
+ duplicate keys.
+
+ Note:
+ If uniquekeys=True, then dict entries are always strings,
+ otherwise they are always lists of strings.
+ """
+ key_value_re = re.compile('([^:]+)\s*\:\s*(.*)')
+
+ data_raw = re.split('\n', data_string)
+
+ data = {}
+
+ for l in data_raw:
+ l = l.strip()
+ if l:
+ match = re.match(key_value_re, l)
+ if match:
+ key = match.groups()[0].strip()
+ value = match.groups()[1].strip()
+ if key in data.keys():
+ if uniquekeys:
+ raise ValueError("Data string has duplicate keys: {0}".format(key))
+ else:
+ data[key].append(value)
+ else:
+ if uniquekeys:
+ data[key] = value
+ else:
+ data[key] = [value]
+ else:
+ pass
+
+ return data
diff --git a/python/vyos/version.py b/python/vyos/version.py
index 5d32d878d..545d4e76b 100644
--- a/python/vyos/version.py
+++ b/python/vyos/version.py
@@ -17,9 +17,14 @@
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
# IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+import os
import json
-def get_version_data(file='/opt/vyatta/etc/version.json'):
+import vyos.defaults
+
+version_file = os.path.join(vyos.defaults.directories['data'], 'version.json')
+
+def get_version_data(file=version_file):
with open(file, 'r') as f:
version_data = json.load(f)
return version_data