目录
[示例3:解压缩 ZIP 文件](#示例3:解压缩 ZIP 文件)
[示例5:下载并解压远程 URL 文件](#示例5:下载并解压远程 URL 文件)
[示例6:使用 creates 参数防止重复解压](#示例6:使用 creates 参数防止重复解压)
Ansible 的 unarchive
模块用于解压缩和提取文件。该模块支持多种压缩格式,如.tar,``.tar.gz,``.zip
等。unarchive
模块可以将压缩文件解压到指定的目标目录,非常方便地在远程主机上分发和安装包文件。
参数总结
-
src
:- 描述:要解压缩的文件路径,可以是本地路径或远程 URL。
- 类型:字符串
- 必需:是
-
dest
:- 描述:解压缩文件的目标路径。
- 类型:字符串
- 默认值:当前工作目录
-
remote_src
:- 描述:如果为
yes
,则将src
参数指定的文件视为远程文件。如果为no
,则将其视为本地文件。 - 类型:布尔值
- 默认值:
no
- 描述:如果为
-
remote_src_dest
:- 描述:如果为
yes
,则将dest
参数指定的路径视为远程路径。如果为no
,则将其视为本地路径。 - 类型:布尔值
- 默认值:
no
- 描述:如果为
-
extra_opts
:- 描述:额外的解压缩选项,作为字符串传递。
- 类型:字符串
- 默认值:无
-
copy
:- 描述:如果为
yes
,则将文件复制到dest
目录,而不是在原地解压缩。 - 类型:布尔值
- 默认值:
no
- 描述:如果为
-
creates
:- 描述:如果指定路径存在,则不执行解压操作。
- 类型:字符串
- 默认值:无
-
extract
:- 描述:指定要使用的解压缩命令。
- 类型:字符串
- 默认值:根据文件扩展名自动检测
基础语法
ansible <hostname or group> -m unarchive -a "src=<source_archive_path> dest=<destination_directory_path> [optional_arguments]" [options]
常见的命令行示例
示例1:解压缩文件到指定目录
ansible all -m unarchive -a "src=/path/to/archive.tar.gz dest=/path/to/destination" --become
此命令会将 /path/to/archive.tar.gz
解压到 /path/to/destination
目录。--become
选项用于以特权执行。
示例2:解压缩文件并设置权限
ansible all -m unarchive -a "src=/path/to/archive.zip dest=/path/to/destination mode=0644" --become
此命令会将 /path/to/archive.zip
解压到 /path/to/destination
目录,并将解压后的文件权限设置为 0644
。
示例3:远程URL解压缩
ansible all -m unarchive -a "src=http://example.com/archive.tar.gz dest=/path/to/destination" --become
此命令会从 http://example.com/archive.tar.gz
下载压缩包并解压到 /path/to/destination
目录。
示例4:强制覆盖现有文件
ansible all -m unarchive -a "src=/path/to/archive.tar.gz dest=/path/to/destination extra_opts=--overwrite" --become
此命令会将 /path/to/archive.tar.gz
解压到 /path/to/destination
目录,并强制覆盖现有文件。
具体步骤和示例
示例5:只要文件解压后,如果存在相同文件则跳过
ansible all -m unarchive -a "src=/path/to/archive.tar.gz dest=/path/to/destination keep_newer=yes" --become
此命令会将 /path/to/archive.tar.gz
解压到 /path/to/destination
目录,但是会保留比压缩包内更新的文件。
示例6:指定远程主机解压文件
ansible target_host -m unarchive -a "src=/path/to/archive.tar.gz dest=/path/to/destination" --become
此命令会在 target_host
主机上,将 /path/to/archive.tar.gz
解压到 /path/to/destination
目录。
Playbook示例
基本用法示例
示例1:从控制机复制并解压文件到远程主机
---
- name: Unarchive from control machine to remote
hosts: all
tasks:
- name: Extract file to remote machine
unarchive:
src: /path/to/file.tar.gz
dest: /path/to/destination/
示例2:直接在目标主机上解压文件
---
- name: Unarchive from remote source
hosts: all
tasks:
- name: Extract file that is already on remote machine
unarchive:
src: /path/to/file.tar.gz
dest: /path/to/destination/
remote_src: yes
示例3:解压缩 ZIP 文件
---
- name: Unarchive a zip file
hosts: all
tasks:
- name: Extract zip file to remote machine
unarchive:
src: /path/to/file.zip
dest: /path/to/destination/
高级用法示例
示例4:设置解压后的文件权限
---
- name: Unarchive with custom file permissions
hosts: all
tasks:
- name: Extract file with specific permissions
unarchive:
src: /path/to/file.tar.gz
dest: /path/to/destination/
mode: '0755'
示例5:下载并解压远程 URL 文件
---
- name: Unarchive from a remote URL
hosts: all
tasks:
- name: Download and extract file from URL
unarchive:
src: http://example.com/file.tar.gz
dest: /path/to/destination/
示例6:使用 creates
参数防止重复解压
---
- name: Unarchive skipping if file already exists
hosts: all
tasks:
- name: Unarchive only if specific file does not exist
unarchive:
src: /path/to/file.tar.gz
dest: /path/to/destination/
creates: /path/to/destination/extracted_file
示例7:传递解压命令的额外参数
---
- name: Unarchive with extra options
hosts: all
tasks:
- name: Extract file with extra options
unarchive:
src: /path/to/file.tar.gz
dest: /path/to/destination/
extra_opts: ['--strip-components=1']
示例8:多任务解压缩
---
- name: Unarchive multiple files
hosts: all
tasks:
- name: Unarchive first file
unarchive:
src: /path/to/first_file.tar.gz
dest: /path/to/first_destination/
- name: Unarchive second file
unarchive:
src: /path/to/second_file.zip
dest: /path/to/second_destination/
综述示例
全面展示各种参数的使用方法:
---
- name: Comprehensive unarchive example
hosts: all
tasks:
- name: Unarchive file with various options
unarchive:
src: /path/to/file.tar.gz
dest: /path/to/destination/
copy: yes
mode: '0755'
creates: /path/to/destination/already_extracted_file
extra_opts: ['--strip-components=1']
remote_src: yes
keep_newer: yes