Ansible, как проверить, что переменная не равна нулю? - PullRequest
2 голосов
/ 19 февраля 2020

У меня есть роль var I, которую я использую для добавления авторизованных ключей пользователю linux, поэтому foo может быть либо строкой с одним ключом s sh publi c, либо списком из нескольких публикаций c keys.

По умолчанию foo определено, но пусто, поэтому его можно протестировать, даже если пользователь не установил его, таким образом, никакие связанные задачи не выполняются, если он пуст.

Я обычно использовал бы when: foo или when: not foo, и это работало замечательно, за исключением того, что теперь ansible выдает предупреждение об амортизации, говорящее:

[ПРЕДУПРЕЖДЕНИЕ УСТАРЕВАНИЯ]: оценивая None как голое переменная, это поведение уберет go, и вам может понадобиться добавить | bool к выражению в будущем. Также см. Переключатель конфигурации CONDITIONAL_BARE_VARS. Эта функция будет удалена в версии 2.12. Предупреждения об устаревании можно отключить, установив deprecation_warnings = False в ansible .cfg.

Я пытался when: foo|bool, как упоминалось, но он возвращает false каждый раз, когда переменная заполняется строкой, которая не является да, да, да ...

foo is defined не работает, поскольку переменная определена

foo != "" не работает, поскольку переменная пуста, а не пустая строка

foo | длина> 0 не работает, потому что ноль не имеет длины

Я, честно говоря, вне идей здесь.

Ответы [ 2 ]

2 голосов
/ 19 февраля 2020

Вы ищете фильтр default , который имеет псевдоним d как в when: foo | d("") или даже when: foo | d(False)

Просто следите, default обычно только заменяет null или None, а не идею Pythonti c об истинности. Для этого вам нужно предоставить ему второй аргумент foo | default("something-else", true), который работает в случаях, когда foo равен либо null, либо "" (или, скорее всего, также 0)

0 голосов
/ 20 февраля 2020

Я думаю, что ответ прямо в ошибке. «оценка None как голой переменной» предполагает, что foo оценивается как None. Итак, вам нужно:

when: foo != None

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...