summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore1
-rw-r--r--debian/control4
-rw-r--r--python/setup.py20
-rw-r--r--python/vyos/__init__.py0
-rw-r--r--python/vyos/config.py119
5 files changed, 143 insertions, 1 deletions
diff --git a/.gitignore b/.gitignore
index e6d1f62..09a489f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,6 +5,7 @@
*.so
*.libs
*.deps
+*.pyc
.dirstamp
libtool
aclocal.m4
diff --git a/debian/control b/debian/control
index 51fda59..a44efc6 100644
--- a/debian/control
+++ b/debian/control
@@ -4,7 +4,8 @@ Priority: extra
Maintainer: VyOS Package Maintainers <maintainers@vyos.net>
Build-Depends: debhelper (>= 5), autotools-dev, libglib2.0-dev,
libboost-filesystem1.55-dev, libapt-pkg-dev, libtool, flex,
- bison, libperl-dev, autoconf, automake, pkg-config, cpio, dh-autoreconf ,dh-systemd
+ bison, libperl-dev, autoconf, automake, pkg-config, cpio, dh-autoreconf ,dh-systemd,
+ python3-setuptools, dh-python
Standards-Version: 3.9.1
Package: vyatta-cfg
@@ -22,6 +23,7 @@ Depends: sed (>= 4.1.5),
libboost-filesystem1.55.0,
vyatta-quagga,
libapt-pkg4.12,
+ python3,
${perl:Depends}, ${shlibs:Depends}
Suggests: util-linux (>= 2.13-5),
net-tools,
diff --git a/python/setup.py b/python/setup.py
new file mode 100644
index 0000000..9181ce0
--- /dev/null
+++ b/python/setup.py
@@ -0,0 +1,20 @@
+import os
+from setuptools import setup
+
+setup(
+ name = "vyos",
+ version = "1.2.0",
+ author = "VyOS maintainers and contributors",
+ author_email = "maintainers@vyos.net",
+ description = ("VyOS configuration libraries."),
+ license = "MIT",
+ keywords = "vyos",
+ url = "http://vyos.io",
+ packages=['vyos'],
+ long_description="VyOS configuration libraries",
+ classifiers=[
+ "Development Status :: 3 - Alpha",
+ "Topic :: Utilities",
+ "License :: OSI Approved :: MIT License",
+ ],
+)
diff --git a/python/vyos/__init__.py b/python/vyos/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/python/vyos/__init__.py
diff --git a/python/vyos/config.py b/python/vyos/config.py
new file mode 100644
index 0000000..a791555
--- /dev/null
+++ b/python/vyos/config.py
@@ -0,0 +1,119 @@
+# Copyright (c) 2016 VyOS maintainers and contributors
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"),
+# to deal in the Software without restriction, including without limitation
+# the rights to use, copy, modify, merge, publish, distribute, sublicense,
+# and/or sell copies of the Software, and to permit persons to whom the Software
+# is furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included
+# in all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
+# INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
+# OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+# 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 subprocess
+import re
+
+__cli_shell_api = '/bin/cli-shell-api'
+
+class VyOSError(Exception):
+ pass
+
+
+def _make_command(op, path):
+ args = path.split()
+ cmd = [__cli_shell_api, op] + args
+ return cmd
+
+def _run(cmd):
+ p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
+ out = p.stdout.read()
+ p.wait()
+ if p.returncode != 0:
+ raise VyOSError()
+ else:
+ return out
+
+
+def exists(path):
+ try:
+ _run(_make_command('exists', path))
+ return True
+ except VyOSError:
+ return False
+
+def session_changed():
+ try:
+ _run(_make_command('sessionChanged', ''))
+ return True
+ except VyOSError:
+ return False
+
+def in_session():
+ try:
+ _run(_make_command('inSession', ''))
+ return True
+ except VyOSError:
+ return False
+
+def is_multi(path):
+ try:
+ _run(_make_command('isMulti', path))
+ return True
+ except VyOSError:
+ return False
+
+def is_tag(path):
+ try:
+ _run(_make_command('isTag', path))
+ return True
+ except VyOSError:
+ return False
+
+def is_leaf(path):
+ try:
+ _run(_make_command('isLeaf', path))
+ return True
+ except VyOSError:
+ return False
+
+def return_value(path):
+ if is_multi(path):
+ raise VyOSError("Cannot use return_value on multi node: {0}".format(path))
+ elif not is_leaf(path):
+ raise VyOSError("Cannot use return_value on non-leaf node: {0}".format(path))
+ else:
+ try:
+ out = _run(_make_command('returnValue', path))
+ return out
+ except VyOSError:
+ raise VyOSError("Path doesn't exist: {0}".format(path))
+
+def return_values(path):
+ if not is_multi(path):
+ raise VyOSError("Cannot use return_values on non-multi node: {0}".format(path))
+ elif not is_leaf(path):
+ raise VyOSError("Cannot use return_values on non-leaf node: {0}".format(path))
+ else:
+ try:
+ out = _run(_make_command('returnValues', path))
+ return out
+ except VyOSError:
+ raise VyOSError("Path doesn't exist: {0}".format(path))
+
+def list_nodes(path):
+ if is_tag(path):
+ try:
+ out = _run(_make_command('listNodes', path))
+ values = out.split()
+ return list(map(lambda x: re.sub(r'^\'(.*)\'$', r'\1',x), values))
+ except VyOSError:
+ raise VyOSError("Path doesn't exist: {0}".format(path))
+ else:
+ raise VyOSError("Cannot use list_nodes on a non-tag node: {0}".format(path))