2017-02-14 13 views
0

У меня есть список файлов, которые я бы хотел изменить, но только если они существуют. Я думал, что могу использовать комбинацию stat и with_item. Я довольно новичок в этом, и любые идеи будут действительно большой помощью. Спасибо, ДжонПереходящий список в Ansible условный

--- 
- hosts: all 

    tasks: 
- name: checking if file exists 
    stat: path={{ item }} 
    register: file_exists 
    with_items: 
    - /tmp/test1 
    - /home/john/test2 
    - /home/allison/test3 

- name: change permissions 
    file: path={{ item }} mode=0600 
    when: file_exists.stat.exists 

ответ

1

Ваше решение должно работать с некоторыми изменениями:

--- 
    - hosts: localhost 
    vars: 
     permissioned_files: 
     - /tmp/test1.txt 
     - /home/john/test2 
     - /home/allison/test3 
    tasks: 
    - name: checking if file exists 
     stat: path={{ item }} 
     register: file_exists 
     with_items: "{{ permissioned_files }}" 

    - name: change permissions 
     file: path={{ item.0 }} mode=0600 
     when: "{{ item.1.stat.exists }}" 
     with_together: 
     - "{{ permissioned_files }}" 
     - "{{ file_exists.results }}" 

Изменение:

  • Fixed отступы
  • Добавлены элементами петля на вторые задачи
  • Используются общие переменными вместо повторения списка файлов
  • Пользовалась parallel loop для доступа к перечисленным результатам стат и различные файлы, в которых права должны быть установлены

Более простое решение заключается в использовании параметра ignore_errors и текущие возможности Ansible file module: когда состояние устанавливается в «файл» (как по умолчанию), модуль не будет создавать файл. ignore_errors означает, что игра не сработает, когда задача встретит ошибки.

--- 
- hosts: localhost 
    tasks: 
    - name: Ensure one sample file exists 
     file: 
     path: /tmp/test1.txt 
     state: touch 

    - name: Change permissions 
     file: 
     path: "{{ item }}" 
     mode: 0600 
     with_items: 
     - /tmp/test1.txt 
     - /home/john/test2 
     - /home/allison/test3 
     ignore_errors: true 
+0

Спасибо, это работает как шарм! –