What you'll learn
- What Are Disk Quotas?
- Automating Quota Management with Ansible
- 1. Enable Quotas on the Filesystem
- Playbook: Manage XFS Quotas for User and Group `devops`
- Usage Instructions
- Best Practices
- Conclusion
- Related Articles
Managing disk usage quotas is critical for ensuring fair resource allocation in shared environments like multi-user servers or DevOps pipelines. Although Ansible doesn't have a dedicated `quota` module, it remains a powerful tool for automating disk quota management using alternative modules and techniques. In this article, we’ll explore practical ways to manage disk quotas with Ansible.
---
What Are Disk Quotas?
Disk quotas are limits set on the amount of disk space or inodes that a user or group can use on a filesystem. They are essential for:
- **Preventing Resource Hoarding**: Ensures no single user consumes excessive disk space.
- **Maintaining System Performance**: Prevents systems from becoming sluggish due to storage overuse.
- **Enforcing Compliance**: Helps adhere to organizational storage policies.
Linux provides tools like `quota` and `xfs_quota` to manage disk quotas. While Ansible lacks a specific quota module, you can leverage its capabilities to automate quota-related tasks.
---
Automating Quota Management with Ansible
1. Enable Quotas on the Filesystem
Before managing quotas, you must enable them on the target filesystem. For ext4 filesystems:
```bash
sudo mount -o remount,usrquota /dev/sda1
```
For XFS filesystems:
```bash
sudo xfs_quota -x -c "quota enable" /
```
In Ansible, you can automate this process:
```yaml
- name: Enable quotas on ext4 filesystem
hosts: all
become: true
tasks:
- name: Remount with user quota enabled
ansible.builtin.command:
cmd: mount -o remount,usrquota /
```
---
Playbook: Manage XFS Quotas for User and Group `devops`
Here’s an example playbook where both the user and group are named `devops`. It configures quotas for the user `devops` and the group `devops`.
```yaml
---
- name: Manage XFS Quotas for User and Group "devops"
hosts: all
become: true
tasks:
- name: Ensure xfsprogs is installed
ansible.builtin.package:
name: xfsprogs
state: present
- name: Configure user quotas for "devops" on /home
community.general.xfs_quota:
type: user
name: devops
mountpoint: /home
bsoft: 5G
bhard: 10G
isoft: 10000
ihard: 20000
state: present
- name: Configure group quotas for "devops" on /var/devops
community.general.xfs_quota:
type: group
name: devops
mountpoint: /var/devops
bsoft: 20G
bhard: 50G
isoft: 50000
ihard: 100000
state: present
- name: Verify quota settings
ansible.builtin.shell: xfs_quota -x -c "report -h"
register: quota_report
changed_when: false
- name: Display quota report
ansible.builtin.debug:
var: quota_report.stdout
```
---
Usage Instructions
1. **Prepare the Filesystem**:
- Ensure the target filesystems (`/home` and `/var/devops`) are mounted with XFS and quota options enabled:
```bash
sudo mount -o remount,usrquota,grp