Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions docs/automation/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,5 @@ VyOS Automation
vyos-salt
command-scripting
cloud-init
vyos-pyvyos

148 changes: 148 additions & 0 deletions docs/automation/vyos-pyvyos.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
:lastproofread: 2023-12-15

.. _vyos-pyvyos:

PyVyOS
======

PyVyOS is a Python library for interacting with VyOS devices via their API.
This documentation guides you on using PyVyOS to manage your VyOS devices programmatically.
The complete PyVyOS documentation is available on [Read the Docs](https://pyvyos.readthedocs.io/en/latest/),
and the library can be found on [GitHub](https://github.com/robertoberto/pyvyos)
and [PyPI](https://pypi.org/project/pyvyos/).

Installation
------------

You can install PyVyOS using pip:

.. code-block:: bash

pip install pyvyos

Getting Started
---------------

Importing and Disabling Warnings for verify=False
-------------------------------------------------

.. code-block:: none

import urllib3
urllib3.disable_warnings()

Using API Response Class
------------------------

.. code-block:: none

@dataclass
class ApiResponse:
status: int
request: dict
result: dict
error: str

Initializing a VyDevice Object
------------------------------

.. code-block:: none

from dotenv import load_dotenv
load_dotenv()

hostname = os.getenv('VYDEVICE_HOSTNAME')
apikey = os.getenv('VYDEVICE_APIKEY')
port = os.getenv('VYDEVICE_PORT')
protocol = os.getenv('VYDEVICE_PROTOCOL')
verify_ssl = os.getenv('VYDEVICE_VERIFY_SSL')

verify = verify_ssl.lower() == "true" if verify_ssl else True

device = VyDevice(hostname=hostname, apikey=apikey, port=port, protocol=protocol, verify=verify)

Using PyVyOS
------------

Configure, then Set
^^^^^^^^^^^^^^^^^^^^^^^^

.. code-block:: none

response = device.configure_set(path=["interfaces", "ethernet", "eth0", "address", "192.168.1.1/24"])
if not response.error:
print(response.result)

Configure, then Show a Single Object Value
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. code-block:: none

response = device.retrieve_return_values(path=["interfaces", "dummy", "dum1", "address"])
print(response.result)

Configure, then Show Object
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. code-block:: none

response = device.retrieve_show_config(path=[])
if not response.error:
print(response.result)

Configure, then Delete Object
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. code-block:: none

response = device.configure_delete(path=["interfaces", "dummy", "dum1"])

Configure, then Save
^^^^^^^^^^^^^^^^^^^^^^^^

.. code-block:: none

response = device.config_file_save()

Configure, then Save File
-------------------------

.. code-block:: none

response = device.config_file_save(file="/config/test300.config")

Show Object
^^^^^^^^^^^^^^

.. code-block:: none

response = device.show(path=["system", "image"])
print(response.result)

Generate Object
^^^^^^^^^^^^^^^^

.. code-block:: none

randstring = ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(20))
keyrand = f'/tmp/key_{randstring}'
response = device.generate(path=["ssh", "client-key", keyrand])

Reset Object
^^^^^^^^^^^^^^

.. code-block:: none

response = device.reset(path=["conntrack-sync", "internal-cache"])
if not response.error:
print(response.result)

Configure, then Load File
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. code-block:: none

response = device.config_file_load(file="/config/test300.config")


.. _pyvyos: https://github.com/robertoberto/pyvyos