我正在尝试设置一个简单的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}
有人能解释一下这里会发生什么吗?
答案 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