Pull to refresh

Comments 49

А что, во все эти циски до сих пор api нормальные не завезли?

Да мне-то лично ничего не надо, у меня микроты, линукс и специальнообученный сетевик. Меня просто поражает, что в продуктах за такие деньги и с такой массой ресурсов у разработчика в 2024 году все еще надо дергать cli и парсить питоном консольный вывод, вместо того, чтоб получить нормальный json или хотя бы xml. И что еще более существенно, я так понимаю, конфиги нельзя хранить в гите в тексте, а каждый раз фигачить теми же самыми cli-коммандами из плейбуки.
В микроте этого тоже нет, но он и стоит копейки. А вот если роутер на линуксе, там все бесплатно и прекрасно - ansibe + git раскладывает все по /etc и версионность и идемпотентность. жалко свичей на чистом линуксе нет.

" нормальный json или хотя бы xml "

json нужен когда данные передаются с сервера на сервер. например с бакенда на фронтенд.

В моем случае это не требуется. в моем случае мне нужна удобочитаемость. CSV файл открывается в Excel. JSON тоже открывется в Excel, но зачем?

Конфиги Cisco можно хранить очень многими способами. Но моя статья не об этом.

Верно, просто в json или xml они уже структурированы, и парсить их во что угодно, в том числе csv удобнее, чем консольный вывод. Это у цисок он еще сам по себе вменяемый, а у некоторых (того же микрота dhcp leases например), он бывает настолько ужасный и неравномерный, с кучей лишнего, что его парсить сложно.

я применяю textfsm для мак адресов

connection.send_command(comm3, use_textfsm=True)

Кстати, можно использовать textfsm и для других команд, это выглядит удобнее. Если netmiko с use_textfsm=True не найдёт подходящий шаблон, то вернёт строку, а не список, и её можно парсить дальше. Ну или написать шаблон для нужной команды, если её нет в шаблонах ntc_templates.

в моем случае для мак адресов вывод use_textfsm=True оказался полезным, но не для CDP и не для "interface status"

 Меня просто поражает, что в продуктах за такие деньги и с такой массой ресурсов у разработчика в 2024 году все еще надо дергать cli и парсить питоном консольный вывод

Если архитектура сети правильная, зачем вам что-то дергать и парсить?

конфиги нельзя хранить в гите в тексте

Можно, но зачем? Почему просто на FTP не хранить?

Правильная архитектура сети не означает же, что вы никогда не будете выполнять изменения конфигурации, или вам никогда не понадобятся данные с устройств? А дергать их для этого очень удобно по Api, если он полноценный.
И конфиги хранятся в гите, вы видите, кто, когда и зачем поменял (и в чем именно накосячил).
"Можно, но зачем? Почему просто на FTP не хранить?"
Потому что преимущества IaaС начинаются уже от десятков устройств, а хранить бинарные конфиги на фтп это каменный век, наверное?

Правильная архитектура сети не означает же, что вы никогда не будете выполнять изменения конфигурации, или вам никогда не понадобятся данные с устройств?

Если понадобятся я зайду и посмотрю на железку, т.к. там точно самая актуальная и достоверная информация. Если понадобится по многим устройствам- есть для этого NMS и подобные системы, зачем для этого городить свои велосипеды?

И конфиги хранятся в гите, вы видите, кто, когда и зачем поменял (и в чем именно накосячил).

Как часто вам такое требуется? Чтобы найти виноватого, можно использовать архив конфигурации+логирование команд на удаленный сервер. Обе эти вещи и так должны быть у вас.

а хранить бинарные конфиги на фтп это каменный век, наверное?

Речь про текстовые конфигурации и про функцию archive на Cisco. Бинарные конфиги это у микротиков.

жалко свичей на чистом линуксе нет

Cumulus Linux вроде ставится на какие-то свичи, но ценник там скорее всего конский

Cumulus Linux вроде ставится на какие-то свичи, но ценник там скорее всего конский

Его можно пощупать в виртуалке.

жалко свичей на чистом линуксе нет

На самом деле Cumulus - это очень хороший пример. Все это хорошо, пока не начнешь его настраивать. Потому что нормальный CLI скрывает за собой всю внутреннюю кухню ОС устройства. А на "чистом линуксе" все эти пляски придется делать самому и спрашивается зачем это надо?

у Cisco есть решение. нужно заплатить много денег, купить лицензии и сервера, потом настроить сервера

и можно будет обращаться к Cisco свичам по "API uses HTTPS verbs (GET, POST, PUT, and DELETE) with JSON "

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

потребуются фронтенд бакенд тимлид и пр.

вот хотелось бы то же самое, но без отдельных серваков и денег. У китайцев, видимо, из коробки есть:
https://www.juniper.net/documentation/us/en/software/junos/rest-api/index.html
У вьятта-линукс есть
https://docs.vyos.io/en/equuleus/automation/vyos-api.html
И даже у микрота, оказывается, что-то все-таки есть.
https://wiki.mikrotik.com/wiki/Manual:API#Protocol
а у циски либо за деньги, либо в отдельных старших моделях. Непонятно.

Разве Джунипер китайский? Вроде бы его HPE поглотила недавно

Я почему-то думал, что китайский. даже не знаю, как так вышло :) Вы правы, основаны в США Индусом и американцем, и никогда не имели отношения к Китаю.

кстати если заплатить много денег, купить лицензии и сервера, потом настроить сервера Cisco Catalist Center, то можно будет обращаться к серверу по API а сервер будет обращаться к свичу по CLI и сервер будет конвертировать CLI выход в API

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

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

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

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

ну мне кажется эти команды нужно запускать только в случае какого-то дебага. В обычной ситуации зачем это делать?

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

Могу ошибаться, но выглядит как велосипед в виде самописаного мониторинга/репортинга.

