自动化压缩新姿势!教你用Ansible Archive模块高效管理文件
Ansible
的archive
模块是一个非常实用的工具,可以帮助你轻松创建压缩文件。无论是将文件夹还是单个文件打包成 .tar
或 .zip
格式,这个模块都能帮你搞定,非常适合用来备份、传输和管理文件。在实际工作中,它特别适合用来归档日志、配置文件或数据文件,让你的工作更加高效有序。
🥇基本用法
✍️将目录打包为压缩文件
- 将
/var/logs
目录打包为.tar.gz
文件,并存储到/backup/logs.tar.gz
中:
- name: 打包日志目录为 tar.gz 文件
hosts: node1
tasks:
- name: 打包日志目录为 tar.gz 文件
archive: #使用模块的名称
path: /var/logs
dest: /tmp/logs.tar.gz
Ad-hoc
命令:
ansible node1 -m archive -a \
"path=/var/logs dest=/tmp/logs.tar.gz"
执行上述命令后,会在tmp
目录下,生成一个logs.tar.gz压缩包。如下图所示:
✍️将文件打包为压缩文件
把 /etc/hosts
和 /etc/fstab
这两个文件打包成一个 .zip
文件。如果你要压缩多个文件,建议用 playbook
来操作。
- name: 打包多个文件为 zip 文件
hosts: node1
tasks:
- name: 打包多个文件为 zip 文件
archive:
path:
- /etc/hosts
- /etc/fstab
dest: /tmp/system_files.zip
执行完上述的剧本后,输出结果如下图:
🥇关键参数说明
你可以使用 ansible-doc -s archive
命令来查看每个参数的详细用法和说明。具体示例如下图所示:
下表是一些参数参数说明:
参数 | 说明 |
---|---|
path | 指定要压缩的文件或目录(支持文件列表)。 |
dest | 指定生成的压缩文件路径和名称。 |
format | 指定压缩格式,支持 tar 、zip 、gz 、bz2 、xz 等,默认值为 tar 。 |
exclude | 指定在打包时需要排除的文件或目录。 |
remote_src | 指定 path 是否为远程路径,默认为 no (path 为本地路径)。 |
🥇常见场景与案例
✍️排除特定文件
打包 /var/www
文件夹,但排除.log
文件:
ansible node1 -m archive -a \
"path='/var/www' dest='/backup/website_backup.tar.gz' exclude='*.log'"
✍️配合时间戳动态生成文件名
使用Jinja2
模板动态生成压缩文件名:
ansible all -m archive -a \
"path=/data dest=/backup/data_backup_\$(date -Iseconds).tar.gz format=gz"
✍️避免覆盖已存在的文件
启用 extra_opts
确保生成文件唯一:
ansible all -m archive -a \
"path=/data dest=/backup/data_backup_\$(date -Iseconds).tar.gz format=gz \
extra_opts='keep-old-files'"
🥇综合案例
在日常运维工作中,我们常常需要对重要的日志文件进行归档备份。例如,某企业的运维团队每天需要将 /var/log
目录下的系统日志打包为 .tar.gz
文件,保存在备份目录 /backup
中,并定期清理过期的备份文件。这种重复性操作如果手动执行,不仅效率低下,还容易出错。因此,借助Ansible
的 archive
模块,可以快速实现这一需求。
✍️需求分析
-
每天将
/var/log
目录下的所有日志文件压缩为.tar.gz
文件。 -
备份文件以时间戳命名,存储在
/backup
目录中,例如:logs_backup_20250125.tar.gz
。 -
保留最近 7 天的备份文件,删除过期文件。
✍️实现步骤
创建Playbook
,以下是完整的Playbook
文件,实现日志打包和过期备份清理功能。
---
- name: 自动化日志归档和清理任务
hosts: all
become: true
tasks:
- name: 创建备份目录
ansible.builtin.file:
path: /backup
state: directory
mode: '0755'
- name: 归档日志文件到备份目录
ansible.builtin.archive:
path: /var/log
dest: "/backup/logs_backup_{{ ansible_date_time.iso8601_basic }}.tar.gz"
format: gz
- name: 删除超过 7 天的备份文件
ansible.builtin.find:
paths: /backup
age: 7d
recurse: yes
patterns: "*.tar.gz"
register: old_backups
- name: 移除过期备份文件
ansible.builtin.file:
path: "{{ item.path }}"
state: absent
with_items: "{{ old_backups.files }}"
该剧本包含4个任务,分别是创建备份目录、归档日志文件、删除超过7天的备份文件、移除过期的备份文件。
✍️ 运行Playbook
保存上述 Playbook
为backup_logs.yml
,执行以下命令运行任务:
ansible-playbook backup_logs.yml
总结
通过该模块,你可以更高效地管理文件备份和归档工作,配合Ansible
的自动化优势,极大提升运维效率。
推荐阅读
- 提升运维效率:Ansible systemd 模块操作技巧,让你告别繁琐命令行!
- Ansible fetch模块详解:轻松从远程主机抓取文件
- 告别手动编辑:如何用Python快速创建Ansible hosts文件?
- 一分钟学会Ansible cron模块,高效管理你的定时任务
- 打造更安全的Linux系统:玩转PAM配置文件
- Ansible实战:如何正确选择command和shell模块?