Как запустить задачу, когда переменная не определена в ansible?
Я ищу способ выполнения задачи, когда ansible переменная не регистры / неопределенный например
-- name: some task
command: sed -n '5p' "{{app.dirs.includes}}/BUILD.info" | awk '{print }'
when: (! deployed_revision) AND ( !deployed_revision.stdout )
register: deployed_revision
3 ответов:
С ansible docs: Если требуемая переменная не была установлена, вы можете пропустить или не выполнить определенный тест Jinja2. Например:
tasks: - shell: echo "I've got '{{ foo }}' and am not afraid to use it!" when: foo is defined - fail: msg="Bailing out. this play requires 'bar'" when: bar is not definedТак что в вашем случае
when: deployed_revision is not definedдолжно работать
в соответствии с последней версией Ansible 2.5, чтобы проверить, определена ли переменная, и в зависимости от этого, если вы хотите запустить какую-либо задачу, используйте
undefinedключевое слово.tasks: - shell: echo "I've got '{{ foo }}' and am not afraid to use it!" when: foo is defined - fail: msg="Bailing out. this play requires 'bar'" when: bar is undefined
строго указано, что вы должны проверить все следующее: определено, не пусто и не нет.
для" нормальных " переменных это имеет значение, если они определены и установлены или не установлены. Смотрите
fooиbarв примере ниже. Оба определены, но толькоfooустановлен.С другой стороны, зарегистрированные переменные устанавливаются в результат выполнения команды и варьируются от модуля к модулю. Это в основном структуры json. Вероятно, вы должны проверить подэлемент, который вы интересуюсь. Смотрите
xyzиxyz.msgв примере ниже:cat > test.yml <<EOF - hosts: 127.0.0.1 vars: foo: "" # foo is defined and foo == '' and foo != None bar: # bar is defined and bar != '' and bar == None tasks: - debug: msg : "" register: xyz # xyz is defined and xyz != '' and xyz != None # xyz.msg is defined and xyz.msg == '' and xyz.msg != None - debug: msg: "foo is defined and foo == '' and foo != None" when: foo is defined and foo == '' and foo != None - debug: msg: "bar is defined and bar != '' and bar == None" when: bar is defined and bar != '' and bar == None - debug: msg: "xyz is defined and xyz != '' and xyz != None" when: xyz is defined and xyz != '' and xyz != None - debug: msg: "{{ xyz }}" - debug: msg: "xyz.msg is defined and xyz.msg == '' and xyz.msg != None" when: xyz.msg is defined and xyz.msg == '' and xyz.msg != None - debug: msg: "{{ xyz.msg }}" EOF ansible-playbook -v test.yml
Comments