Ansible 在可承担的任务中,“委托”的含义是什么?

Ansible 在可承担的任务中,“委托”的含义是什么?,ansible,Ansible,据我所知,每个ansible任务都是在某个主机的上下文中执行的。让我们称之为“远程主机” 对于某些ansible模块(例如,fetch和copy),涉及两台主机:“远程主机”和运行ansible脚本的主机(我们称之为“本地主机”) 假设我们要在两个不同的远程主机之间复制一个文件。建议以下解决方案: - hosts: ServerB tasks: - name: Transfer file from ServerA to ServerB synchronize:

据我所知,每个ansible任务都是在某个主机的上下文中执行的。让我们称之为“远程主机”

对于某些ansible模块(例如,
fetch
copy
),涉及两台主机:“远程主机”和运行ansible脚本的主机(我们称之为“本地主机”)

假设我们要在两个不同的远程主机之间复制一个文件。建议以下解决方案:

- hosts: ServerB
  tasks:
    - name: Transfer file from ServerA to ServerB
      synchronize:
        src: /path/on/server_a
        dest: /path/on/server_b
      delegate_to: ServerA
在本例中,
delegate_to
的效果似乎是任务仍在ServerB(远程主机)的上下文中运行,但使用了由
delegate_to
指定的主机(在本例中为ServerA),而不是本地主机

但是,在以下情况下,行为是完全不同的:

- hosts: ServerB
  tasks:
  - name: Copy file from local host to Server A
    copy:
      src: /local/path
      dest: /path/on/server_a
    delegate_to: ServerA
即使在前一种情况下,
hosts
delegate\u to
的值相同,复制操作也会在本地主机和
delegate\u to
指定的主机之间进行。因此在这种情况下,
delegate\u to
修改的不是本地主机,而是远程主机


为什么在这些情况下,
委托给
的行为不同?它是特定于模块的吗?但是在
synchronize
copy
模块的ansible文档中没有提到这个参数,所以我希望所有模块的行为都应该相同。

synchronize
在这种情况下有点特殊。了解它如何处理该选项。在最一般的情况下,
delegate_to
只是指“使用当前播放主机的事实(除非您也使用了
deletegate_事实
…),并在另一台主机而不是当前播放主机上播放该模块”。PS:您可能还想阅读以下内容: