Skip to content
This repository has been archived by the owner on Jul 5, 2021. It is now read-only.

Commit

Permalink
Merge pull request #20 from bowlofeggs/vagrant
Browse files Browse the repository at this point in the history
Add a basic page for Vagrant.
  • Loading branch information
jaredsmith committed Nov 4, 2016
2 parents a8eb8a9 + 93a8b8a commit 5ce0bfa
Show file tree
Hide file tree
Showing 2 changed files with 92 additions and 0 deletions.
1 change: 1 addition & 0 deletions docs/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ Contents:
atomiccommandcheatsheet
base
docker
vagrant
irssi
contribute

Expand Down
91 changes: 91 additions & 0 deletions docs/vagrant.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
=======
Vagrant
=======

`Vagrant <https://www.vagrantup.com/>`_ is a useful development tool that lowers the barrier to
entry to new contributors of your project. With Vagrant, new contributors don't have to spend much
time configuring their development environment, but can quickly get one automatically provisioned
for them with a few simple commands.

Using Vagrant in Fedora
=======================

Fedora's Cloud working group provides Fedora Vagrant boxes for libvirt and Virtualbox. You can see
the Fedora 24 Vagrant images
`here <https://download.fedoraproject.org/pub/fedora/linux/releases/24/CloudImages/x86_64/images/>`_.

To quickly get started with Vagrant on a Fedora host, the Fedora developers have conveniently
packaged vagrant-libvirt and a handful of handy Vagrant plugins for you. All you need to do is to
install vagrant-libvirt and the plugins you wish to use, write a Vagrantfile for your project, and
type "vagrant up" to get started. Here's an example Vagrantfile::

$ cat Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
# On your host:
# git clone https://github.com/fedora-infra/bodhi.git
# cd bodhi
# cp Vagrantfile.example Vagrantfile
# vagrant up
# vagrant ssh -c "cd /vagrant/; pserve development.ini --reload"
Vagrant.configure(2) do |config|
config.vm.box_url = "https://download.fedoraproject.org/pub/fedora/linux/releases/24/CloudImages/x86_64/images/Fedora-Cloud-Base-Vagrant-24-1.2.x86_64.vagrant-libvirt.box"
config.vm.box = "f24-cloud-libvirt"
config.vm.network "forwarded_port", guest: 80, host: 80
config.vm.synced_folder ".", "/vagrant", type: "sshfs"
config.vm.provider :libvirt do |domain|
domain.cpus = 4
domain.graphics_type = "spice"
domain.memory = 1024
domain.video_type = "qxl"
end
config.vm.provision "shell", inline: "echo hello_world > /home/vagrant/hello_world.txt"
# Uncomment the following block if you have a playbook at devel/ansible/playbook.yml you want Vagrant to run on the guest for you
# # Ansible needs the guest to have these
# config.vm.provision "shell", inline: "sudo dnf install -y libselinux-python python2-dnf"
#
# config.vm.provision "ansible" do |ansible|
# ansible.playbook = "devel/ansible/playbook.yml"
# end
end

In this example, we're using the Fedora 24 libvirt box and we're assuming that your project has an
ansible playbook at the relative path ``devel/ansible/playbook.yml``. Writing ansible playbooks is
beyond the scope of this document, and you are free to use config.vm.provision lines to configure
your Vagrant guest if you like.

To get started with the above example, simply write the code to a file called Vagrantfile, install
``vagrant-libvirt`` and ``vagrant-sshfs``, and run ``vagrant up``::

$ cd ~/devel/my_project
$ vim Vagrantfile # Write the above Vagrant code here
$ sudo dnf install vagrant-libvirt vagrant-sshfs
$ vagrant up

Once your guest is running, you can ssh into the guest. Your code directory from the host will be
shared into the guest at the path ``/vagrant``::

$ vagrant ssh
$ [vagrant@localhost ~]$ ls /vagrant/Vagrantfile
/vagrant/Vagrantfile

Now you can edit your project on your host, and the changes you make will be shared into the guest's
``/vagrant`` folder live. This allows you to use your editor of choice (even graphical editors!) on
the host, while keeping everything that might "dirty" you host system contained in the guest virtual
machine. This example ``Vagrantfile`` has also set up a port forward from 80 in the guest to 80 on
the host, so if there were a web application listening in the guest on port 80, you could browse to
http://localhost on the host to access it.

When you are done with your Vagrant guest, you can destroy it::

$ vagrant destroy

It is good practice to check in a ``Vagrantfile.example`` file in your project's source code, rather
than the ``Vagrantfile`` itself. This allows new developers a quick way to get started by just
copying your example into place, but it also allows each contributor to make the changes they prefer
to their individual Vagrantfiles.

0 comments on commit 5ce0bfa

Please sign in to comment.