我正在编写一个 Ansible 脚本来根据文件类型、创建前的天数等来归档文件(及其目录结构)。为了选择文件类型,我正在使用find
命令,然后将所有文件放入列表中(使用set_fact
模块)。之后,我将此列表提供给存档模块archive
.
但我的问题是,它总是不考虑我在源中给出的最顶层目录以将其存档在目的地。
tasks:
- name: Recursively find directories/files which are older than given days
find:
paths: "{{ source }}"
file_type: any
patterns: "{{ type_file }}"
age: "{{ days }}d"
recurse: true
register: output
- block:
- name: Archiving files/directories
set_fact:
files_to_archive: "{{ files_to_archive|default([]) + [ item.path ] }}"
with_items: "{{ output.files }}"
- archive:
path: "{{ files_to_archive }}"
dest: "{{ destination }}/backup.tar.gz"
format: gz
force_archive: yes
假设我有目录Dfile
Dfile
└── efile
├── 1.sh
├── 2.sh
└── kfile
└── mfile
├── 1.txt
└── 2.txt
在此我想存档所有*.sh
文件。所以在目的地输出是这样的
efile
├── 1.sh
├── 2.sh
这意味着它正在删除Dfile
作为最顶层目录。
谁能告诉我这个 Ansible 脚本出了什么问题吗?我在目的地需要这样的输出
Dfile
└── efile
├── 1.sh
├── 2.sh
我将你的问题理解为
如何在通过 Ansible 归档的文件中强制使用绝对路径archive
模块?怎么做archive
模块的行为类似于tar
命令?
一个最小的示例剧本
---
- hosts: test.example.com
become: false
gather_facts: false
tasks:
- name: Recursively find directories/files which are older than given days
find:
paths: "/home/{{ ansible_user }}/test/toarchive"
file_type: file
patterns: "*.sh"
age: "0d"
recurse: true
register: output
- name: Archiving files/directories
set_fact:
files_to_archive: "{{ files_to_archive | default([]) + [ item.path ] }}"
loop_control:
extended: true
label: "{{ item.path }}"
loop: "{{ output.files }}"
- debug:
msg: "{{ files_to_archive }}"
- archive:
path: "{{ files_to_archive }}"
dest: "backup.tar.gz"
format: gz
force_archive: true
- archive:
path: "{{ files_to_archive }}"
dest: "/home/{{ ansible_user }}/test/backup.tar.gz"
format: gz
force_archive: true
以绝对路径输出
TASK [debug] *****************************
ok: [test.example.com] =>
msg:
- /home/ansible-user/test/toarchive/2.sh
- /home/ansible-user/test/toarchive/3.sh
- /home/ansible-user/test/toarchive/1.sh
以及通过检查的存档文件如何查看里面的具体路径tar.gz? https://superuser.com/q/1337229/754490,给出的结果是
~/test$ tar tf ../backup.tar.gz
# or
~/test$ tar tf backup.tar.gz
1.sh
2.sh
3.sh
~/test$ tar tf ../backup.tar.gz /home/
# or
~/test$ tar tf backup.tar.gz
tar: /home: Not found in archive
tar: Exiting with failure status due to previous errors
更改为如下示例安西布尔:archive没有添加特定路径到存档 https://stackoverflow.com/a/71118191/6771046,行为仍然存在,创建的档案没有绝对路径,特别是根路径在每种情况下都丢失了。
总结一下
即使能够重现观察结果,我也不确定这是否是预期的行为。人们可能需要进一步调查。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)