【问题标题】:Define variable in Ansible according complex condition根据复杂条件在 Ansible 中定义变量
【发布时间】:2021-01-11 03:27:52
【问题描述】:

我需要根据几个条件在ansible中定义一个变量

我知道语法

VARtodefined: "{{ 'Value1' if condition1 else 'Value2' }}"

我知道我使用以下其他语法得到相同的结果

VARtodefined: "{% if condition1 %}'Value1'{% else %}'Value2'{% endif %}"

但我没有找到多个条件的正确语法(if-elsif-elsif-else)

例如我试过这个没有成功

VARtodefined: "{% if condition1 %}'Value1'{% elsif condition2 %}'Value2'{% else %}'Value3'{% endif %}"

如果尝试过使用elif, elseif 的变体,但也没有成功

在我的具体情况下,条件 1 是 OtherVar==XXX 和条件 2 OtherVar==YYY(所以在这两种情况下,它都取决于 OtherVar 的值)

所以我正在为此寻找可行的解决方案

VARtodefined: "{% if OtherVar==XXX %}'Value1'{% elsif  OtherVar==YYY%}'Value2'{% else %}'Value3'{% endif %}"

如果找到了实现我的目标的解决方法,但我有兴趣了解未来项目的正确语法

【问题讨论】:

    标签: if-statement syntax ansible yaml conditional-statements


    【解决方案1】:

    这是预期的语法:if - elif/else - endif

    请查看并尝试下面的示例 PB:

    ---
    - hosts: localhost
      gather_facts: false
      vars:
        X: 2
    
      tasks:
      - set_fact:
          VARtodefined: "{% if X == 1 %}Value1{% elif X == 2 %}Value2{% else %}Value3{% endif %}"
        
      - debug:
          var: VARtodefined
    

    【讨论】:

      【解决方案2】:

      正确语法的示例如下。任务

          - debug:
              msg: "{% if item=='XXX' %}Value1
                    {% elif  item=='YYY' %}Value2
                    {% else %}Value3
                    {% endif %}"
            loop: [XXX, ZZZ]
      

      给予

        msg: 'Value1 '
        msg: 'Value3 '
      

      一个更简单的解决方案是将逻辑放入字典中。例如

      conditions:
        XXX: Value1
        YYY: Value2
        default: Value3
      

      然后,使用它

        - set_fact:
            VARtodefined: "{{ conditions[OtherVar]|
                              default(conditions.default) }}"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-02-28
        • 2022-12-08
        • 2020-11-03
        • 1970-01-01
        • 2020-03-23
        • 1970-01-01
        相关资源
        最近更新 更多