首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Ansible Recursive目录复制

Ansible Recursive目录复制
EN

Stack Overflow用户
提问于 2017-08-02 09:04:18
回答 3查看 11.1K关注 0票数 6

可选版本: 2.2.1.0

在Ansible中将目录中的内容复制到目标主机时遇到问题。我的角色目录结构如下所示:

代码语言:javascript
复制
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中运行这段代码

代码语言:javascript
复制
- name: 1. Setup Repos
     file:
       src: files/
       dest: /etc/yum.repos.d/
       owner: root
       group: root
       mode: 0644

即使任务正在顺利完成,也没有任何内容复制到目标计算机上的/etc/yum.repos.d/中:

代码语言:javascript
复制
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

我在文档页面上看到,以/结尾的源目录会导致内容被递归复制。我做错了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-08-02 12:57:29

file module不是用于复制文件的,而是用于设置目标上文件的属性的

copy module是用于复制的。

票数 3
EN

Stack Overflow用户

发布于 2019-07-10 00:04:38

为接受的答案提供一些附加信息..

使用目录路径的递归复制有以下缺点:

  • 您无法获取复制的每个文件的已更改状态信息
  • ,因此--check--check --diff标志不会显示任何内容
  • 您无法在批量复制后将特定文件/目录包括到changed=0中或从中排除特定文件/目录永远不会产生changed=0状态,并且还可能影响远程主机上已存在的文件。

似乎有一种更强大的方法来执行递归复制,那就是结合使用with_filetreewhen

代码语言:javascript
复制
- 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")
票数 3
EN

Stack Overflow用户

发布于 2020-12-26 03:02:19

源文件和目录可以存储在files目录中。如果您将它们放在其他文件夹中,可能找不到它们。

复制文件:

代码语言:javascript
复制
copy:
  src: src_filename 
  dest: to_be_parent/src_filename

结果保存到to_be_parent/src_filename中。目标文件名可以等于也可以不等于src文件名。

复制目录:

代码语言:javascript
复制
copy:
  src: mydirectory
  dest: to_be_parent

结果到to_be_parent/mydirectory

代码语言:javascript
复制
copy:
  src: mydirectory/
  dest: to_be_parent

结果到to_be_parent/contents_of_mydirectory

在以下情况下,不是预期的结果:

代码语言:javascript
复制
copy:
  src: mydirectory
  dest: to_be_parent/mydirectory

结果到to_be_parent/mydirectory/mydirectory/contents_of_mydirectory

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45449852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档