如何在不使用Ansible删除目录的情况下删除目录中的文件?

如何在不使用Ansible删除目录的情况下删除目录中的文件?,ansible,delete-file,molecule,Ansible,Delete File,Molecule,我正在尝试两种方法来删除目录my_dir中的所有文件。这是从另一个文件管理的参数。我的工作流程是先创建目录,然后复制该目录中的文件,然后删除其中的所有文件。这是我使用循环控制的第一个解决方案: --- # tasks file for deploy_files - name: Create model directory file: path: "{{ my_dir }}" state: directory owner: "{{ my_

我正在尝试两种方法来删除目录my_dir中的所有文件。这是从另一个文件管理的参数。我的工作流程是先创建目录,然后复制该目录中的文件,然后删除其中的所有文件。这是我使用循环控制的第一个解决方案:

---
# tasks file for deploy_files

- name: Create model directory
  file:
    path: "{{ my_dir }}"
    state: directory
    owner: "{{ my_daemon_name }}"
    group: "{{ my_daemon_name }}"
    mode: u=rwx,g=rX,o=rX

- name: Copy models
  copy:
    src: "{{ files_src_dir }}"
    dest: "{{ my_dir }}"
    owner: "{{ my_daemon_name }}"
    group: "{{ my_daemon_name }}"
    mode: u=rw,g=r,o=r

- name: Get directory listing
  find:
    path: "{{ my_dir }}"
    file_type: any
    hidden: yes
  register: directory_content_result

- name: Remove directory content
  file:
    path: "{{ item.path }}"
    state: absent
    owner: "{{ my_daemon_name }}"
    group: "{{ my_daemon_name }}"
    mode: u=rw,g=r,o=r
  with_items: "{{ directory_content_result.files }}"
  loop_control:
    label: "{{ item.path }}"
    ---
    # tasks file for deploy_files
    
    - name: Create model directory
      file:
        path: "{{ my_dir }}"
        state: directory
        owner: "{{ my_daemon_name }}"
        group: "{{ my_daemon_name }}"
        mode: u=rwx,g=rX,o=rX
    
    - name: Copy models
      copy:
        src: "{{ files_src_dir }}"
        dest: "{{ my_dir }}"
        owner: "{{ my_daemon_name }}"
        group: "{{ my_daemon_name }}"
        mode: u=rw,g=r,o=r

- name: Find files in directory
  find:
    path: "{{ my_dir }}"
  register: files_to_delete

- name: Remove files in directory
  file:
    path: "{{ item.path }}"
    state: absent
    owner: "{{ my_daemon_name }}"
    group: "{{ my_daemon_name }}"
    mode: u=rwx,g=rX,o=rX
  with_items: "{{ files_to_delete.files }}"
下面是第二个不带回路控制的解决方案:

---
# tasks file for deploy_files

- name: Create model directory
  file:
    path: "{{ my_dir }}"
    state: directory
    owner: "{{ my_daemon_name }}"
    group: "{{ my_daemon_name }}"
    mode: u=rwx,g=rX,o=rX

- name: Copy models
  copy:
    src: "{{ files_src_dir }}"
    dest: "{{ my_dir }}"
    owner: "{{ my_daemon_name }}"
    group: "{{ my_daemon_name }}"
    mode: u=rw,g=r,o=r

- name: Get directory listing
  find:
    path: "{{ my_dir }}"
    file_type: any
    hidden: yes
  register: directory_content_result

- name: Remove directory content
  file:
    path: "{{ item.path }}"
    state: absent
    owner: "{{ my_daemon_name }}"
    group: "{{ my_daemon_name }}"
    mode: u=rw,g=r,o=r
  with_items: "{{ directory_content_result.files }}"
  loop_control:
    label: "{{ item.path }}"
    ---
    # tasks file for deploy_files
    
    - name: Create model directory
      file:
        path: "{{ my_dir }}"
        state: directory
        owner: "{{ my_daemon_name }}"
        group: "{{ my_daemon_name }}"
        mode: u=rwx,g=rX,o=rX
    
    - name: Copy models
      copy:
        src: "{{ files_src_dir }}"
        dest: "{{ my_dir }}"
        owner: "{{ my_daemon_name }}"
        group: "{{ my_daemon_name }}"
        mode: u=rw,g=r,o=r

- name: Find files in directory
  find:
    path: "{{ my_dir }}"
  register: files_to_delete

- name: Remove files in directory
  file:
    path: "{{ item.path }}"
    state: absent
    owner: "{{ my_daemon_name }}"
    group: "{{ my_daemon_name }}"
    mode: u=rwx,g=rX,o=rX
  with_items: "{{ files_to_delete.files }}"
当我运行我的脚本时,它们没有一个工作,我得到:

错误:由于以下任务,幂等性测试失败


请注意,我的任务创建模型目录和复制模型工作得非常好,因为我已经对它们进行了测试。我的脚本只有在添加最后两个任务以删除文件时才失败。有人能帮我一下我做错了什么吗?谢谢。

从技术上讲,你的剧本没有什么问题,实际上它完全按照你的要求做了

我不得不猜测一下,因为你根本没有提到你是如何运行你的剧本的,但我很确定你正在使用它来测试你的剧本/角色(顺便说一下,这是一个非常好的主意)。你的问题中显示的是
分子
未通过其
幂等性检查

发生的情况是,
molecular
正在第二次运行您的playbook,并期望远程目标不会发生任何变化,因为它应该已经与所需状态对齐(通过运行前面的
converge
步骤)

由于您的playbook无条件地创建然后删除文件,因此它将始终更改目标上的某些内容,并且该检查将永远不会通过。您必须修改执行所有这些任务的方式,使其成为幂等函数,或者如果您知道这些任务上的更改不相关,则忽略这些更改(即:false时更改)


根据经验,最好的选择通常是尽可能使事物幂等。

Hello@Zeitounator非常感谢您的回复。我是ansible的新手,所以是的,我忘了提到我是如何执行剧本的。而且,这正是您所说的,您提供的解决方法确实是解决我的问题的正确解决方法:-)Hello@Zeitounator我有兴趣了解更多关于您上面的评论“最好的选择通常是尽可能使事情幂等”。我该怎么做呢?有什么文件我可以看吗?提前谢谢你。好吧,在上面的情况下很容易:不要删除文件。只有在需要时才会复制(不存在或更改)。