summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoberto Berto <roberto.berto@gmail.com>2023-12-13 01:41:24 -0300
committerRoberto Berto <roberto.berto@gmail.com>2023-12-13 01:41:24 -0300
commit1cd622e219ceed9ba669bb373a4e4407a9542215 (patch)
treec4cfb941eac177482b21cdce630f984d11958e2c
parent8c4de65e48817d3b178ac66ebd5ca5016df4c503 (diff)
downloadpyvyos-1cd622e219ceed9ba669bb373a4e4407a9542215.tar.gz
pyvyos-1cd622e219ceed9ba669bb373a4e4407a9542215.zip
feature:
- configure_set - configure_delete - config_file_save - config_file_load
-rw-r--r--requirements.txt4
-rw-r--r--tests/test_vy_device.py54
-rw-r--r--vyapi/device.py47
3 files changed, 81 insertions, 24 deletions
diff --git a/requirements.txt b/requirements.txt
index 282562e..4bde791 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,2 +1,2 @@
-requests
-dotenv
+requests>=2.31.0<3.0.0
+dotenv>=1.0.0<2.0.0
diff --git a/tests/test_vy_device.py b/tests/test_vy_device.py
index 5b7070a..b101c1d 100644
--- a/tests/test_vy_device.py
+++ b/tests/test_vy_device.py
@@ -10,7 +10,7 @@ import pprint
load_dotenv()
hostname = os.getenv('VYDEVICE_HOSTNAME')
-key = os.getenv('VYDEVICE_KEY')
+apikey = os.getenv('VYDEVICE_APIKEY')
port = os.getenv('VYDEVICE_PORT')
protocol = os.getenv('VYDEVICE_PROTOCOL')
verify = os.getenv('VYDEVICE_VERIFY_SSL')
@@ -20,18 +20,64 @@ else:
verify = True
-
class TestVyDevice(unittest.TestCase):
def setUp(self):
- self.device = VyDevice(hostname=hostname, key=key, port=port, protocol=protocol, verify=verify)
+ self.device = VyDevice(hostname=hostname, apikey=apikey, port=port, protocol=protocol, verify=verify)
- def test_show_configuration_content(self):
+ def test_001_retrieve_show_config(self):
response = self.device.retrieve_show_config(['system'])
+ pprint.pprint(response)
+
+ self.assertEqual(response.status, 200)
+ self.assertIsNotNone(response.result)
+ self.assertFalse(response.error)
+
+ def test_010_configure_set_interface(self):
+ response = self.device.configure_set(path=["interfaces", "dummy", "dum1", "address", "192.168.140.1/24"])
+ #pprint.pprint(response)
+
+ self.assertEqual(response.status, 200)
+ self.assertIsNone(response.result)
+ self.assertFalse(response.error)
+
+
+ def test_011_configure_delete_interface(self):
+ response = self.device.configure_delete(path=["interfaces", "dummy", "dum1"])
+ pprint.pprint(response)
+
+ self.assertEqual(response.status, 200)
+ self.assertIsNone(response.result)
+ self.assertFalse(response.error)
+
+
+ def test_300_config_file_save(self):
+ response = self.device.config_file_save(file="/config/test300.config")
+ pprint.pprint(response)
self.assertEqual(response.status, 200)
self.assertIsNotNone(response.result)
self.assertFalse(response.error)
+ def test_301_config_file_save(self):
+ response = self.device.config_file_save()
+ pprint.pprint(response)
+
+ self.assertEqual(response.status, 200)
+ self.assertIsNotNone(response.result)
+ self.assertFalse(response.error)
+
+
+ def test_302_config_file_load(self):
+ response = self.device.config_file_load(file="/config/test300.config")
+ pprint.pprint(response)
+
+ self.assertEqual(response.status, 200)
+ self.assertIsNone(response.result)
+ self.assertFalse(response.error)
+
+
+
+
def tearDown(self):
pass
diff --git a/vyapi/device.py b/vyapi/device.py
index fc974d1..f601f36 100644
--- a/vyapi/device.py
+++ b/vyapi/device.py
@@ -14,9 +14,9 @@ class ApiResponse:
error: str
class VyDevice:
- def __init__(self, hostname, key, protocol='https', port=443, verify=True, timeout=10):
+ def __init__(self, hostname, apikey, protocol='https', port=443, verify=True, timeout=10):
self.hostname = hostname
- self.key = key
+ self.apikey = apikey
self.protocol = protocol
self.port = port
self.verify = verify
@@ -26,16 +26,25 @@ class VyDevice:
def _get_url(self, command):
return f"{self.protocol}://{self.hostname}:{self.port}/{command}"
- def _get_payload(self, op, path):
- return {
- 'data': json.dumps({'op': op, 'path': path}),
- 'key': self.key
- }
-
- def _api_request(self, command, op, path=[], method='POST'):
+ def _get_payload(self, op, path, file=None):
+ if file is not None:
+ return {
+ 'data': json.dumps({
+ 'op': op,
+ 'file': file,
+ }),
+ 'key': self.apikey
+ }
+ else:
+ return {
+ 'data': json.dumps({'op': op, 'path': path}),
+ 'key': self.apikey
+ }
+
+ def _api_request(self, command, op, path=[], method='POST', file=None):
url = self._get_url(command)
- payload = self._get_payload(op, path)
-
+ payload = self._get_payload(op, path, file)
+ pprint.pprint(payload)
headers = {}
error = False
@@ -43,10 +52,11 @@ class VyDevice:
try:
resp = requests.post(url, verify=self.verify, data=payload, timeout=self.timeout, headers=headers)
-
+ pprint.pprint(resp.text)
if resp.status_code == 200:
try:
resp_decoded = resp.json()
+
if resp_decoded['success'] == True:
result = resp_decoded['data']
error = False
@@ -68,7 +78,7 @@ class VyDevice:
def retrieve_show_config(self, path=[]):
- return self._api_request(command="retrieve", op='showConfig', path=[], method="POST")
+ return self._api_request(command="retrieve", op='showConfig', path=path, method="POST")
def retrieve_return_values(self, path=[]):
pass
@@ -88,16 +98,17 @@ class VyDevice:
def generate(self, path=[]):
pass
- def configure_sef(self, path=[]):
- pass
+ def configure_set(self, path=[]):
+ return self._api_request(command="configure", op='set', path=path, method="POST")
def configure_delete(self, path=[]):
- pass
+ return self._api_request(command="configure", op='delete', path=path, method="POST")
def config_file_save(self, file=None):
- pass
+ return self._api_request(command="config-file", op='save', file=file, method="POST")
def config_file_load(self, file=None):
- pass
+ return self._api_request(command="config-file", op='load', file=file, method="POST")
+
\ No newline at end of file