Но net_racoon может задать еще три раза вопрос почему/зачем и мы сможем понять причинно-следственную связь (Five whys)

Могу ошибаться, но выглядит как велосипед в виде самописаного мониторинга/репортинга.

Вот и я про то же. Мне кажется, как я писал выше, если архитектура сети "правильная", то такие костыли не нужны.

архитектура сети "правильная", с этим вопросов нет.

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

например даже при заливке нового софта на свичи.

теперь я сохраняю все текстовые файлы плюс один файл до и после выполнения работ.

но сравниваю только один файл

архитектура сети "правильная", с этим вопросов нет.

Вы ниже написали, что сеть не мониторится, т.е. по сути живет своей жизнью.

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

далее вы начнете искать в всех текстовых файлах мак адресов если у вас есть сохраненные.

но вам могут сообщить только имя принтера. придется искать по имени IP адрес, потом искать мак адрес если есть сохраненные файлы со всех свичей.

в моем случае вся информация в одном файле, что ускорит поиск

Если организация работает согласно ITIL/ITSM, то как правило получаешь инцидент из мониторинговой системы или звонка пользователя с указанным CI или именем принтера. Принтер и другие устройства должны быть в CMDB, с актуальной информацией куда он подключен.

Если нет, то полностью согласен, что поиск в текстовом файле быстрее.

Принтер и другие устройства должны быть в CMDB, с актуальной информацией куда он подключен. ?

не знаю где такое есть. тогда моя программа может посылать всю информацию в CMDB, не только принтера но все телефоны, видеокамеры, лаптопы и пр.

здесь конечно многие люди рассмеются " Принтер и другие устройства должны быть в CMDB, с актуальной информацией "

Да, в хорошем настроении и работа спорится.

На принтер вешается QR-code с его именем МАКом и т.п. QR-code привязывается к заявке. Дальше ищете информацию по нему в NMS, он же у вас добавлен в мониторинг?

Если принтер не поддерживает SNMP, то идем на свич и смотрим что на порту происходит. Опять же, привязку МАК-свич можно посмотреть в мониторилке. Железки МАК таблицу умеют отдавать по SNMP.

В обычной ситуации зачем это делать?

есть много обычных ситуаций.

например электрики проводили согласованные работы.

отключали несколько зданий и снова подключили.

а мне нужно достоверно установить что состояние сети вернулось в исходное.

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

можно конечно просмотреть сотню другую текстовых файлов и сравнить с предыдущими файлами.

в моем случае нотепад++ и плагин compare

и сразу цветные строки показывают разницу.

например электрики проводили согласованные работы.

А зачем у вас электрики в сеть лезут?

а мне нужно достоверно установить что состояние сети вернулось в исходное.

Для этого есть мониторинг, он может отслеживать что у устройства изменился сосед, например.

электрики проводили согласованные работы.

отключали несколько зданий и снова подключили.

отключали несколько зданий и снова подключили.

Ну т.е. электричество отключали? Как тогда это может на сеть повлиять?

Я не хочу набрасывать, но выглядит так, что бесперебойного питания для сетевого оборудования нет. Интересно это ограничения бюджета?

Да я, честно говоря, не понимаю причем тут логическое состояние сети и питание. Если нужно убедиться что все поднялось- есть мониторинг. А тут какие-то скрипты-лесопеды и текстовые файлы.

бесперебойного питания для сетевого оборудования нет. это не ко мне вопрос. у вас нет гарантии что вы не встретите такое в своей жизни.

Тут ничего удивительного, если для кастомера это не критично и он не хочет инвестировать.

а мне нужно достоверно установить что состояние сети вернулось в исходное.

Т.е. какой-либо системы мониторинга нет?

у нас в одной компании был мониторинг. на аутсорсе. у вас нет гарантии что вы не встретите такое в своей жизни. они мониторили какие то устройства.

Спасибо что поделились! Смотивировали попытаться адаптировать и применить у себя ))

Объясните не сведущему в этом человеку , но желающему разобраться в вопросе, не потратив много часов за прочтением мануалов. Как ваш скрипт опрашивает устройства ? Откуда получает список устройств и где нужно запускать скрипт , чтоб опросить все подсети?

Как ваш скрипт опрашивает устройства ? скрипт коннектится к каждому устройству из списка по SSH,

это делают команды netmiko_connection , скрипт запускает обычные команды "show interface status" и др и получает вывод этих команд в виде текстовой переменной Python и далее парсит.

Откуда получает список устройств - в данном случае я использую ansible hosts файл в формате yaml, и из этого файла беру группу устройств. поскольку у меня уже был этот файл со всеми устройствами и со многими группами. конечно можно сделать любой другой список

здесь есть пример https://habr.com/ru/articles/830558/

и где нужно запускать скрипт , чтоб опросить все подсети? это должен быть админ линукс бастион хост, откуда все менеджмент подсети должны быть доступны, откуда вы можете соединиться со всеми устройствами по SSH , у меня на линукс бастион хост уже был установлен ансибл и поэтому там же я стал запускать python netmiko. но если запускать только python netmiko без ансибл то возможно и из виндоус

дайте мне знать какие еще несколько cisco show комманд можно объединить в одну на группе устройств

дайте мне знать какие еще несколько cisco show комманд можно объединить в одну на группе устройств

Можно использовать команду sh IP device tracking, например.

То есть получается списком может быть и файл txt , если я правильно понимаю.

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

можно создать любой другой список устройств в любом файле и например txt тоже, потом открывать данный файл из python netmiko и брать построчно имя устройства и ip адрес устройства, и python программа будет конектиться последовательно к каждому. потребуется модификация программы.

и ансибл не обязателен для запуска моей программы.

Sign up to leave a comment.

Articles