Я ищу способ выполнить задачу, когда доступная переменная не регистрируется / не определена, например
-- name: some task
command: sed -n '5p' "{{app.dirs.includes}}/BUILD.info" | awk '{print $2}'
when: (! deployed_revision) AND ( !deployed_revision.stdout )
register: deployed_revision
ansible
ansible-playbook
sakhunzai
источник
источник
when: deployed_revision is not defined or deployed_revision.stdout is not defined or deployed_revision.stdout == ''
when: item.sudo is defined and item.sudo == true
when: foo is defined
(например, это не работает:when: {{ foo }} is defined
when: ({{ foo }} in undefined)
{{ foo }}
). Это не из-за Ansible, но Yaml интерпретирует это как объект. Если вам нужно начать с расширения переменной, просто заключите все это в двойные кавычки (например,"{{ foo }}"
), чтобы Yaml увидел ее как строку и передал как есть в Ansible.Согласно последней версии Ansible 2.5, чтобы проверить, определена ли переменная, и в зависимости от этого, хотите ли вы запускать какую-либо задачу, используйте
undefined
ключевое слово.Документация Ansible
источник
Строго говоря, вы должны проверить все следующее: определено, не пусто И не нет.
Для "обычных" переменных имеет значение, определены ли они и установлены или нет. См.
foo
Иbar
в примере ниже. Оба определены, но толькоfoo
установлено.С другой стороны, зарегистрированные переменные устанавливаются в результате выполнения команды и варьируются от модуля к модулю. В основном это json-структуры. Вероятно, вы должны проверить интересующий вас подэлемент. См.
xyz
Иxyz.msg
в примере ниже:источник