You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Ansible的ansible.builtin.unarchive模块获取解压目录路径

解决Ansible unarchive模块无法获取完整解压目录路径的问题

你的核心问题是未正确拼接解压后的完整目录路径,且copy模块缺少必要参数导致无法正确复制远程节点上的目录。以下是修正后的Playbook及关键说明:

修正后的Playbook代码

---
# tasks file for upgrade-sabnzbd
- name: Get URL of latest sabnzbd
  ansible.builtin.uri:
    url: https://api.github.com/repos/sabnzbd/sabnzbd/releases/latest
    body_format: json
    return_content: true
    remote_src: yes
  register: json_response

- name: Create fact URL called "download_url"
  ansible.builtin.set_fact:
    download_url: "{{ (json_response.json.assets | selectattr('browser_download_url', 'search', 'src.tar.gz') | list | first).browser_download_url }}"

- name: Download sabnzbd tarball
  ansible.builtin.get_url:
    url: "{{ download_url }}"
    dest: /tmp
  register: sabnzbd_tarball

- name: Unarchive sabnzbd tarball
  ansible.builtin.unarchive:
    src: "{{ sabnzbd_tarball.dest }}"
    dest: /tmp
    list_files: yes
  register: sabnzbd_dir

- name: Set fact for full extracted directory path
  ansible.builtin.set_fact:
    sabnzbd_extracted_fullpath: "{{ sabnzbd_dir.dest }}/{{ sabnzbd_dir.files[0].split('/')[0] }}"

- name: Print full extracted directory path
  debug:
    msg: "{{ sabnzbd_extracted_fullpath }}"

- name: Remove existing sabnzbd directory (optional, for clean replacement)
  ansible.builtin.file:
    path: /opt/sabnzbd
    state: absent

- name: Copy new folder to target location
  ansible.builtin.copy:
    src: "{{ sabnzbd_extracted_fullpath }}/"
    dest: /opt/sabnzbd
    owner: "{{ media_user }}"
    group: "{{ media_user }}"
    remote_src: yes

- name: Restart sabnzbd service
  ansible.builtin.service:
    name: sabnzbd
    state: restarted

关键修改说明

  1. 构建完整解压路径
    通过set_fact将unarchive模块的目标目录(sabnzbd_dir.dest)与解压后的顶层目录名拼接,得到完整路径{{ sabnzbd_dir.dest }}/{{ sabnzbd_dir.files[0].split('/')[0] }},避免硬编码路径。

  2. 修复copy模块参数

    • 添加remote_src: yes:解压后的目录位于远程节点的/tmp下,而非控制节点,必须声明该参数让Ansible从远程节点读取源路径。
    • src结尾添加/:表示复制目录内的所有内容到目标目录,而非复制目录本身,符合替换现有服务目录的需求。
  3. 可选的目录清理
    增加file模块删除旧的/opt/sabnzbd目录,确保新内容完全替换旧文件,避免残留文件导致服务异常。

内容的提问来源于stack exchange,提问作者eekfonky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 09:35:41