Sparrowdo — простий інструмент управління конфігураціями

Привіт! У цій статті хотів би розповісти про простому інструменті управління конфігураціями — Sparrowdo. Скажу відразу, що система Sparrowdo базується на використанні так званих Sparrow плагінів, o яких мною був вже написано низку статей habrahabr.ru
imageimage

Отже, відмінні особливості даного інструменту:
  • Конфігураційні сценарії пишуться на Perl6 ( це пояснює появи логотипу з метеликом вгорі статті :)
  • Рішення задач управління конфігураціями відбувається вибором того чи іншого відповідного плагіна і запуску його на настроюваному сервері. Кожен плагін — чорний ящик за рішенням конкретної задачі. Зібравши певну кількість плагінів і запустивши їх на сервері з необхідними параметрами, ви отримуєте необхідну конфігурацію системи. Плагіни можуть вирішувати як елементарні завдання, такі як створення користувачів, груп, установка системних пакетів, так і більш складні, комплексні — установка програми з исходников в git репозитарії і запуск його у вигляді сервісу. Ви самі вибираєте плагін, який підходить вам.
  • Деякою аналогією відомих плагінів в існуючих системах управління конфігураціями можуть бути ресурси або кукбуки chef або модулі ansible.
  • Отже, Sparrowdo не надає "з коробки" базовий набір функцій, як це пропонується в chef або ansible, але замість цього ви завжди можете скористатися готовим набором плагінів, вирішальним типові задачі. Але навіть якщо ви знайдете підходящого, ви зможете легко написати свій плагін і тут же скористатися ним. Таким чином в Sparrowdo/Sparrow акцент робиться не на готовому вирішенні постачається спочатку разом з інструментом, а на можливості швидко і легко додавати необхідну функціональність.
  • Сценарії Sparrowdo визначають списки Sparrow плагінів з вхідними параметрами — фактично, все що вам потрібно, що б описати необхідну конфігурацію сервера. Sparrowdo клієнт проходиться по списку плагінів і послідовно запускає їх на цільовому сервері, результат виводиться на консоль у вигляді TAP звітів, причому запуск кожного плагіна породжує свій звіт.
  • Сценарії пишуться на Perl6, використовується простий API по запуску плагінів на віддаленій машині, конкретні приклади я наведу трохи пізніше.
  • Для роботи Sparrowdo обрана push ідеологія. У вас є майстер хост, на якому встановлений Sparrowdo клієнт, з якого по ssh запускаються плагіни на цільовому сервері. Для запуску плагінів на цільових серверах повинен бути встановлений клієнт Sparrow. Ось як все буде виглядати з точки зору конкретних команд по установці даної системи.
Установка Sparrowdo клієнта на майстер хост:
$ ssh master.host
$ panda install Sparrowdo

Установка Sparrow клієнта на цільові хости:
$ ssh target.host
$ cpanm Sparrow
$ yum install curl

Схема роботи Sparrowdo системи:
+-----------------+
| | ssh
| |------------> < host-1 > 192.168.0.1
| <master host> | ssh
| {sparrowdo} |------------------> < host-2 > 192.168.0.2
| | ssh
| |-----------------------> < host-N > 192.168.0.3
| |
+-----------------+

+-------------+
| |
| <host> |
| |
| {sparrow} |
| {curl} |
| |
+-------------+

Для того, що б все це працювало необхідно забезпечити дві умови:
  • з майстер хоста на цільові машини повинен забезпечуватися безпарольный ssh доступ
  • користувач з під якого створюється ssh сесія повинен мати безпарольный sudo на цільовій машині
Якщо обидва критерії задоволені ми може створити Sparrowdo сценарій і запустити його з майстер хоста на цільовій машині:
$ ssh master.host
$ nano sparrowfile # створення сценарію
$ sparrowdo --host=192.168.0.1

У клієнта є безліч додаткових параметри, які ви можете використовувати, наприклад вказати ім'я користувача, під яким ви будете запускати ssh сесії або збільшити деталізацію звіту параметром
--verbose
:
$ sparrowdo --host=192.168.0.1 --ssh_user=admin --verbose

