如何使用Ansible临时命令从受控主机向控制主机复制文件?
从Ansible受控主机向控制主机传输文件的可行方案
当然可行!不过你提到的copy模块确实是从控制主机推送文件到受控主机的,反向拉取文件需要用Ansible的fetch模块——这就是专门用来从受控主机把文件拉到控制主机的工具。
基本用法示例
假设你要从所有受控主机拉取/指定目录/输出文件.log到控制主机的./收集到的文件/目录下,命令格式是这样的:
ansible all -m fetch -a "src=/指定目录/输出文件.log dest=./收集到的文件/"
关键参数说明
src:受控主机上要拉取的文件路径(默认只能拉单个文件,拉目录需要额外参数)dest:控制主机上用来存放拉取文件的目录,Ansible会自动在这个目录下创建以受控主机名为子目录的结构,比如你的受控主机叫node1,文件会存在./收集到的文件/node1/指定目录/输出文件.log
简化文件存储结构(可选)
如果不想保留受控主机的原路径结构,只想把文件直接放到dest目录下,可以加上flat=yes参数:
ansible all -m fetch -a "src=/指定目录/输出文件.log dest=./收集到的文件/ flat=yes"
这样文件就会直接存在./收集到的文件/输出文件.log,但要注意:如果多个主机的文件名相同,后面拉取的会覆盖前面的,所以主机多且文件名重复时,建议保留默认结构或者给文件加主机名前缀。
拉取整个目录的方法
如果要拉取整个目录而不是单个文件,可以搭配archive=yes参数,Ansible会把目录打包成tar文件后拉取:
ansible all -m fetch -a "src=/指定目录/ dest=./收集到的文件/ archive=yes"
拉取后控制主机上会得到./收集到的文件/主机名/指定目录.tar,解压就能得到原目录内容。
内容的提问来源于stack exchange,提问作者Banthita Limwilai
相关产品推荐
相关产品推荐

