ansible delegate_to 不使用库存主机?

ansible delegate_to 不使用库存主机?

我正在尝试使用 ansible synchronize 在两个远程设备之间复制文件。

我的剧本如下:

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

其中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}

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

我的主机文件如下所示:

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

答案1

问题是和newserver不是oldserver主持人的名字,而是组的名字。这不可能委托给组。请参阅库存基础知识:格式、主机和组

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

修复库存。例如

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

答案2

delegate_to预计库存主机名

从你的库存中,oldserver团队名字可能可以容纳多个主机名。

如果你确定你的组总是只包含一个主机,那么一个快速而粗略的解决方法就是使用组内列表中的第一个主机。所以在这种情况下,你可以delegate_to: "{{ groups['oldserver'][0] }}"

相关内容