gpt4 book ai didi

ansible - 理解 Ansible 的条件表达式

转载 作者:行者123 更新时间:2023-12-01 00:49:57 25 4
gpt4 key购买 nike

我正在努力理解一些 ansible 行为,虽然我已经解决了手头的问题,但我很好奇是否有人能解释为什么 ansible 的行为方式如此。

我已经去除了任务的无关细节,并将其归结为 this gist .

将变量作为 bool 值传递时会出现问题,例如:

ansible-playbook -i ./local.hosts ./test.yml -e "x=true y=false z=false"

我可以在 when 中使用这些变量条款,它们按预期工作:
 - name: do_something_if_x_is_true
shell: echo kill all humans
when: x

对我来说,这似乎表明 x已作为 bool 值传入并解析。但是一旦 x用于复合条件, (x and y) - 一切都出错了,变量停止运行。

为了解决这个问题,我可以将 x 显式转换为 bool 值:
 - name: do_something_when_x_and_y_are_true
shell: echo finally robotic beings rule the world
when: (x|bool and y|bool)

太好了,一切都按我的预期工作。

我真的很想了解这种行为,谁能解释一下?

最佳答案

在命令行上传递的变量不通过 YAML 解析器,这通常是 bool 类型推断。如果没有那个,或者其他一些提示(比如 bool 过滤器),它们只是 Jinja 的字符串。 Jinja 是 Python 的一个非常薄的包装器,Python 说任何非空字符串都是 True。在下面的情况下,YAML 解析器进行 bool 类型推断,因为变量是内联定义的:

- hosts: all
vars:
x: false
y: false
tasks:
- name: do_something_if_x_is_true
shell: echo kill all humans
when: x or y
# humans are safe!

为了安全起见,如果你不知道你的变量来自哪里,使用 bool 过滤器可能是个好主意。

关于ansible - 理解 Ansible 的条件表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31836991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com