2015-09-25 19 views
8

Nginxがまだ存在しない場合、現在のバージョンでのみコンパイルするAniableプレイブックを作成しようとしています。しかし、それは望ましくない毎回コンパイルされます。文字列が一致しない場合の対応条件

これは私が持っているものです。

- shell: /usr/local/nginx/sbin/nginx -v 2>&1 
    register: nginxVersion 
- debug: 
    var=nginxVersion 

- name: install nginx 
    shell: /var/local/ansible/nginx/makenginx.sh 
    when: "not nginxVersion == 'nginx version: nginx/1.8.0'" 
    become: yes 

スクリプトのすべてが、それはシェルスクリプトにnginxのをコンパイルするたびに実行されているという事実から離れて動作します。 nginxVersionのデバッグ出力は次のとおりです。

ok: [server] => { 
    "var": { 
     "nginxVersion": { 
      "changed": true, 
      "cmd": "/usr/local/nginx/sbin/nginx -v 2>&1", 
      "delta": "0:00:00.003752", 
      "end": "2015-09-25 16:45:26.500409", 
      "invocation": { 
       "module_args": "/usr/local/nginx/sbin/nginx -v 2>&1", 
       "module_name": "shell" 
      }, 
      "rc": 0, 
      "start": "2015-09-25 16:45:26.496657", 
      "stderr": "", 
      "stdout": "nginx version: nginx/1.8.0", 
      "stdout_lines": [ 
       "nginx version: nginx/1.8.0" 
      ], 
      "warnings": [] 
     } 
    } 
} 

私は右の行の午前のドキュメントによると、私は何の簡単なトリックをしないのですか?

答えて

23

試してみてください。

when: nginxVersion.stdout != 'nginx version: nginx/1.8.0' 

または

when: '"nginx version: nginx/1.8.0" not in nginxVersion.stdout' 
+0

まああまりにも簡単でした。第二の選択肢が働いた。 –

0

varはあなたはそれが鍵だJSONとのアクセスにそれを解析することができますJSON文字列ですので。

set_fact: 
    var_json: "{{ var.stdout|from_json }}" 

次に、jsonにアクセスして、必要な値を取得します。

when: var_json.nginxVersion.stdout == 'nginx version: nginx/1.8.0' 

チェックアウトこのリンク:https://gist.github.com/justinhennessy/28e82c2ec05f9081786a

関連する問題