TIL Terraform does not clean old providers

21 Aug 2023 - TIL, Terraform

Terraform providers can use a significant amount of space on disk over time as they are not automatically cleaned up.

While looking at the disk usage of my computer, I noticed some of the projects I am working on, like Sweep, were using a huge amount of space, like dozens of GB. These projects are mostly standard web applications, without many assets or compiled code. Using du(1) I have quickly found it was linked to my Terraform usage.

> du -h -d1 .
 29G	./terraform
 12K	./tmp
 37G	.

While inspecting the various .terraform directories, I discovered they were full of old providers, some weighting more than 200MB. It seems to be a still opened, known issue.

One official workaround is to enable the Provider Plugin Cache to allow the use of a local directory as a shared plugin cache, which then allows each distinct plugin binary to be downloaded only once. There are two drawbacks:

  • Over time, as plugins are upgraded, the cache directory may grow to contain several unused versions which you must delete manually;
  • The plugin cache directory is not guaranteed to be concurrency safe. The provider installer’s behavior in environments with multiple terraform init calls is undefined.

Anyway, running rm -r ./terraform/environments/*/.terraform/providers fixed the issue for now. I definitively need a cleanup task to handle such situations, like when the disks are full of docker images.