Ansible:从目录列表中,仅过滤掉现有的目录

Ansible: from a list of directories, filter out only existing dirs

我正在尝试创建一个 Ansible 剧本,它将检查目录列表,过滤该列表以仅包含现有目录,并将该列表存储到一个变量(事实?)。除了存储现有目录的过滤列表外,我还想将第一个找到的现有目录存储到不同的变量中。

我在让它发挥作用时遇到了一些困难,我觉得我让它变得更难了。有什么建议么?

- hosts: all
  vars:
   my_dirs:
   - "/a/"
   - "/b/"
   - "/c/"
  tasks:

  - name: Checking existing file name
    stat:
      path: "{{ item }}"
    with_items: "{{ my_dirs }}"
    register: check_file_name

  - name: Set fact
    set_fact:
       existing_paths: "{{ item.stat.path }}"
    with_items:
      "{{ check_file_name.results }}"
    when: item.stat.exists | default(False) | bool

我认为您几乎可以正常工作,但可能需要对剧本进行一些更改,如下面的数组中收集的结果:


  - set_fact: existing_paths="{{ [] }}"

  - name: Set fact
    set_fact:
       existing_paths: "{{ existing_paths +[item.stat.path] }}"
    with_items:
      "{{ check_file_name.results }}"
    when: item.stat.exists