LINUX.ORG.RU
ФорумAdmin

Система управления серверами на bash

 , оркестровка,


3

3

Привет!

Подскажите, может кто знает какой-нибудь сабж!? Про puppet\salt\ansible\etc знаю, Ansible пробовал - не устраивает по многим пунктам как в части отображения информации, так и со стороны написания сценариев и выполнения команд на хостах. По сравнению с ansible на bash могу навелосипедить что-то меньшее по объему, но при этом работающее так, как мне нужно. Bash выбран потому, что уже наплясался со всякими питонами 2.4 ветки и сопутствующими json и прочим, а в ruby даже вникать не хочется.

90% задач - зайти по ssh, выполнить команду, посмотреть exitcode\stdout, повторить на следующем хосте из списка, перейти к следующей команде и т.д.

Есть ли сабж, или проще самому написать?

★★★★★

90% задач - зайти по ssh, выполнить команду, посмотреть exitcode\stdout, повторить на следующем хосте из списка, перейти к следующей команде и т.д.

Это же простейший однострочник, не? Взять список команд, взять список серверов, пройти по второму, выполнять по очереди по SSH команды из первого, получать вывод.

sT331h0rs3 ★★★★★
()
Ответ на: комментарий от sT331h0rs3

Вот в этом то и дело. Просто разбор списка команд и списка серверов нужно как-то «централизировать» - по сути нужно лишь парсер для всего этого. Но если самому писать нужно будет реализовать несколько нюансов - как списки читать, как инфу с сервера передавать, асинхронность может пригодиться - вдруг есть уже готовый набор скриптов для этого.

alozovskoy ★★★★★
() автор топика
Ответ на: комментарий от alozovskoy

как инфу с сервера передавать

SSH, если что, выполняя команду на удалённом сервере, перенаправляет stdout обратно на локальную машину.

sT331h0rs3 ★★★★★
()

Вариант использовать Chef не рассматривается?

sT331h0rs3 ★★★★★
()

IMO, зря. Там, где bash-а хватает, проше написать «for i in `hosts` ...», чем вспоминать, как ты этот скрипт назвал и какие аргументы он принимает. А вот там, где его не хватает, придётся изобретать ещё 127 велосипедов, уже реализованных в puppet/salt/ansible/etc - что нудно.

Offtopic: а можно более подробный список наиболее критичных с твоей тз недостатков анзибля?

DonkeyHot ★★★★★
()

90% задач - зайти по ssh, выполнить команду, посмотреть exitcode\stdout, повторить на следующем хосте из списка, перейти к следующей команде и т.д.

man expect

Turbid ★★★★★
()
Ответ на: комментарий от alozovskoy

Используй ансибл, реально удобнее будет.

А про bash - посмотри на сервере адм, там я с коллегами такой велосипед уже писал. Оказалось «ненужно»

trofk ★★★
()
apt-cache show dsh
Package: dsh
Priority: optional
Section: universe/net
Installed-Size: 139
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Junichi Uekawa <dancer@debian.org>
Architecture: amd64
Version: 0.25.10-1ubuntu1
Depends: libc6 (>= 2.8), libdshconfig1 (>= 0.20.13)
Suggests: update-cluster
Filename: pool/universe/d/dsh/dsh_0.25.10-1ubuntu1_amd64.deb
Size: 21748
MD5sum: a2b7263b38efe94d866afa72da0ed7eb
SHA1: 8c8e9ed3e3a45b7f3623b3b6c8c1e620d218c227
SHA256: 94d1df6d2379271f4a2e2591c5eaa799a64b98289471a9a94f35503c6ab8cb11
Description-ru: dancer's shell, or distributed shell
 Выполняет введённую команду на группе компьютеров, используя методы
 удалённого доступа, такие как rsh или ssh.
 .
 dsh can parallelise job submission using several algorithms, such as using
 fan-out method or opening as much connections as possible, or using a
 window of connections at one time. It also supports "interactive mode" for
 interactive maintenance of remote hosts.
 .
 This tool is handy for administration of PC clusters, and multiple hosts.
 .
 http://www.netfort.gr.jp/~dancer/software/dsh.html
Description-md5: 1473981f6aac6363419eeb647be581e3
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Origin: Ubuntu

DALDON ★★★★★
()
Последнее исправление: DALDON (всего исправлений: 1)

Выпрями руки.

Bash выбран потому, что уже наплясался

С башем напляшешься больше. Он заметно хуже.

x3al ★★★★★
()
Ответ на: комментарий от dada

Там где пишут крайне закрытая тема. Тестить не дадут)

trofk ★★★
()
Ответ на: комментарий от x3al

баш ... заметно хуже

Он не хуже, у него «ниша» другая. Если удастся свести задачу к «пайпы клеить/файлы перебирать», баш окажется вполне себе лучше. Правда, вероятность этого - процентов 10. Остальные за то, что очень скоро попадётся башеболезненная программа/компонент, питон коварно влезет взад, и совесть станет грызть разрабов вопросом «почему мы сразу не».

