gpt4 book ai didi

ansible - 如何使用 Ansible 在两个托管节点之间复制文件?

转载 作者:行者123 更新时间:2023-12-03 05:01:42 25 4
gpt4 key购买 nike

我需要在两个远程节点之间复制文件:

  • 节点A是文件所在的受管节点
  • 节点 B 是应在其中复制文件的受管节点

请注意,我运行所有 Ansible 任务的控制节点不是上述节点。

我尝试过以下方法:

在 Ansible 的 shell 模块中使用 scp 命令

- hosts: machine2
user: user2
tasks:
- name: Copy file from machine1 to machine2
shell: scp user1@machine1:/path-of-file/file1 /home/user2/file1

这种方法会一直持续下去,永无止境。

使用fetchcopy模块

- hosts: machine1
user: user1
tasks:
- name: copy file from machine1 to local
fetch:
src: /path-of-file/file1
dest: /path-of-file/file1

- hosts: machine2
user: user2
tasks:
- name: copy file from local to machine2
copy:
src: /path-of-file/file1
dest: /path-of-file/file1

这种方法会引发如下错误:

error while accessing the file /Users//.ansible/cp/ansible-ssh-machine2-22-, error was: [Errno 102] Operation not supported on socket: u'/Users//.ansible/cp/ansible-ssh-machine2-22-'

我怎样才能实现这个目标?

最佳答案

@ant31 already pointed out ,您可以使用synchronize用于此的模块。默认情况下,模块在控制机和当前远程主机 (inventory_host) 之间传输文件,但是可以使用 delegate_to 进行更改。任务的参数(需要注意的是,这是任务的参数,而不是模块的参数)。

您可以将任务放置在ServerAServerB上,但您必须相应地调整传输方向(使用模式 synchronize 的参数)。

将任务放置在 ServerB

- 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) (ServerA) 传输到当前远程 (ServerB) .

这可能看起来很奇怪,因为任务已放置在 ServerB 上(通过 hosts: ServerB)。但是,必须记住,该任务实际上是在委托(delegate)主机上执行的,在本例中,委托(delegate)主机是 ServerA。所以推送(从ServerAServerB)确实是正确的方向。另请记住,我们不能简单地选择完全不委托(delegate),因为这意味着传输发生在控制节点ServerB之间。

将任务放置在ServerA

- hosts: ServerA
tasks:
- name: Transfer file from ServerA to ServerB
synchronize:
src: /path/on/server_a
dest: /path/on/server_b
mode: pull
delegate_to: ServerB

这使用mode: pull来反转传输方向。再次请记住,该任务实际上是在 ServerB 上执行的,因此拉取是正确的选择。

关于ansible - 如何使用 Ansible 在两个托管节点之间复制文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25505146/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com