python скрипты для системного администратора
Начало работы с Python в Windows для создания сценариев и автоматизации
Ниже приведено пошаговое руководство по настройке среды разработки и началу работы с Python для создания сценариев и автоматизации операций файловой системы в Windows.
В этой статье рассматривается настройка среды для использования некоторых полезных библиотек в Python, которые могут автоматизировать задачи на разных платформах, таких как поиск в файловой системе, доступ к Интернету, анализ типов файлов и т. д. с помощью подхода, ориентированного на Windows. Для операций, относящихся к Windows, извлеките ctypes, совместимую с C библиотеку функций с кодом на другом языке программирования для Python, winreg, функции, предоставляющие API реестра Windows для Python, и Python/WinRT, включив доступ к API среды выполнения Windows в Python.
Настройка среды разработки
При использовании Python для написания скриптов, выполняющих операции файловой системы, рекомендуется установить Python из Microsoft Store. При установке из Microsoft Store используется базовый интерпретатор Python3, но в дополнение к автоматическому обновлению также настраиваются параметры пути для текущего пользователя (без необходимости доступа администратора).
Если вы используете Python для веб-разработки в Windows, рекомендуем использовать другую установку с помощью подсистемы Windows для Linux. Ознакомьтесь с пошаговыми инструкциями в нашем руководстве: Начало работы с Python для разработки веб-приложений в Windows. Если вы новичок в Python, ознакомьтесь с нашим руководством: Get started using Python on Windows for beginners (Приступая к работе с Python в Windows для начинающих). В некоторых сложных сценариях (например, при необходимости модификации или доступа к установленным файлам Python, создания копий двоичных файлов или непосредственного использования библиотек DLL Python) может потребоваться загрузить определенный выпуск Python непосредственно с сайта python.org или установить альтернативное средство, например Anaconda, Jython, PyPy, WinPython, IronPython и т. д. Мы рекомендуем это только в том случае, если вы более продвинутый программист на Python и у вас есть конкретная причина выбрать альтернативную реализацию.
Установка Python
Чтобы установить Python с помощью Microsoft Store, сделайте следующее:
Перейдите в меню Пуск (значок Windows в нижнем левом углу), введите «Microsoft Store» и щелкните ссылку, чтобы открыть магазин.
Когда магазин откроется, выберите Поиск в верхнем правом меню и введите «Python». Выберите, какую версию Python вы хотите использовать, из результатов в разделе «Приложения». Мы рекомендуем использовать самую последнюю версию, если только у вас нет причин для обратного (например, по причине согласования с версией, использованной в уже существующем проекте, над которым вы планируете работать). Определив, какую версию вы хотите установить, выберите Получить.
Установка Visual Studio Code
При использовании VS Code в качестве текстового редактора или интегрированной среды разработки (IDE) вам доступны IntelliSense (помощь в завершении кода), анализ кода (помогает избежать ошибок в коде), поддержка отладки (помогает находить ошибки в коде после запуска), фрагменты кода (шаблоны для небольших повторно используемых блоков кода) и модульное тестирование (тестирование интерфейса кода с различными типами входных данных).
Загрузите VS Code для Windows и следуйте инструкциям по установке: https://code.visualstudio.com.
Установка расширения Microsoft Python
Установите расширение Microsoft Python, чтобы воспользоваться преимуществами функций поддержки VS Code. Подробнее.
Откройте окно расширения VS Code с помощью CTRL+SHIFT+X (или используйте меню, чтобы перейти к Вид > Расширения).
В поле Поиск расширений в Marketplace введите: Python.
Найдите расширение Python (ms-python.python) от Microsoft и нажмите зеленую кнопку Установить.
Откройте встроенный терминал PowerShell в VS Code
VS Code содержит встроенный терминал, который позволяет открывать командную строку Python с помощью PowerShell, создавая простой рабочий процесс между редактором кода и командной строкой.
Откройте терминал в VS Code, выберите Просмотр > Терминал или используйте сочетание клавиш Ctrl+` (используя символ обратного апострофа).
По умолчанию этим терминалом должен быть PowerShell, но если его нужно изменить, используйте Ctrl+Shift+P, чтобы ввести команду. Введите терминал: Выберите Оболочку по умолчанию, и отобразится список параметров терминала, содержащий PowerShell, командную строку, WSL и т. д. Выберите ту, которую хотите использовать, и нажмите Ctrl+Shift+` (с помощью обратного апострофа), чтобы создать новый терминал.
В окне терминала VS Code откройте Python, введя: python
Установка Git (необязательно)
Если вы планируете совместно работать над кодом Python с другими пользователями или размещать проект на сайте с открытым исходным кодом (например, GitHub), примите во внимание, что VS Code поддерживает управление версиями с помощью Git. Вкладка системы управления версиями в VS Code отслеживает все изменения и содержит общие команды Git (добавление, фиксация, принудительная отправка, извлечение) прямо в пользовательском интерфейсе. Сначала необходимо установить Git для включения панели управления версиями.
Скачайте и установите Git для Windows с веб-сайта git-scm.
В комплект входит мастер установки, который задает вам ряд вопросов о параметрах установки Git. Рекомендуется использовать все параметры по умолчанию, если у вас нет конкретной причины изменить какой-либо из них.
Если вы никогда не использовали Git, обратитесь к руководствам по GitHub. Они помогут вам приступить к работе.
Пример сценария для вывода структуры каталога файловой системы
Распространенные задачи системного администрирования могут занимать огромное количество времени, но с помощью сценария Python вы можете их автоматизировать и не тратить на них время вовсе. Например, Python может читать содержимое файловой системы компьютера и выполнять такие операции, как вывод структуры файлов и каталогов, перемещение папок из одного каталога в другой или переименование большого количества файлов. Как правило, такие задачи могут занимать массу времени, если выполнять их вручную. Вместо этого используйте сценарий Python!
Начнем с простого сценария, в котором описано дерево каталогов и отображено структуру каталогов.
Откройте PowerShell, используя меню Пуск (нижний левый значок Windows).
Создайте несколько каталогов для использования с нашим примером сценария:
Создайте несколько файлов в этих каталогах для использования с нашим сценарием:
Создайте в каталоге Python-Scripts новый файл Python:
Откройте окно проводника VS Code, нажав Ctrl+Shift+E (или используйте меню, чтобы перейти к Вид > Обозреватель) и выберите только что созданный файл list-directory-contents.py. Расширение Microsoft Python будет автоматически загружать интерпретатор Python. Загруженный интерпретатор можно увидеть в нижней части окна VS Code.
Python — интерпретируемый язык, то есть он выступает в качестве виртуальной машины, имитируя физический компьютер. Существуют различные типы интерпретаторов Python, которые можно использовать: Python 2, Python 3, Anaconda, PyPy и т. д. Чтобы выполнить код Python и получить Python IntelliSense, необходимо указать интерпретатор, который следует использовать в VS Code. Если нет конкретной причины для выбора другого интерпретатора, мы рекомендуем придерживаться интерпретатора, который VS Code выбирает по умолчанию (Python 3 в нашем случае). Чтобы изменить интерпретатор Python, выберите интерпретатор, который сейчас отображается в синей панели в нижней части окна VS Code, или откройте палитру команд (Ctrl+Shift+P) и введите команду Python: Select Interpreter (Python: выбор интерпретатора). На экране появится список установленных интерпретаторов Python. Using Python environments in VS Code(Использование сред Python в VS Code).
Вставьте следующий код в файл list-directory-contents.py, а затем выберите Сохранить:
Откройте интегрированный терминал VS Code (Ctrl+` с помощью символа обратного апострофа) и введите каталог src, в котором вы только что сохранили сценарий Python:
Запустите сценарий в PowerShell с помощью:
Результат должен выглядеть примерно так:
Используйте Python, чтобы вывести выходные данные каталога файловой системы в собственный текстовый файл, введя следующую команду непосредственно в терминале PowerShell: python3 list-directory-contents.py > food-directory.txt
Поздравляем! Вы только что написали автоматизированный сценарий системного администрирования, который считывает созданные вами каталог и файлы и использует Python для отображения, а затем для вывода структуры каталога в собственный текстовый файл.
Если вы не можете установить Python 3 из Microsoft Store, прочтите об этой проблеме, чтобы ознакомиться с примером управления путями для этого примера скрипта.
Пример сценария для изменения всех файлов в каталоге
В этом примере используются только что созданные файлы и каталоги, каждый из которых следует переименовать путем добавления даты последнего изменения файла в начало имени файла.
В папке src в каталоге python-scripts создайте новый файл Python для своего сценария:
Откройте файл update-filenames.py, вставьте следующий код в файл и сохраните его:
os.getmtime возвращает метку времени в тактах, что трудно читать. Сначала его необходимо преобразовать в стандартную строку datetime.
Протестируйте сценарий update-filenames.py, запустив его: python3 update-filenames.py а затем снова запустите сценарий list-directory-contents.py: python3 list-directory-contents.py
Вы должны получить следующий результат:
Используйте Python для вывода новых имен каталогов файловой системы с меткой времени последнего изменения в начале текстового файла, введя эту команду непосредственно в терминале PowerShell: python3 list-directory-contents.py > food-directory-last-modified.txt
Надеемся, что вы узнали несколько интересных вещей об использовании сценариев Python для автоматизации основных задач системного администрирования. Конечно, есть еще масса информации, но мы надеемся, что это позволит вам начать работу с нужным нижним колонтитулом. Ниже мы предоставили несколько дополнительных ресурсов, чтобы вы продолжили обучение.
Автоматизация задач инженера/администратора при помощи Python
В предыдущей статье из цикла по Brocade я обещал рассказать об автоматизации рутинных задач инженера/администратора. Самое главное — я не буду учить вас программировать, потому что я сам делаю это плохо. Если более-менее опытный разработчик на Python посмотрит на мой код, наверное ещё пару ночей ему будут сниться кошмары. Всё дело в том, что я никогда не занимался программированием более чем хобби и у меня не было возможности с кем-то общаться по поводу качества и красоты моего кода, мне не у кого было спросить совета (а на форумах разработчиков не очень любят учить новичков, обычно их отправляют читать документацию). Но этот код работает и он выполняет возлагаемые на него задачи и это является для меня главным.
На самом деле автоматизация любых задач стала меня интересовать довольно давно. А моему первому в этом плане проекту — TorrentMonitor на сегодняшний день уже 6,5 лет.
И так, сегодня на конкретном примере я постараюсь рассказать о том, как можно работать с различным оборудованием при помощи Python, как этим облегчить свою работу и жизнь. Но Python не панацея. Всё зависит от ваших текущих знаний или какие знания и опыт вы хотели бы получить. Есть приверженцы Bash/Powershell. Кто-то говорит, что это хороший вариант. На мой взгляд — проще учить один язык, который на 90% одинаково будет себя вести на разных платформах, чем учить 2 языка. Да и ни Powershell своими командлетами, ни Bash своим синтаксисом мне совершенно не нравятся. Тем более, что у Python есть уже огромное количество разнообразных модулей и вы можете даже сделать для своих скриптом кросплатформенный GUI, если уж совсем скучно станет. В нашей компании есть инженер, который в рамках своих задач по сопровождению приложений и серверов JEE написал не просто скрипт, а целую систему на Bash, которая была положительно отмечена руководством, используется не только в рамках нашей компании и нашими инженерами, но уже и разработчиками самой системы. Так что выбор инструмента, по сути, не так уж и важен. Главное что бы вы были в состоянии реализовать на нём то, что задумываете.
В качестве примера у нас будет несколько скриптов, работающих с коммутаторами Brocade. первый из них — будет генерировать конфиг зон, при добавлении нового устройства в SAN сеть. Задача в принципе простая, достаточно рутинная, но может заниматься много времени ввиду необходимости создания большого кол-ва команд.
Поступим следующим образом — сначала будет полный листинг скрипта, а затем уже будут объяснять — как, что и зачем. Опять-таки — обратите внимание, что это не готовое, универсальное решение. Но вы вполне можете взять его за основу для реализации собственных задач.
Исходник на Pastebin
И так, начнём с главного — что же делает скрипт?
Перед нами стоит задача — добавить в нашу существующую SAN сеть, новое устройство. Это будет или сервер или СХД. Для того, что бы это сделать, в первую очередь нам нужно получить список уже имеющихся устройство в SAN сети. В зависимости от типа добавляемого устройства это будут или серверы или СХД. Конечно, будет очень удобно, если у алиасов в вашем зонинге есть какие-то общие именования, к которым можно привязаться. Вот в плане серверов у нас всё просто ESXi_*, есть ещё несколько отдельный серверов, но для них зонинг существует отдельно, т.к. это не основные, а вспомогательные серверы и не со всеми СХД они связаны зонингом. С СХД же всё намного сложнее, поэтому тут придётся повозиться с фильтрацией + есть очень важная задача, для красивого именования зон не просто взять алиасы как они есть, а найти среди них уникальные части и убрать всё лишнее. Но это я уже покажу на примере, для большей наглядности.
И так, начнём с самого начала и я расскажу о дополнительных модулях, которые обычно использую:
argparse удобная вещь, позволяющая работать с передаваемыми скрипту аргументами. Не всегда я сам помню все ключи всех своих скриптов, поэтому автоматически генерируемый им help крайне полезен.
OrderedDict в данном примере будет использоваться именно для «очеловечивания» алиасов СХД, для красивого именования зонинга.
paramiko модуль, который я использую во всех своих скриптах, который позволяет удобно работать с устройствами по протоколу ssh.
re если вам предстоит делать что-то с ответами на команды от оборудования — без регулярных выражений просто не обойтись.
Функции:
connect — это обёртка для paramiko, для соединения с коммутаторами.
findHosts — функция создания списка алиасов хостов с коммутатора. При помощи функции connect она подключается к коммутатору, выполняет команду alishow ESXi*, затем при помощи регулярных выражений обрабатывает полученный от коммутатора ответ и у нас получается полный список алиасов хостов. Как я уже ранее говорил — хорошо если ваши алиасы имеют какую-то общую часть, что бы это можно было легко описать логикой. Следующая функция по поиску алиасов СХД будет как раз для тех, у кого такой логики нет.
findArrays — аналогичная функция, что и findHosts, только ищет не хосты, а массивы. Как можно видеть, в данном случае у нас есть список исключений (exception) для исключения всего ненужного. Если бы в именования наших массивов присутствовала какая-то логика, к примеру stor_NetApp_8200, stor_fas2650 и т.д., автоматизировать было бы проще. Стоит учитывать подобные вещи, если вы планируете зонинг с нуля. В дальнейшем этим вы сильно упростите себе жизнь.
findCommon — это продолжение функции findArrays. Как я уже говорил, из алиасов вида Storwize_p1, Storwize_p2, FAS_8200_initiator1_0f, FAS_8200_initiator2_0f нам нужно вычленить именование непосредственно массивов, для того, что бы мы имели возможность создавать читабельные имена зон, типа ESXi01_3_NetApp_8200.
И так, логика работы следующая. Вызывая скрипт, вы в параметрах передаёте необходимые данные — тип добавляемого устройства (что бы скрипт понимать — зонинг для чего именно нам делать и какие устройства вытаскивать с коммутаторов), имя (которое будет использоваться при именовании зоны), 2 алиаса, 2 WWNа (мы подключаем и СХД и серверы по 2 портам, за редким исключением. можно сделать и больше, а можно просто дважды запустить скрипт, если вы подключаете СХД по 4 портам), номер фабрики (от этого зависит выбор коммутатора. Деление на 1 и 2 тут условное, но мы помним, что FC фабрик у нас всегда должно быть 2 — для отказоустойчивости) и имя конфигурационного файла на коммутаторе.
Вот так это будет выглядеть
На выходе мы получим тестовый файлик, со всеми необходимыми командами для создания зонинга на коммутаторе.
Пример добавления СХД.
Пример добавления сервера.
На самом деле, получить просто конфиг, который необходимо вручную выполнить на коммутаторе не очень интересно. По этому для вас я покажу как его можно доделать, для автоматического коммита зоны на коммутатор.
И так — мы получили файл, мы его визуально на всякий случай проверили, возможно у нас есть какие то вещи, которые нам нужно поправить, после чего мы этот файлик сохраняем и хотим, что бы он автоматически закоммитился на коммутатор.
Для этого нам в конце скрипта нужно дописать следующие вещи:
Соответственно скрипт, при утвердительном ответе на вопрос залить ли конфиг, прочитает файл с нашим конфигом (в том числе и наши исправления) и выполнит последовательно каждую команду на коммутаторе.
Пример 2: Ищем устройство на порту
Наши коммутаторы мониторятся при при помощи Zabbix, в том числе и ошибки на портах. Я об этом в статьях по Brocade ещё не говорил, это тема лишь 7 и 13 частей, но в данном случае для примере пока не важно, что именно за ошибки на портах у нас есть. В любом случае, для того, что бы начать разбирать в возникшей проблеме — нам необходимо понять с какого устройства всё началось.
er_other_discard port 4 delta (IBM SAN 10.6.220.10:brocadeportstaterrlld.sh[er_other_discard,4,10,1]): 30
Здесь у на сошибка на 4-и порту коммутатора 10.6.220.10
Да, мы можете зайти самостоятельно на коммутатор, сделать switchshow, посмотреть WWN на порту, сделать nodefind. А может быть ещё и пароль от коммутатора у вас сгенерирован и записан где-нибудь в хранилище паролей, пароль от которого ещё нужно вспомнить. В общем да — я ленив, и никогда этого не скрывал 🙂
Пример 3: Карта подключений
Порой для отчётности или для составления документации нам необходимо составить карту подключений устройств к портам коммутатора. Можно записывать их сразу, можно долго сопоставлять алиасы и WWNы устройств. Но это не интересно, проще всё это автоматизировать.
Пример 2 и 3 у меня реализованы в виде единого скрипта (на самом деле он делает ещё несколько функций, но описывать всё просто не вижу смысла) и задачи в общем то одинаковы, только для одной из них нас интересует конкретный порт на конкретном коммутаторе, во втором же случае нас интересуют все порты одного или нескольких коммутаторов фабрики.
Работает это очень просто Поиск устройства на порту. В данном примере у нас порт транковый
Поиск всех устройств на коммутаторе
Набор дополнительных модулей в общем то тот же самый — для работы с параметрами коммандной строки, работа с ssh и регулярные выражения.
И так, в начале нам нужно создать словарь с нашими коммутаторами, где мы указываем их ip, логин, пароль и количество портов. Последний параметр будет важен, если у ваших коммутаторов разное количество портов, и скрипту нужно знать — сколько портов опрашивать, когда в качестве аргумента к порту мы передаём «all».
Функции:
connect — как и в предыдущем скрипте отвечает за подключение к коммутатору при помощи paramiko
findali — собственно эту команду мы и вызываем, она занимается тем, что запускает дву другие функции для поиска WWN на порту и его сопоставление с алиасом и затем выводом информации в консоль.
findWWN — получает курсор подключения к коммутатору и ищет WWN на указанном порту.
findAlias — получает курсор подключения к коммутатору и ищет алиас переданного WWN.
при помощи argparse снова создана менюшка, которая генерирует хелп
И так — параметры:
-c — выполняемая команда. В нашем случае только findali, остальное я убрал, что бы не загромождать код.
-switchall — выполнение команды на всех коммутаторах
-a — выполнение команды на конкретном коммутаторе (в качестве идентификатора я использую последний октет адреса коммутатора)
-dc — выполнение команды на коммутаторах в конкретном ЦОДе
-f — выполнение команды на коммутаторах первой или второй фабрики
-st — выполнение команды на коммутаторах по логическому распределению core/edge
-p — порт. может быть указан как один, так и через запятую, либо all.
все дальнейшие IFы определяют исходя из переданных параметров — на каких коммутаторах необходимо выполнять команду.
Данный скрипт, в отличие от первого, уже можно назвать универсальным. Вам достаточно указать свои коммутаторы в словаре и разбивках и он будет успешно работать и в вашей инфраструктуре.
Надеюсь этим небольшими примерами, я показал как можно сделать свои рабочие будни немножко проще.
Python для системных администраторов
Автор перевода messerr, просто с кармой ему не повезло.
Введение
О модулях
Модуль – важное понятие в языке Python. По существу, модуль – это ресурс, который вы подключаете к программе, чтобы затем использовать его. Этот процесс можно сравнить с тем, что вы достанете из ящика лист бумаги и положите его на свой стол, подготовив тем самым к дальнейшему использованию. Модули подключаются при помощи команды import, которая присутствует в начале каждого примера. Модули доступны для связи с базами данных, сетевого программирования, сервисов операционных систем и сотен других полезных областей.
Заставим Python работать
Python — полнофункциональный, надежный язык программирования и, по существу, имеет массу свойств. Изучение его может стать задачей эпических масштабов. Однако, помните, что многие способности, такие как GUI инструментарий, имеют для системного администратора низкую ценность. Вот почему в этой статье используются специфичные примеры: они демонстрируют навыки, необходимые для эффективного написания скриптов управления системой.
Пример 1: Поиск файлов и отображение прав в дружественном формате
Листинг 1. Поиск файлов и отображение результатов с правами доступа.
$ python example1.py
Enter the file pattern to search for:
j*.py
Листинг 2. Вывод первого примера
$ python example1.py
Введите шаблон поиска:
j*.py
Файлы:
jim.py
jim2.py
================================
Permissions for file jim.py :
USR имеет R права доступа
USR имеет W права доступа
USR не имеет X прав доступа
GRP имеет R права доступа
GRP не имеет W прав доступа
GRP не имеет X прав доступа
OTH имеет R права доступа
OTH не имеет W прав доступа
OTH не имеет X прав доступа
Permissions for file jim2.py :
USR имеет R права доступа
USR имеет W права доступа
USR не имеет X прав доступа
GRP имеет R права доступа
GRP не имеет W прав доступа
GRP не имеет X прав доступа
OTH имеет R права доступа
OTH не имеет W прав доступа
OTH не имеет X прав доступа
Пример 2: Выполнение операций с архивом tar при помощи меню
Листинг 4. Меню пользователя для второго примера
$ python example2.py jimstar.tar
Введите
1 чтобы извлечь файл
2 чтобы вывести информацию о файле в архиве
3 чтобы показать все файлы в архиве
Пример 3. Проверка запущенного процесса и отображение информации в дружественном представлении.
Одной из важнейших обязанностей системного администратора является проверка запущенных процессов. Скрипт в Листинге 5 даст вам несколько идей. Программа использует преимущества возможностей Unix: команда grep использует вывод, генерированный другой командой. Это позволит вам уменьшить объем данных, которые в дальнейшем будет анализировать Python.
Программа так же использует модуль string. Изучите этот модуль — вы будете часто его использовать.
Листинг 5. Отображение информации о запущенном процессе в дружественном представлении
$ python example3.py
Введите имя программы для проверки: xterm
Путь: pts/0
Владелец: goga
ID процесса: 26509
ID родительского процесса: 26493
Время запуска: 17:28
Пример 4. Проверка имен пользователей и паролей на соблюдение политики безопасности. Управление безопасностью важная часть работы для каждого системного администратора. Python делает эту работу проще, как показывает последний пример. Программа в Листинге 7 использует модуль pwd для доступа к базе данных паролей. Она проверяет имена пользователей и пароли на соблюдение политики безопасности (в данном случае, имена должны быть как минимум 6 символов в длину, пароли — 8 символов). Есть два предостережения:
Эта программа работает только если у вас есть полные права для доступа к /etc/passwd.
Если вы используете теневые пароли, скрипт работать не будет (однако, в Питон 2.5 есть модуль spwd, который решит эту проблему).
Листинг 7. Проверка имен пользователей и паролей на соблюдение политики безопасности
Листинг 8. Вывод четвертого примера
$ python example4.py
Следующие пользователи имеют имена менее чем из 6 символов::
Guest
Следующие пользователи имеют пароли менее чем из 8 символов:
Guest
johnsmith
joewilson
suejones