У меня есть следующие пьесы:ошибка с моей анзибль пьес «когда» состояние
- 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"
Похоже, что ваша задача * debug * не работает, что происходит * перед * задачей с ошибкой 'when' condition? Кроме того, что, если вы распечатываете значение 'packxx_apk_version', а не' packxx_apk_version.stdout'? – larsks
да, поэтому я попытаюсь просто напечатать имя переменной, vs. variablename + "stdout" – Happydevdays
также вам не нужно '' web 'в group_names'. Просто используйте '- hosts: web' – shaps