фильтр)
ible есть несколько мест, где переменные могут быть определены: в инвентаре, в сборнике игр, в файлах переменных и т. Д. Кто-нибудь может объяснить следующие наблюдения, которые я сделал?
При определении логической переменной в инвентаре она ДОЛЖНА быть заглавной (т. Е. True / False), в противном случае (т. Е. True / false) она будет интерпретироваться не как Boolean, а как String.В любом из файлов в формате YAML (книгах воспроизведения, ролях и т. Д.) Значения True / False и true / false интерпретируются как логические значения.Например, я определил две переменные в инвентаре:
abc=false
xyz=False
И при отладке типа этих переменных внутри роли ...
- debug:
msg: "abc={{ abc | type_debug }} xyz={{ xyz | type_debug }}"
... тогдаabc
становитсяunicode
ноxyz
интерпретируется какbool
:
ok: [localhost] => {
"msg": "abc=unicode xyz=bool"
}
Тем не менее, при определении тех же переменных в playbook, вот так:
vars:
abc: false
xyz: False
... тогда обе переменные распознаются какbool
.
Я должен был понять это нелегко после того, как выполнил пьесу на производстве, запустив что-то, что не должно было выполняться из-за того, что в инвентаре установлена переменная «false» вместо «False». Таким образом, мне бы очень хотелось найти четкий ответ о том, как Ansible понимает логические значения и как это зависит от того, где и как определяется переменная. Должен ли я просто всегда использовать заглавные буквы True / False, чтобы быть в безопасности? Можно ли сказать, что логические значения в файлах YAML (с форматомkey: value
) нечувствительны к регистру, а в файлах свойств (с форматомkey=value
) они чувствительны к регистру? Любое более глубокое понимание будет высоко оценено.