Ansible 2.11.4 copy模块带remote_src=yes加--check为何创建目标目录
问题原因说明
这是Ansible core 2.12之前版本的copy模块已知行为,和你使用的2.11.4版本匹配,具体触发逻辑如下:
- 当你使用
copy模块并携带remote_src=yes参数时,模块执行的第一步预检查逻辑会先校验目标路径的类型,如果判断目标是目录且不存在,会触发目录创建流程,这部分目录创建逻辑在2.12之前的版本中没有适配--check(检查模式)的豁免规则,会直接在目标节点真实执行,不会被检查模式拦截。 - 本地文件推送场景(不携带
remote_src=yes)不存在这个问题,只有远程源复制场景会触发该缺陷。
修复与规避方案
- 该问题已经在Ansible core 2.12版本正式修复,升级到该版本及以上后,
remote_src=yes场景下的目录预创建逻辑会完全遵循检查模式规则,不会真实修改目标节点文件系统。 - 暂时无法升级版本的话,可以提前单独使用
file模块完成目标目录的创建/校验,file模块完全适配检查模式规则,不会在--check参数下真实创建目录,再执行后续的copy操作即可。
你执行的对应命令复现了该缺陷:
ansible -i hosts/hosts.ini some_group -m copy -a "src=/var/tmp/src/file dest=/var/tmp/dst/ remote_src=yes" -C -D
内容的提问来源于stack exchange,提问作者boba
相关产品推荐
相关产品推荐

