2015-09-25 6 views
8

Sto provando a scrivere un playbook Ansible che compila Nginx solo se non è già presente e alla versione corrente. Tuttavia compila ogni volta che è indesiderabile.Condizione anonimo quando la stringa non corrisponde

Questo è quello che ho:

- 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 

Lo script di tutte le opere a parte il fatto che venga eseguito lo script di shell ogni volta per compilare Nginx. L'output di debug per 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": [] 
     } 
    } 
} 

Secondo la documentazione sono nella giusta direzione, cosa semplice trucco che mi manca?

risposta

23

Prova:

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

o

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

Bene che era troppo facile. La seconda opzione ha funzionato. –

0

Poiché var è una stringa JSON è possibile analizzarlo per JSON e l'accesso è chiavi.

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

Quindi accedere a JSON e ottenere il valore desiderato.

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

checkout questo link: https://gist.github.com/justinhennessy/28e82c2ec05f9081786a