gpt4 book ai didi

函数中的 Ansible 更新变量

转载 作者:行者123 更新时间:2023-12-05 03:27:26 26 4
gpt4 key购买 nike

我做了一个有两个任务的剧本

第一个任务是获取所选目录中的所有目录。
第二个任务是删除目录。但是,如果列表长度超过两个,我只想删除一个目录。

---
- name: cleanup Backend versions
hosts: backend
become: true
become_user: root
vars:
backend_deploy_path: /opt/app/test/
tasks:
- name: Get all the versions
ansible.builtin.find:
paths: "{{ backend_deploy_path }}"
file_type: directory
register: file_stat

- name: Delete old versions
ansible.builtin.file:
path: "{{ item.path }}"
state: absent
with_items: "{{ file_stat.files }}"
when: file_stat.files|length > 2

当我运行这个剧本时,它会删除所有目录而不是保留三个目录。

我的问题是如何保持变量更新?以便它在每次尝试删除目录时都不断检查?

最佳答案

这是不可能的,一旦执行了一个模块,结果就保存在变量中,不会随着节点的状态而动态变化。

您应该做的是用 slice notation 限制您正在循环的列表排除上述列表的最后三项:files[:-3]

因此,删除文件的任务将如下所示:

- name: Delete old versions
ansible.builtin.file:
path: "{{ item.path }}"
state: absent
loop: "{{ file_stat.files[:-3] }}"

旁注:您可能想要 sort find 结果也是基于文件夹的创建日期,类似于:

loop: "{{ (file_stat.files | sort(attribute='ctime'))[:-3] }}"

关于函数中的 Ansible 更新变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71483602/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com