LINUX.ORG.RU
решено ФорумAdmin

Ansible. Синхронизация каталога с удаленного хоста А на удаленный хост В.

 ,


0

1

Коллеги, добрый день. Есть 2 файловых сервера data1 и data2. Требуется синхронизировать каталог с сервера data1 на сервер data2. Сейчас это сделано следующим образом:

  • на каждом сервере заведен пользователь rsync_user и для него настроена авторизация по ключам с data1 на data2.
  • перед тем как выполнять синхронизацию утилитой rsync, требуется на каждом из серверов поднять права для «other», т.к. пользователь rsync_user не является владельцем синхронизируемых каталогов. Соответственно, после синхронизации права меняются на начальные.
  • далее на сервере data1 запускается от имени пользователя rsync_user команда:
    rsync -av --delete-after /SAMBA/ rsync_user@data2:/SAMBA/

Проблема в том, что не удается запустить саму синхронизацию с помощью ansible. Пользователь ansible заведен на каждый сервер с авторизацией по ключам и запуском sudo без пароля. Плейбук выглядит так:

- hosts: data1
  user: rsync_user
  tasks:
  - name: rsync synchronization SAMBA on DATA1 to DATA2
    synchronize: src=/SAMBA/ dest=/SAMBA mode=pull archive=yes
    delegate_to: data2
    tags: rsync

Коллеги, пожалуйста, подкиньте пример реализации. В офф.доке http://docs.ansible.com/ansible/synchronize_module.html примеры не проясняют вопрос.



Последнее исправление: gberc (всего исправлений: 3)

Дело в том что Ansible работает в «режиме» «мастер <-> удаленный хост», в «режиме» «удаленный хост <-> удаленный хост» он работать не может. Когда используешь delegate_to то менятся не мастер, а удаленный хост, мастер всегда один. Тут можно сделать с промежуточным хранением на мастере или запускать rsync через, скажем, shell на data1 с указанием data2

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

Спасибо, понял. Буду смотреть в сторону «shell на data1» или вообще в этой задаче откажусь от ansible.

Еще раз спасибо.

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

в «режиме» «удаленный хост <-> удаленный хост» он работать не может.

То есть с помощью модуля synchronize, решить задачу:

Требуется синхронизировать каталог с сервера data1 на сервер data2.

Совсем нельзя? Никак? :(

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

В один проход нет, только при промежуточном копировании информации на мастер.

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

Ну представь себе, что у меня есть продуктивный инстанс alfresco. Мне надо поднять тестовый. Соот-но нужно, перекинуть данные с продуктивного, поправить штук 20-30 конфиг. файлов. Как-то так.

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

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

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

Ой не... Я активно использую шаблонизатор ниндзя который используется в модуле: template - после этой штуки, пользоваться скриптами - это словно мыть аэродром зубной щёткой. :)

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

Дык кто же мешает шаблонизировать без ансибля? Жынжу эту можно и через питон юзать напрямую, благо ансибль на нём как раз и писан.

Ансибль - он для другого, для массового конфигурирования. Можно, конечно, и консервную банку открывать тапком, но зачем? :)

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

В целом - согласен. Ну у меня порядка 50 linux узлов, и они все так или иначе разные. :) Но у них есть кое-чего общего. Им всем надо установить zabbix агента, им всем надо раздать public ключи от ssh, всем надо прописать ntp сервер, и поставить набор базового ПО. - Ну по-немного я пилю это дело, ибо заколебало это вечное отсутствие какого-нибудь mc, или прыгающее время. Ну и за одно вот пропиливаю ansible для регулярных тасков. В общем пока приходится пользоваться: command, но противность в том, что там есть timeouts, и если rsync выполняется слишком долго в модуле command - оно его убивает сцуко!

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

Это же не означает, что теперь вообще всё надо делать через ansible.

Но если очень хочется, можно просто сделать command: rsync -av --delete-after /SAMBA/ rsync_user@data2:/SAMBA/ и положить это в отдельную роль или вообще в отдельный плейбук.

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

Примерно так и делаю. Только вот роли я плодить перестал. Наобарот уменьшил кол-во буков, и ролей. Зато средний task/main заметно вырос. - Но это всё же удобнее. В общем с тем, как Вы посоветовали - ansible отвалится по timeout, вот в чём дело... При первом, большом синке.

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

ansible отвалится по timeout

Ну и правильно сделает. :) Он больше для управления конфигурациями, а для запуска команд есть fabric, например.

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