Комментарии 45
У Windows есть PowerShell (Или bat/cmd если чтото совсем простое).
У *nix'ов — Bash.
Обычно их возможностей обычному сисадмину более чем достаточно. А если нет — тут уже встает вопрос о написании (Покупке?) собственной софтины. А тут выбор языка зависит больше от предпочтений прогера. (Ну или от задач, которые должна решать софтина)
Пайтон он везде пайтон, а бат на никсах особо не запустишь.
Ну ок, Вы решили заюзать Ansible, хоп, нужен свой модуль. Опять пайтон.
Надо быстренько парсинг какой нибудь логов или конфигов с подменой сделать и его запустить и в никсах и вин?
Покупать софтину для парсинга конфигов? У меня вот старый проект, приходится работать на никсах и вин одновременно, не могу отказать от какой то оси.
Обычно скрипты пишутся или для конкретной машины, либо для работы с сетевыми устройствами (А там другие вопроы возникают).
С другой стороны — Bash на Windows тоже есть (Порт, хотя в Win 10 — уже «нативно»… хотя это костыль, да...)
Для меня основной «Минус» питона — необходимость ставить интерпритатор. Особенно это актуально на всяких Embebed-девайсах, где банально может не быт места для установки оного.
А вот Bash/SH и CMD/PS есть «Изкаробки»…
Есть например мифическая разработка, внутренняя, она шлет какой то траф.
Я хочу проверить работу, урезая скорость и помониторить и послать себе писем.
Есть версия 1.0, она на вин сервере работает, есть версия 3.0 она на никс сервере работает.
Пишу какой то скрипт, он делает что надо, метрики мне шлет в течении например трех четырех дней.
Какие то если есть различия в вин и никс, можно через sys args, а в остальном логика одинакова работы на разных платформах.
Профит: мои 100 строк скрипта работают и там и там, не надо писать два разных, тестировать могу под никс (мне так удобнее).
Про Win10 говорить рано. Еще только для тех, кто решился быть подопытной мышью. Да и не будем забывать, что полно оборудования где WinNT живее всех живых и Win2k3 цветет и пахнет.
На железках такого плана места действительно кот наплакал. Но там, зачастую, и скрипт не запустишь. Просто нет возможности. Но удаленно команды давать можно. Так что поставить Python нужно только в одном месте. Но я, если честно, совсем не жалуюсь. Если железка 1-2-10 вполне возможно туда что-то внедрить. Хотя то же сомнительно. А если их несколько тысяч? Лично я за то, что бы удаленно команды давать ;)
Пайтон он везде пайтон
Ах если бы, ах если бы… Постоянно возникают проблемы когда скрипт, работающий на линухе, под виндой не пашет.
С либами не всё гладко — нет pycurl для windows под python 3.6
Установка сертификатов для curl под Windows — отдельная морока.
В консоли могут быть ошибки если не
chcp 65001
set PYTHONIOENCODING=utf-8
в начале. Вместо расцветки могут быть крякозябрики. И так далее.
https://github.com/PowerShell/PowerShell/blob/master/docs/installation/linux.md
Bash для винды:
https://msdn.microsoft.com/en-us/commandline/wsl/about
Теперь осталось собрать имена интерфейсов, description интерфейсов, адреса интерфейсов и правильно разложить в конфигуционные файлы bind.
Пока собрали только имена хостов и то не всех. Фраза напоминает картинку — как нарисовать сову?
Если ставить python3.4+ или python2.7.9, то pip ставить не нужно, начиная с python3.4 и python2.7.9 pip входит в комплект.
Если ставить python3, то и pip ставить нужно его же — python3-pip. datetime входит в стандартную поставку python
Справедливое замечание. Я понял, почему так — у меня по умолчанию главный в системе python3. Поэтому pip у меня ссылается на pip3.
Сейчас внесу исправления.
Сам уже пару лет использую питон для этих целей в своей работе (хотя выбор языка — это больше идеология, надо брать то, что больше/лучше знаешь/хочешь знать).
Правда я больше всё же через ssh работаю с схд/коммутаторами. Что то призвано автоматизировать рутину, а что то и просто ускоряет процесс работы с оборудованием. Сейчас как раз дописываю для личного блога статью по fc зоннигду и следующей статьёй хотел рассказать про работы с brocade при помощи скриптов, для облегчения жизни :)
Правда, в больших задачах, где требуется распараллеливание опроса хостов, встречаются проблемы. Но выбор между двумя языками, считаю, это дело вкуса.
Python, обычно, уже установлен вместе с системой. Чтобы установить php, скорее всего, придется для начала настроить сеть.
Python, обычно, уже установлен вместе с системойНа голом установленном Python'e Вы тоже далеко не уедете
Чтобы установить php, скорее всего, придется для начала настроить сеть.Ну да, надо на Python'e написать скрипт для настройки сети, иначе это сделать никак не получится))
Вы серьезно? Вы хотите писать сетевые скрипты без настроенной сети?
Ну, по крайней мере, я могу. И даже смогу их выполнить. В отличие от.
На голом установленном Python'e Вы тоже далеко не уедете
От задачи зависит.
Ну да, надо на Python'e написать скрипт для настройки сети, иначе это сделать никак не получится))
Предположу, что они уже написаны, остается только запустить. Эдакий постинсталл. Допустим, я выдумаю какую-то странную ситуацию про хитровыдуманную сеть с зубодробительными роутингами-шмоутингами и прочими айпитеблезами. Эти настройки вполне пишутся на "голом" питоне. Надуманная ситуация, разумеется. Да даже, если я от лени напишу что-то такое, делающее рутинную настройку интерфейсов. Типа ввел адрес-маску, оно само апнуло фейсы, и сделало что-то там ещё. Вот теперь можете ставить пхп и писать на нем. Кардинальная разница только в этом.
Я был в такой ситуации. Поверьте. Выучить Python- плевое дело.
Есть сервер, с которой эта сеть управляется. На сервере, зачастую, стоит древняя версия например Linux.Что ж у вас все так плохо?
Python с библиотеками уже стоят.Интересно как они там оказались? Сейчас смотрю:
-Ubuntu Server 16.04 LTS: есть python3, нет pip, нет pysnmp (из вашей статьи)
-Debian 7: нет python3, нет pip, нет pysnmp, нет ipaddress (из вашей статьи)
-CentOS Linux 7: python3, нет pip, нет pysnmp, нет ipaddress (из вашей статьи)
Других вспомогательных библиотек для работы с сетевыми устройствами, понятное дело, тоже нет.
Этот сервер стоит во внутренней сети и закрыт со всех сторон фаерволами. Выхода в интернет у этого сервера, понятное дело, нет. Что бы поставить PHP вы не ставите его сами. Вы идете в службу безопасности просите, что бы вам разрешили подключить сервер с интернету для обновления и затягивания нужных пакетов. Они смотрят на вас как на двинутого и говорят нет. Точнее они говорят «Ты что вообще дебил?!!!».Однако у себя в статье эту ситуацию вы не рассматриваете и ставите нужные пакеты прямо из репозиториев. Оно и понятно, ведь цель статьи показать язык в конкретной задаче, а не о том, что он хорош тем, что предустановлен в системе.
Вы обращаетесь к поставщику. А он в свою очередь говорит, что если он поставит вам PHP, то это будет стоить столько-то денег и вообще еще нужно вот такие фичи купить. Иначе они ни за что не отвечают. А если вы что-то поставите...Не следует свои частные случаи из жизни приводить как аргумент в общем споре. Спор шел о «PHP vs Python в программировании для сети». Главный аргумент ваш и Shtucer это «PHP надо установить, а Python уже установлен», а то, что библиотеки для Python тоже надо устанавливать, вы игнорируете. Ваша позиция мне ясна.
Или обижаться или выучить PythonЯ программирую на обоих языках. Поэтому я сравниваю в своем первом комментарии языки, а не способы их установки.
Откуда они там оказались? Когда вы покупаете сервер для контроля всей сети это не железо с Linux на борту в стандартной комплектации. Это решение. Вам продают настроенную систему с целой кучей софта, который помогает вам делать все-все-все. К этому прилагается документация и поддержка на определенное время на определенных условиях. Т.е. вы звоните или пишите и вам в сжатые сроки предоставляют решения ваших проблем. И если в документации написано, что вот так вы можете использовать рекомендуемый нами Python, но так не работает, то поставщик обязан это все исправить. И не всегда это ему обходится бесплатно. Поэтому поверьте. Указанная версия стоит со всем библиотеками.
В скобках написано «из вашей статьи» и дальше вы говорите «у себя в статье». Это не моя статья. Я никак не связан ни с автором, ни с этой статьей. А вот ситуация, когда сервер стоит под семью замками и пользоваться предустановленным — самый здравый вариант мне очень хорошо знаком.
Возможно вас ввело в заблуждение название «сервер». Правильнее было бы его называть Operation Support System (OSS). Это комплекс, который используется для работы с сетью и представляет готовую систему для обслуживающего персонала. Т.е. он уже выполняет целый ряд стандартных функций таких как отслеживание аварий, статистика, билинг, конфигурирование, обновление программного обеспечения и многое-многое другое.
В смысле частные случаи? Это самый обычный случай в связи. Я не знаю о каких сетях говорите вы, а я говорю о сетях национального масштаба с тысячами роутеров. Я даже не могу себе представить идиотов, которые бы взялись это обслуживать вручную. И даже не смотря на то, что это стоит безумных денег это все покупается. Просто потому, что по-другому не получится. И еще раз повторяю. На OSS есть все, о чем заявили.
Я в самом начале написал, что можно писать на чем угодно. И готов это повторить. Вопрос не в языке. Вопрос в поддержке. Когда вы пишете на рекомендуемом языке вы используете библиотеку, которую вам предоставил производитель и работу которой он гарантирует. Вы не городите велосипеды. Вы говорите connect и библиотека сама продирается через уровни security и сама запихивает ваши команды на нужный узел или узлы. И если мы говорим о ssh, то вопросов почти нет. Во всяком случае они все решаемые. А если протокол закрыт? Допустим вы таки смогли разобраться. Но что-то пошло не так. И вы обращаетесь за консультацией к поставщику. А он мало того, что обиделся, что вы его протокол ковыряли (и еще хорошо, что санкций не последовало), так еще и очень вежливо говорит, что не собирается разбираться почему в вашем велосипедике когда вы крутите педали он мало того, что едет назад, так еще и поворачивает. И это будет очень здорово, что именно этим все закончится.
Сейчас многие производители рекомендуют Python. А с учетом того, что все сейчас ломанулись в облака, то без OpenStack точно не обойдется. А значит Python еще сильнее укрепит свои позиции как в сетях, так и в связи в целом.
Но дело не в самих языках. Дело в производителях. Они ведь не только говорят, что используйте Python потому, что нам так нравится. Когда у вас сеть из сотен, а то и тысяч устройств вы покупаете OSS сервер (как бы он не назывался в каждом конкретном случае), который уже обладает целым рядом инструментов, но если вам нужно что-то сделать дополнительно, то у вас есть выбор написать все нужные велосипеды, а потом то, что вам нужно на любом нравящемся языке, а можно воспользоваться уже готовыми библиотеками, которые помогают вам получать данные о сети и всех устройствах, ходить на них и там получать нужные параметры, работать с данными на самом сервере. Ведь обработку статистики или обработку аварий никто не отменял. Кроме скриптом в у вас еще куча другой работы. На велосипеды просто не остается времени. Поэтому да, Python, зачастую, хороший выбор уже просто потому, что его уже выбрали.
Может быть это несколько обидно, что обошли вниманием по всей видимости любимый вами PHP, но тут только два пути. Или обижаться или выучить Python. Лично я предпочитаю второй путь. Поэтому я писал на многих языках. В том числе и на всякой экзотике, которую предлагают производители. Они могут быть кривыми и неудобными, но они позволяют быстро сделать то, что мне нужно. И это в них главное.
Когда-то написал вот такой вот инструмент: https://github.com/kireevco/inventory-tamer сканирует сеть при помощи nmap, логинится через ssh по базе известных пар юзернейм-пароль, узнает ОС, если VMWare добывает еще информацию о том какие виртуалки работают складывает все в отчет нужного формата.
Пригодилось несколько раз когда приходишь в организацию с запущенным инвентарем
Сейчас для управления зоопарками использую Ansible, души в нем не чаю.
Кстати, inventory-tamer может генерировать inventory для того же Ansible :)
Но есть пара вопросов больше с точки зрения необходимости использования таких методов при решении подобной задачи. У меня нет опыта работы с большой сетью так что у меня возникает вопрос.
Я так понимаю что Hostname и ip железки редко меняющиеся параметры, тогда этот скрипт будет работать с отдачей по всем хостам 1 раз. Далее просто будут добавлять записи в DNS чуть ли не по 1 штуке при подключении нового оборудования.
Разве задача решаемая этим скриптом не одноразовая, разве далее не целесообразней просто сразу заносить в DNS записи об оборудовании(руками или конфигурирующим скриптом)? Если при конфигурировании железки соблюдать регламенты(представим сферического коня/ИТ-службу в вакууме), то и скрип станет просто не нужен.
Конечно, идею можно развить: хранить собираемое в базе данных, генерировать файлы зон из базы. Убирать из базы записи, если устройство с ними не отвечало, например, две недели. Но, наверно, тут лучше адреса брать не из файла, а из базы системы мониторинга.
Если же в DNS добавляется только один адрес с устройства, то можно и вручную заполнять. Но скрипт точно будет без опечаток:)
К тому-же если скрипт написан, то его содержание всегда можно изменить на нужное. Остальные части уже готовы. И скрипт уже будет запущен еще раз, а потом и еще раз ;)
Лично у меня есть небольшой опыт работы с c++, VBS, Delphi, powershell… т.е. я имею представление о синтаксисе этих языков, владею такими штуками как указатели, ссылки, классы, коллекции… и каждый раз когда возникала необходимось что то автоматизировать — в большинстве случаев это был notepad++ т.к. трудозатраты на код были слишком большими. Но самая большая проблема — это выход из зоны комфорта т.к. программироавание это не основрой навык. К питону относился со скепсисом потому что там нет скобочек, да и в целом питон — не звучит…
Но вот как то сел на него и… Код пишется буквально налету. Получается сразу! Практически любая идея заканчивается небольшим куском рабочего кода. Куча библиотек. Куча готового кода. Поддержка вендоров.
Хочу добавить, что сетевику так же необходимо освоить регулярные выражения. Это отдельный непростой слой. В отличае от питона — высокий порог вхождения, но надо. К тому же регулярные выражения нужны и в powershell и в bash.
сетевику так же необходимо освоить регулярные выражения
а тут не соглашусь:) Сложно понять логику регулярных выражений. Однако, CLI ведущих вендоров поддерживает регулярные выражения для фильтрации выводов команда типа show. Там всё проще и наглядно.
Не все поставщики позволяют фильтровать вывод. А те, что позволяют, не всегда дают достаточно свободы. Если у вас на работе приняты внутренние стандарты на все, то вы может и будете знать как будут выглядеть нужные вам поля. А если нет? Скажем вам нужно угадать как будет называться конфиг если вы знаете только то, что он может заканчиваться на cfg, cf или conf. А у особых раздолбаев и вообще быть без расширения. И тогда вам остается или все проверять руками или таки научится пользоваться Re.
PS: Если регулярки действительно очень тяжело идут, то можно использовать специальные программы, которые почти все сделают за вас. Вам останется только вставить готовую строку в ваш скрипт. На память помню только RegexBuddy, но для понимания о чем я говорю думаю хватит.
Регулярные выражения просты, но не интуитивны для начинающего. Самый простой способ начать их использовать в CLI сетевого оборудования, или, как уже написал evseev, использовать готовые утилиты, бросая им на вход текст и регулярные выражения, анализируя результат.
Я опасаюсь давать какие-нибудь обещания по поводу сроков написания второй статьи, так как сейчас пишу с больницы. Но первая страница черновика уже набрана.
Так что, если где-то нет возможности поставить какой-то софт (зависимости там или ещё что), то вполне можно написать свой велосипед на пайтон (никак не могу отучить себя от привычки называть его питон).
P.S. Тут упоминали про скрипты, которые везде работают — так вот, писал я скрипт, который (один и тот же файл) работал и на винде, и в линуксе, да ещё и с GUI, если надо. В одном файле код для bash, cmd, powershell, (ну и чуть всякого для GUI — из hta, IE, KDE). Основная проблема — код для разных ОС всё-таки разный, и для его модификации нужно и там и там править и отлаживать. Писалось это не для рабочих целей, а так, just for fun.
Если нет возможности поставить другой софт, то почему все будет хорошо с Python? Он, конечно, малюсенький по современным меркам, но ни как не меньше 20МB. Да и с библиотеками можно попасть в неприятную ситуацию. Особенно если это какая-то специализированная система со старым Linux. Я как-то имел удовольствие с таким повозится. Было не очень.
Я то же писал, что бы везде работал. Но язык был один. Так, по-моему удобнее.
Зачем сетевику Python