2017-02-14 4 views
0

私はモードを変更したいファイルのリストを持っています。私はstatwith_itemの組み合わせを使うことができると考えていました。私はこれでかなり新しく、どんなアイディアも本当に大きな助けになるでしょう。おかげで、ジョン不可能な条件にリストを渡す

--- 
- 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 }}" 

変更:

  • 固定インデント
  • 追加された項目のループ
  • 2番目のタスクに使用される共通の変数をファイルの一覧を繰り返す代わりに
  • 状態は「ファイル」に設定されている場合:記載されているのstat結果と許可が簡単な解決策は Ansible file moduleignore_errorsパラメータと現在の能力を使用することです

を設定する必要があります別のファイルにアクセスするparallel loopを使用し

  • (デフォルトでは)、モジュールはファイルを作成しません。 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

    ありがとうございます、それは魅力的です! –

    関連する問題