可以检查作为变量提到的安装的磁盘空间

问题描述 投票:0回答:3

我是 ansible 的新手,目前正在开发一个游戏,该游戏将查看远程计算机的磁盘空间是否已达到 70% 的阈值。如果他们已经达到了,它应该抛出错误。

我在以下位置找到了一个很好的示例:使用ansible来管理磁盘空间

但在此示例中,安装名称是硬编码的。我的要求是动态地传递它们。所以我写了下面的代码,但似乎不起作用:

    name: test for available disk space
    assert:
    that: 
    - not {{ item.mount == '{{mountname}}' and ( item.size_available < 
    item.size_total - ( item.size_total|float * 0.7 ) ) }}
    with_items: '{{ansible_mounts}}'
    ignore_errors: yes
    register: disk_free

    name: Fail the play
    fail: msg="disk space has reached 70% threshold"
    when: disk_free|failed

这个玩法在我使用时有效:

item.mount == '/var/app'

有没有办法动态输入挂载名?我可以输入多个安装名称吗?

我在 rhel 上使用 ansible 2.3

提前致谢:)

ansible
3个回答
12
投票

试试这个:

name: Ensure that free space on {{ mountname }} is grater than 30%
assert:
  that: mount.size_available > mount.size_total|float * 0.3
  msg: disk space has reached 70% threshold
vars:
  mount: "{{ ansible_mounts | selectattr('mount','equalto',mountname) | list | first }}"
  1. that
    是一个原始的 Jinja2 表达式,不要在其中使用大括号。

  2. 如果

    fail
    可能失败并显示消息,为什么要使用单独的
    assert
    任务?


8
投票

对于那些无法使用

selectattr
(像我一样)的人,这里是第一个答案的变体,使用
when
with_items
选择要检查的安装点。

name: "Ensure that free space on {{ mountname }} is greater than 30%"
assert:
  that: item.size_available > item.size_total|float * 0.3
  msg: 'disk space has reached 70% threshold'
when: item.mount == mountname
with_items: '{{ ansible_mounts }}'

注意:为了能够使用变量

{{ ansible_mounts }}
,您需要将
gather_facts
转为
yes
,可以限制为
gather_subset=!all,hardware


5
投票

我正在运行 Ansible 2.5,并且能够通过添加 with_items 来获得

Konstantin Suvorov's
解决方案,以便与轻微的 mod 一起使用。示例代码如下:

- name: Ensure that free space on the tested volume is greater than 15%
  assert:
    that:
      - mount.size_available > mount.size_total|float * 0.15
    msg: Disk space has reached 85% threshold
  vars:
    mount: "{{ ansible_mounts | selectattr('mount','equalto',item.mount) | list | first }}"
  with_items:
    - "{{ ansible_mounts }}"
© www.soinside.com 2019 - 2024. All rights reserved.