【问题标题】:ternary operator in ansibleansible中的三元运算符
【发布时间】:2020-07-20 11:56:24
【问题描述】:

我的任务是创建类型为 [rw, dp,values] 的卷

我有一个名为 type 的参数,它有 3 个值 [rw,dp,values]。

使用三元运算符类型:“{{ (item|int

int

上述逻辑适用于 2 个值 rw 和 dp。

如何在三元运算符中使用 3 个值。我想创建 7 卷类型“rw”的 21 卷,

7 卷“dp”和 7 卷“值”。

"{{ (item| int这不符合我的要求。

【问题讨论】:

  • “这不符合我的要求。” => 这实际上不像per documentation 那样工作。当 item 存在且小于 7 时,您的模板表达式实际上将返回 'rw',当 item 存在且不小于 7 时返回 'dp',当 item 为空时返回 'value'。此外,item | int >= 7 and item | int < 14 时没有任何地方可以测试案例。
  • 我尝试了这个逻辑来检查项目 | int >= 7 和项目 | int

标签: ansible conditional-operator


【解决方案1】:

您可以使用 jinja2 模板来解决,我不太确定您正在迭代的项目的结构如何,这应该可以:

  - set_fact:
      volume_mapping: |
        {%- set mapping = [] -%}
        {%- set volumes = range(0,22) -%}
        {%- for volume in volumes -%}
        {%- set volume_type = {0<=volume|int<8: "rw", 7<volume|int<15: "dp", 14<volume|int<=21: "values"} -%}
        {{ mapping.append({"volume": volume, "type": volume_type[True]}) }}
        {%- endfor -%}
        {{ mapping }}

volume_mapping:

[
    {
        "type": "rw",
        "volume": 0
    },
    {
        "type": "rw",
        "volume": 1
    },
    {
        "type": "rw",
        "volume": 2
    },
    {
        "type": "rw",
        "volume": 3
    },
    {
        "type": "rw",
        "volume": 4
    },
    {
        "type": "rw",
        "volume": 5
    },
    {
        "type": "rw",
        "volume": 6
    },
    {
        "type": "rw",
        "volume": 7
    },
    {
        "type": "dp",
        "volume": 8
    },
    {
        "type": "dp",
        "volume": 9
    },
    {
        "type": "dp",
        "volume": 10
    },
    {
        "type": "dp",
        "volume": 11
    },
    {
        "type": "dp",
        "volume": 12
    },
    {
        "type": "dp",
        "volume": 13
    },
    {
        "type": "dp",
        "volume": 14
    },
    {
        "type": "values",
        "volume": 15
    },
    {
        "type": "values",
        "volume": 16
    },
    {
        "type": "values",
        "volume": 17
    },
    {
        "type": "values",
        "volume": 18
    },
    {
        "type": "values",
        "volume": 19
    },
    {
        "type": "values",
        "volume": 20
    },
    {
        "type": "values",
        "volume": 21
    }
]

您可以将任何值附加到mapping,然后将其与with_items 一起使用:

"{{ item['type'] }}"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-06
    • 1970-01-01
    • 2021-08-01
    • 2018-09-10
    相关资源
    最近更新 更多