2016-02-26 9 views
28

ファイルが/etc/に存在するかどうかをチェックする必要があります。ファイルが存在する場合は、そのタスクをスキップする必要があります。ここ は、私が使用していますコードです:ファイルが安全な状態でどのようにチェックされていますか?

- name: checking the file exists 
    command: touch file.txt 
    when: $(! -s /etc/file.txt) 

file.txtが、私はタスクをスキップする必要が存在する場合。

答えて

4

通常、stat moduleでこれを行います。しかしcommand moduleが、これは非常に簡単になりcreatesオプションがあります。

- name: touch file 
    command: touch /etc/file.txt 
    args: 
    creates: /etc/file.txt 

私はあなたのタッチコマンドは単なる一例であると思いますか?ベストプラクティスは、何かを一切点検せずに、正しいモジュールを使って、自分の仕事を任せることです。

- name: make sure file exists 
    file: 
    path: /etc/file.txt 
    state: touch 
+1

'state:file'はファイルを作成しません。 –

9

statモジュールは、この操作を行うだけでなく、ファイルのために他の多くの情報を取得します:あなたは、ファイルを確実にしたいのであれば、ファイルのモジュールを使用しますが存在します。

- stat: path=/path/to/something 
    register: p 

- debug: msg="Path exists and is a directory" 
    when: p.stat.isdir is defined and p.stat.isdir 
+0

これはより良いオプションです – julestruong

54

まず、出力先ファイルが存在するかどうかを確認し、その出力結果に基づいて決定することができます。

tasks: 
    - name: Check that the somefile.conf exists 
    stat: 
     path: /etc/file.txt 
    register: stat_result 

    - name: Create the file, if it doesnt exist already 
    file: 
     path: /etc/file.txt 
     state: touch 
    when: stat_result.stat.exists == False 
+0

ディレクトリが存在しない場合はどうなりますか? – ram4nd

+1

ディレクトリが存在しない場合、 'stat_result'レジスタは' stat_result.state.exists'をFalseにします(2番目のタスクが実行されるときです)。 statモジュールの詳細は、http://docs.ansible.com/ansible/stat_module.html – Will

+0

の場合:stat_result.stat.existsが定義され、stat_result.stat.exists – danday74

1

これは、ファイルが存在するときにタスクをスキップするためにstatモジュールを使用して実行できます。

- hosts: servers 
    tasks: 
    - name: Ansible check file exists. 
    stat: 
     path: /etc/issue 
    register: p 
    - debug: 
     msg: "File exists..." 
    when: p.stat.exists 
    - debug: 
     msg: "File not found" 
    when: p.stat.exists == False 
関連する問題