如何在ansible中使用assert模块比较整数?

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

我正在尝试检查启动文件系统空间,如果它超过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]
linux ansible
1个回答
0
投票

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

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

你可以找到更多的examples in the documentation

它现在总是正在传递的原因是你在布尔上下文中评估一个非空列表,它总是“真”。你有效地拥有:

assert:
  that: "[[]]"

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

© www.soinside.com 2019 - 2024. All rights reserved.