Ansibile如何检查变量值是否有三个选项,三元运算符仅适用于两个选项

Ansibile如何检查变量值是否有三个选项,三元运算符仅适用于两个选项

当挂载点为 /dev/backboot >70% 时设置为“高”,如果 < 70% 设置为“正常”,如果根本不存在这样的挂载点,则设置为“不可用”

下面的示例可以使用两个选项,但我需要三个选项,你能建议一下吗

  • 名称:获取用法
    命令:df -k | grep -i /dev/backboot | grep -i /dev/backboot | grep -i /dev/backboot | grep -i /dev/backboot | awk '{print $5}'
    注册:

    此处使用已注册 vlaue 'usage.stdout' 的输出为 67% 作为示例

  • name: 设置值
    set_fact:
    mspace: "{{ (usage.stdout | int < 80) | ternary('Normal','High') }}"

答案1

转换67%为 int 不会产生67,它会产生,0因为%,您需要将其从输出中删除。

至于你的问题,你可以设置一个条件来将变量设置为not availableif /dev/backboot 不存在:

- stat:
    path: /dev/backboot
  register: backboot

- set_fact:
    mspace: 'not available'
  when: backboot.stat.exists != true

- block:
    - command: df -k | grep -i /dev/backboot | awk '{print $5}'
      register: usage

    - set_fact:
        mspace: "{{ (usage.stdout | int < 80) | ternary('Normal','High') }}"
  when: backboot.stat.exists == true

答案2

在 Ansible 2.8 中,有第三个选项为 null。有点惊讶的是,当安装点不存在时,setfact 中没有错误,尽管我还没有尝试过。

另一种选择是添加第二个 setfact 并在现有 setfact 和新的 setfact 中添加一个 when 来检查安装点的 Ansible 事实 - 原始设置会在 mspace 存在时设置 mspace,而另一个则在不存在时设置。像这样的东西(可能会略有变化,具体取决于 ansible 的版本和您运行它的系统)。

set_fact:mspace:“不可用”时:(ansible_devices.backboot未定义)

并添加到原始 setfact

当:(定义了ansible_devices.backboot)

如果您有可用的事实,那么 ansible 可以使用这些事实,而无需发出 df 命令。

相关内容