Vagrant Ansible example 01

In this tutorial. You can Build infrastructure with Vagrant ansible for testing. How to setting local server using Vagrant Ansible. Ansible the essential for DevOps Roles.

My local server

[huupv@huupv my_ansible]$ cat /etc/redhat-release 
Fedora release 28 (Twenty Eight)
[huupv@huupv my_ansible]$ vagrant --version
Vagrant 2.0.2
[huupv@huupv my_ansible]$ ansible --version
ansible 2.6.4
config file = /etc/ansible/ansible.cfg
configured module search path = [u'/home/huupv/.ansible/plugins/modules', u'/usr/share/ansible/plugins/modules']
ansible python module location = /usr/lib/python2.7/site-packages/ansible
executable location = /usr/bin/ansible
python version = 2.7.15 (default, May 16 2018, 17:50:09) [GCC 8.1.1 20180502 (Red Hat 8.1.1-1)]

Vagrant Ansible example 01

Step 1: You have to install Vagrant for your OS. If you have not to install Vagrant then ref to install Vagrant on Centos and install Vagrant on Ubuntu.

Step 2: Creating a folder and file your project.

example01/
├── ansible.cfg
├── playbooks
│   ├── inventory
│   │   └── hosts
│   ├── ntp.yml
│   └── templates
│   └── ntp.conf.j2
└── Vagrantfile

3 directories, 5 files

Step 3: Build infrastructure with Vagrant for testing. The define two servers: an app server and a database server in Vagrantfiles file.

Vagrant init create Vagrantfiles minimal file

[huupv@huupv example01]$ vagrant init --minimal

The terminal output as below

==> vagrant: A new version of Vagrant is available: 2.1.5!
==> vagrant: To upgrade visit: https://www.vagrantup.com/downloads.html

A `Vagrantfile` has been placed in this directory. You are now
ready to `vagrant up` your first virtual environment! Please read
the comments in the Vagrantfile as well as documentation on
`vagrantup.com` for more information on using Vagrant.

The content in Vagrantfile for app server and DB server as below

[huupv@huupv example01]$ cat Vagrantfile

The terminal output as below

Vagrant.configure("2") do |config|
config.ssh.insert_key = false
config.vm.provider :virtualbox do |vb|
   vb.customize ["modifyvm", :id, "--memory", "256"]
end
# Application server 1.
config.vm.define "app1" do |app1|
  app1.vm.hostname = "app1.dev"
  app1.vm.box = "centos/7"
  app1.vm.network :private_network, ip: "192.168.3.4"
end
# Database server.
config.vm.define "db" do |db|
  db.vm.hostname = "db.dev"
  db.vm.box = "centos/7"
  db.vm.network :private_network, ip: "192.168.3.5"
end

config.vm.provision "ansible" do |ansible|
  ansible.playbook = "playbooks/ntp.yml"
  ansible.verbose  = true
  ansible.limit = "all" # or only "nodes" group, etc.
  # Run commands as root.
  ansible.sudo = true
end
end

Ansible playbook for NTP server

Creating an inventory file for multiple servers

# Application servers
[app]
192.168.3.4

# Database server
[db]
192.168.3.5
# Group 'multi' with all servers
[multi:children]
app
db
# Variables that will be applied to all servers
[multi:vars]
ansible_ssh_user=vagrant
ansible_ssh_private_key_file=~/.vagrant.d/insecure_private_key

Create a ntp.yml file in folder playbooks

- hosts: all
  tasks:
  - name: Ensure NTP (for time synchronization) is installed.
    yum: name=ntp state=installed
  - name: Configure NTP
    template: src=ntp.conf.j2 dest=/etc/ntp.conf
    notify:
           - restart ntpd
  - name: Ensure NTP is running.
    service: name=ntpd state=started enabled=yes

Create ntp.conf.j2 file template

statistics loopstats peerstats clockstats
filegen loopstats file loopsstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable

#server your_NTP_server_IP
server 0.rhel.pool.ntp.org iburst
server 1.rhel.pool.ntp.org iburst
server 2.rhel.pool.ntp.org iburst
server 3.rhel.pool.ntp.org iburst

restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery
restrict 127.0.0.1
restrict ::1

Vagrant run ansible local

Running vagrant up the first time. Vagrant automatically provisions the newly-minted VM. Run “vagrant provision” again after the VM has been created.

The first run vagrant up

[huupv@huupv example01]$ vagrant up

The terminal output as below

Vagrant Ansible

Run vagrant provision again.

[huupv@huupv example01]$ vagrant provision

The terminal output as below

Vagrant Ansible 01

Vagrant Ansible 02

The result, The terminal output as below

[huupv@huupv example01]$ vagrant ssh app1
Last login: Sat Sep 15 06:26:42 2018 from 10.0.2.2
[vagrant@app1 ~]$ cat /etc/ntp.conf 
statistics loopstats peerstats clockstats
filegen loopstats file loopsstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable

#server your_NTP_server_IP
server 0.rhel.pool.ntp.org iburst
server 1.rhel.pool.ntp.org iburst
server 2.rhel.pool.ntp.org iburst
server 3.rhel.pool.ntp.org iburst

restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery
restrict 127.0.0.1
restrict ::1
[vagrant@app1 ~]$ exit
logout
Connection to 127.0.0.1 closed.
[huupv@huupv example01]$ vagrant ssh db
Last login: Sat Sep 15 06:26:42 2018 from 10.0.2.2
[vagrant@db ~]$ cat /etc/ntp.conf 
statistics loopstats peerstats clockstats
filegen loopstats file loopsstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable

#server your_NTP_server_IP
server 0.rhel.pool.ntp.org iburst
server 1.rhel.pool.ntp.org iburst
server 2.rhel.pool.ntp.org iburst
server 3.rhel.pool.ntp.org iburst

restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery
restrict 127.0.0.1
restrict ::1
[vagrant@db ~]$ exit
logout
Connection to 127.0.0.1 closed.
[huupv@huupv example01]$

Conclusion

Thought the article, you can use Vagrant Ansible example best practice. I hope will this your helpful. More details refer to Ansible tutorial.

,

About HuuPV

My name is Huu. I love technology and especially Devops Skill such as Docker, vagrant, git so forth. I likes open-sources. so I created DevopsRoles.com site to share the knowledge that I have learned. My Job: IT system administrator. Hobbies: summoners war game, gossip.
View all posts by HuuPV →

Leave a Reply

Your email address will not be published. Required fields are marked *

Comment moderation is enabled. Your comment may take some time to appear.

This site uses Akismet to reduce spam. Learn how your comment data is processed.