Comments 49
А что, во все эти циски до сих пор api нормальные не завезли?
есть https://developer.cisco.com/docs/dna-center/overview/#intent-api-northbound
The RESTful Catalyst Center Intent API uses HTTPS verbs (GET, POST, PUT, and DELETE) with JSON structures to discover and control the network. For more information, see Intent API.
вам обязательно нужно HTTPS GET, POST, ?

Да мне-то лично ничего не надо, у меня микроты, линукс и специальнообученный сетевик. Меня просто поражает, что в продуктах за такие деньги и с такой массой ресурсов у разработчика в 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.
Меня просто поражает, что в продуктах за такие деньги и с такой массой ресурсов у разработчика в 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?
всегда есть много разных решений. я не против вашего решения. если у вас есть пример как запросить по SNMP и все выходные данные собрать в один файл. поделитесь.
Ну также, скриптом. Но только я так и не понял зачем надо это все собирать?
в одном файле видеть все свичи и все порты. вместо того чтобы подключаться к каждому и запускать три команды последовательно
здесь у меня три команды для примера. на самом деле можно добавить столбцы с номером телефона, вендор, ошибки на порту, имя сервера, имя пользователя итд.
в одном файле видеть все свичи и все порты. вместо того чтобы подключаться к каждому и запускать три команды последовательно
ну мне кажется эти команды нужно запускать только в случае какого-то дебага. В обычной ситуации зачем это делать?
да. в случае дебага и поиска неисправности моя программа может ускорить поиск. и если по расписанию программа запускается и сохраняет этот файл, всегда будет полезно сравнить а как работал данный принтер вчера? и почему принтер сегодня не работает
Могу ошибаться, но выглядит как велосипед в виде самописаного мониторинга/репортинга.
Вот и я про то же. Мне кажется, как я писал выше, если архитектура сети "правильная", то такие костыли не нужны.
архитектура сети "правильная", с этим вопросов нет.
но при выполнении любых работ я лично раньше сохранял все текстовые файлы до и после.
например даже при заливке нового софта на свичи.
теперь я сохраняю все текстовые файлы плюс один файл до и после выполнения работ.
но сравниваю только один файл
обычная ситуация. вам звонят и говорят что принтер не работает. и хорошо если сообщат мак адрес принтера. вы начнете искать по мак адресу во всех свичах и не найдете если патч корд не подключен.
далее вы начнете искать в всех текстовых файлах мак адресов если у вас есть сохраненные.
но вам могут сообщить только имя принтера. придется искать по имени 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 программа будет конектиться последовательно к каждому. потребуется модификация программы.
и ансибл не обязателен для запуска моей программы.
Как и сети