2016-10-13 1 views
2

を存在する場合、シェルコマンドを実行していない私はAnsibleの脚本で次の操作を行いたいと思います:Ansible:ファイルが

whenインサイド
- name: "Generate variant html report" 
    shell: "<my command>" 
    with_items: "{{ variants | default([]) }}" 
    when: ({{ folderReports }}/{{ item }}).exists == False 

、私はファイルパスを作成する方法を必要とし、かどうかを判断それは存在するかどうか。私は最初の式を囲むために "(" ")"を使用しようとしましたが、動作していないようです:

2016-10-13 16:22:48,130 p = 94292 u = sautomation |致命的:[localhost]:FAILED!条件付きチェック({{folderReports}}/{{item}})存在する== True '失敗:テンプレート文字列中にテンプレートエラーが発生しました:unexpected '/'文字列:{%if(/opt/diff-test1.diff).exists == True%} True {%else%} False {%endif%} \ n \ nエラーは '/ \ n \ n問題の行は次のように表示されます:\ n \ n \ N-名: "レポート\を生成する" \ \ nは^ここでのn \ "}

+0

この問題は、タイトルで指定した「* Jinja2/Anabilitiesネストされた式*」とはまったく関係がありません。私はそれを編集し、誤解を招くタグ(Python、Jinja2)を削除しました。 – techraf

答えて

2

shellモジュールのcreatesパラメータを使用して、指定したファイルが既に存在する場合の実行からタスクを防止するために:

- name: "Generate variant html report" 
    shell: "<my command>" 
    args: 
    creates: "{{ folderReports }}/{{ item }}" 
    with_items: "{{ variants | default([]) }}" 

.existsは条件内で、変数(ファクト)が存在するかどうかを確認します。ターゲットノードのファイルではないため、エラーが発生します。

+0

あなたが今言っていることは分かりません。これは、あなたが質問で指定したものとまったく同じです:ファイルが存在しなければタスクを実行する必要があります( '.exist == False')。 「ファイル**が存在するとき**、このステップ**は実行されません」と同じです。 – techraf

+0

申し訳ありませんが、あなたはまったく正しいです。プレイブックの別の部分では、ファイルが存在する場合にのみアクションを実行する必要があります。それを行う方法はありますか? –

+0

2つのステップ:まず、チェックするファイルへのパスを指定して、['find'](https://docs.ansible.com/ansible/find_module.html)モジュールを使用してファイルが存在するかどうかを確認し、タスクは 'matched'の戻り値に基づいて条件付きで実行されます。 – techraf