Массовый откат прошивок 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()

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

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

Exchange удалить большую не удаляемую папку

Вводные — Exchange 2013. Папка около 13 000 000 спам-сообщений.

Через Outlook/owa папка не удаляется категорически…. на помощь придет небольшой скрипт на PS для работы с сервером через EWS

Читать далее

Ubiquiti unifi controller wan2 port forwarding

Конфигурация сети

на входе Unifi security gateway pro (USG)

2 wan порта с pppoe

Unifi controller

Проблемма — не работает проброс с wan2/pppoe1. точнее перестает работать после реконнекта.

с консоли чинится

configure
set port-forward wan-interface pppoe1
commit
save

Феншуйное решение — с  контроллера всунуть — 

config.gateway.json

{
«port-forward»: {
«wan-interface»: «pppoe1»
}
}

 

HP MSA 2040 GL210R004 the Smart Component was unable to retrieve all the hardware information from the Storage Array.

HP MSA 2040
The Smart Component was unable to retrieve all the hardware information from the Storage Array.

This may be a result of the Storage Array being in a degraded state or The Smart Component may not be applicable to this hardware.

ssh MSA_CONTROLLER_IP
# show protocols
# set protocols http disabled
# set protocols https disabled

c:\>cd msa
c:\msa> dir


GL210R004.bin

c:\msa>ftp MSA_CONTROLLER_IP
ftp> put GL210R004.bin flash

# set protocols https enabled
# set protocols http enabled

Шринк базы MSSQL с переводом модели восстановления

Довольно часто задают вопросы. поэтому публикую

Сжатие БД MS SQL c переводом модели восстановления полная/простая

USE  [BASENAME];
GO
-- Truncate the log by changing the database recovery model to SIMPLE.
ALTER DATABASE  [BASENAME]
SET RECOVERY SIMPLE;
GO
-- Shrink the truncated log file to 10 MB.
DBCC SHRINKFILE ( [BASENAME]_Log, 10);
GO
-- Reset the database recovery model.
ALTER DATABASE  [BASENAME]
SET RECOVERY FULL;
GO

в случае выполнения с планировщика shrink_mssql.cmd

sqlcmd -S [SERVERNAME] -U [USERNAME] -P [PASSWORD] -i e:\sql_scripts\shrinkbase.sql

Ещё один миф: рекомендации не важны

Есть такой миф, что при приёме на работу, рекомендации не важны. Особо он распространён в IT-сфере. Оно и понятно — типа прогрессивно, типа молодёжно.

Да только всё так, да не так. Сам как-то подписывал бумагу, разрешающую собирать на меня инфу службе безопасности, сам был свидетель 2-х случаев, когда рекомендация решала.

Сразу оговорюсь, компанию устраивали навыки специалиста, «техническое» собеседование пройдено на 4-ку — 5-ку, уровень ЗП также был адекватный… а вот кадровик забривает человека — риски высоки.

Случай первый — «пациент догадывался».

Довольно странный разрыв отношений с предыдущей работой. Долгая стагнация, деградация сотрудника в связи с отсутствием интереса к его деятельности — деньги капают, зачем что-то менять?

Однако, ни что не может длиться вечно — мелкий конфликт, уход, поиск работы. Тогда работодатель дал плохую рекомендацию сотруднику, но «пациент догадывался» — был дан также и мой номер — начальника смежного отдела. Кадровик не поленился в тот раз — позвонил ещё и мне, а я объяснил ситуацию. Человека взяли на работу и он оправдал ожидания.

Мораль: «догадывайтесь» — если есть адекватные коллеги — указывайте и их в рекомендациях.

Случай второй, более интересный — «я просто хороший парень».

Человек попал в странную компанию, где задерживали ЗП — проработав полгода, уволился и не получил последние ЗП. С его точки зрения — он жертва, работодатель хоть рекомендацию то даст нормальную… Фиг то там!

Везде есть «странные люди» — те, кто живёт вне здравого смысла и этики, при этом любят доказывать, что «они главные».

я здесь главный Читать далее

HRы должны меняться или умереть

Эта заметка написана на реактивной тяге. Все, кто считают, что я не прав, имеют на это право. А я имею право на своё мнение. С удовольствием ознакомлюсь с вашей точкой зрения. Такие дела.

Для чего нужны HR

Для чего нужны HRы? Если кратко, без наматывания соплей на кулак:

  1. Поиск и отбор кандидатов на вакансии компании (привлечь);
  2. Развитие сотрудников, улучшение их условий работы (удержать);
  3. Всякая бюрократия уровня ТК и иже (прикрыть зад).

Что из этого может делать адекватный человек, специалист своей области?

 

Читать далее

HP ProLiant Error 226 — Power fault detected — embedded storage controller

Первое, что нужно сделать – извлечь сервер и снять-поставить SAS-контроллер.
Видео по снятию – установке можно найти по ссылке: https://psml.ext.hpe.com/results.htm?SID=5177949&MEID=3675B8DE-1450-490B-8A7F-EF98106747BB (открывать через IE).
По ссылке интересует SAS-контроллер

Порядок процедуры следующий:Порядок процедуры следующий:

1. Отключаем сервер.
2. Извлекаем сервер из корзины.
3. Снимаем крышку сервера.
4. Отсоединяем батарейку контроллера (видно на видео).
5. Откручиваем 2 болта.
6. Снимаем контроллер.
7. Ставим контроллер назад, снимаем снова и снова садим назад (своеобразно чистим контакты).
8. Закручиваем 2 болта.
9. Подсоединяем батарею контроллера.
10. Ставим крышку сервера назад.
11. Ставим сервер назад в корзину.12. Запускаем сервер.

 

