tovletoglou / vagrant-playground

Vagrant blueprint that creates an Ansible VM server and one or more VMs as playground.

Home Page:https://tovletoglou.github.io/vagrant-playground

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Vagrant Playground

This is a Vagrant blueprint that creates an Ansible VM server and one or more VMs as a playground.

It is using static IP, private network and the same SSH key to all VMs. This way we can SSH seamlessly from one VM to another.
Also, updates hosts file to use the hostnames of the VMs by using the vagrant-hostmanager plugin. This apply both on host PC and on VMs
Finally, adds your public SSH key to the guests and combining with static IP of the VMs you can behave them as normal VMs without the need to use vagrant commands; instead of vagrant ssh VM_NAME you can do ssh vagrant@VM_HOSTNAME.

Information

On the first vagrant command it will create the SSH key in the PATH_TO_PROJECT/.ssh that will be used by the VMs instead of the vagrant-auto generated keys (one for every VM). But be careful! Do that only on test environments!.

Also, it will get your HOMEDIR/.ssh/id_rsa.pub public key, and it will add it on the authorized_keys on every VM. Adding your public key on the VMs does not affect the security.

Finally, it will update the hosts file of your computer, and it will do the same for the clients.

Requirements

Get started

Install vagrant-hostmanager plugin

vagrant plugin install vagrant-hostmanager

Clone the project and cd in

git clone https://github.com/tovletoglou/vagrant-playground.git
cd vagrant-playground

Edit the Vagrantfile and uncomment the server/s you like to boot (always keep the ansible.local).
The next example boots the ansible.local and the aegir.local

vm_array = Array[
  ['ansible.local',   '192.168.33.10'],

  ['aegir.local',     '192.168.33.20'],
  #
  # ['haproxy.local',   '192.168.33.30'],
  #
  # ['web1.local',      '192.168.33.31'],
  # ['web2.local',      '192.168.33.32'],
  # ['web3.local',      '192.168.33.33'],
  #
  # ['galera1.local',   '192.168.33.41'],
  # ['galera2.local',   '192.168.33.42'],
  # ['galera3.local',   '192.168.33.43'],
  #
  # ['elastic1.local',  '192.168.33.51'],
  # ['elastic2.local',  '192.168.33.52'],
  # ['elastic3.local',  '192.168.33.53'],
  #
  # ['scrapy.local',    '192.168.33.60'],
  #
  # ['teamcity.local',  '192.168.33.70'],
  #
  # ['swagger.local',   '192.168.33.80'],
  #
  # ['wordpress.local', '192.168.33.90'],
]

It's time to boot up the VMs and wait...

vagrant up

Login to ansible.local VM. It will use your private SSH key stored under your HOME_DIR/.ssh:

ssh vagrant@ansible.local

Go to the ansible master playbook:

cd ansible-playbook-vagrant-playground

Run the initial playbooks playbook_ansible and playbook_vagrant:

# This playbook will download all the roles used by the included playbooks.
ansible-playbook -i hosts playbook_ansible.yml
# This one will initialize the running VMs. It's not necessary.
ansible-playbook -i hosts playbook_vagrant.yml

And finally the playbook for the server you want to try. For this example we use the playbook_aegir:

ansible-playbook -i hosts playbook_aegir.yml

Now you have and Aegir server to play under 192.168.33.20 or aegir.local.

Cheat sheet

Mount the VMs (on a Linux system)

mkdir ~/vagrant@ansible.local/
sshfs -o allow_other vagrant@ansible.local:/ ~/vagrant@ansible.local/

mkdir ~/vagrant@aegir.local
sshfs -o allow_other vagrant@aegir.local:/ ~/vagrant@aegir.local/

mkdir ~/vagrant@web1.local
sshfs -o allow_other vagrant@web1.local:/ ~/vagrant@web1.local/

Known issues

On Windows systems the hostmanager plugin cannot update the hosts file. If you are experiencing a Ruby error like:

C:/HashiCorp/Vagrant/embedded/lib/ruby/2.2.0/fileutils.rb:1392:in `initialize': Permission denied @ rb_sysopen - C:/Users/USER/.vagrant.d/tmp/hosts.local (Errno::EACCES)

go to the Vagrantfile and change the config.hostmanager.manage_host = true to false.

Then edit manually your hosts file under C:\Windows\System32\drivers\etc.

About

Vagrant blueprint that creates an Ansible VM server and one or more VMs as playground.

https://tovletoglou.github.io/vagrant-playground