概要
複数台のディスクスペースをチェックしてエラーを投げる処理を書きたかった。
サーバー側には何も入れたくなかったのでAnsibleで実行してみる。
バージョン情報
- ansible 2.7.6
やり方
StackOverflowによるとansible_mountの結果からsize_availableやsize_totalを取ってassertにかければ良いらしい。
playbook
- hosts: foo tasks: - name: "{{ mountname }} ディスク使用率チェック : 閾値 {{ disk_usage }}" assert: that: mount.size_available < mount.size_total|float * {{ disk_usage }} msg: disk space has reached {{ disk_usage }} threshold vars: mount: "{{ ansible_mounts | selectattr('mount','equalto',mountname) | list | first }}"
実行コマンド( /home が70%超えたらエラー)
$ ansible-playbook disk_usage.yml \ --extra-vars "mountname=/home" \ --extra-vars "disk_usage=0.7"
ansible_mounts
ansible_mountsで取得できる値について確認する。
- hosts: foo tasks: - debug: var=item loop: "{{ ansible_mounts }}"
"item": { "block_available": 10596528, "block_size": 4096, "block_total": 16215174, "block_used": 5618646, "device": "/dev/sda1", "fstype": "ext4", "inode_available": 7988632, "inode_total": 8257536, "inode_used": 268904, "mount": "/home", "options": "rw,relatime,discard,data=ordered", "size_available": 43403378688, "size_total": 66417352704, "uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }
ここからsize_availableとsize_totalを取ってみる。
- debug: msg="{{ item.size_available }} / {{ item.size_total }}" loop: "{{ ansible_mounts }}"
"msg": "22673215488 / 66417352704"
改定履歴
Author: Masato Watanabe, Date: 2019-2-20, 記事投稿