Comments 21
Неплохо. Но рекомендую взять готовый инструмент. В 2013 уже был, кстати. Очень удобная штука. Причём одним только удалённым выполнением команд не ограничивается. Тут и копирование файлов, и сложная логика, и локальное выполнение команд…
Сам пользовался для управления DNS-серверами. Информация на них была одна и та же, но вот версии сервера отличались и окружение тоже. А держать несколько копий данных мне не улыбалось. Тут-то меня Capistrano и выручил: небольшая правка скрипта — и вот уже в зависимости от хоста файлы исключаются из копирования или редактируются удалённом после приёма. Классная штука.
Там distribute
Жалко что про эту штуку не знает никто кроме админов ya/ex-ya… Надо будет хоть самому затестить как-нибудь.
Я полагаю что вот это https://github.com/lilydjwg/pssh
Из статьи не совсем понятно, почему не ansible? Вроде бы тоже все делает через ssh, клиентов на узлах не требует. Не говоря уже про идемпотетность сценариев и прочее…
ossh был сделан не для управления конфигурациями а именно для параллельного запуска команд. Из примеров, когда ossh мне помог, видно, что использовать для тех задач системы управления конфигурациями было бы затруднительно.
$ ansible all -i '<ip-address-1>,<ip-address-2>' --user=admin --private-key=~/.ssh/id_rsa -m shell -a "cat /etc/os-release"
К примеру, эта команда вернет содержимое файла /etc/os-release на любом указанном количестве хостов. Это если не хотите пользоваться playbook'ами и создавать инвентари :)
Точно так же можно поставить пакет, создать каталог и т.д (через shell-команды или используя встроенные модули ansible).
У нас в компании сейчас идет фаза перехода с Chef на Ansible. Это оказалось гораздо менее болезненным, чем казалось.
Параллелизм — сколько задашь в ansible.cfg, ну и сколько памяти сожрёт питон при запуске на большом числе машин — проверить стоит.
Дефолтный вывод парсить не слишком удобно, но есть callback plugins, например json.
Вроде такого:
ANSIBLE_LOAD_CALLBACK_PLUGINS=1 ANSIBLE_STDOUT_CALLBACK=json ansible all -i 'ip1,ip2' --user=root --private-key=~/.ssh/id_rsa -m command -a '/bin/cat /etc/fstab' | jq .plays[0].tasks[0].hosts
В добавок к этому закину http://www.fabfile.org/
и http://www.paramiko.org/.
это если нужно на питоне sah параллельно запускать.
в сочетании с pyexpect, к примеру, позволяет делать довольно странные вещи.
ossh: параллельное выполнение команд на многих серверах