Архив за месяц: Июнь 2021

Массовый откат прошивок unifi /unifi multiple controller downgrade

Давно не писал, всем привет. работы много.

задача…. 200+ контроллеров unify. Откатить прошивку на всех точках. всех сайтах

быстрописано. можно красивее, но задача стояла оперативно решить проблему. потом улучшать будем. не придираемся. закомментил строки которые ставил для других задач.

import ssl
import sys
#sys.stdout = open(‘/var/www/html/index.html’, ‘w’)
from unificontrol import UnifiClient
from prettytable import PrettyTable
from datetime import timedelta
import json
import re
import logging
#logging.basicConfig(level=logging.DEBUG)

 

#print (‘<!DOCTYPE html><html><head><meta charset=»utf-8″><title>Тег META, атрибут charset</title></head> <body> ‘);

username = ‘CONTROLLER_USER’
password = ‘CONTROLLER_PASSWORD’
sitename = ‘6h2g5wq1′ # имя сайта для отката. чтобы на всех сделать — делаем правки небольшие

def get_sites(host,username,password):
client = UnifiClient(host = host, port = «8443», username = username, password = password,site=’default’)
sites = client.list_sites()
#print (sites)
return sites,host

def get_wlanconf(host,sites,wlanconf_id,username,password):
client = UnifiClient(host = host, port = «8443», username = username, password = password,site=sites)
wlan = client.list_wlanconf(wlanconf_id)
print(» wlan-debug» + str(wlan))

if «networkconf_id» in wlan[0]:
networkconf= client.list_wlanconf(wlan[0][‘_id’])
else:
networkconf = ‘———-‘
print(» netconf-debug» + str(networkconf))
return wlan,networkconf

def manual_update(host,sites,username,password,mac,fw):
client = UnifiClient(host = host, port = «8443», username = username, password = password,site=sites)
upd=client.upgrade_device_external(mac, fw)
print(» wlan-debug» + str(upd))

 

def get_devices_from_sites(host,sites,sites_descr,username,password):
client = UnifiClient(host = host, port = «8443», username = username, password = password,site=sites)
#devs = client.list_devices_basic()
#print (devs)
devs2 = client.list_devices()
#print (» DEVS2-debug» + str(devs2))
#wlan=client.list_wlanconf()
#wlan_groups=client.list_wlan_groups()

#print (» wlan-groups-debug» + str(wlan_groups))
return devs2,host,sites,sites_descr

controllers = [«172.16.7.3», «172.16.7.4», «172.16.7.5», «172.16.7.6»,»172.16.7.7″,»172.16.7.8″,»172.16.7.9″,»172.16.7.254″]

for i in range(len(controllers)):
print(«<h1> Контроллер: » + controllers[i] + «</h1>»)
sites,host_1=get_sites(controllers[i],username,password)
for elem_sites in sites:
print («<h2> Сайт:» + elem_sites[‘desc’] +» (name: «+ elem_sites[‘name’] + » id: » + elem_sites[‘_id’] + «) controller: «+ controllers[i]+»</h2>»)
devs, host, sites,sites_descr = get_devices_from_sites(host_1,elem_sites[‘name’],elem_sites[‘desc’], username, password)

t = PrettyTable([‘mac’,’ip’, ‘state’,’model’,’board_rev’,’version’,’name’,’essid’,’sites’,’sites_name’,’controller’,’act_upd’])
if len(devs) > 0:
for elem_sites_dev in devs:
if «name» in elem_sites_dev:
Name = elem_sites_dev[‘name’]
else:
Name=»—»
act_upd=»NO»
if «board_rev» in elem_sites_dev:
board_rev = elem_sites_dev[‘board_rev’]
else:
board_rev=»—»

if sites == sitename and elem_sites_dev[‘model’]==»U7LT» and elem_sites_dev[‘state’]==1: #тут условие какие точки обновлять. для примера обновляем точки UAP-AP-AC-LITE (допилить)
act_upd=»yes»
manual_update(host,sites,username,password,elem_sites_dev[‘mac’],»http://firmware_url/lite.4.3.28.bin»)
else:
act_upd=»NO»

if «vap_table» in elem_sites_dev:
essid=»»
vap_table=(elem_sites_dev[‘vap_table’])
for elem_sites_vap in vap_table:
wlanconf_id=elem_sites_vap[‘wlanconf_id’]
#wlan,networkconf=get_wlanconf(host,sites,wlanconf_id,username,password)
essid += elem_sites_vap[‘essid’] + » <br> »
else:
essid=»—»

t.add_row([elem_sites_dev[‘mac’],elem_sites_dev[‘ip’], str(elem_sites_dev[‘state’]),elem_sites_dev[‘model’],board_rev,elem_sites_dev[‘version’],Name,essid,sites,sites_descr,host,act_upd])
print(t) # вывод в таблицу html можно сделать погуглив по python prettytable html. одна строка t.XXX_XXXX_XXX.  не расслабляемся, ищем сами. все другие строки закомменченые относятся к данному моменту
else:
print («<i>Empty devs in this site</i>»)
#print (‘</body></html>’);
#sys.stdout.close()

кавычки чутка съехали. обычные двойные кавычки.

пишу как всегда для себя. чтобы не забыть