python-bareos


Namepython-bareos JSON
Version 23.0.2 PyPI version JSON
download
home_pagehttps://github.com/bareos/bareos/
SummaryClient library and tools for Bareos console access.
upload_time2024-02-28 13:22:03
maintainer
docs_urlNone
authorBareos Team
requires_python>=3.6
licenseAGPLv3
keywords bareos
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            python-bareos
=============

`python-bareos` is a Python module to access a http://www.bareos.org backup system.

Packages for `python-bareos` are included in the Bareos core distribution and available via https://pypi.org/.

Documentation is available at https://docs.bareos.org/DeveloperGuide/PythonBareos.html

.. note::

   By default, the Bareos Director (>= 18.2.4) uses TLS-PSK when communicating through the network.

   Unfortunately the Python core module ``ssl``
   does not support TLS-PSK.
   For testing ``python-bareos`` should be used without TLS.
   The section `Transport Encryption (TLS-PSK)`_ describes
   how to use ``python-bareos`` with TLS-PSK
   and about the limitations.


Preparations
============

Create some named consoles for testing:

.. code-block:: shell-session

   root@host:~# bconsole
   *configure add console name=user1 password=secret profile=operator TlsEnable=no
   *configure add console name=user-tls password=secret profile=operator


This creates a console user with name `user1` and the profile `operator`.
The `operator` profile is a default profile that comes with the Bareos Director.
It does allow most commands. It only deny some dangerous commands (see ``show profile=operator``),
so it is well suited for this purpose.
Futhermore, TLS enforcement is disabled for this console user.

For testing with TLS-PSK, we also create the user `user-tls`.

Examples
========

Calling bareos-director console commands
----------------------------------------

.. code:: python

   >>> import bareos.bsock
   >>> directorconsole=bareos.bsock.DirectorConsole(address='localhost', port=9101, name='user1', password='secret')
   >>> print(directorconsole.call('help').decode("utf-8"))

This creates a console connection to a Bareos Director.
This connection can be used to `call` commands.
These are the same commands as available via ``bconsole``.

To connect to the default console instead, omit the `name` parameter:

.. code:: python

   >>> directorconsole = bareos.bsock.DirectorConsole(address='localhost', port=9101, password='defaultconsolepassword')

The result of the call method is a ``bytes`` object. In most cases, it has to be decoded to UTF-8.



Simple version of the bconsole in Python
----------------------------------------

.. code:: python

   >>> import bareos.bsock
   >>> directorconsole = bareos.bsock.DirectorConsole(address='localhost', port=9101, password='secret')
   >>> directorconsole.interactive()

Or use the included ``bconsole.py`` script:

.. code-block:: shell-session

   bconsole.py --debug --name=user1 --password=secret localhost


Use JSON objects of the API mode 2
----------------------------------

Requires: Bareos >= 15.2

The class `DirectorConsoleJson` is inherited from `DirectorConsole`
and uses the Director Console API mode 2 (JSON).

For general information about API mode 2 and what data structures to expect,
see https://docs.bareos.org/DeveloperGuide/api.html#api-mode-2-json

Example:

.. code:: python

   >>> import bareos.bsock
   >>> directorconsole = bareos.bsock.DirectorConsoleJson(address='localhost', port=9101, password='secret')
   >>> pools = directorconsole.call('list pools')
   >>> for pool in pools["pools"]:
   ...   print(pool["name"])
   ...
   Scratch
   Incremental
   Full
   Differential

The results the the `call` method is a ``dict`` object.

In case of an error, an exception, derived from ``bareos.exceptions.Error`` is raised.

Example:


.. code:: python

   >>> directorconsole.call("test it")
   Traceback (most recent call last):
   ...
   bareos.exceptions.JsonRpcErrorReceivedException: failed: test it: is an invalid command.



.. _section-python-bareos-tls-psk:

Transport Encryption (TLS-PSK)
==============================

Since Bareos >= 18.2.4, Bareos supports TLS-PSK (Transport-Layer-Security Pre-Shared-Key) to secure its network connections and uses this by default.

