- 
      
- 
        Save alexanderadam/5661307ef6ad1f4f42fa954524104219 to your computer and use it in GitHub Desktop. 
| * Shows a message while asserting like: | |
| ok: [host] => { | |
| "msg": "disk usage 4.2B of total 20.0GB (21.0%) (should exceed limit 90.0%)" | |
| } | |
| * Note this only looks at first mount point on current node | |
| * Fails if disk is near-full | |
| * Last step pushes to a push-based monitoring service, which will alert us if it doesn't get there after some time | |
| * Need to setup a variable `disk_limit`, which is the max acceptable usage ratio, e.g. set it to 0.8 if you want to keep disks within 80% of max size | 
| - set_fact: | |
| mount: "{{ ansible_mounts | first }}" | |
| - set_fact: disk_usage="{{ mount.size_total - mount.size_available }}" | |
| - set_fact: disk_usage_ratio="{{ disk_usage|float / mount.size_total }}" | |
| - set_fact: disk_usage_s="{{ (disk_usage|float / 1000000000) | round(1, 'common') }}GB" | |
| - set_fact: disk_total_s="{{ (mount.size_total / 1000000000) | round(1, 'common') }}GB" | |
| - set_fact: disk_usage_ratio_s="{{ 100 * (disk_usage_ratio|float) | round(1, 'common') }}%" | |
| - set_fact: disk_limit_ratio_s="{{ (100 * disk_limit|float) |round }}%" | |
| - debug: | |
| msg: "disk usage {{ disk_usage_s }} of total {{ disk_total_s }} ({{ disk_usage_ratio_s }}) (should be within limit {{ disk_limit_ratio_s }})" | |
| - name: | |
| assert: | |
| that: ( (disk_usage|float)/mount.size_total ) < disk_limit|float | |
| msg: "Disk usage {{ disk_usage_ratio_s }} exceeds {{ disk_limit_ratio_s }}" | |
| tags: disk | |
| any_errors_fatal: true | |
| - name: indicate disks okay to statuscake | |
| local_action: command /usr/bin/wget 'https://push.statuscake.com/?PK=abcdefghi&TestID=123456&time=0' | |
| run_once: true | 
Nice, thank you 👍
Hello,
I would like to share with you another way to perform this operation (only on Linux):
tasks: - name: Check /tmp freespace shell: df /tmp --output\=avail | tail -1 register: tmp_freespace - fail: msg: /tmp does not have the minimum space required to continue (3Gb requested). when: tmp_freespace.stdout|float is lt 3000000Best regards,
Hi to all, thnaks for the hint but this will not work on old version of df command: no --ouptut option present.
df -m /opt --output=\avail df: unrecognized option '--output=avail' Try 'df --help' for more information. 
 df --version df (GNU coreutils) 8.4
How can I include other mount points in this check say=> /, /boot, /var and /tmp. since what you have checks only for the first mount point. Just new to this and trying to wrap my head round it. I ll appreciate your response. Thanks
- 
set_fact: 
 mount: "{{ ansible_mounts | first }}"
- 
set_fact: disk_usage="{{ mount.size_total - mount.size_available }}" 
- 
set_fact: disk_usage_ratio="{{ disk_usage|float / mount.size_total }}" 
- 
set_fact: disk_usage_s="{{ (disk_usage|float / 1000000000) | round(1, 'common') }}GB" 
- 
set_fact: disk_total_s="{{ (mount.size_total / 1000000000) | round(1, 'common') }}GB" 
- 
set_fact: disk_usage_ratio_s="{{ 100 * (disk_usage_ratio|float) | round(1, 'common') }}%" 
- 
set_fact: disk_limit_ratio_s="{{ (100 * disk_limit|float) |round }}%" 
- 
debug: 
 msg: "disk usage {{ disk_usage_s }} of total {{ disk_total_s }} ({{ disk_usage_ratio_s }}) (should be within limit {{ disk_limit_ratio_s }})"
- 
name: 
 assert:
 that: ( (disk_usage|float)/mount.size_total ) < disk_limit|float
 msg: "Disk usage {{ disk_usage_ratio_s }} exceeds {{ disk_limit_ratio_s }}"
 tags: disk
 any_errors_fatal: true
- 
name: indicate disks okay to statuscake 
 local_action: command /usr/bin/wget 'https://push.statuscake.com/?PK=abcdefghi&TestID=123456&time=0'
 run_once: true
df --output=avail /tmp
I found this helpful to determine the size of /run on some hosts I manage, here's how I adapted this:
- name: Get size of /run
  shell: "df --block-size 1m /run --output=size | tail -1"
  register: shell_df_result
- name: Set facts
  set_fact:
    run_tmpfs_size_mb: "{{ shell_df_result.stdout | int }}"
- debug: var=run_tmpfs_size_mbTo include mount point, deice and available space I used this task ( what do you think?):
---
- name: Check VM Infrastrutturali
  hosts: all
  vars:
     mount_all: []
  tasks:
    # Get List of device
    - set_fact:
        mount_all: "{{ mount_all + [{'host':ansible_host,'dev':item.device,'mount':item.mount,'free':(((item.size_available/1024)/1024)/1024)|round(2,'common'),'total':(((item.size_total/1024)/1024)/1024)|round(2,'common')}] }}"
      when: (item.size_total - item.size_available) > (item.size_total|float * 0.85)
      with_items: "{{ ansible_mounts | list }}"
    - name: Stato dei dischi > 85%
      debug:
         msg: "{{ mount_all }} "
Hello,
I would like to share with you another way to perform this operation (only on Linux):
tasks: - name: Check /tmp freespace shell: df /tmp --output\=avail | tail -1 register: tmp_freespace - fail: msg: /tmp does not have the minimum space required to continue (3Gb requested). when: tmp_freespace.stdout|float is lt 3000000Best regards,
Just a question, but why is lt rather than the more readable <?
Hello,
I would like to share with you another way to perform this operation (only on Linux):
Best regards,