Требования 2 и 3 являются взаимоисключающими: вы можете заранее создать переменную (например, до выполнения ответного модуля) в задаче, но она будет доступна только для этой задачи (см. Иллюстрацию в моей задаче спасения).пример ниже).
default
фильтр, как вы использовали его, позволит вам обрабатывать значение по умолчанию для конкретной неустановленной переменной.Если вы хотите опустить более сложную строку, вам нужно будет окружить ее выражением if
jinja2, используя соответствующий тест.
Это то, что я бы попробовал в вашем случае (не полностью протестирован, потому что я не проверяюaz
не установлено и, следовательно, нет базы данных / запросов для запуска)
- name: Store my command in a var
set_fact:
my_command: >-
az sql db list-deleted
--resource-group "{{ DATABASE_LISTDELETED_RESOURCEGROUP }}"
--server "{{ DATABASE_LISTDELETED_SQLSERVER }}"
{% if DATABASE_LISTDELETED_QUERY is defined %}
--query "{{ DATABASE_LISTDELETED_QUERY }}"
{% if %}
--output json
- block:
- name: >
LISTDELETED {{ DATABASE_LISTDELETED_DATABASE }} databases
FROM {{ DATABASE_LISTDELETED_SQLSERVER }} sqlserver
command: "{{ my_command }}"
register: DATABASE_LISTDELETED_RESULT
rescue:
- name: debug failed az command
var:
msg: |
There as been an error running the following command:
{{ my_command }}
The reported error was:
{{ DATABASE_LISTDELETED_RESULT.stderr }}
debug:
msg: "{{ msg.split('\n') }}"
Примечания:
set_fact
будет хранить упомянутоепеременная как факт для текущего хоста.Затем вы можете повторно использовать эту переменную для того же хоста в других задачах. - Я использовал
block
с rescue
, чтобы проиллюстрировать условную отладку.Измените по своему усмотрению. - Знак
-
на сложенном блоке yaml - это индикатор разброса полосы , чтобы убедиться, что новые строки в коде, введенном для удобства чтения, не мешают построенномукоманда. msg.split('\n')
в задаче отладки просто превращает строку многострочного сообщения в список для удобства чтения с экрана. - Если переменная
DATABASE_LISTDELETED_QUERY
может быть установлена с помощьюпустая строка, и вы также хотите обработать этот случай, чтобы пропустить параметр --query
, вы можете изменить тест на DATABASE_LISTDELETED_QUERY | default() | length > 0