Exchange 2013 pop3 telnet connection dropped

[PS] D:\>Get-ServerComponentstate -Identity SERVERNAME

Server Component State
—— ——— —–
servername.iamroot.ru ServerWideOffline Active
servername.iamroot.ru HubTransport Active
servername.iamroot.ru FrontendTransport Active
servername.iamroot.ru Monitoring Active
servername.iamroot.ru RecoveryActionsEnabled Active
servername.iamroot.ru AutoDiscoverProxy Active
servername.iamroot.ru ActiveSyncProxy Active
servername.iamroot.ru EcpProxy Active
servername.iamroot.ru EwsProxy Active
servername.iamroot.ru ImapProxy Active
servername.iamroot.ru OabProxy Active
servername.iamroot.ru OwaProxy Active
servername.iamroot.ru PopProxy Inactive
servername.iamroot.ru PushNotificationsProxy Active
servername.iamroot.ru RpsProxy Active
servername.iamroot.ru RwsProxy Active
servername.iamroot.ru RpcProxy Active
servername.iamroot.ru UMCallRouter Active
servername.iamroot.ru XropProxy Active
servername.iamroot.ru HttpProxyAvailabilityGroup Active
servername.iamroot.ru ForwardSyncDaemon Active
servername.iamroot.ru ProvisioningRps Active
servername.iamroot.ru MapiProxy Active
servername.iamroot.ru EdgeTransport Active
servername.iamroot.ru HighAvailability Active
servername.iamroot.ru SharedCache Active

 

Set-ServerComponentState -Identity servername -Component PopProxy -Requester HealthAPI -State Active

Dual ISP with VRF на Cisco

 Демо схема:

Описание:

Все действия выполняются на Cisco 1921 IOS Version 15.5(3)M3 с установленным модулем EHWIC-4ESG.

  • Порты GigabitEthernet0/0 и GigabitEthernet0/1 задействованы для подключения ISP.
  • Порты GigabitEthernet0/0/0 и GigabitEthernet0/0/1 сконфигурированы в TRUNK и подключены к коммутаторам.
  • Для работы с локальной сетью используются VLAN интерфейсы.
  • В данной схеме предусматривается три локальных IP сети 192.168.100.0/24 для VLAN 100, 192.168.101.0/24 VLAN 101 и 192.168.102.0/24 VLAN 102.
  • В данном примере VLAN 100 и 101 будут иметь связь между собой но 101 будет без доступа к Интернету, а VLAN 102 будет иметь выход только в интернет.

Так задумано что бы показать возможности импорта/экспорта между VRF.

Оставшиеся физические порты не задействованы, но Вам ничто не мешает их использовать по собственному усмотрению.

Настройка Gi0/0/0 и Gi0/0/1

interface GigabitEthernet0/0/0 description TRUNK=>sw-access-1 switchport mode trunk no ip address end interface GigabitEthernet0/0/1 description TRUNK=>sw-access-2 switchport mode trunk no ip address end

Конфигурация VRF

Технология Cisco Express Forwarding (CEF) — должна быть включена для работы VRF.

Настройка VRF для ISP

ip vrf isp1
 description ISP1
 rd 65000:1
 route-target export 65000:1
 route-target import 65000:100
 route-target import 65000:102

ip vrf isp2
 description ISP2
 rd 65000:2
 route-target export 65000:2
 route-target import 65000:100
 route-target import 65000:102

Обратите внимание, что в конфигурации нет импорта 65000:101 который будет закреплен за VLAN 101. Таким образом виртуальные маршрутизаторы isp1 и isp2 не будут иметь маршрутов в сеть 192.168.101.0/24

Настройка VRF для VLAN

ip vrf 100
 description VLAN_Desktop
 rd 65000:100
 route-target export 65000:100
 route-target import 65000:1
 route-target import 65000:2
 route-target import 65000:101

ip vrf 101
 description VLAN_Voice
 rd 65000:101
 route-target export 65000:101
 route-target import 65000:100

ip vrf 102
 description VLAN_Wireless
 rd 65000:102
 route-target export 65000:102
 route-target import 65000:1
 route-target import 65000:2

Снова обратите внимание на VRF 101, который не обменивается маршрутами c ISP но обменивается с VRF 100.

На своём опыте я убедился, что название VRF для ISP удобно использовать как isp1 и isp2, название VRF для VLAN должно соответствовать номеру VLAN, всё что идентифицирует VRF — description. Это связано с тем, что если, например, у Вас поменяется один из провайдеров то вся реконфигурация сведется к изменению IP адреса интерфейса и description-а.

Конфигурация интерфейсов

Применять команду ip vrf forwarding на интерфейсе нужно до назначения IP адреса. В противном случае IP адрес будет удалён и его придётся назначать заново.

WAN

interface GigabitEthernet0/0
 description ISP1
  ip vrf forwarding isp1
  ip address 198.51.100.1 255.255.255.252
  ip nat outside

interface GigabitEthernet0/1
 description ISP2
  ip vrf forwarding isp2
  ip address 203.0.113.1 255.255.255.252
  ip nat outside

LAN

interface Vlan100
 description VLAN_Desktop
 ip vrf forwarding 100
 ip address 192.168.100.254 255.255.255.0
 ip nat inside

interface Vlan101
 description VLAN_Voice
 ip vrf forwarding 101
 ip address 192.168.101.254 255.255.255.0
 ip nat inside

interface Vlan102
 description VLAN_Wireless
 ip vrf forwarding 102
 ip address 192.168.102.254 255.255.255.0
 ip nat inside
Не забудьте создать соответствующие VLAN-ы

Читать далее