
jimlu
V1
2023/04/18阅读:80主题:默认主题
ansible实战之下载文件
ansible实战之文件下载
1、实现思路思路
-
ansible下载文件需要用到fetch模块 -
fetch模块只能下载文件,目录无法下载,如果要下载目录或者多个文件fetch模块无法实现 -
使用archive模块将多个文件压缩成一个文件,就可用fetch模块进行下载了 -
基于以上思路,就需要创建一个临时目录用来存放文件 -
稍微扩展一下,如果记不清楚自己到底要下载什么文件,想通过关键字或者其他如linux中find命令一样查找文件的方式,查找到文件然后下载的话,ansible有find模块可以实现 -
最后创建的临时文件会占用被控主机磁盘空间,使用完成后删除,需要使用到file模块
2、实现过程
1、使用file模块在被控端创建存放查找到文件的临时目录
-
file模块 管理文件 -
path 指定路径 -
state 具体的操作,directory表示创建目录,如果是file则表示创建文件,absent表示删除文件……
-
-
使用vars 定义了一个tmpdir变量,变量值就是临时存放文件的目录 -
如果不定义的话,可以直接商量vars及下面一行,直接将/tmp/tmp_download_dir写到file模块的path后面,替换掉"{{tmpdir}}",如:path: /tmp/tmp_download_dir
---
- name: test find
hosts: all
gather_facts: no
vars:
- tmpdir: /tmp/tmp_download_dir #定义临时存放文件目录
tasks:
- name: create dir #创建临时存放文件的目录
file:
path: "{{tmpdir}}"
state: directory
2、使用find模块查找需要下载的文件
-
rescurse:no #表示不进行子目录查找 -
patterns #指定匹配条件 -
register: refiles #将find模块执行的结果保存到refiles变量中
- name: find contain #查找匹配的文件
find:
paths: /etc
recurse: no
file_type: file
size: 500b
patterns: "*.conf"
register: refiles #结果存放到refiles变量中
3、使用shell模块将查找到的文件拷贝到临时下载目录
---
- name: find contain #查找匹配的文件
find:
paths: /etc
recurse: no
file_type: file
size: 500b
patterns: "*.conf"
register: refiles #结果存放到refiles变量中
- shell: "cp {{item.path}} /tmp/tmp_download_dir" #将查找到的文件拷贝到用于存放下载文件的临时目录
with_items: "{{refiles.files}}"
4、使用archive模块将存放下载文件的临时目录进行压缩
-
{{inventory_hostname}} #变量,对应inventory中的主机 -
format: zip #压缩成.zip文件 -
remove: yes #压缩完后删除源我呢见
- archive:
path: "/tmp/tmp_download_dir"
dest: "/tmp/{{inventory_hostname}}.zip" #对临时目录进行压缩
format: zip
remove: yes
5、使用fetch模块建压缩好的下载文件进行下载
-
flat: yes #使用自定义文件名
- fetch: #下载 压缩文件
src: "/tmp/{{inventory_hostname}}.zip"
dest: /home/admin/jin/test1/
flat: yes
6、删除临时目录及压缩包
-
with_items和{{item}}搭配使用,item循环遍历with_items中的内容
- file: #删除sahng'被控端的临时目录
path: "{{item}}"
state: absent
with_items:
- "/tmp/tmp_download_dir"
- "/tmp/{{inventory_hostname}}.zip"
3、最终成型playbook如下
[root@jfedu01 jin]# more find1.yaml
---
- name: test find
hosts: all
gather_facts: no
vars:
- tmpdir: /tmp/tmp_download_dir #定义临时存放文件目录
tasks:
- name: create dir #创建临时存放文件的目录
file:
path: "{{tmpdir}}"
state: directory
- name: find contain #查找匹配的文件
find:
paths: /etc
recurse: no
file_type: file
size: 500b
patterns: "*.conf"
register: refiles #结果存放到refiles变量中
- shell: "cp {{item.path}} {{tmpdir}}" #将查找到的文件拷贝到用于存放下载文件的临时目录
with_items: "{{refiles.files}}"
- archive:
path: "{{tmpdir}}"
dest: "/tmp/{{inventory_hostname}}.zip" #对临时目录进行压缩
format: zip
remove: yes
- fetch: #下载 压缩文件
src: "/tmp/{{inventory_hostname}}.zip"
dest: /home/admin/jin/test1/
flat: yes
- file: #删除'被控端的临时目录
path: "{{item}}"
state: absent
with_items:
- "{{tmpdir}}"
- "/tmp/{{inventory_hostname}}.zip"
作者介绍

jimlu
V1