Приклади
Ну а тепер кілька прикладів, що б можна було побачити як з допомогою Sparrowdo можна автоматизувати типові задачі налаштування серверів.
Установка CPAN модулів
Так система Sparrowdo/Sparrow написана на Perl6/Perl5, і перш за все орієнтована на Perl розробників, то не можу не почати з цього, класичного для екосистеми Perl use кейса.
$ ssh master.host
$ cat sparrowfile

task_run %(
task => 'install some cpan packages',
plugin => 'cpan-package',
parameters => %(
list => 'CGI DBI',
install-base => '/opt/perl'
)
);

Цим сценарієм ми встановлюємо два CPAN модуля — CGI і DBI, причому як настановної директорії (install base ) використовуємо шлях /opt/perl.
Ось як все це буде виглядати на моїй тестовій машині:
$ sparrowdo --host=192.168.0.1
running sparrow tasks on 192.168.0.1 ...
running task <install some cpan packages> plg <cpan-package>
parameters: {install-base => /opt/perl, list => CGI DBI}
/tmp/.outthentic/5385/opt/sparrow/plugins/public/cpan-package/story.t ..
# [/opt/sparrow/plugins/public/cpan-package/modules/cpanm]
# install CGI into /opt/perl ...
# Successfully installed HTML-Parser-3.72 (upgraded from 3.64)
# Successfully installed Test-Deep-1.120
# Successfully installed Sub-Uplevel-0.25
# Successfully installed Carp-1.38 (upgraded from 1.11)
# Successfully installed Test-Warn-0.30
# Successfully installed CGI-4.31 (upgraded from 3.51)
# 6 distributions installed
# install ok
ok 1 - output match 'install ok'
# [/opt/sparrow/plugins/public/cpan-package/modules/cpanm]
# install DBI into /opt/perl ...
# Successfully installed DBI-1.636
# 1 distribution installed
# install ok
ok 2 - output match 'install ok'
# [/opt/sparrow/plugins/public/cpan-package]
# cpan-package-done
ok 3 - output match 'cpan-package-done'
1..3
ok
All tests successful.
Files=1, Tests=3, 91 wallclock secs ( 0.02 usr 0.01 sys + 72.58 cusr 8.26 csys = 80.87 CPU)
Result: PASS

Установка системних пакетів
Для цієї мети скористаємося плагіном package-generic, хочеться зауважити, що поки він підтримує невелика кількість платформ — Ubuntu/Debian/CentOS але його легко "доточити" при необхідності. Ось як буде виглядати сценарій по установці nginx, nano і telnet.
$ ssh master.host
$ cat sparrowfile

use v6;

use Sparrowdo;

task_run %(
task => 'install my packages',
plugin => 'package-generic',
parameters => %( list => 'nginx nano telnet' )
);

Створення, видалення користувачів і груп
Ця типова задача вирішується плагінами з очевидними назвами user і group. Ось як може виглядати Sparrowdo сценарій:
$ ssh master.host
$ cat sparrowfile

use v6;

use Sparrowdo;

task_run %(
task => 'this is me',
plugin => 'user',
parameters => %( name => 'melezhik' )
);

task_run %(
task => 'admins group',
plugin => 'group',
parameters => %( name => 'admins' )
);

task_run %(
task => 'remove unknown users',
plugin => 'user',
parameters => %( name => 'Unknown' , action => 'delete' )
);

Управління сервісами
Не міг пропустити це класичний кейс. Ось як все буде виглядати в Sparrowdo сценарії:
$ ssh master.host
$ cat sparrowfile

use v6;

use Sparrowdo;

task_run %(
task => 'start nginx ',
plugin => 'service',
parameters => %( name => 'nginx' )
);

task_run %(
task => 'stop nginx ',
plugin => 'service',
parameters => %( name => 'nginx' , action => 'stop' )
);

task_run %(
task => 'add nginx to autostart',
plugin => 'service',
parameters => %( name => 'nginx' , action => 'enable' )
);

task_run %(
task => 'remove nginx from autostart',
plugin => 'service',
parameters => %( name => 'nginx' , action => 'disable' )
);

