Резервное копирование веб-сервера Ansible: извлекайте другие переменные хоста для создания сценариев резервного копирования.

Я использую Ansible для управления группой разнородных облачных серверов Linux. Я создал сценарий, который переносит резервные копии на сервер резервного копирования через rync через ssh. Все переменные хоста управляются вhost_vars/example.com.ymlфайлы, каждый из которых содержит следующее:

      ansible_host: example.com
ansible_user: user
ansible_port: 22
ansible_ssh_private_key_file: "~/.ssh/id_ed25519"

Они сгруппированы вhostsфайл такой:

      [webservers]
example.com
foo.com
bar.com

[backup]
backupserver.domain.com

У меня есть роль резервного копирования для группы резервного копирования, содержащей сервер backupserver.domain.com, содержащий сценарии rsync, но мне нужно вручную реплицировать ansible host_vars в эту роль резервного копирования, чтобы создать конфигурацию SSH, содержащую всю информацию, уже содержащуюся вhost_vars/*.ymlфайлы.

Итак, мой вопрос: можно ли внутри роли перебирать переменные хоста другого хоста за пределами текущего хоста и группы? Что-то вроде:

      {% for item in var_hosts_group %}
Host {{ item.ansible_host }}
   Hostname {{ item.ansible_host }}
   User {{ item.ansible_user }}
   Port {{ item.ansible_port }}
   IdentityFile {{ item.ansible_ssh_private_key_file }}

{% endfor %}

Тогда сценарий rsync будет таким:

      {% for item in var_hosts_group %}
rsync -a {{ item.ansible_host }}:/remotebackup /localbackup
{% endfor %}

Это позволило бы мне генерировать необходимые шаблоны/скрипты для веб-серверов на резервном сервере и сохранять все в порядке и СУХОМ. Это возможно? Спасибо!

1 ответ

Вопрос: « Можно ли перебирать переменные хоста другого хоста за пределами текущего хоста и групп? »

(Я изменился group/groups. Хост может быть членом нескольких групп.)

А: Да. Возможно. Hostvars — это словарь всех хостов и их переменных в игре, например

      {% for item in ansible_play_hosts_all %}
Host {{ hostvars[item]['ansible_host'] }}
   Hostname {{ hostvars[item]['ansible_host'] }}
   User {{ hostvars[item]['ansible_user'] }}
   Port {{ hostvars[item]['ansible_port'] }}
   IdentityFile {{ hostvars[item]['ansible_ssh_private_key_file'] }}
{% endfor %}

«Список всех хостов, на которых нацелена игра»

  • Если хост не является целью игры, Ansible, конечно, ничего об этом не знает.

  • Вы, очень вероятно, захотитеdelegate_toи run_onceтакая задача.

Другие вопросы по тегам