Skip to main content

Ansible playbooks layout and examples

Once you have ansible installed and ssh connectivity between the control server and other hosts established you can set up following directly layout with playbooks and execute the examples listed here.

These playbook examples are also available from my Github repository - https://github.com/shahkamran/ansibleplaybooks.

~/.
---+ansible.cfg
---+dev
---+hosts
---+playbooks/
-------------+webserver.yml


-------------+database.yml
-------------+loadbalancer.yml


So where do you start?
You set up your hosts file similar to /etc/hosts but a local one with IP address translation to your systems.

#hosts
192.168.0.1     control
192.168.0.2     app01
192.168.0.3     app02
192.168.0.4     db01
192.168.0.5     lb01

Next you set up your environment in dev file by creating groups of hosts.

#dev
[cc]
control ansible_connection=local
[apps]
app01
app02
[dbs]
db01
[lbs]
lb01

This brings us to the playbooks that you can use as test to execute and build environment.

#loadbalancer.yml
---
  - hosts: lbs
    become: true
    tasks:
        - name: install nginx
          apt: name=nginx state=present update_cache=yes

        - name: ensure nginx started
          service: name=nginx state=started enabled=yes

You can run above using command below;
ansible-playbook loadbalancer.yml

Lets get the web servers set up as well on app servers.

#webserver.yml
---
  - hosts: apps
    become: true
    tasks:
        - name: install web server components
          apt: name={{item}} state=present update_cache=yes
          with_items:
                - apache2
                - libapache2-mod-wsgi
                - python-pip
                - python-virtualenv

        - name: ensure apache2 started
          service: name=apache2 state=started enabled=yes

        - name: ensure mod_wsgi enabled
          apache2_module: state=present name=wsgi
          notify: Restart Apache2
    handlers:
        - name: Restart Apache2
          service: name=apache2 state=restarted

Run following;
ansible-playbook webserver.yml

And the database goes here.

#database.yml
---
  - hosts: dbs
    become: true
    tasks:
        - name: install mysql-server
          apt: name=mysql-server state=present update_cache=yes

        - name: ensure mysql-server started
          service: name=mysql state=started enabled=yes

Get it up and running by;
ansible-playbook database.yml

That is all your environment set up now. If you want you can play with the examples above and enhance your usage, for example you can create a playbook to restart the whole application stack using below playbook.

#stack_restart.yml
---
# Bring stack down
- hosts: lbs
  become: true
  tasks:
  - service: name=nginx state=stopped

- hosts: apps
  become: true
  tasks:
  - service: name=apache2 state=stopped

# Restart mysql
- hosts: dbs
  become: true
  tasks:
  - service: name=mysql state=restarted

# Bring stack up
- hosts: apps
  become: true
  tasks:
  - service: name=apache2 state=started

- hosts: lbs
  become: true
  tasks:
  - service: name=nginx state=started

You restart your stack using command below;
ansible-playbook stack_restart.yml

Hope you find these useful.

Popular posts from this blog

TrueCrypt on macOS X Mojave 10.14

If you have updated your macOS recently to Mojave otherwise known as verison 10.14 you may not be able to install the last version of Truecrypt in order to access your old volumes encrypted with Truecrypt software. This article will guide you to get this working on your MacOS v10.14 (Mjoave) . Download the package from  https://truecrypt.ch/downloads/  or  https://www.truecrypt71a.com/downloads/ . Find downloaded package using Finder in your HDD/Users/username/Downloads folder and will look like  TrueCrypt 7.1a Mac OS X.dmg . Open file location in Finder and open or double click on  TrueCrypt 7.1a Mac OS X.dmg . This will mount Truecrypt 7.1a and will have Truecrypt 7.1a.mpkg in it. Drag the package T rueCrypt 7.1a.mpkg and drop in your Downloads folder. From Locations in Finder you can eject your TrueCrypt mount. Now go to your Downloads location, find the file  TrueCrypt 7.1a.mpkg , right click and select Show Package Contents . Find the file Contents/distribution.di

Tools you need before you start using Terraform for orchestration infrastructure in cloud

Terraform one of the famous open source tool used for planning, deploying and maintaining infrastructure as a code and the beauty of this tool is that it works across various cloud service providers. Even though I personally like the AWS Cloudformation, it is AWS only and most probably it will always remain limited to Amazon Web Services. It has few advantages over other tools when using with AWS and will be the first to have new AWS features incorporated before other tools and APIs catch up. However if you are not limiting yourself to AWS only or have hybrid environment you may want to use a 3rd party tool compatible for all cloud infrastructures. Terraform being one of them is youngest client only tool and this article will help you setting up your desktop environment and give you understanding of how it works before you can start to code. Prerequisites: Computer running Windows, Linux, Solaris or MacOS operating system. Downloads: Download Terraform directly from the crea

Running VNC Server as a Service on Ubuntu

Method 1: VNC Server as a Service on Ubuntu desktop similar to Redhat sysconfig sudo apt-get install vncserver sudo mkdir -p /etc/sysconfig sudo touch /etc/sysconfig/vncservers sudo vi /etc/sysconfig/vncservers # Add following VNC Server instances where username and arguments are defined for each session. VNCSERVERS=" 1:user1 2:user2 3:user3 " VNCSERVERARGS[1]=" -geometry 1280x992 -depth 16 " VNCSERVERARGS[2]=" -geometry 800x600 -depth 8 " VNCSERVERARGS[3]=" -geometry 980x720 " sudo vi /etc/init.d/vncserver # Add below to the service script #!/bin/bash # # chkconfig: - 91 35 # description: Starts and stops vncserver. \ # used to provide remote X administration services. # Source function library. # . /etc/init.d/functions # Source networking configuration. # . /etc/sysconfig/network # Check that networking is up. # [ ${NETWORKING} = "no" ] && exit 0 unset VNCSERVERARGS VNC