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
相关产品推荐
相关产品推荐

