From e5d8d85dc71ee8342737f8b43022dd24f5409139 Mon Sep 17 00:00:00 2001 From: IluaAir Date: Mon, 23 Jun 2025 14:27:05 +0300 Subject: [PATCH] add oxi manager --- .env.example | 5 +++++ oxi/manager.py | 33 +++++++++++++++++++++++++++++++++ pynet.py | 21 +++++++++++++++++++++ requirements.txt | Bin 256 -> 296 bytes settings.py | 15 +++++++++++++++ 5 files changed, 74 insertions(+) create mode 100644 .env.example create mode 100644 oxi/manager.py create mode 100644 pynet.py create mode 100644 settings.py diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..8314058 --- /dev/null +++ b/.env.example @@ -0,0 +1,5 @@ +NETBOX_URL= +NETBOX_TOKEN= +OXIDIZED_URL= +OXIDIZED_USERNAME= +OXIDIZED_PASSWORD= \ No newline at end of file diff --git a/oxi/manager.py b/oxi/manager.py new file mode 100644 index 0000000..a524faf --- /dev/null +++ b/oxi/manager.py @@ -0,0 +1,33 @@ +import requests +from typing import Optional +from settings import settings + + +class OxiManager: + def __init__( + self, + session: Optional[requests.Session] = None + ): + self.base_url = settings.oxi_url + self._session = session or requests.Session() + self._session.auth = (settings.oxi_username, settings.oxi_password) + + def __enter__(self): + return self + + def __exit__(self, *args): + self._session.close() + + def get(self, endpoint: str, **kwargs) -> requests.Response: + url = f"{self.base_url}/{endpoint.lstrip('/')}" + if not url.endswith('.json'): + url += '.json' + result = self._session.get(url, **kwargs) + if result.status_code == 500: + raise ValueError(f'page {url} not found') + return result.json() + + +oxi = OxiManager() +oxi.get('node/show/AKD-MSK30-AGG_S-01') + diff --git a/pynet.py b/pynet.py new file mode 100644 index 0000000..0388fde --- /dev/null +++ b/pynet.py @@ -0,0 +1,21 @@ +import pynetbox + +from settings import settings + +netbox = pynetbox.api( + settings.url, + token=settings.token) +netbox.http_session.verify = False + +filters = { + "has_primary_ip": "true", # или True, зависит от API + "tenant": "vimpelcom", # имя или ID арендатора + "role": "Kommutator", # роль устройства +} + +# Передаём словарь в filter через ** +devices = netbox.dcim.devices.filter(**filters) + +# Вывод результатов +for device in devices: + print(f"{device.name} (IP: {device.primary_ip})") \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 922dbe42e481a0ccc5f00608c29536d0020ee5c1..3602f3ac652592ab1b64d84735ef666ba37e3476 100644 GIT binary patch delta 47 wcmZo*TEVn{QKNvNlA(klgCU