Ansible——unarchive模块

目录

参数总结

基础语法

常见的命令行示例

示例1:解压缩文件到指定目录

示例2:解压缩文件并设置权限

示例3:远程URL解压缩

示例4:强制覆盖现有文件

具体步骤和示例

示例5:只要文件解压后,如果存在相同文件则跳过

示例6:指定远程主机解压文件

Playbook示例

基本用法示例

示例1:从控制机复制并解压文件到远程主机

示例2:直接在目标主机上解压文件

[示例3:解压缩 ZIP 文件](#示例3:解压缩 ZIP 文件)

高级用法示例

示例4:设置解压后的文件权限

[示例5:下载并解压远程 URL 文件](#示例5:下载并解压远程 URL 文件)

[示例6:使用 creates 参数防止重复解压](#示例6:使用 creates 参数防止重复解压)

示例7:传递解压命令的额外参数

示例8:多任务解压缩

综述示例


Ansible 的 unarchive 模块用于解压缩和提取文件。该模块支持多种压缩格式,如.tar,``.tar.gz,``.zip 等。unarchive 模块可以将压缩文件解压到指定的目标目录,非常方便地在远程主机上分发和安装包文件。

参数总结

  1. src:

    • 描述:要解压缩的文件路径,可以是本地路径或远程 URL。
    • 类型:字符串
    • 必需:是
  2. dest:

    • 描述:解压缩文件的目标路径。
    • 类型:字符串
    • 默认值:当前工作目录
  3. remote_src:

    • 描述:如果为 yes,则将 src 参数指定的文件视为远程文件。如果为 no,则将其视为本地文件。
    • 类型:布尔值
    • 默认值:no
  4. remote_src_dest:

    • 描述:如果为 yes,则将 dest 参数指定的路径视为远程路径。如果为 no,则将其视为本地路径。
    • 类型:布尔值
    • 默认值:no
  5. extra_opts:

    • 描述:额外的解压缩选项,作为字符串传递。
    • 类型:字符串
    • 默认值:无
  6. copy:

    • 描述:如果为 yes,则将文件复制到 dest 目录,而不是在原地解压缩。
    • 类型:布尔值
    • 默认值:no
  7. creates:

    • 描述:如果指定路径存在,则不执行解压操作。
    • 类型:字符串
    • 默认值:无
  8. 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
相关推荐
爱瑞瑞25 分钟前
🐧深入浅出的认识 Linux 指令
linux·shell
ajassi200039 分钟前
开源 java android app 开发(十一)调试、发布
android·java·linux·开源
小李飞刀李寻欢1 小时前
使用kubeadm部署Kubernetes(k8s)集群的步骤
linux·服务器·ubuntu·kubernetes·k8s
运维成长记1 小时前
阿里云实践创建实例步骤
linux·运维·服务器·阿里云·云计算
THe CHallEnge of THe BrAve2 小时前
Linux检验库是否安装成功
linux·运维·服务器
算家计算2 小时前
告别复杂文档解析噩梦!MonkeyOCR 本地部署教程:支持公式/表格多元素结构化
linux·人工智能·开源
曹勖之3 小时前
ROS2 工作空间中, CMakeLists.txt, setup.py和 package.xml的作用分别是?
xml·linux·服务器·ros2
企鹅侠客4 小时前
ttyd:安全地通过网络共享您的 Linux 终端
linux·运维·ttyd
饭碗、碗碗香4 小时前
【开发常用命令】:服务器与本地之间的数据传输
linux·运维·服务器·笔记·学习
MonkeyBananas5 小时前
在Ubuntu中使用Apache2部署项目
linux·运维·ubuntu