如何在 ansible 中使用断言模块比较整数



我正在尝试检查引导文件系统空间,如果它超过 100 mb,则使用 ansible 断言模块传递制作条件。但是条件检查无法正常工作

我尝试将字符串值转换为整数并进行比较,但在条件检查中仍然存在一些问题

- hosts: prod_gateways
  gather_facts: True
  become: True
  tasks:
    - name: Checking space
      assert:
        that:
            - "[[ {{item.size_available|int}} > 104857600 ]]"
      when: item.mount == "/boot"
      with_items: "{{ ansible_mounts }}"
      register: disk_free
    - name: Fail when disk space needs attention
      fail:
        msg: "pda_output=[[ boot space is less then 100mb ]]"
      when: disk_free is failed

预期成果: 如果我将104857600更改为 1048576000(1000 mb(,条件应该失败,因为可用空间为 873 mb。但条件仍然过去了

实际结果:

  TASK [Checking space] *******************************************************************************************************************
skipping: [140.83.115.208] => (item={u'block_used': 2022411, u'uuid': u'ab881282-6114-4296-b1ae-12a21e40cbdb', u'size_total': 21003628544, u'block_total': 5127839, u'mount': u'/', u'block_available': 3105428, u'size_available': 12719833088, u'fstype': u'ext4', u'inode_total': 1310720, u'inode_available': 1134075, u'device': u'/dev/mapper/vg_gateway-lv_root', u'inode_used': 176645, u'block_size': 4096, u'options': u'rw'})
ok: [140.83.115.208] => (item={u'block_used': 40877, u'uuid': u'91564fc4-0879-4459-a3fe-ce6686f228f2', u'size_total': 1040015360, u'block_total': 253910, u'mount': u'/boot', u'block_available': 213033, u'size_available': 872583168, u'fstype': u'ext4', u'inode_total': 65536, u'inode_available': 65481, u'device': u'/dev/md0', u'inode_used': 55, u'block_size': 4096, u'options': u'rw'}) => {
    "changed": false,
    "item": {
        "block_available": 213033,
        "block_size": 4096,
        "block_total": 253910,
        "block_used": 40877,
        "device": "/dev/md0",
        "fstype": "ext4",
        "inode_available": 65481,
        "inode_total": 65536,
        "inode_used": 55,
        "mount": "/boot",
        "options": "rw",
        "size_available": 872583168,
        "size_total": 1040015360,
        "uuid": "91564fc4-0879-4459-a3fe-ce6686f228f2"
    },
    "msg": "All assertions passed"
}
skipping: [140.83.115.208] => (item={u'block_used': 7436106, u'uuid': u'1824f3b5-7c7f-48dc-88fc-da40e02d72df', u'size_total': 33686405120, u'block_total': 8224220, u'mount': u'/home', u'block_available': 788114, u'size_available': 3228114944, u'fstype': u'ext4', u'inode_total': 2097152, u'inode_available': 2093635, u'device': u'/dev/mapper/vg_gateway-lv_home', u'inode_used': 3517, u'block_size': 4096, u'options': u'rw'})
skipping: [140.83.115.208] => (item={u'block_used': 68527765, u'uuid': u'4cb2e3ce-ca82-40b7-9a32-865532612a1f', u'size_total': 352868540416, u'block_total': 86149546, u'mount': u'/orahome', u'block_available': 17621781, u'size_available': 72178814976, u'fstype': u'ext4', u'inode_total': 21889024, u'inode_available': 21472344, u'device': u'/dev/mapper/vg_gateway-lv_orahome', u'inode_used': 416680, u'block_size': 4096, u'options': u'rw'})
skipping: [140.83.115.208] => (item={u'block_used': 7674455, u'uuid': u'201caae6-e6ba-467e-bda9-7419c7268223', u'size_total': 79132893184, u'block_total': 19319554, u'mount': u'/stage', u'block_available': 11645099, u'size_available': 47698325504, u'fstype': u'ext4', u'inode_total': 4915200, u'inode_available': 4911867, u'device': u'/dev/mapper/vg_gateway-lv_stage', u'inode_used': 3333, u'block_size': 4096, u'options': u'rw'})
skipping: [140.83.115.208] => (item={u'block_used': 5176863, u'uuid': u'4a53a162-9b70-4511-9461-26330a82c465', u'size_total': 79132893184, u'block_total': 19319554, u'mount': u'/var', u'block_available': 14142691, u'size_available': 57928462336, u'fstype': u'ext4', u'inode_total': 4915200, u'inode_available': 4873288, u'device': u'/dev/mapper/vg_gateway-lv_var', u'inode_used': 41912, u'block_size': 4096, u'options': u'rw'})
skipping: [140.83.115.208] => (item={u'block_used': 27504630, u'uuid': u'97229ed4-108c-44eb-bef8-e1afd61c30c2', u'size_total': 285227425792, u'block_total': 69635602, u'mount': u'/orabackup', u'block_available': 42130972, u'size_available': 172568461312, u'fstype': u'ext4', u'inode_total': 17694720, u'inode_available': 17694608, u'device': u'/dev/mapper/vg_backup-lv_orabackup', u'inode_used': 112, u'block_size': 4096, u'options': u'rw'})
TASK [Fail when disk space needs attention] *********************************************************************************************
skipping: [140.83.115.208]

您尝试使用[[...]]语法是什么? 你需要去掉它和 Jinja 模板标记,它会给你:

- name: Checking space
  assert:
    that:
        - item.size_available|int > 104857600
  when: item.mount == "/boot"
  with_items: "{{ ansible_mounts }}"
  register: disk_free

您可以在文档中找到其他示例。

它现在总是通过的原因是你正在布尔上下文中评估一个非空列表,这将永远是"true"的。您实际上拥有:

assert:
  that: "[[]]"

。这是一个包含单个项目的列表(在您的示例中,内部列表可能包含单个布尔值 - 您的x > y比较的结果 - 但这对行为没有任何影响(。

最新更新