2017-10-12 3 views
1

に私はこの脚本には値未定義のエラーがansible

--- 
- hosts: all 
    handlers: 
    - name: user-create 
    user: name=oracle state=present 
    tasks: 
    - name: "check user" 
    command: /usr/bin/id oracle 
    register: output 
    notify: user-create 
    when: output.rc == 1 

を持つが、私はoracleユーザーが存在しないシステム上でこれを実行するたびに、このエラーに

を実行すると、「失敗」していましょう: true、 "msgstr"条件チェック(output.rc == 1): 'output'が未定義です。\ n \ nエラーは次のように表示されます。 '/user-check.yml':行10、列5にありますが、正確な構文の問題に応じてファイル内の他の場所に\ n存在する可能性があります。\ n \ n問題のあるl \ N \ Nタスク:INEがあるように思われる\ nは - 名前: "チェックユーザー\" \ \ nは^ここでは\ n」は

+1

'when'文が**タスク実行前に評価され、' output'変数が**タスク実行後に**入力されます。あなたの目標は何ですか? –

+0

こんにちはKonstantin、 私の目標は、oracleユーザーが存在するかどうかを確認し、それを削除してユーザーを再作成することです。その理由は、私は出力を登録しているし、rcが1の場合、ハンドラに通知します.Psは同じを達成する方法について私を案内します – achak01

+0

あなたの要件は等しくない、それはすべてのプレイブックを実行するユーザーを削除/作成します。これは悪いパターンです。 @ techrafの答えを見てください。常にユーザーを再作成したい場合は、 'state = absent'というタスクを追加してください。 –

答えて

0

コメントに基づく回答:

実際に私がチェックをwanto

--- 
- hosts: all 
    tasks: 
    - name: ensure user 'oracle' does not exist 
     user: name=oracle state=absent 

    - name: ensure user 'oracle' exists 
     user: name=oracle state=present 

そして、それがすべてです:ユーザーが存在する場合は、idは、ユーザ

を削除して再作成存在Ansibleでそれを行うための正しい方法です。

ユーザーが既に存在する場合は作成しないように注意してください。そうでない場合にユーザーを削除しようとしないでください。

+0

実際に私はwantoユーザーが存在するかどうかを確認し、存在するIDは削除し、ユーザーを再作成 – achak01

+0

@ achak01答えを更新しました。 – techraf

+0

おかげでtechraf、ソリューションがうまくいきました。しかし、私はこのように、ユーザ1 ため チェックをこれを実行したい場合は、ユーザー1は 存在しない場合、ユーザー1 exsistはXYZ を行う場合は、ABC を行うどのように私はansible使用して、上記を達成できますか? – achak01