Как сделать with_fileglob условным - PullRequest
0 голосов
/ 06 мая 2020

Я тестирую это:

#test.yml

- hosts: localhost
  tasks:
  - set_fact:
      host_name: "project-specific"

  - stat:
      path: /home/user/work/infrastructure/{{ host_name }}
    register: file_exists

  - debug:
      var: file_exists

  - name: Dont create a file
    template:
      src: "{{item}}"
      dest: /home/user/work/infrastructure/project-specific-2/
      mode: 0755
    with_fileglob: /home/user/work/infrastructure/{{ host_name }}/*
    when: file_exists

Я хочу скопировать все файлы из project-specific в project-specific-2 (в качестве демонстрации), но только если каталог проекта c действительно существует. Директория проекта c не существует, поэтому этот шаг следует пропустить.

Это результат:

user@laptop:~/work/infrastructure/ansible$ ansible-playbook test.yml
PLAY [localhost] *************************************************************************************************************************************

TASK [Gathering Facts] *******************************************************************************************************************************
ok: [localhost]

TASK [set_fact] **************************************************************************************************************************************
ok: [localhost]

TASK [stat] ******************************************************************************************************************************************
ok: [localhost]

TASK [debug] *****************************************************************************************************************************************
ok: [localhost] => {
    "file_exists": {
        "changed": false, 
        "failed": false, 
        "stat": {
            "exists": false
        }
    }
}

TASK [Dont create a file] ****************************************************************************************************************************
[WARNING]: Unable to find '/home/user/work/infrastructure/project-specific' in expected paths (use -vvvvv to see paths)

PLAY RECAP *******************************************************************************************************************************************
localhost                  : ok=4    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   

https://github.com/ansible/ansible/issues/13296

указывает, что предложения with_ выполняются до when. Как мне сделать так, чтобы он пропускал этот шаг, если путь не существует? Или можно оставить его на «выполнение» с предупреждением, поскольку файлы все равно не копируются?

1 Ответ

2 голосов
/ 06 мая 2020

Я думаю, вы застряли на этом. Как указано в документации , оператор when оценивается отдельно для каждого элемента в l oop.

При объединении условных операторов с al oop оператор when: обрабатывается отдельно для каждого элемента.

Итак, то, что вы видите, является ожидаемым поведением.

Конечным результатом в вашем случае является то, что задача фактически пропускается, когда каталог не может быть найден, никаких действий не выполняется. Он просто делает это при печати предупреждения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...