:lastproofread: 2024-03-10
.. _vyos-pyvyos:
pyvyos
======
pyvyos is a Python library designed for interacting with VyOS devices through
their API. This documentation is intended to guide you in using pyvyos for
programmatic management of your VyOS devices. 
- `pyvyos Documentation on Read the Docs 
  `_ provides detailed instructions
  on the installation, configuration, and operation of the pyvyos library.
- `pyvyos Source Code on GitHub `_ 
  allows you to access and contribute to the library's code.
- `pyvyos on PyPI `_ for easy installation
  via pip, the Python package installer. Execute `pip install pyvyos` in your
  terminal to install.
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