- Linux administration with python
- Systems Administration¶
- Fabric¶
- Psutil¶
- Ansible¶
- Puppet¶
- Blueprint¶
- Buildout¶
- Shinken¶
- O’Reilly Book
- Основы применения Python в администрировании Linux
- Нет. Не в этом дело.
- Новости на LOR. Такие новости.
- Python для системных администраторов
- Введение
- О модулях
- Заставим Python работать
Linux administration with python
Библиотека программиста запись закреплена
Гифт Н., Джонс Дж.М. «Python в системном администрировании UNIX и Linux» (pdf) #python
Книга «Python в системном администрировании UNIX и Linux» демонстрирует, как эффективно решать разнообразные задачи управления серверами UNIX и Linux с помощью языка программирования Python. Каждая глава посвящена определенной задаче, например многозадачности, резервному копированию данных или созданию собственных инструментов командной строки, и предлагает практические методы ее решения на языке Python.
Среди рассматриваемых тем: организация ветвления процессов и передача информации между ними с использованием сетевых механизмов, создание интерактивных утилит с графическим интерфейсом, организация взаимодействия с базами данных и создание приложений для Google App Engine. Кроме того, авторы книги создали доступную для загрузки и свободно распространяемую виртуальную машину на базе Ubuntu, включающую исходные тексты примеров из книги и способную выполнять примеры, использующие SNMP, IPython, SQLAlchemy и многие другие утилиты.
Совсем не много компьютерных книг способны оставаться актуальными хотя бы 2 года. Думаю, что эта книга будет жить значительно дольше. Книга написана не техническим писателем, а работающим системным администратором для системных администраторов. При чтении складывается ощущение, что это просто расширенный и обработанный вариант внутренне документации. Рекомендую всем и не только Unix администраторам.
Источник
Systems Administration¶
Fabric¶
Fabric is a library for simplifying system administration tasks. While Chef and Puppet tend to focus on managing servers and system libraries, Fabric is more focused on application level tasks such as deployment.
The following code will create two tasks that we can use: memory_usage and deploy . The former will output the memory usage on each machine. The latter will SSH into each server, cd to our project directory, activate the virtual environment, pull the newest codebase, and restart the application server.
With the previous code saved in a file named fabfile.py , we can check memory usage with:
and we can deploy with:
Additional features include parallel execution, interaction with remote programs, and host grouping.
Salt is an open source infrastructure management tool. It supports remote command execution from a central point (master host) to multiple hosts (minions). It also supports system states which can be used to configure multiple servers using simple template files.
Salt supports Python versions 2.6 and 2.7 and can be installed via pip:
After configuring a master server and any number of minion hosts, we can run arbitrary shell commands or use pre-built modules of complex commands on our minions.
The following command lists all available minion hosts, using the ping module.
The host filtering is accomplished by matching the minion id or using the grains system. The grains system uses static host information like the operating system version or the CPU architecture to provide a host taxonomy for the Salt modules.
The following command lists all available minions running CentOS using the grains system:
Salt also provides a state system. States can be used to configure the minion hosts.
For example, when a minion host is ordered to read the following state file, it will install and start the Apache server:
State files can be written using YAML, the Jinja2 template system, or pure Python.
Psutil¶
Psutil is an interface to different system information (e.g. CPU, memory, disks, network, users, and processes).
Here is an example to be aware of some server overload. If any of the tests (net, CPU) fail, it will send an email.
A full terminal application like a widely extended top which is based on psutil and with the ability of a client-server monitoring is glance.
Ansible¶
Ansible is an open source system automation tool. Its biggest advantage over Puppet or Chef is that it does not require an agent on the client machine. Playbooks are Ansible’s configuration, deployment, and orchestration language and are written in YAML with Jinja2 for templating.
Ansible supports Python versions 2.6 and 2.7 and can be installed via pip:
Ansible requires an inventory file that describes the hosts to which it has access. Below is an example of a host and playbook that will ping all the hosts in the inventory file.
Here is an example inventory file: hosts.yml
Here is an example playbook: ping.yml
To run the playbook:
The Ansible playbook will ping all of the servers in the hosts.yml file. You can also select groups of servers using Ansible. For more information about Ansible, read the Ansible Docs.
An Ansible tutorial is also a great and detailed introduction to getting started with Ansible.
Chef is a systems and cloud infrastructure automation framework that makes it easy to deploy servers and applications to any physical, virtual, or cloud location. In case this is your choice for configuration management, you will primarily use Ruby to write your infrastructure code.
Chef clients run on every server that is part of your infrastructure and these regularly check with your Chef server to ensure your system is always aligned and represents the desired state. Since each individual server has its own distinct Chef client, each server configures itself and this distributed approach makes Chef a scalable automation platform.
Chef works by using custom recipes (configuration elements), implemented in cookbooks. Cookbooks, which are basically packages for infrastructure choices, are usually stored in your Chef server. Read the DigitalOcean tutorial series on Chef to learn how to create a simple Chef Server.
To create a simple cookbook the knife command is used:
Getting started with Chef is a good starting point for Chef Beginners and many community maintained cookbooks that can serve as a good reference or tweaked to serve your infrastructure configuration needs can be found on the Chef Supermarket.
Puppet¶
Puppet is IT Automation and configuration management software from Puppet Labs that allows System Administrators to define the state of their IT Infrastructure, thereby providing an elegant way to manage their fleet of physical and virtual machines.
Puppet is available both as an Open Source and an Enterprise variant. Modules are small, shareable units of code written to automate or define the state of a system. Puppet Forge is a repository for modules written by the community for Open Source and Enterprise Puppet.
Puppet Agents are installed on nodes whose state needs to be monitored or changed. A designated server known as the Puppet Master is responsible for orchestrating the agent nodes.
Agent nodes send basic facts about the system such as the operating system, kernel, architecture, IP address, hostname, etc. to the Puppet Master. The Puppet Master then compiles a catalog with information provided by the agents on how each node should be configured and sends it to the agent. The agent enforces the change as prescribed in the catalog and sends a report back to the Puppet Master.
Facter is an interesting tool that ships with Puppet that pulls basic facts about the system. These facts can be referenced as a variable while writing your Puppet modules.
Writing Modules in Puppet is pretty straight forward. Puppet Manifests together form Puppet Modules. Puppet manifests end with an extension of .pp . Here is an example of ‘Hello World’ in Puppet.
Here is another example with system based logic. Note how the operating system fact is being used as a variable prepended with the $ sign. Similarly, this holds true for other facts such as hostname which can be referenced by $hostname .
There are several resource types for Puppet but the package-file-service paradigm is all you need for undertaking the majority of the configuration management. The following Puppet code makes sure that the OpenSSH-Server package is installed in a system and the sshd service is notified to restart every time the sshd configuration file is changed.
For more information, refer to the Puppet Labs Documentation
Blueprint¶
Write about Blueprint
Buildout¶
Buildout is an open source software build tool. Buildout is created using the Python programming language. It implements a principle of separation of configuration from the scripts that do the setting up. Buildout is primarily used to download and set up dependencies in Python eggs format of the software being developed or deployed. Recipes for build tasks in any environment can be created, and many are already available.
Shinken¶
Shinken is a modern, Nagios compatible monitoring framework written in Python. Its main goal is to give users a flexible architecture for their monitoring system that is designed to scale to large environments.
Shinken is backwards-compatible with the Nagios configuration standard and plugins. It works on any operating system and architecture that supports Python, which includes Windows, Linux, and FreeBSD.
This opinionated guide exists to provide both novice and expert Python developers a best practice handbook to the installation, configuration, and usage of Python on a daily basis.
O’Reilly Book
This guide is now available in tangible book form!
All proceeds are being directly donated to the DjangoGirls organization.
Источник
Основы применения Python в администрировании Linux
В статье описаны преимущества языка Python при использовании его в качестве инструментария для решения задач системного администрирования по сравнению с возможностями стандартного командного интерпретатора bash. Python – удобный инструмент для решения задач системного администрирования, как повседневных, так и более специфических. Он одинаково подходит для создания как скриптов, так и более сложных приложений, в особенности сетевых, а также может служить заменой стандартному shell в Linux.
Ненужно. Мне и shell’а хватает с головой.
Наверное нужно, особенно если python уже знаешь и не хочешь тратить время
puppet и chef доказали что python для системного администрирования не нужен когда есть ruby
Для «routine task automation» чего бы и питон не использовать?
Лишь бы etc/init.d/* не вздумали на нем переписать. 🙂
. а ruby практически никогда нет )
Анонимусы ЛОРа доказали, python, ruby и bash не нужны когда есть C.
^ не толще вышесказанного.
Пайтон удобнее в роли скриптового языка. Кто-бы там не говорил.
s/скриптового языка/языка для администрирования и скриптинга/
«Нужно». Линуксоиды, которые не в состоянии с помощью bash решать задачи администрирования? Бууу-га-га. «Объектно-ориентированный одмины» детектед.
Функциональные одмины суровее.
Расскажите уже кто-нибудь этой Кате, что использование popen в скриптах, работающих с сетью, чрезвычайно херовая затея, особенно если эти скрипты запускаются от рута.
Да ну Python. Есть же православный Perl, который задумывался как замена sh/awk/sed/etc
awk/sed/etc, но не sh.
пистон-недобейсик не нужен. коммон лисп наше все. да-да, и для скриптинга тоже.
Нет. Не в этом дело.
Проблема в том, что bash можно найти практически в любой системе, он есть «искаропки». А вот с пистоном напряг — не все и далеко не всегда его ставят. Исключение — гентари хронические, которые без него ни ногой. Ещё и повыбирают — 3.* или 2.* использовать. Случай вырожденный и не рассматривается.
В сухом остатке это выглядит (хоть и доказательство посредством аналогий и не принимается особо, но всё же. ) как если бы мне для правки конфига нужно было бы пользоваться не vi (например), а всенепременно NetBeans/Eclipse прикрутить. Надеюсь, аналогия понятна и проста.
Да. У bash нет по умолчанию развитых сетевых средств. Плохо. Но зачем мне использовать (например) упомянутую в статье ftplib, если есть превосходное средство wget? Только для того, чтобы перейти на новомодное и объектно-ориентированное? :))) Вообще-то, bash (как и любой шелл) прежде всего нужен для связки разнородного утиля, который выполняет какие-то задачи. wget таскает файло? Вот и пусть таскает. Ну, а ниосилившим. Чё. PowerShell и в перёд — оффтоп автоматизировать.
Новости на LOR. Такие новости.
Милейший, Вы бы, ей-Богу, уж как-нибудь по-аккуратнее чтоли? А то ж со стула так можно упасть. Perl и задумывался и реализовывался как язык анализа log-файлов и составления отчётов по ним. Это даже из названия слеедует — Practical Extraction and Report Language. Замена ah/awk/sed/etc. Может быть, возможна, но крайне сомнительна.
Источник
Python для системных администраторов
Автор перевода messerr, просто с кармой ему не повезло.
Введение
О модулях
Модуль – важное понятие в языке Python. По существу, модуль – это ресурс, который вы подключаете к программе, чтобы затем использовать его. Этот процесс можно сравнить с тем, что вы достанете из ящика лист бумаги и положите его на свой стол, подготовив тем самым к дальнейшему использованию. Модули подключаются при помощи команды import, которая присутствует в начале каждого примера. Модули доступны для связи с базами данных, сетевого программирования, сервисов операционных систем и сотен других полезных областей.
Заставим Python работать
Python — полнофункциональный, надежный язык программирования и, по существу, имеет массу свойств. Изучение его может стать задачей эпических масштабов. Однако, помните, что многие способности, такие как GUI инструментарий, имеют для системного администратора низкую ценность. Вот почему в этой статье используются специфичные примеры: они демонстрируют навыки, необходимые для эффективного написания скриптов управления системой.
Немного о примерах:
- Каждый пример использует try: и except: с блоком кода внутри. Это осуществляет элементарную обработку ошибок. Python имеет обширную поддержку для обработки всех видов исключений, но, в рамках примеров этой статьи, я обошелся простой проверкой.
- Эти примеры тестировались с помощью Python 2.5, запущенном на Linux® box, но они должны работать на любой Unix/Linux машине.
Вы несомненно задумаетесь об улучшении этих скриптов. Это хорошо! Натура Python-скриптов заключается в том, что они могут быть легко модифицированы и настроены без необходимости перекомпиляции.
Пример 1: Поиск файлов и отображение прав в дружественном формате
Первый пример (Листинг 1) осуществляет поиск файлов, в соответствии с шаблоном (который вводит пользователь) и выводит результат на экран вместе с правами доступа для каждого файла. Во-первых, вы можете подумать, что эта программа не делает ничего большего, чем вызов команды find; однако она отображает результаты особым образом и ваши варианты отображения этого расширенного поиска безграничны.
Скрипт по существу решает три задачи:
- Получает шаблон поиска от пользователя
- Выполняет поиск
- Показывает результаты пользователю
При написании скрипта постоянно задавайте себе вопрос, «Выполнение какой задачи данный код обеспечивает?» Задавая себе этот вопрос, вы повышаете внимание в вашей работе и ее эффективность.
Листинг 1. Поиск файлов и отображение результатов с правами доступа.
# -*- coding: utf-8 -*-
import stat, sys, os, string, commands
#Записываем в переменную шаблон поиска, введенный пользователем
try:
pattern = raw_input(«Введите шаблон поиска:\n»)
#запускаем команду ‘find’ и присваиваем результат переменной
commandString = «find » + pattern
commandOutput = commands.getoutput(commandString)
findResults = string.split(commandOutput, «\n»)
#выводим найденные файлы вместе с правами доступа
print «Файлы:»
print commandOutput
print «================================»
for file in findResults:
mode=stat.S_IMODE(os.lstat(file)[stat.ST_MODE])
print «\nPermissions for file «, file, «:»
for level in «USR», «GRP», «OTH»:
for perm in «R», «W», «X»:
if mode & getattr(stat,»S_I»+perm+level):
print level, » имеет «, perm, » права доступа»
else:
print level, » не имеет «, perm, » прав доступа»
except:
print «Возникла проблема! Проверьте сообщение выше.»
Программа следует по следующим этапам:
- Запрашивает у пользователя шаблон поиска (строки 7-9).
- Печатает список найденных файлов (строки 12-14).
- Используя модуль stat, получает права доступа для каждого найденного файла и отображает их на экране (строки 15-23).
Результат работы программы показан в Листинге 2.
$ 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 при помощи меню
Предыдущий пример для своей работы запрашивал у пользователя поисковый шаблон. Другой способ получить от пользователя информацию — аргумент в командной строке. Программа в Листинге 3 показывает как сделать это в Python: код берет имя файла tar, как аргумент командной строки и затем предложит пользователю несколько опций. Этот пример так же показывает новый способ решения проблемы. Первый пример использовал модуль команд для запуска find и захвата вывода. Этот подход можно назвать неуклюжим и не очень «питоновским». Этот пример использует для открытия tar файла модуль tarfile, преимущество которого в том, что он позволяет Вам использовать атрибуты и методы Python при манипуляции с файлами. При помощи многих модулей Python, вы можете делать вещи, недоступные через командную строку. Этой хороший пример использования меню в Python. Программа выполняет различные действия в зависимости от вашего выбора:
- Если вы нажмете 1, программа предложит выбрать файл в архиве для извлечения в текущую директорию и затем извлечет файл.
- Если вы нажмете 2, программа предложит выбрать файл и затем покажет информацию о нем.
- Если вы нажмете 3, программа выведет список всех файлов в архиве.
Листинг 3. Выполнение операций с архивом tar при помощи меню
# -*- coding: utf-8 -*-
import tarfile, sys
try:
#открываем tar-файл
tar = tarfile.open(sys.argv[1], «r:tar»)
#выводим меню и сохраняем выбор
selection = raw_input(«Введите\n\
1 чтобы извлечь файл\n\
2 чтобы вывести информацию о файле в архиве\n\
3 чтобы показать все файлы в архиве\n\n»)
#выполняем действия, основанные на выборе
if selection == «1»:
filename = raw_input(«введите имя файла для извлечения: «)
tar.extract(filename)
elif selection == «2»:
filename = raw_input(«введите имя файла для просмотра: «)
for tarinfo in tar:
if tarinfo.name == filename:
print «\n\
Имя файла:\t\t», tarinfo.name, «\n\
Размер:\t\t», tarinfo.size, «байт\n»
elif selection == «3»:
print tar.list(verbose=True)
except:
print «При выполнении программы возникла проблема!»
Программа следует по следующим этапам:
- Открывает tar файл (строка 5).
- Выводит на экран меню и получает выбор пользователя (строки 8-11).
- Если вы нажали 1 (строки 14-16), извлекает файл из архива.
- Если вы нажали 2 (строки 17-23), предоставляет информацию о выбранном файле.
- Если вы нажали 3 (строки 24-25), предоставляет информацию о всех файлах в архиве.
Результат работы программы показан в Листинге 4.
Листинг 4. Меню пользователя для второго примера
$ python example2.py jimstar.tar
Введите
1 чтобы извлечь файл
2 чтобы вывести информацию о файле в архиве
3 чтобы показать все файлы в архиве
Пример 3. Проверка запущенного процесса и отображение информации в дружественном представлении.
Одной из важнейших обязанностей системного администратора является проверка запущенных процессов. Скрипт в Листинге 5 даст вам несколько идей. Программа использует преимущества возможностей Unix: команда grep использует вывод, генерированный другой командой. Это позволит вам уменьшить объем данных, которые в дальнейшем будет анализировать Python.
Программа так же использует модуль string. Изучите этот модуль — вы будете часто его использовать.
Листинг 5. Отображение информации о запущенном процессе в дружественном представлении
# -*- coding: utf-8 -*-
import commands, os, string
program = raw_input(«Введите имя программы для проверки: «)
try:
#выполняем команду ‘ps’ и присваиваем результат списку
output = commands.getoutput(«ps -f|grep » + program)
proginfo = string.split(output)
#выводим результат
print «\n\
Путь:\t\t», proginfo[5], «\n\
Владелец:\t\t\t», proginfo[0], «\n\
ID процесса:\t\t», proginfo[1], «\n\
ID родительского процесса:\t», proginfo[2], «\n\
Время запуска:\t\t», proginfo[4]
except:
print «При выполнении программы возникла проблема!»
Программа следует по следующим этапам:
- Получает имя процесса для проверки и присваивает его переменной (строка 3).
- Запускает команду ps и добавляет результат в список (строки 7-8).
- Выводит детальную информацию о процессе (строки 11-16).
- Результат работы программы показан в Листинге 6.
Листинг 6. Вывод третьего примера
$ 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. Проверка имен пользователей и паролей на соблюдение политики безопасности
# -*- coding: utf-8 -*-
import pwd
#заводим счетчики
erroruser = []
errorpass = []
#получаем базу данных паролей
passwd_db = pwd.getpwall()
try:
#проверяем каждое имя пользователя и пароль на валидность
for entry in passwd_db:
username = entry[0]
password = entry [1]
if len(username)
Программа следует по следующим этапам:
- Инициализирует списки счетчиков (строки 4-5).
- Открывает базу данных паролей и записывает данные в список (строка 8).
- Проверяет имена пользователей и пароли на валидность (строки 12-18).
- Выводит имена и пароли, не соответствующие политике безопасности (строки 21-26).
Результат работы программы показан в Листинге 8.
Листинг 8. Вывод четвертого примера
$ python example4.py
Следующие пользователи имеют имена менее чем из 6 символов::
Guest
Следующие пользователи имеют пароли менее чем из 8 символов:
Guest
johnsmith
joewilson
suejones
Другое применение скриптов. Вы можете использовать Python по ряду направлений для управления системой. Одна из лучших вещей, которую вы можете сделать — проанализировать свою работу, определить какие задачи вы выполняете неоднократно и изучить модули Python, которые помогут вам решить эти задачи — почти наверняка, таковые найдутся. Некоторые области, где Python может быть отличным помощником:
- Управление серверами: проверка патчей для конкретного приложения и их автоматическое обновление.
- Журналирование: автоматическая отправка e-mail при появлении в логах особого вида ошибки.
- Сеть: создание Telnet соединения к серверу и слежение за статусом соединения.
Тестирование web-приложений: использование свободно доступных инструментов для эмуляции веб-браузера и проверки веб-приложения на функциональность и производительность.
Это всего лишь несколько примеров — я уверен вы сможете добавить к ним свои собственные полезные идеи.
Источник