Ansible版本:2.2.1.0
我在Ansible中将目录内容复制到目标主机时遇到问题。我的角色目录结构如下所示:
roles/server/
├── defaults
│ └── main.yml
├── files
│ ├── Common-x86_64.repo
│ ├── docker-ce-stable.repo
|
├── handlers
│ └── main.yml
├── meta
│ └── main.yml
├── README.md
├── tasks
│ ├── main.yml
│ └── packages.yml
├── templates
├── tests
│ ├── inventory
│ └── test.yml
└── vars
└── main.yml
在files目录中有很多(大约12个)repos,为了保持简短,我省略了很多。我在packages.yml
- name: 1. Setup Repos
file:
src: files/
dest: /etc/yum.repos.d/
owner: root
group: root
mode: 0644
即使任务完成且没有错误,也没有任何内容复制到目标计算机上的/etc/yum.repos.d/
:
ls /etc/yum.repos.d/
CentOS-Base.repo CentOS-Media.repo CentOS-fasttrack.repo
CentOS-CR.repo CentOS-Sources.repo
CentOS-Debuginfo.repo CentOS-Vault.repo
我在文档页面上看到,使用/
结束源目录会导致内容被递归复制。我做错了什么?
答案 0 :(得分:2)
file
module 不用于复制文件,但用于设置目标文件的属性。
copy
module用于复制。
答案 1 :(得分:1)
为接受的答案提供一些其他信息。
使用目录路径的递归副本具有以下缺点:
val
和--check
标志不会显示任何内容--check --diff
状态,并且还可能影响远程主机上已经存在的文件。似乎有一种更强大的方法来执行递归复制,即结合使用changed=0
和with_filetree
when
答案 2 :(得分:1)
源文件和目录可以存储在 files
目录中。如果您将它们放在其他文件夹中,则可能找不到。
复制文件:
copy:
src: src_filename
dest: to_be_parent/src_filename
结果为 to_be_parent/src_filename
。目标文件名可能等于也可能不等于 src 文件名。
复制目录:
copy:
src: mydirectory
dest: to_be_parent
结果为to_be_parent/mydirectory
copy:
src: mydirectory/
dest: to_be_parent
结果为to_be_parent/contents_of_mydirectory
在以下情况下不是那么理想的结果:
copy:
src: mydirectory
dest: to_be_parent/mydirectory
结果为to_be_parent/mydirectory/mydirectory/contents_of_mydirectory