2015-09-25 14 views
8

Tôi đang cố gắng viết một Playbook Ansible chỉ biên dịch Nginx nếu nó chưa có và ở phiên bản hiện tại. Tuy nhiên, nó biên dịch mọi lúc không mong muốn.Điều kiện an toàn khi chuỗi không khớp với

Đây là những gì tôi có:

- 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 

Các kịch bản tất cả các công trình ngoài thực tế là nó chạy shell script mỗi khi biên dịch Nginx. Đầu ra gỡ lỗi cho nginxVersion là:

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

Theo tài liệu hướng dẫn Tôi đang đi đúng dòng, tôi đang thiếu những mẹo đơn giản nào?

Trả lời

23

Hãy thử:

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

hoặc

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

Vâng đó chỉ là quá dễ dàng. Tùy chọn thứ 2 hoạt động. –

0

Kể từ var là một chuỗi json bạn có thể phân tích nó để JSON và truy cập nó là chìa khóa.

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

Sau đó, truy cập vào json và nhận giá trị bạn muốn.

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

kiểm tra liên kết này: https://gist.github.com/justinhennessy/28e82c2ec05f9081786a

Các vấn đề liên quan