Використання шаблонів для налаштування конфіг файлів
І останній приклад складніше. Як можна керувати конфіг файлів використовуючи шаблони у форматі Template-Toolkit.
Скористаємося плагіном templater. Для того, що б все працювало, створимо шаблон в тій же директорії, де знаходиться Sparrowdo сценарій, наприклад такий
$ ssh master.host
$ cat foo.conf.tmpl

Hello, my name is [% name %]!
I speak [% language %]

Тепер напишемо сценарій по установці конфігураційного файлу на основі нашого шаблону, який ми передамо пару змінних:
$ ssh master.host
$ cat sparrowfile

use v6;

use Sparrowdo;

task_run %(
task => 'install my config',
plugin => 'templater',
parameters => %(
variables => %(
name => 'sparrowdo',
language => 'perl6'
),
target => '/etc/foo.conf',
owner => 'user',
mode => '644',
source => slurp 'foo.conf.tmpl'
)
);

У підсумку, після застосування даного сценарію на цільовому сервері отримаємо файл
/etc/foo.conf
з вмістом
Hello, my name is sparrowdo!
I speak perl6

Використання приватних плагінів
Всі плагіни, про які щойно йшла мова є публічними. Вони всі знаходяться у спільному центральному репозитарії Sparrow плагінів SparrowHub. Якщо з якихось причин ви не хочете викладати свої плагіни в загальний доступ, ви можете розмістити їх у віддалених git архівів і використовувати їх звідти. Це називається приватний Sparrow плагіни.
От як би виглядав приклад, для сценарію установки системних пакетів, якщо б користувалися приватним плагіном package-generic, що знаходяться в github репозитарії ( я опускаю деталі, пов'язані з аутентифікацією ):
$ ssh master.host
$ cat sparrowfile

use v6;

use Sparrowdo;

set_spl %(
package-generic => 'https://github.com/melezhik/package-generic.git'
);
task_run %(
task => 'install my packages',
plugin => 'package-generic',
parameters => %( list => 'nginx nano telnet' )
);

На цьому огляд існуючих можливостей системи Sparrowdo/Sparrow можна завершити. З повним переліком існуючих плагінів можна ознайомитися тут. Нові модулі додаються постійно, ті, кого зацікавила дана стаття можуть включиться в процес, як я вже неодноразово говорив — написання нових Sparrow плагінів під силу кожному, хто пише на Perl, Bash або Ruby, для розробки плагінів існує спеціальна середовище під назвою Outthentic, документації до якої можна знайти всю інформацію. Процес "перетворення" користувальницьких скриптів в Sparrow плагіни також описаний в документації Sparrow.
Резюме
Отже, як сказано в заголовку статті, Sparrowdo саме просте, але досить ефективний засіб управління конфігураціями. Просте тому що, там немає багатьох фіч присутніх у відомих системах управління конфігураціями — таких як запуск сценаріїв dry-run режимі, як в chef або управління залежностями між плагінами. Однак важливою характеристикою, що відрізняє систему Sparrowdo/Sparrow від ряду інших є можливість швидкої розробки потрібних вам плагінів і їх подальше "включення" в систему через єдиний репозиторій. У порівнянні зі складним LWRP API в chef написання нового плагина Sparrow вирішальним ваше завдання буде на порядок швидше і простіше. Та й код на виході буде простіше для розуміння, налагодження та супроводження.
Так само важливо згадати, що Sparrow не нав'язує вам ніякого DSL в рамках якого ви пишете плагіни, але надає уніфікований API для всіх трьох мов розробки плагінів ( Perl, Bash, Ruby ).
Що ж стосується самої системи Sparrowdo — це свого роду тонкий клієнт до Sparrow плагінів. У нього простий API, з можливістю конструювання списків застосовуваних плагінів в суто імперативний стилі, використовуючи всю міць сучасної мови Perl6.
Дякую за увагу. Як завжди, чекаю критики по справі, запитань і коментарів.
Дякую.
PS і в кінці простенький опитування, не стосується безпосередньо теми статті.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.