打印可用磁盘空间并发送电子邮件通知

时间:2017-07-07 06:00:12

标签: ansible

我有一个Playbook来检查硬盘可用空间,如果达到阈值限制则发送电子邮件。以下是我的游戏

---
- hosts: Test
  tasks:
    - name: Ensuring that free space on '/' is grater than 30%
      assert:
    that:
          - not {{ item.mount == '/' and ( item.size_available < item.size_total - ( item.size_total|float * 0.3 ) ) }}
      with_items: '{{ ansible_mounts }}'
      ignore_errors: yes
      register: disk_free
    -  debug: var=disk_free

    - name: Notifying the IT admin about the disk usage
      mail:
    host="smtp.myserver.com"
        port="2525"
        username="my_username"
        password="my_password"
        from="my_email"
        to="to_email"
        subject='HDD Space Low'
        body='{{ inventory_hostname }} is running low on disk space. Currently {{ disk_free.results['item']['size_available'] }}MB available.'

以下是我运行上述播放时收到的调试输出:

ok: [Test] => {
    "disk_free": {
        "changed": false, 
        "failed": true, 
        "msg": "One or more items failed", 
        "results": [
            {
                "_ansible_item_result": true, 
                "_ansible_no_log": false, 
                "_ansible_verbose_always": true, 
                "assertion": "not True", 
                "evaluated_to": false, 
                "failed": true, 
                "item": {
                    "device": "/dev/mapper/centos-root", 
                    "fstype": "xfs", 
                    "mount": "/", 
                    "options": "rw,seclabel,relatime,attr2,inode64,noquota", 
                    "size_available": 18377105408, 
                    "size_total": 19828572160, 
                    "uuid": "d700725b-6937-4e56-8e20-2039e787f055"
                }

现在,当我在通知电子邮件正文中访问可验证的结果时,它会失败。

  

失败! =&GT; {“failed”:true,“msg”:“字段'args'的值无效,似乎包含一个未定义的变量。错误是:'list object'没有属性

有人可以帮我在外发邮件中打印'size_available'值吗?

1 个答案:

答案 0 :(得分:0)

你得到:

  

&#39;列出对象&#39;没有属性

如果查看调试任务的结果,您会注意到disk_free.results是一个列表(因为您在注册时使用了循环),因此它不包含item。< / p>

对于单个值,您可以引用disk_free.results[0]['item']['size_available'],但我想您应该遍历列表。