2015-09-25 8 views
8

Ich versuche ein Ansible Playbook zu schreiben, das nur Nginx kompiliert, wenn es nicht bereits vorhanden ist und in der aktuellen Version. Jedoch kompiliert es jedes Mal, was unerwünscht ist. DieseAnsible Bedingung, wenn String nicht übereinstimmt

ist, was ich habe:

- 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 

Das Skript alle abgesehen von der Tatsache, dass es funktioniert das Shell-Skript läuft Nginx jedes Mal zu kompilieren. Die Debug-Ausgabe für nginxVersion ist:

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": [] 
     } 
    } 
} 

Gemäß der Dokumentation ich auf dem richtigen Weg bin, was einfacher Trick bin ich dabei?

Antwort

23

Versuchen:

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

oder

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

Nun, das ist einfach zu einfach war. Die 2. Option hat funktioniert. –

0

Da var ist ein JSON-String Sie es, es ist Schlüssel zu JSon und Zugang analysieren kann.

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

Dann Zugriff auf die JSON und erhalten Sie den gewünschten Wert.

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

Kasse diesen Link: https://gist.github.com/justinhennessy/28e82c2ec05f9081786a

Verwandte Themen