it-swarm.com.de

Annehmbare Bedingung, wenn die Zeichenfolge nicht übereinstimmt

Ich versuche ein Ansible-Playbook zu schreiben, das Nginx nur dann kompiliert, wenn es noch nicht vorhanden ist und in der aktuellen Version vorliegt. Es wird jedoch jedes Mal kompiliert, was unerwünscht ist.

Das 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 funktioniert unabhängig von der Tatsache, dass jedes Mal das Shell-Skript ausgeführt wird, um Nginx zu kompilieren. Die Debug-Ausgabe für nginxVersion lautet:

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

Welchen einfachen Trick vermisse ich laut Dokumentation auf der richtigen Linie?

17
Steve E.

Versuchen: 

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

oder 

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

Da var ein Json-String ist, können Sie ihn in Json parsen und auf seine Schlüssel zugreifen.

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

Dann greifen Sie auf den Json zu und erhalten den gewünschten Wert.

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

checkout diesen Link: https://Gist.github.com/justinhennessy/28e82c2ec05f9081786a

1
Ahmad sibai