web-dev-qa-db-fra.com

Condition Ansible lorsque la chaîne ne correspond pas

J'essaie d'écrire un livre de lecture Ansible qui compile uniquement Nginx s'il n'est pas déjà présent et à la version actuelle. Cependant, il compile à chaque fois ce qui est indésirable.

Voici ce que j'ai 

- 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

Le script fonctionne indépendamment du fait qu’il exécute le script Shell à chaque fois pour compiler Nginx. La sortie de débogage pour nginxVersion est la suivante:

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

D'après la documentation, je suis sur la bonne voie, quel truc simple me manque-t-il?

17
Steve E.

Essayer: 

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

ou 

when: '"nginx version: nginx/1.8.0" not in nginxVersion.stdout'
45
Vor

Puisque var est une chaîne json, vous pouvez l’analyser en json et accéder à ses clés.

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

Accédez ensuite au json et obtenez la valeur souhaitée.

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

checkout this link: https://Gist.github.com/justinhennessy/28e82c2ec05f9081786a

1
Ahmad sibai