Pass environment variables to vagrant shell provisioner

Abdullah Jibaly picture Abdullah Jibaly · Oct 29, 2013 · Viewed 62.8k times · Source

It looks like passing environment variables when calling vagrant up is simple if you're using a Ruby provisioner:

VAR=123 vagrant up

In the Vagrantfile:

ENV['VAR']

How do I do this with the :shell provisioner? Simply doing this does not seem to work:

$VAR

Answer

gertvdijk picture gertvdijk · Jun 1, 2016

Since Vagrant 1.8.0 you can forget the ugly hacks from the other answers here. Just use the env option for the shell provisioner (docs).

Use it like this in your Vagrantfile:

config.vm.provision "shell", path: "provisionscript.sh", env: {"MYVAR" => "value"}

This will set the environment for the provisioning script only. If you need a persistent environment variable set for all processes in the VM, this is out of scope for Vagrant provisioning and look here: Shell environment variables in vagrant files are only passed on first up.