在我的Ansible Playbook中,我想要执行一项任务,该任务将从应用程序的目录中删除旧文件和文件夹。与此简单的任务不同的是,需要保留一些文件或文件夹。想象这样的事情:
/opt/application
- /config
- *.properties
- special.yml
- /logs
- /bin
- /var
- /data
- /templates
假设我想完全保留/logs
,/var/data
,而我想保留/config
。{p>
(我目前无法提供确切的代码,因为我对此感到沮丧,在冷静下来之后,我现在要在家写这个问题)
我的想法是有两个排除列表,一个保存文件夹,一个保存文件。然后,我使用special.yml
模块首先将应用程序目录中的文件夹放入一个变量,其余文件也放入另一个变量。之后,我想使用find
模块删除不在排除列表中的所有文件夹和文件。
(伪YML,因为我对Ansible的理解还不够流利,所以我可以整理一个结构正确的示例;尽管它应该足够接近)
file
我不知道如何正确构造file:
path: "{{ item.path }}"
state: absent
with_items: "{{ found_files_list.files }}"
when: well, that is the big question
子句。甚至有可能这样吗?
答案 0 :(得分:0)
首先像您所说的那样使用查找模块来获取所有文件和目录的总列表。注册到变量all_objects
。
- name: Get list of all files recursively
find:
path: /opt/application/
recurse: yes
register: all_objects
然后手动列出要保留的物品。
vars:
keep_these:
- /logs
- /var/data
- /config/special.yml
然后,此任务应删除列表中所有内容以外的所有内容:
- name: Delete all files and directories except exclusions
file:
path: "{{ item.path }}"
state: absent
recurse: true
with_items: "{{ all_objects.files }}"
when: item.path not in keep_these
我认为这种通用策略应该有效……我唯一不确定的是查找模块中已注册变量的确切嵌套嵌套。您可能需要调试模块才能正确使用它。
答案 1 :(得分:0)
我不认为文件模块中包含when子句。 但是您可能可以实现以下目标:
- name: Find /opt/application all directories, exclude logs, data, and config
find:
paths: /opt/application
excludes: 'logs,data,config'
register: files_to_delete
- name: Ansible remove file glob
file:
path: "{{ item.path }}"
state: absent
with_items: "{{ files_to_delete.files }}"
我希望这是您所需要的。