2015-09-25 10 views
8

मैं एक उत्तरदायी प्लेबुक लिखने की कोशिश कर रहा हूं जो केवल Nginx को संकलित करता है यदि यह पहले से मौजूद नहीं है और वर्तमान संस्करण में है। हालांकि यह हर समय संकलित करता है जो अवांछनीय है।उत्तरदायी स्थिति जब स्ट्रिंग मेल नहीं खाता

यह है कि मैं क्या है:

- 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

के बाद से वर एक json स्ट्रिंग आप इसे JSON और उपयोग करने के लिए यह कुंजी है पार्स कर सकते है।

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

फिर जेसन तक पहुंचें और इच्छित मूल्य प्राप्त करें।

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

चेकआउट इस लिंक: https://gist.github.com/justinhennessy/28e82c2ec05f9081786a

संबंधित मुद्दे