Creating a Vagrantfile

You are viewing an old version of this article. View the current version here.

In this page we discuss how to create a Vagrantfile, which you can use to create new boxes. This content is specifically written to address the needs of MariaDB users.

A Basic Vagrantfile

A Vagrantfile is a Ruby file that instructs Vagrant on how to create a new box. Here is a simple example:

Vagrant.configure("2") do |config|
  config.vm.box = "hashicorp/bionic64"
  config.vm.provision :shell, path: "bootstrap.sh"
end

Vagrant.configure("2") returns the Vagrant configuration object for the new box. In the block, we'll use the config alias to refer this object. We are going to use the version 2 of Vagrant API.

vm.box is the base box that we are going to use. It is Ubuntu BionicBeaver (18.04 LTS), 64 bits version, provided by HashiCorp. The schema for box names is simple: the maintainer account in Vagrant Cloud followed by the box name.

We use vm.provision to specify the name of the file that is going to be executed at box creation, to provision the machine. bootstrap.sh is the conventional name used in most cases.

bootstrap.sh

boostrap.sh is simply a BASH file containing the shell commands to run to provision the box. Here is a simple example:

#!/bin/bash

apt-get update
apt-get install -y 

To find out the steps to install MariaDB on your system of choice, see the Getting, Installing, and Upgrading MariaDB section.

You may also want to restore a database backup in the new box. In this way, you can have the database needed by the application you are developing. To find out how to do it, see Backup and Restore Overview. The most flexible type of backups (meaning that it works between different MariaDB versions, and in some cases even between MariaDB and different DBMSs) is a dump.

More Provisioners

We can also use different methods for provisioning, including an Ansible playbook or a Puppet manifesto.

Provisioning Vagrant with Ansible

Here is an example of how to provision a Vagrant box by running Ansible:

Vagrant.configure("2") do |config|
  ...
  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "vagrant.yml"
  end
end

Ansible runs in the host system. In this example, it runs a playbook called vagrant.yml.

For an introduction to Ansible for MariaDB users, see Ansible and MariaDB.

Provisioning Vagrant with Puppet

To provision a Vagrant box by running Puppet:

Vagrant.configure("2") do |config|
  ...
  config.vm.provision "puppet"
    puppet.manifests_path = "manifests"
    puppet.manifest_file = "default.pp"
end

In this example, Puppet Apply runs in the host system but not Puppet Server is needed. Puppet expects to find a manifests directory in the project directory. It expects it to contain default.pp, which will be used as an entry point. Note that puppet.manifests_path and puppet.manifest_file are set to their default values.

Puppet needs to be installed in the guest machine.

To use a Puppet server, the puppet_server provisioner can be used:

Vagrant.configure("2") do |config|
  ...
  config.vm.provision "puppet_server" do |puppet|
    puppet.puppet_server = "puppet.example.com"
  end
end

Sharing Files Between the Host System and a Box

To restore a backup into MariaDB, in most cases we need to be able to copy it from the host system to the box. We may also want to occasionally copy MariaDB logs from the box to the host system, to be able to investigate problems.

The project directory (the one that contains the Vagrantfile) by default is shared with the virtual machine and mapped to the /vagrant directory (the synced folder). It is a good practice to put there all files that should be shared with the box when it is started. Those files should normally be versioned.

The synced folder can be changed. In the above example, we could simply add one line:

config.vm.synced_folder "/host/path", "/guest/path"

References

Further information can be found in Vagrant documentation.


Content initially contributed by Vettabase Ltd.

Comments

Comments loading...
Content reproduced on this site is the property of its respective owners, and this content is not reviewed in advance by MariaDB. The views, information and opinions expressed by this content do not necessarily represent those of MariaDB or any other party.