ansible delegate_to 不使用库存主机?

Gar*_*hop 2 ansible ansible-playbook

我正在尝试使用 ansible 同步在两个遥控器之间复制文件。

我的剧本看起来像:

- hosts: newserver
  tasks:
    - name: Copy images from old to new
      synchronize:
        src: /var/www/production/
        dest: /var/www/production/
      delegate_to: oldserver
Run Code Online (Sandbox Code Playgroud)

newserveroldserver在我的库存文件中定义的。如果我替换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}
Run Code Online (Sandbox Code Playgroud)

newserver可以从 到达oldserver。正如我上面所说,如果我在 delegate_to 中更改oldserver为它就可以了。gbserver3.cs.unc.edu

我的主机文件如下所示:

[newserver]
thr.cs.unc.edu
[oldserver]
gbserver3.cs.unc.edu
Run Code Online (Sandbox Code Playgroud)

Zei*_*tor 6

delegate_to需要一个清单主机名

在您的清单中,oldserver是一个可能包含多个主机名的组名称。

如果您确定您的组将始终包含单个主机,则一个快速而肮脏的修复方法是使用组内列表中的第一个主机。所以在这种情况下你可以delegate_to: "{{ groups['oldserver'][0] }}"


Vla*_*tka 5

问题在于newserveroldserver不是主机的名称,而是组的名称。不可能delegate_to一个组。请参阅清单基础知识:格式、主机和组

[newserver]
thr.cs.unc.edu
[oldserver]
gbserver3.cs.unc.edu
Run Code Online (Sandbox Code Playgroud)

修复库存。例如

newserver ansible_host=thr.cs.unc.edu
oldserver ansible_host=gbserver3.cs.unc.edu
Run Code Online (Sandbox Code Playgroud)