What exactly do the Vagrant commands do?

Steve Bennett picture Steve Bennett · Jul 11, 2012 · Viewed 41.8k times · Source

There is surprisingly no documentation on what the Vagrant commands do, other than references throughout the "getting started" tutorial.

What I've worked out so far:

  • box - manage "boxes"
  • destroy - shut down the VM then delete its stored image?
  • gem
  • halt - shut down the VM
  • init - prepare a directory with a new Vagrantfile
  • package - shut down the VM, then convert it to a 'package' which can be turned into a box? (Or something)
  • provision - run just the provisioning (eg, Chef, Puppet...) stage
  • reload - modify the VM configuration (eg, reapply Vagrantfile), reboot the VM, reprovision
  • resume - un-suspend (ie, unhibernate)
  • ssh - open an SSH shell connection to the VM
  • ssh-config
  • status
  • suspend - hibernate the VM
  • up - some or all of: copy a VM image to create a new VM, apply configuration to it, boot it

Do I have these right? What are the others? I'm still a bit unclear on the exact difference between reload and destroy/up.

Answer

pyfunc picture pyfunc · Jul 11, 2012

I agree with you that documentation at vagrantup is on the shorter side.

Some information can be gleaned from command help system.

  1. For example: gem command.

    Just type the command without arguments: vagrant gem -h and it produces the information that you may need.

    vagrant gem is used to install Vagrant plugins via the RubyGems system. In fact, vagrant gem is just a frontend to the actual gem interface, with the difference being that Vagrant sets up a custom directory where gems are installed so that they are isolated from your system gems.

  2. Vagrant ssh-config:

    Under the hood, when you execute vagrant ssh to ssh into VM. It is utilizing it's well known ssh key. The information on this key is provided by vagrant ssh-config. This is useful in case you want to change the well know key to your own private key and prepare boxes to use that.

    Also some times, you may want to use ssh based automation with your VMs. In that case, knowing which key is being used is useful. You could do use normal ssh command - ssh -i keyfile ..

  3. vagrant status <vmname>

    This command is a wrapper which provides the information on the status of vm. It could be running, saved and powered off.

  4. vagrant reload

    If you make any changes to the configuration in vagrantfile which needs to take effect. You may want to reload the VM. It re-runs the provisioning defined in the vagrantfile unless you ask it not too.

    It does not destroy the VM you have created from a base box. That means all the changes you have made to your VM, like say created a folder in your user directory will be there after reload.

    It is like reboot where it powers off your VM and then applies certain configuration change which can be applied only when VM has been powered off. and then power it on. Example: like attaching another SATA Virtual Disk.

  5. vagrant up

    This reads your configuration file - vagrantfile and then creates a VM from base box. Base Box is like a Template. You can create many VMs from it.

    Similarly, vagrant destroy destroys your VM. In this case all changes you made when inside it will be lost. But thats the cool idea that you can start from a base predefined state when you create a new VM.

I really like using it and have blogged about it.

In summary, it is a good wrapper over VirtualBox APIs and Commands. You can have a look at the VirtualBox commands to understand some of the capabilities better.