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
By default, VirtualBox is the default provider for Vagrant.
Vagrant is an open-source tool that allows you to create, configure, and manage boxes of virtual machines through an easy to use command interface. Essentially, it is a layer of software installed between a virtualization tool (such as VirtualBox, Docker, Hyper-V) and a VM.
The shell Packer provisioner provisions machines built by Packer using shell scripts. Shell provisioning is the easiest way to get software installed and configured on a machine. Building Windows images? You probably want to use the PowerShell or Windows Shell provisioners.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With