Unfortenatly, the Python core module `ssl` does not support TLS-PSK.
There is limited support by the extra module `sslpsk` (see https://github.com/drbild/sslpsk).

Fallback To Unencrypted Connections
-----------------------------------

In order to work in most cases, even if ``sslpsk`` is not available,
the `DirectorConsole` uses a fallback.
If connecting via TLS-PSK fails, it falls back to the old, unencrypted protocol version.
In this case, a warning is issued, but the connection will work nevertheless:

.. code:: python

   >>> import bareos.bsock
   /.../bareos/bsock/lowlevel.py:39: UserWarning: Connection encryption via TLS-PSK is not available, as the module sslpsk is not installed.
   >>> directorconsole=bareos.bsock.DirectorConsole(address='localhost', port=9101, name='user-tls', password='secret')
   socket error: Conversation terminated (-4)
   Failed to connect using protocol version 2. Trying protocol version 1.
   >>> print(directorconsole.call('help').decode("utf-8"))

To enforce a encrypted connection, use the ``tls_psk_require=True`` parameter:

.. code:: python

   >>> import bareos.bsock
   /.../bareos/bsock/lowlevel.py:39: UserWarning: Connection encryption via TLS-PSK is not available, as the module sslpsk is not installed.
   >>> directorconsole=bareos.bsock.DirectorConsole(address='localhost', port=9101, name='user-tls', password='secret', tls_psk_require=True)
   Traceback (most recent call last):
   [...]
   bareos.exceptions.ConnectionError: TLS-PSK is required, but sslpsk module not loaded/available.

In this case, an exception is raised, if the connection can not be established via TLS-PSK.

sslpsk
------

The extra module `sslpsk` (see https://github.com/drbild/sslpsk)
extends the core module `ssl` by TLS-PSK.

At the time of writing, the lasted version installable via pip is 1.0.0 (https://pypi.org/project/sslpsk/), which is not working with Python >= 3.

If `python-bareos` should use TLS-PSK with Python >= 3,
the latest version must by installed manually:

.. code:: shell

   git clone https://github.com/drbild/sslpsk.git
   cd sslpsk
   python setup.py build
   python setup.py install

`python-bareos` will detect, that `sslpsk` is available and will use it automatically.
This can be verified by following command:

.. code:: python

   >>> import bareos.bsock
   >>> bareos.bsock.DirectorConsole.is_tls_psk_available()
   True

Another limitation of the current `sslpsk` version is,
that it is not able to autodetect the TLS protocol version to use.

In order to use it, specify ``tls_version`` with an appropriate protocol version.
In most cases this should be ``tls_version=ssl.PROTOCOL_TLSv1_2``,
like in the following example:

.. code:: python

   >>> import ssl
   >>> import bareos.bsock
   >>> directorconsole = bareos.bsock.DirectorConsoleJson(address='localhost', user='user-tls', password='secret', tls_version=ssl.PROTOCOL_TLSv1_2)
   >>> print(directorconsole.call('help').decode("utf-8"))

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/bareos/bareos/",
    "name": "python-bareos",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.6",
    "maintainer_email": "",
    "keywords": "bareos",
    "author": "Bareos Team",
    "author_email": "packager@bareos.com",
    "download_url": "https://files.pythonhosted.org/packages/30/2b/536271c36c649c6f83ab7a065399b7c7dd7a1bbc6345747c589d5609810b/python-bareos-23.0.2.tar.gz",
    "platform": null,
    "description": "python-bareos\n=============\n\n`python-bareos` is a Python module to access a http://www.bareos.org backup system.\n\nPackages for `python-bareos` are included in the Bareos core distribution and available via https://pypi.org/.\n\nDocumentation is available at https://docs.bareos.org/DeveloperGuide/PythonBareos.html\n\n.. note::\n\n   By default, the Bareos Director (>= 18.2.4) uses TLS-PSK when communicating through the network.\n\n   Unfortunately the Python core module ``ssl``\n   does not support TLS-PSK.\n   For testing ``python-bareos`` should be used without TLS.\n   The section `Transport Encryption (TLS-PSK)`_ describes\n   how to use ``python-bareos`` with TLS-PSK\n   and about the limitations.\n\n\nPreparations\n============\n\nCreate some named consoles for testing:\n\n.. code-block:: shell-session\n\n   root@host:~# bconsole\n   *configure add console name=user1 password=secret profile=operator TlsEnable=no\n   *configure add console name=user-tls password=secret profile=operator\n\n\nThis creates a console user with name `user1` and the profile `operator`.\nThe `operator` profile is a default profile that comes with the Bareos Director.\nIt does allow most commands. It only deny some dangerous commands (see ``show profile=operator``),\nso it is well suited for this purpose.\nFuthermore, TLS enforcement is disabled for this console user.\n\nFor testing with TLS-PSK, we also create the user `user-tls`.\n\nExamples\n========\n\nCalling bareos-director console commands\n----------------------------------------\n\n.. code:: python\n\n   >>> import bareos.bsock\n   >>> directorconsole=bareos.bsock.DirectorConsole(address='localhost', port=9101, name='user1', password='secret')\n   >>> print(directorconsole.call('help').decode(\"utf-8\"))\n\nThis creates a console connection to a Bareos Director.\nThis connection can be used to `call` commands.\nThese are the same commands as available via ``bconsole``.\n\nTo connect to the default console instead, omit the `name` parameter:\n\n.. code:: python\n\n   >>> directorconsole = bareos.bsock.DirectorConsole(address='localhost', port=9101, password='defaultconsolepassword')\n\nThe result of the call method is a ``bytes`` object. In most cases, it has to be decoded to UTF-8.\n\n\n\nSimple version of the bconsole in Python\n----------------------------------------\n\n.. code:: python\n\n   >>> import bareos.bsock\n   >>> directorconsole = bareos.bsock.DirectorConsole(address='localhost', port=9101, password='secret')\n   >>> directorconsole.interactive()\n\nOr use the included ``bconsole.py`` script:\n\n.. code-block:: shell-session\n\n   bconsole.py --debug --name=user1 --password=secret localhost\n\n\nUse JSON objects of the API mode 2\n----------------------------------\n\nRequires: Bareos >= 15.2\n\nThe class `DirectorConsoleJson` is inherited from `DirectorConsole`\nand uses the Director Console API mode 2 (JSON).\n\nFor general information about API mode 2 and what data structures to expect,\nsee https://docs.bareos.org/DeveloperGuide/api.html#api-mode-2-json\n\nExample:\n\n.. code:: python\n\n   >>> import bareos.bsock\n   >>> directorconsole = bareos.bsock.DirectorConsoleJson(address='localhost', port=9101, password='secret')\n   >>> pools = directorconsole.call('list pools')\n   >>> for pool in pools[\"pools\"]:\n   ...   print(pool[\"name\"])\n   ...\n   Scratch\n   Incremental\n   Full\n   Differential\n\nThe results the the `call` method is a ``dict`` object.\n\nIn case of an error, an exception, derived from ``bareos.exceptions.Error`` is raised.\n\nExample:\n\n\n.. code:: python\n\n   >>> directorconsole.call(\"test it\")\n   Traceback (most recent call last):\n   ...\n   bareos.exceptions.JsonRpcErrorReceivedException: failed: test it: is an invalid command.\n\n\n\n.. _section-python-bareos-tls-psk:\n\nTransport Encryption (TLS-PSK)\n==============================\n\nSince Bareos >= 18.2.4, Bareos supports TLS-PSK (Transport-Layer-Security Pre-Shared-Key) to secure its network connections and uses this by default.\n\nUnfortenatly, the Python core module `ssl` does not support TLS-PSK.\nThere is limited support by the extra module `sslpsk` (see https://github.com/drbild/sslpsk).\n\nFallback To Unencrypted Connections\n-----------------------------------\n\nIn order to work in most cases, even if ``sslpsk`` is not available,\nthe `DirectorConsole` uses a fallback.\nIf connecting via TLS-PSK fails, it falls back to the old, unencrypted protocol version.\nIn this case, a warning is issued, but the connection will work nevertheless:\n\n.. code:: python\n\n   >>> import bareos.bsock\n   /.../bareos/bsock/lowlevel.py:39: UserWarning: Connection encryption via TLS-PSK is not available, as the module sslpsk is not installed.\n   >>> directorconsole=bareos.bsock.DirectorConsole(address='localhost', port=9101, name='user-tls', password='secret')\n   socket error: Conversation terminated (-4)\n   Failed to connect using protocol version 2. Trying protocol version 1.\n   >>> print(directorconsole.call('help').decode(\"utf-8\"))\n\nTo enforce a encrypted connection, use the ``tls_psk_require=True`` parameter:\n\n.. code:: python\n\n   >>> import bareos.bsock\n   /.../bareos/bsock/lowlevel.py:39: UserWarning: Connection encryption via TLS-PSK is not available, as the module sslpsk is not installed.\n   >>> directorconsole=bareos.bsock.DirectorConsole(address='localhost', port=9101, name='user-tls', password='secret', tls_psk_require=True)\n   Traceback (most recent call last):\n   [...]\n   bareos.exceptions.ConnectionError: TLS-PSK is required, but sslpsk module not loaded/available.\n\nIn this case, an exception is raised, if the connection can not be established via TLS-PSK.\n\nsslpsk\n------\n\nThe extra module `sslpsk` (see https://github.com/drbild/sslpsk)\nextends the core module `ssl` by TLS-PSK.\n\nAt the time of writing, the lasted version installable via pip is 1.0.0 (https://pypi.org/project/sslpsk/), which is not working with Python >= 3.\n\nIf `python-bareos` should use TLS-PSK with Python >= 3,\nthe latest version must by installed manually:\n\n.. code:: shell\n\n   git clone https://github.com/drbild/sslpsk.git\n   cd sslpsk\n   python setup.py build\n   python setup.py install\n\n`python-bareos` will detect, that `sslpsk` is available and will use it automatically.\nThis can be verified by following command:\n\n.. code:: python\n\n   >>> import bareos.bsock\n   >>> bareos.bsock.DirectorConsole.is_tls_psk_available()\n   True\n\nAnother limitation of the current `sslpsk` version is,\nthat it is not able to autodetect the TLS protocol version to use.\n\nIn order to use it, specify ``tls_version`` with an appropriate protocol version.\nIn most cases this should be ``tls_version=ssl.PROTOCOL_TLSv1_2``,\nlike in the following example:\n\n.. code:: python\n\n   >>> import ssl\n   >>> import bareos.bsock\n   >>> directorconsole = bareos.bsock.DirectorConsoleJson(address='localhost', user='user-tls', password='secret', tls_version=ssl.PROTOCOL_TLSv1_2)\n   >>> print(directorconsole.call('help').decode(\"utf-8\"))\n",
    "bugtrack_url": null,
    "license": "AGPLv3",
    "summary": "Client library and tools for Bareos console access.",
    "version": "23.0.2",
    "project_urls": {
        "Homepage": "https://github.com/bareos/bareos/"
    },
    "split_keywords": [
        "bareos"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "ae4fe2d21c49313461d0b1c46c92206e78c1ad397ba3e8b0592f295fb046d029",
                "md5": "19e8eeb9d877ec7fe69c7a8641830e09",
                "sha256": "e4c7475b10418a788994ef25625f1da01e1aabc0a9d7f4ae7cbca385d934c5c4"
            },
            "downloads": -1,
            "filename": "python_bareos-23.0.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "19e8eeb9d877ec7fe69c7a8641830e09",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.6",
            "size": 55211,
            "upload_time": "2024-02-28T13:22:01",
            "upload_time_iso_8601": "2024-02-28T13:22:01.424461Z",
            "url": "https://files.pythonhosted.org/packages/ae/4f/e2d21c49313461d0b1c46c92206e78c1ad397ba3e8b0592f295fb046d029/python_bareos-23.0.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "302b536271c36c649c6f83ab7a065399b7c7dd7a1bbc6345747c589d5609810b",
                "md5": "1cb88a0c668e7519e0f252a4cc6c7f5c",
                "sha256": "b11ace255493d6f3f9589738541e39b086c3f464b81db5120e61e80a5569f77e"
            },
            "downloads": -1,
            "filename": "python-bareos-23.0.2.tar.gz",
            "has_sig": false,
            "md5_digest": "1cb88a0c668e7519e0f252a4cc6c7f5c",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.6",
            "size": 36368,
            "upload_time": "2024-02-28T13:22:03",
            "upload_time_iso_8601": "2024-02-28T13:22:03.096668Z",
            "url": "https://files.pythonhosted.org/packages/30/2b/536271c36c649c6f83ab7a065399b7c7dd7a1bbc6345747c589d5609810b/python-bareos-23.0.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-02-28 13:22:03",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "bareos",
    "github_project": "bareos",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "python-bareos"
}
        
Elapsed time: 0.20486s