在Ansible中检查字符串是否等于和三元运算符

Héc*_*tor 12 jinja2 ansible

在我的剧本中,我有这个:

#More things
- include: deploy_new.yml
  vars:
    service_type: "{{ expose_service == 'true' | ternary('NodePort', 'ClusterIP') }}"
    when: service_up|failed
Run Code Online (Sandbox Code Playgroud)

如果expose_service是,我想service_type设置为"NodePort",否则设置为"ClusterIP".

但是,在所有情况下service_type都设置为False.

我究竟做错了什么?

Héc*_*tor 31

解决了!

service_type: "{{ 'NodePort' if expose_service == 'true' else 'ClusterIP' }}"
Run Code Online (Sandbox Code Playgroud)

  • 在我看来,这个答案并没有回答有关三元的问题。这更多的是一种解决方法 (3认同)

tec*_*raf 17

在您的示例中,您将三元过滤器应用于'true'字符串.实际上,您将比较expose_service字符串 的值'NodePort'并始终获得false结果.

您需要将相等运算符子句括在括号中:

 - include: deploy_new.yml
   vars:
     service_type: "{{ (expose_service == true) | ternary('NodePort', 'ClusterIP') }}"
   when: service_up|failed
Run Code Online (Sandbox Code Playgroud)

在这个答案中解决了另外两点:

  • 你使用字符串'true'而不是布尔值
  • when指令是在错误的缩进级别(你有效地传递被调用的变量when)