Files
tools_scripts/check_unifi_manager.py
T
2026-05-29 23:13:38 +02:00

108 lines
3.5 KiB
Python

#!/usr/bin/env python3
import subprocess
import requests
import re
import argparse
import os
import sys
PUSHOVER_USER_KEY = ""
PUSHOVER_API_TOKEN = ""
def get_installed_version():
try:
result = subprocess.run(["dpkg", "-l"], capture_output=True, text=True, check=True)
for line in result.stdout.splitlines():
if "unifi" in line and line.startswith("ii"):
match = re.search(r"\bunifi\s+([\d\.]+)", line)
if match:
return match.group(1)
except Exception as e:
print(f"Błąd przy sprawdzaniu wersji dpkg: {e}")
return None
def get_latest_version():
url = "https://raw.githubusercontent.com/trexx/docker-unifi-controller/refs/heads/main/Dockerfile"
try:
response = requests.get(url)
if response.status_code == 200:
match = re.search(r'UNIFI_CONTROLLER_VERSION="([\d\.]+)', response.text)
if match:
return match.group(1)
except Exception as e:
print(f"Błąd przy pobieraniu Dockerfile: {e}")
return None
def send_pushover(message, title="Aktualizacja UniFi"):
try:
r = requests.post("https://api.pushover.net/1/messages.json", data={
"token": PUSHOVER_API_TOKEN,
"user": PUSHOVER_USER_KEY,
"message": message,
"title": title,
"priority": 0
})
return r.status_code == 200
except Exception as e:
print(f"Błąd przy wysyłaniu powiadomienia: {e}")
return False
def download_and_install(version):
deb_url = f"https://dl.ui.com/unifi/{version}/unifi_sysvinit_all.deb"
local_file = f"/tmp/unifi_{version}.deb"
print(f"Pobieranie: {deb_url}")
try:
r = requests.get(deb_url, stream=True)
if r.status_code != 200:
print(f"Nie udało się pobrać pakietu. Kod: {r.status_code}")
return False
with open(local_file, 'wb') as f:
for chunk in r.iter_content(chunk_size=8192):
f.write(chunk)
print("Instalowanie pakietu...")
subprocess.run(["sudo", "dpkg", "-i", local_file], check=True)
print("Instalacja zakończona.")
return True
except Exception as e:
print(f"Błąd przy instalacji: {e}")
return False
def main():
parser = argparse.ArgumentParser(description="Sprawdza i aktualizuje UniFi Controller")
parser.add_argument('--install', nargs='?', const='latest', help="Zainstaluj konkretną wersję lub najnowszą")
args = parser.parse_args()
if args.install:
version = args.install
if version == 'latest':
version = get_latest_version()
if not version:
print("Nie można pobrać najnowszej wersji.")
sys.exit(1)
print(f"Instalacja wersji: {version}")
success = download_and_install(version)
sys.exit(0 if success else 1)
# Tryb sprawdzania i ewentualnego alertowania
installed = get_installed_version()
latest = get_latest_version()
if not installed or not latest:
print("Nie udało się pobrać wersji.")
return
print(f"Zainstalowana wersja: {installed}")
print(f"Najnowsza wersja : {latest}")
if installed != latest:
msg = f"Dostępna nowa wersja UniFi Controller: {latest} (obecna: {installed})"
print(msg)
send_pushover(msg)
else:
print("UniFi Controller jest aktualny.")
if __name__ == "__main__":
main()