2015-09-25 6 views
8

Я пытаюсь написать Ansible playbook, который только компилирует Nginx, если он еще не присутствует и в текущей версии. Однако он компилируется каждый раз, что нежелательно.Необязательное условие, когда строка не соответствует

Это то, что у меня есть:

- 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 

Сценарий все работает за исключением того, что он запускает сценарий оболочки каждый раз, когда для компиляции Nginx. Выход для отладки 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": [] 
     } 
    } 
} 

Согласно документации, которую я нахожусь на правильном пути, что простой трюк мне не хватает?

ответ

23

Try:

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

или

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

Ну это было слишком просто. Второй вариант сработал. –

0

Поскольку переменная является JSON строка, которую вы можете разобрать его JSon и доступ к его ключи.

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

Затем войдите в json и получите требуемое значение.

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

фотография ссылка: https://gist.github.com/justinhennessy/28e82c2ec05f9081786a

Смежные вопросы