DonkeyHot ★★★★★
()
Пример dsh (работает параллельно на всех хостах)

Раскидать по серверам скрипт 
# cat /root/check_smartarray.sh | dsh -i -c -f lnx_with_smartarray.list "cat > /usr/local/sbin/check_smartarray.sh; chmod +x /usr/local/sbin/check_smartarray.sh"

Запуск этого скрипта и фильтрация проблемных
# dsh -c -M -f lnx_with_smartarray.list "/usr/local/sbin/check_smartarray.sh" | grep 'Status: Critical'
sdio ★★★★★
()
Ответ на: комментарий от DonkeyHot

Ах да, вот если был бы другой язык, похожий на баш и мощнее питона, без зоопарка версий и с лёгким рантаймом, интерпретатор которого установлен в любой системе, было бы круто, да?

disarmer ★★★
()
Ответ на: комментарий от DonkeyHot

проше написать «for i in `hosts` ...», чем вспоминать, как ты этот скрипт назвал и какие аргументы он принимает

А вот не соглашусь - проще написать сценарии с человеческими названиями которые будут сынтегрированны со списком хостов, чем постоянно руками набирать или где-то хранить однострочники.

Offtopic: а можно более подробный список наиболее критичных с твоей тз недостатков анзибля?

* Есть машины со старым python (2.4), которые нельзя обновить - как результат имеем рабочим только raw-модуль

* Невозможность нормально использовать циклы в плейбуках - если перебор серверов циклом еще можно реализовать, то вот получить нормальный stdout с них так и не получилось - отдает сначала перебираемый элемент списка (то есть все, что записано в регистр для результата - какая команда, дельты всякие и т.д.), а потом лепит stdout. Ни в ирке, ни в гуглогруппе мне найти решение этой проблемы не помогли

* Нет возможности самому форматировать сообщения (я хочу, например, перевод строки сделать в сообщении, а Ansible мне его перекорячивает в \n или вообще убирает)

* Криво реализованный UTF8 - раньше небыло возможности сообщения с кириллицей выдать, если в регистр для результата попадала кириллица он тоже не выводился, либо кириллица заменялась на коды символов. Вроде пофиксили, но все равно то тут то там наблюдаю такую картину.

* Нет возможности форматировать вывод в результате прогонки плейбука - можно через callback добавить элементы, а вот обычными средствами выводить только например итог работы плейбука нельзя.

* Лог файл задается через переменную окружения, либо все в один пихает.

* Нет возможности привязать файл с инвентарем к плейбуку

* Нет возможности на stdout выводить краткий лог, а в лог-файл - полный

* Модули, которые реализованы не так, как нужно - service например не может проверить состояние сервиса, только меняет.

Это то что пока мне нужно для счастливой жизни. С учетом того что код плейбука по размерам точно не меньше аналогичного кода на bash, ищу замену.

alozovskoy ★★★★★
() автор топика
Последнее исправление: alozovskoy (всего исправлений: 1)
Ответ на: комментарий от dada

Класс, если что - сообщим

trofk, ну сами скрипты то можно показать, не станем же мы их привязывать к текущему окружению.

alozovskoy ★★★★★
() автор топика
Ответ на: комментарий от Pinkbyte

Зачем мне что-то парсить дополнительно, если у меня есть такой горный велосипед? ClusterSSH видел, не совсем то.

alozovskoy ★★★★★
() автор топика
Ответ на: комментарий от DonkeyHot

Чет я вот уже месяц как пытаюсь с Ansible подружиться, и на каждой задаче понимаю что я бы сейчас на две строки скрипт сделал и кофе пил, а тут два часа вожусь.

alozovskoy ★★★★★
() автор топика
Ответ на: комментарий от disarmer

похожий на баш и мощнее питона, без зоопарка версий и с лёгким рантаймом, интерпретатор которого установлен в любой системе, было бы круто?

Не знаю. Перетасовка файлов и перетасовка байтов - слишком разные задачи → несколько разных языков может быть оптимальным. Зоопарк версий, вероятно, можно было бы устранить, но судьба tcl-я говорит, что эта проблема никого не волнует. «Установлен на любой системе» легко чинится. «Лёгкий рантайм» - для эстетов, можно и с тяжёлым работать. Т.ч. моя твоя не понимай, и причины переписывать анзибль пока не видеть.

DonkeyHot ★★★★★
()
Ответ на: комментарий от DonkeyHot

«Установлен на любой системе» легко чинится

Ну давай установи на все 1500+ серверов(тут картинка). Только не забудь пройти процедуру согласования установки для каждой из информационных систем (Больше бюрократии для бога бюрократии).

trofk ★★★
()
Ответ на: комментарий от trofk

