2016-05-19 5 views
7

ログをバックアップディレクトリに移動するためにAnsibleを使用しています(shellモジュール、mvコマンドを使用)。与えられたディレクトリが空でない場合、実行可能なタスクはありますか?

mv移動するファイルがない場合、コマンドは失敗します。 デフォルトでは、それはAnabilitiesの全プレイを失敗させます。 私はそれがエラーメッセージ

を生成するので、タスクが(ignore_errors: yes

を失敗しても、私は、このソリューションに満足していないです、プレイを続行することができますTASK [バックアップディレクトリにファイルを移動] **** *************************************** fatal:[xx.xx.xx.xx]: FAILED! = ...そのようなファイルやディレクトリはありません」と、 "標準出力?": ""、 "stdout_lines": []、 "警告":[]} ...ディレクトリがあるかどうかを確認する方法

を無視ansible内の空、空のジュースは、タスクをスキップする場合は?

答えて

9

あなたは、ディレクトリ内.log拡張子を持つファイルを検索するansible 2.0にモジュールを見つける使用することができ、その後移動を実行ファイルが

- find: paths=DIRECTORY file_type=directory patterns="*.log" 
    register: dir_files 

- shell: mv *.log /tmp 
    when: dir_files.matched|int != 0 
+0

素晴らしい、感謝のtest結果をcommands-使用することです!質問:タスクを見つけるために 'changed_when:false'を追加するとよいでしょうか?このコマンドは常に実行され、何も変更することはありません。 私は通常、このような純粋なテストにchanged_when:falseを追加します。副作用はありません。そうすれば、ハンドラは呼び出されず、再生リストがよく見えます(何かが実際に変更されない限り、私は0に変更されました)。 –

1

発見された場合に受け入れ答えそれがありますfindモジュールを使用します。

(読みやすく、より冗長少ない)

別のオプションは、ネイティブLinuxはlsコマンド

- name: "backup logs" 
    shell: test "$(ls /var/logs/)" 
    register: logsPresent 
    changed_when: false 

- name: "move files to backup directory" 
    when: "logsPresent.rc != 0" 
    shell: "mv /var/logs/ /backup/logs" 
関連する問題