2016-07-19 10 views
1

に存在する場合、私はAnsibleAnsible - 文字列がファイル

に非常に新しいですチェックは、それは文字列がAnsibleを使用してファイルに存在するかどうかを確認することが可能です。

確認したいのは、ユーザーがサーバーにアクセスできるかどうかです。 これはサーバー上でcat /etc/passwd | grep username

を使用して実行できますが、ユーザーがいない場合は停止する必要があります。

私はlineinfileを使用しようとしましたが、返さないようです。彼はそこではない場合

コード

- name: find 
    lineinfile: dest=/etc/passwd 
       regexp=[user] 
       state=present 
       line="user" 

上記のコードは、ファイルにユーザーを追加します。私がしたいのはチェックだけです。ファイルを変更する必要はありませんが、これは可能です

ありがとうございました。

+0

[ファイルだけで行に存在するかどうかを確認するのが重複する可能性(ansible)](0120-18753)を参照してください。 – activatedgeek

答えて

5

おそらくregister and evaluate a variableでしょう。

次のような単純な脚本は、私の作品:

- hosts: localhost 
    tasks: 

    - name: read the passwd file 
    shell: cat /etc/passwd 
    register: user_accts 

    - name: a task that only happens if the user exists 
    when: user_accts.stdout.find('hillsy') != -1 
    debug: msg="user hillsy exists" 
+0

Ansibleは、ユーザーの 'accts.stdoutに問題があります。これはモジュールなのか、それともシェルとして実行すべきでしょうか? –

+0

これは実際にはこれらのものではありません。これはuser_accts変数の内容をチェックしています。その答えにリンクしているドキュメントを参照してください。 私は実際にコードを実行していませんでした。私は今私の答えを微調整しています。上記のことは間違いなく私にとってはうまくいくが、明らかに成功メッセージを出力する以外に何もしない。 – hillsy

+0

これは完璧です、あなたの助けをありがとう –

4

ユーザーまったく存在しない場合に失敗する場合:

tasks: 
    - shell: grep username /etc/passwd 
    changed_when: false 

がデフォルトshellモジュールでは、コマンドの終了コードがゼロ以外である場合に失敗します。
ユーザ名がある場合はok、それ以外の場合は失敗します。
私はchanged_when: falseを使用して、グレーピング時にchangedの状態を防ぎます。

+0

これも動作しますが、残りのタスクを殺します。 –

+0

https://docs.ansible.com/ansible/playbooks_error_handling.html#ignoringによると、おそらく 'ignore_errors:yes'が必要です。 -failed-commands。 –

+0

元の質問状態_ "しかし、私はあなたがそこにいなければ停止することができます。" - 私の答えはそれだけです。ユーザーがいないと実行が停止します。 –

4

これは難しい問題です。 lineinfileモジュールは特にファイルの内容を変更することを意図していますが、妥当性チェックのためにも使用できます。

- name: find 
    lineinfile: 
    dest: /etc/passwd 
    line: "user" 
    check_mode: yes 
    register: presence 
    failed_when: presence.changed 

check_modeが確実にファイルを更新しません。 registerは、指定された変数を保存します。 failed_whenを使用すると、ファイルに見つからなかったためにユーザーを追加することで障害の状態を設定できます。

これは、動作を何通りにするかに基づいて使用できる反復が複数あります。 stateregexpに関連する特定のドキュメントは、あなたが有無は故障などであるかどうかを判断できるようにする必要がありますlineinfile、またはあなたがnot presence.changedを行うことができますなど


+0

私が探していたものとまったく同じです。 –