To supply with food, drink, or equipment, especially for a journey.Provision (verb)
Provision comes from the word “provide”, which means to attend to.
I remember being re-introduced to the word provision when I started using Vagrant. There is an option you can use when you start a virtual machine,
--provision, that will automatically install software and alter configurations according to what is written in your Vagrantfile.
For example, this Vagrant file:
Vagrant.configure("2") do |config| config.vm.provision "shell", inline: "sudo apt-get install -y nginx" end
config.vm.provision "shell" to run a shell command that installs Nginx before the virtual machine begins its journey.
You could say, I am provisioning my webserver with Nginx (
"sudo apt-get install -y nginx").
You take a bare Ubuntu virtual machine and provision it with Nginx and some configuration changes in order for it to be a functioning web server.
An important thing to understand is that the provisioning process should be automated. As a DevOps engineer, you probably don’t want to manually do
sudo apt-get install -y nginx and write the configuration files each time you create a virtual machine.
It is better to automate that process by using a tool such as Vagrant, Ansible, or at least a script. You can write your Vagrantfile, Ansible playbook, or script in a repository so it is version-controlled and documented, and you can use Ansible, for example, to run the provisioning script across multiple machines at the same time.
Like the original quote at the top of this post says, provisioning is supplying a machine with software and configuration settings it needs in order to perform its function.