Назад | Перейти на главную страницу

ansible delegate_to не использует инвентарный хост?

Я пытаюсь использовать доступную синхронизацию для копирования файлов между двумя пультами дистанционного управления.

Моя книга выглядит так:

- hosts: newserver
  tasks:
    - name: Copy images from old to new
      synchronize:
        src: /var/www/production/
        dest: /var/www/production/
      delegate_to: oldserver

куда newserver и oldserver определены в моем инвентарном файле. Если я заменю oldserver с полным именем хоста работает delegate_to. В противном случае он жалуется на недоступность. oldserver отлично работает в других местах в других плейбуках.

Не использует ли delegate_to инвентарь?

Я получаю следующую ошибку:

TASK [Copy images from old to new] *************************************************
fatal: [thr.cs.unc.edu]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: ", "unreachable": true}

newserver доступен из oldserver. Как я сказал выше, если я изменю oldserver к gbserver3.cs.unc.edu в delegate_to он работает.

Файл моих хостов выглядит так:

[newserver]
thr.cs.unc.edu
[oldserver]
gbserver3.cs.unc.edu

delegate_to ожидает инвентаризации имя хоста.

Из вашего инвентаря, oldserver это Название группы потенциально может содержать несколько имен хостов.

Быстрое и грязное решение, если вы уверены, что ваша группа всегда будет содержать один хост, - это использовать первый в списке внутри группы. Итак, в этом случае вы можете delegate_to: "{{ groups['oldserver'][0] }}"

Проблема в том, что newserver и oldserver не имена хостов, а имена групп. Это невозможно delegate_to группа. Видеть Основы инвентаризации: форматы, хосты и группы

[newserver]
thr.cs.unc.edu
[oldserver]
gbserver3.cs.unc.edu

Исправьте инвентарь. Например

newserver ansible_host=thr.cs.unc.edu
oldserver ansible_host=gbserver3.cs.unc.edu