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

Ansible 2.7中如何将归档文件名注册为变量?

解决方案

Ansible 2.7的archive模块确实没有返回生成的归档文件名的内置返回值,你可以通过以下两种方式获取仅文件名部分:

方法1:预先定义文件名变量(推荐)

提前把文件名和完整路径存成变量,后续直接引用即可,避免重复拼接字符串:

- name: 定义归档文件名和路径
  set_fact:
    apache_archive_filename: "{{ ansible_hostname }}-apache2-{{ ansible_date_time.date }}.tar.gz"
    apache_archive_path: "/tmp/{{ apache_archive_filename }}"

- name: 压缩/etc/apache2目录到/tmp
  archive:
    path: /etc/apache2
    dest: "{{ apache_archive_path }}"
  register: archive_result

# 后续任务直接使用apache_archive_filename变量即可
- debug:
    var: apache_archive_filename

方法2:通过字符串过滤器提取文件名

如果不想额外定义变量,可以直接对dest的路径表达式使用basename过滤器提取文件名:

- name: 压缩/etc/apache2目录到/tmp
  archive:
    path: /etc/apache2
    dest: /tmp/{{ ansible_hostname }}-apache2-{{ ansible_date_time.date }}.tar.gz
  register: archive_result

- name: 提取归档文件名
  set_fact:
    apache_archive_filename: "{{ '/tmp/' ~ ansible_hostname ~ '-apache2-' ~ ansible_date_time.date ~ '.tar.gz' | basename }}"

- debug:
    var: apache_archive_filename

另外你之前用的archive_name.arcroot返回的是归档包内部的根目录路径(比如这里的/etc/),和生成的外部归档文件路径无关,所以不是你需要的内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:45:58