Vagrant is a great tool for creating your development infrastructure very quickly with an easy workflow. You can create your local development (or test or production) virtual machine environment with a single
vagrant up command. In Vagrant Virtual Machine images are distributed as boxes (like VM templates in VMWare or images in public cloud) and will be fetched from the Vagrant Cloud.
Also read : How to create an Ansible lab using Vagrant ?
If you are using different Operating systems and virtual machines using Vagrant, there will be multiple Vagrant boxes downloaded on your local machine and indeed it will take a lot of space. Every time when you execute a vagrant up (for a new virtual machine), Vagrant will check if the box is already available on the local machine. If the box is not available, Vagrant will try to download the box from Vagrant cloud automatically. If you are not using those boxes, it is recommended to delete those boxes and save the space.
You don’t need to find and delete the Vagrant boxes from directories. vagrant box utility will help you to manage the boxes on your local machine. We can see the available options by executing vagrant box command and the options are self-explanatory.
$ vagrant box Usage: vagrant box <subcommand> [<args>] Available subcommands: add list outdated prune remove repackage update For help on any individual subcommand run `vagrant box <subcommand> -h` --[no-]color Enable or disable color output --machine-readable Enable machine readable output -v, --version Display Vagrant version --debug Enable debug output --timestamp Enable timestamps on log output --debug-timestamp Enable debug output with timestamps --no-tty Enable non-interactive output
vagrant box list command will show the existing Vagrant boxes on the local machine.
$ vagrant box list ansible/tower (virtualbox, 3.7.2) bento/ubuntu-16.04 (virtualbox, 202007.17.0) cb-training-pipeline-fundamentals-1588693109 (virtualbox, 0) centos/7 (virtualbox, 2004.01) centos/8 (virtualbox, 2011.0) generic/rhel7 (virtualbox, 3.1.22) generic/rhel8 (virtualbox, 3.4.0) generic/ubuntu1804 (virtualbox, 3.1.6) google/gce (google, 0.1.0) hashicorp/bionic64 (virtualbox, 1.0.282) laravel/homestead (virtualbox, 9.4.0) ubuntu/bionic64 (virtualbox, 20191125.0.0) ubuntu/xenial64 (virtualbox, 20200729.0.0)
I can see a lot of similar, unused and old boxes there which I am not using anymore.
Deleting a Vagrant box is simple and straightforward as shown below.
$ vagrant box remove generic/ubuntu1804 Removing box 'generic/ubuntu1804' (v3.1.6) with provider 'virtualbox'... # deleting one more box $ vagrant box remove ansible/tower Removing box 'ansible/tower' (v3.7.2) with provider 'virtualbox'...
That’s it, the box and related files will be deleted from the local machine.
When you have multiple vagrant boxes for same image you need to explicitly mention the version of the box you want to delete.
$ vagrant box list |grep rhel7 generic/rhel7 (virtualbox, 3.1.22) generic/rhel7 (virtualbox, 3.4.2)
Let’s try to delete with simple command.
$ vagrant box remove generic/rhel7 You requested to remove the box 'generic/rhel7' with provider 'virtualbox'. This box has multiple versions. You must explicitly specify which version you want to remove with the `--box-version` flag or specify the `--all` flag to remove all versions. The available versions for this box are: * 3.1.22 * 3.4.2
See, vagrant cannot decide which version to be deleted and asking you to provide the version information using
$ vagrant box remove generic/rhel7 --box-version 3.1.22 Removing box 'generic/rhel7' (v3.1.22) with provider 'virtualbox'...
vagrant boxcommand not really working ?
There might be situations where
vagrant box command responds with error due to file error or wrong permissions etc. Do not need to worry as you can still clean up your unwanted boxes manually.
Vagrant will save the boxes under the
.vagrant.d directory inside your home directory.
$ cd ~/.vagrant.d $ pwd /home/gini/.vagrant.d
We can see the boxes in an organised structure under the directory
$ ls -l boxes total 0 drwxr-xr-x 4 gini staff 128 29 Jul 2020 bento-VAGRANTSLASH-ubuntu-16.04 drwxr-xr-x 3 gini staff 96 30 Mar 12:00 cb-training-pipeline-fundamentals-1588693109 drwxr-xr-x 4 gini staff 128 1 Aug 2020 centos-VAGRANTSLASH-7 drwxr-xr-x 4 gini staff 128 3 Mar 22:56 centos-VAGRANTSLASH-8 drwxr-xr-x 4 gini staff 128 12 Jan 2021 generic-VAGRANTSLASH-rhel7 drwxr-xr-x 4 gini staff 128 27 Aug 15:46 generic-VAGRANTSLASH-rhel8 drwxr-xr-x 4 gini staff 128 7 Jun 2019 google-VAGRANTSLASH-gce drwxr-xr-x 4 gini staff 128 9 Apr 01:20 hashicorp-VAGRANTSLASH-bionic64 drwxr-xr-x 4 gini staff 128 27 Mar 2020 laravel-VAGRANTSLASH-homestead drwxr-xr-x 4 gini staff 128 1 Dec 2019 ubuntu-VAGRANTSLASH-bionic64 drwxr-xr-x 4 gini staff 128 1 Aug 2020 ubuntu-VAGRANTSLASH-xenial64
And simply delete the respective direcrory.
$ rm -rf bento-VAGRANTSLASH-ubuntu-16.04
vagrant box utility will be very useful when you are working with several virtual machines and boxes using Vagrant. And as a best practice, observe your Vagrant boxes and do regular housekeeping as needed.
Disclaimer: The views expressed and the content shared are those of the author and do not reflect the views of the author's employer or techbeatly platform.