2016-04-12 3 views
1

У меня есть следующие пьесы:ошибка с моей анзибль пьес «когда» состояние

- name: packagexx version check 
    shell: apk version packagexx | awk 'NR>1{$1=$1;print}' 
    when: "'web' in group_names" 
    register: packxx_apk_version 
    changed_when: False 
    - debug: msg="package_version_check {{inventory_hostname}} {{packxx_apk_version.stdout}}" 
    when: "'web' in group_names" 
    - name: packagexx individual files check 
    shell: apk audit /etc/packagexx/ | grep "^U" | grep -v "kamcc" 
    when : "'web' in group_names and '=' in packxx_apk_version.stdout" 
    register: ind_file_apk_version 
    failed_when: False 
    changed_when: False 
    - debug: msg="individual_files_check {{inventory_hostname}} packagexx {{ind_file_apk_version.stdout}}" 
    when: "'web' in group_names" 

Вторая игра только предполагается работать, когда на выходе из первой игры включает в себя знак «=». но сейчас он работает, когда результат выглядит следующим образом:

test-web:~# apk version packagexx 
    Installed:        Available: 
    packagexx-1.2.0-r3      < 1.2.1-r1 

И в конечном счете, я в конечном итоге с этой ошибкой, когда Playbook работает:

TASK [debug] ******************************************************************* 
fatal: [test-web]: FAILED! => {"failed": true, "msg": "'dict object' has no attribute 'stdout'"} 
fatal: [test2-web]: FAILED! => {"failed": true, "msg": "'dict object' has no attribute 'stdout'"} 

И это имеет смысл, потому что команда в вторая игра не должна возвращать что-либо в случаях, когда пакет устарел.

Я не вижу, где моя ошибка. Какие-либо предложения?

EDIT 1

Так что на более тестирования, вот что я нашел. Когда я запускаю эту книгу на сервере, у которого есть обновленный пакет (он же «=» на выходе), он работает отлично. Когда я запускаю его в поле, где пакет устарел (нет «=» на выходе), он возвращает ошибку.

Ошибка/отсутствующая деталь была условием последней отладочной инструкции. Ему также нужно проверить «=». По крайней мере, это то, что я сделал, и, похоже, это работает.

Так что:

- debug: msg="individual_files_check {{inventory_hostname}} packagexx {{ind_file_apk_version.stdout}}" 
    when: "'web' in group_names" 

было изменено на:

- debug: msg="individual_files_check {{inventory_hostname}} packagexx {{ind_file_apk_version.stdout}}" 
    when: "'web' in group_names and '=' in packxx_apk_version.stdout" 
+0

Похоже, что ваша задача * debug * не работает, что происходит * перед * задачей с ошибкой 'when' condition? Кроме того, что, если вы распечатываете значение 'packxx_apk_version', а не' packxx_apk_version.stdout'? – larsks

+0

да, поэтому я попытаюсь просто напечатать имя переменной, vs. variablename + "stdout" – Happydevdays

+0

также вам не нужно '' web 'в group_names'. Просто используйте '- hosts: web' – shaps

ответ

0

мне нужно добавить условие к оператору отладки только печать, когда существует выход, например, так:

- debug: msg="individual_files_check {{inventory_hostname}} packagexx {{ind_file_apk_version.stdout}}" 
    when: "'web' in group_names and '=' in packxx_apk_version.stdout" 
Смежные вопросы