私はAnsibleが初めてです
Ansibleを使用してファイルに文字列が存在するかどうかを確認することは可能ですか?.
確認したいのは、ユーザーがサーバーにアクセスできるかどうかです。これはcat /etc/passwd | grep username
を使用してサーバーで実行できます
しかし、ユーザーがそこにいない場合は、Ansibleを停止してください。
私はlineinfile
を使用しようとしましたが、それを返すことができないようです。
コード
- name: find
lineinfile: dest=/etc/passwd
regexp=[user]
state=present
line="user"
上記のコードは、ユーザーがいない場合にユーザーをファイルに追加します。私がしたいのはチェックだけです。ファイルを変更したくないのですが、これは可能ですか
ありがとう。
たぶん 変数を登録して評価する でしょう。
次の簡単なプレイブックは私にとってはうまくいきます:
- 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"
トリッキーです。 lineinfileモジュールは、特にファイルの内容を変更することを目的としていますが、検証チェックにも使用できます。
- name: find
lineinfile:
dest: /etc/passwd
line: "user"
check_mode: yes
register: presence
failed_when: presence.changed
check_mode
は、ファイルを更新しないことを保証します。 register
は、前述のように変数を保存します。 failed_when
を使用すると、ファイルに見つからなかったためにユーザーを追加するなど、障害条件を設定できます。
これには複数の反復があり、動作をどのようにしたいかに基づいて使用できます。 lineinfilestate
およびregexp
に関連する特定のドキュメントでは、存在または不在が失敗であるかどうかを判断できます。または、not presence.changed
など.
ユーザーがいない場合に失敗したい場合:
tasks:
- Shell: grep username /etc/passwd
changed_when: false
デフォルトでは、コマンドの終了コードがゼロ以外の場合、Shell
モジュールは失敗します。
ユーザー名が存在する場合はok
が表示され、それ以外の場合は失敗します。
私が使う changed_when: false
grepping時にchanged
状態を防止します。