可选版本: 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在文件目录中有很多(大约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我在文档页面上看到,以/结尾的源目录会导致内容被递归复制。我做错了什么?
发布于 2017-08-02 12:57:29
file module不是用于复制文件的,而是用于设置目标上文件的属性的。
copy module是用于复制的。
发布于 2019-07-10 00:04:38
为接受的答案提供一些附加信息..
使用目录路径的递归复制有以下缺点:
--check和--check --diff标志不会显示任何内容changed=0中或从中排除特定文件/目录永远不会产生changed=0状态,并且还可能影响远程主机上已存在的文件。似乎有一种更强大的方法来执行递归复制,那就是结合使用with_filetree和when
- name: "create-remote-dirs"
file:
path: /dest/dir/{{item.path}}
state: directory
mode: '0775'
with_filetree: sourceDir/
when: item.state == 'directory'
- name: "copy-files"
copy:
src: "{{item.src}}"
dest: /dest/dir/{{item.path}}
mode: '0744'
with_filetree: sourceDir/
# combinations of 'is' and 'is not' can be used below.
when: item.state == 'file'
and item.path is not search("excludedDir/*")
and item.path is not search("*.bak")发布于 2020-12-26 03:02:19
源文件和目录可以存储在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中
https://stackoverflow.com/questions/45449852
复制相似问题