В Ansible есть несколько мест, где могут быть определены переменные: в инвентаре, в книжке, в переменных файлах и т.д. Может ли кто-нибудь объяснить следующие наблюдения, которые я сделал?
- При определении булевой переменной в инвентаре она ДОЛЖНА быть заглавной (т.е. True/False), в противном случае (т.е. True/false) она не будет интерпретироваться как логическая, а как строка.
- В любом из файлов формата YAML (playbooks, ролей и т.д.) Оба True/False и true/false интерпретируются как Booleans.
Например, я определил две переменные в инвентаре:
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
.
Я должен был осознать это с большим трудом после того, как исполнил пьесу на производстве, запустив что-то, что не должно было запускаться из-за того, что в инвентаре переменная установлена в "ложь" вместо "Ложь". Таким образом, мне бы очень хотелось найти четкий ответ о том, как Ansible понимает логические значения и как он зависит от того, где/как определяется переменная. Должен ли я просто использовать капитализированный True/False, чтобы быть в безопасности? Можно ли сказать, что логические значения в файлах YAML (с key: value
формата key: value
) не чувствительны к регистру, а в файлах свойств (с key=value
формата key=value
) они чувствительны к регистру? Любые более глубокие идеи будут высоко оценены.