У меня есть книга с запросом ниже SQL:
- name: "Search for Front"
command: >
mysql --user="{{ DBUSER }}" --password="{{ DBPASS }}" deployment
--host=localhost --batch --skip-column-names
--execute="SELECT * FROM mytable WHERE num LIKE '{{ Number }}'"
register: result_front
when: Layer == 'Front'
- name: "Search for Back"
command: >
mysql --user="{{ DBUSER }}" --password="{{ DBPASS }}" deployment
--host=localhost --batch --skip-column-names
--execute="SELECT * FROM mytable WHERE num LIKE '{{ Number }}'"
register: result_back
when: Layer == 'Back'
Я запускаю эту книгу, как показано ниже:
ansible-playbook test.yml -e "Layer=Front" -e "Number=1234" -e "DBUSER=root" -e "DBPASS=password"
Обратите внимание, что одновременно может быть только один из два sql запроса будут выполняться в зависимости от переданного параметра "Layer".
I wi sh для set_fact "reqnum" для строки "Deploy", если какой-либо из указанных выше двух SQL запросов возвращает найденные записи ,
Вот что я сделал:
- set_fact:
reqnum: "Deploy"
when: result_back.stdout_lines | default([]) | length != "" and result_back.skipped == False
- set_fact:
reqnum: "Deploy"
when: result_front.stdout_lines | default([]) | length != "" and result_front.skipped == False
Однако я получаю следующую ошибку:
TASK [set_fact] ****************************************************************
fatal: [localhost]: FAILED! => {"msg": "The conditional check 'result_back.stdout_lines == \"\" and result_back.skipped == False' failed. The error was: error while evaluating conditional (result_back.stdout_lines == \"\" and result_back.skipped == False): 'dict object' has no attribute 'stdout_lines'\n\nThe error appears to be in '/app/deploy.yml': line 149, column 6, but may\nbe elsewhere in the file depending on the exact syntax problem.\n\nThe offending line appears to be:\n\n\n - set_fact:\n ^ here\n"}
Как правильно проверить такие условия, когда один переменная пропускается, а другая получает сбой или успех в результате?