Ansible中的同步模块用于复制远程主机上的文件

时间:2018-03-18 10:49:57

标签: linux ansible centos7 ansible-inventory

我正在尝试设置一个简单的Ansible playbook来执行将文件从一个位置复制到同一个远程主机上的另一个位置。我的本地以及远程主机运行CentOS-7。

这是我的库存文件的样子:

centos-server ansible_host=10.1.1.1 ansible_connection=ssh ansible_user=root ansible_ssh_pass=<root password>

我最初使用了复制模块,但发现该模块只将文件从本地复制到远程。经过一些搜索后,我发现synchronize模块似乎是正确使用的模块。

我的简单剧本如下:

-
  name: sync upstream repository to the local machine
  hosts: centos-server
  tasks:
    -
      name: copy repo files to yum.repos
      synchronize:
        src: /etc/yum.repos.d/repo.backup/
        dest: /etc/yum.repos.d/
      delegate_to: centos-server

可以看出,我在源目录中有一些.repo文件,并尝试将它们复制到yum.repos.d目录。上面的playbook没有任何问题,但我需要指定delegate_to属性。

根据synchronize中讨论的示例,我了解delegate_to是必需的,因为文件是从hosts:中未定义的远程主机复制的。在我的情况下,源和目标都在hosts:中定义的同一远程主机上。没有delegate_to,我收到此错误:

fatal: [centos-server]: FAILED! => {"changed": false, "cmd": "/bin/rsync --delay-updates -F --compress --dry-run --archive --rsh=/bin/ssh -S none -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null --out-format=<<CHANGED>>%i %n%L /etc/yum.repos.d/repo.backup/ root@10.1.1.1:/etc/yum.repos.d/", "msg": "Warning: Permanently added '10.1.1.1' (ECDSA) to the list of known hosts.\r\nrsync: change_dir \"/etc/yum.repos.d/repo.backup\" failed: No such file or directory (2)\nrsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1052) [sender=3.0.9]\n", "rc": 23}

有人能解释一下这里会发生什么吗?

1 个答案:

答案 0 :(得分:0)

您可以使用copy命令设置 remote_src 选项以复制远程计算机上的文件:

# Example from ansible docs
# Copy a "sudoers" file on the remote machine for editing
- copy:
    src: /etc/sudoers
    dest: /etc/sudoers.edit
    remote_src: yes
    validate: /usr/sbin/visudo -cf %s

请参阅:http://docs.ansible.com/ansible/latest/copy_module.html#options