процедуру согласования установки для каждой из

Я это предпочитаю решать введением дополнительного уровня абстракции. В обсуждаемом нами случае мы измененияем одну сущность по имени «стандарт конфигурации ОС» → одно и согласование. В сложных случаях - в несколько раз больше, т.ч. богу бюрократии достаётся порядка получаса, а это можно себе позволить.

DonkeyHot ★★★★★
()
Ответ на: комментарий от DALDON

выдаст сообщение, что не смог подключиться

sdio ★★★★★
()
Ответ на: комментарий от alozovskoy

python (2.4), которые нельзя обновить

Поставь 2.7, или какой тебе там надо, в /usr/local (ну, или в /opt, например) и не мучайся. На RH-дистры ставится влет и не трогает систему ни капельки.

Клепать велосипед а-ля puppet на баше (охрененный ты инструмент для такого дела выбрал, конечно) из-за того, что не удается поставить изолированный пистон - это мощно.

alex_the_v ★★★
()

я как то пароль менял на ПК скриптом который удаленно подключался делал смену пароля, потом следующий комп и т.д. Особо ниче сложного нет все дело замутил через оператор for.

CHIPOK ★★★
()
Ответ на: комментарий от pztrn

на самом деле у меня есть ранний прототип такой системы. и даже успешно работал пару лет. но я его до нормального состояния не довел.

MikeDM ★★★★★
()
Ответ на: комментарий от MikeDM

У меня есть такой скрипт для iptables, можно ж поинтегрировать-допилить :) Да и вообще интересно было бы сделать подобную систему.

pztrn ★★★★
()
Ответ на: комментарий от alozovskoy

Решить эти проблемы будет гораздо дешевле, чем изваять поделие на баше, которое все равно толком работать не будет. Ансибл, кстати, всегда был кривоват, может просто инструмент сменить?

alex_the_v ★★★
()
Ответ на: комментарий от alex_the_v

Посоветуй тогда на что сменить (главное требование - отсутствие «клиентов» на управляемых хостах). Я уверен, что после решения этих проблем вылезут другие.

Про дороговизну нового решения - я сейчас уже столько (личного) времени убил на Ansible, при этом не особо продвинувшись в замене им существующих велосипедов, что написание всего с нуля по личным требованиям не кажется мне уже столь долгосрочным и затратным.

alozovskoy ★★★★★
() автор топика
Ответ на: комментарий от alozovskoy

Таки начинай, что тут думать. А дальше по ходу дела видно будет, может даже взлетит как нужное не только тебе одному.

deep-purple ★★★★★
()
Ответ на: комментарий от alozovskoy

Ну, очевидно, нет нормальных систем без агентов на управляемых хостах, т.к. это - наиболее гибкое и эффективное решение. Я юзаю puppet и мои волосы всегда мягкие и шелковистые, хоть Ruby я и не очень люблю, просто так сложилось. Чуваки по соседству прутся от chef, их волосы не менее мягкие и шелковистые.

Конечно, любое решение будет иметь проблемы, никуда ты от них не денешься. Однако, эти проблемы будут несоизмеримы с тем, с чем ты столкнешься пытаясь реализовать хотя бы десятую часть того функционала, который есть в том же паппете. Паппет клепают чуваки минимум вдесятером на полный день на зарплате, и один врукопашную на баше ты их не перекодишь, к бабке не ходи.

Жизнь твоя, поэтому велосипедь на здоровье, какой смысл тебя отговаривать. Просто все, кого я знаю, включая меня, в какой-то момент пришли к выводу, что попытки написать супер-самолет выливаются в годы бессмысленных трудозатрат с сомнительным результатом. Зачастую проще изменить процессы, привычки, в крайнем случае исправить/расширить инструмент, которым пользуешься.

alex_the_v ★★★
()
Ответ на: комментарий от MikeDM

Ник на ник точка name, добавляйся, поклепаем :)

pztrn ★★★★
()
Ответ на: комментарий от alozovskoy

* Есть машины со старым python (2.4), которые нельзя обновить - как результат имеем рабочим только raw-модуль

Решение тут, не тестировал - на помогло простое прикручивание simplejson.

* Невозможность нормально использовать циклы в плейбуках - если перебор серверов циклом еще можно реализовать, то вот получить нормальный stdout с них так и не получилось - отдает сначала перебираемый элемент списка (то есть все, что записано в регистр для результата - какая команда, дельты всякие и т.д.), а потом лепит stdout. Ни в ирке, ни в гуглогруппе мне найти решение этой проблемы не помогли

Решил через workaround, потестирую, если все будет в порядке запилю патч.

С остальным пока проблемы

alozovskoy ★★★★★
() автор топика
Ответ на: комментарий от disarmer

Ах да, вот если был бы другой язык, похожий на баш и мощнее

Молодец, что вспомнил zsh

zolden ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.