我正在尝试使用 ansible synchronize 在两个远程设备之间复制文件。
我的剧本如下:
- 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
。正如我上面所说,如果我在 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] }}"