When an organization manages multiple servers, the requirement for automating the tasks is a necessity. There are many cloud automation tools available in the market today. But, in recent times a tool called ansible is buzzing as the best automation tool. Like any other configuration management tool, ansible also requires coding knowledge of the YML language. Ansible is a “radically simple open-source IT automation engine”.
Ansible playbooks are easy to write and understand. The YML language is human readable, understandable but managing correct indentation plays a key role while creating playbooks. Unlike writing a long-running codebook to automate, ansible can automate with a simple YML code called Ansible playbook.
Ansible playbooks can automate:
- Configuration management
- Application Deployment
Why Ansible playbooks?
There are some strong reasons behind choosing Ansible as a configuration management tool. Here are some reasons behind choosing an ansible-playbook. Ansible playbooks are:
Writing Ansible playbooks is quite easy as it doesn’t require any special coding skills. Playbooks are in human-readable format and Tasks are executed in format.
Ansible playbooks can automate multiple server tasks like configuration management, Application deployments, server provisioning, and orchestration.
This is another major benefit of using ansible as it is agentless and uses OpenSSH. Also, OpenSSH provides high security.
The tool is more efficient as it uses the default agent that comes with the tool. It follows a push-based mechanism so that clients can relax as it pushes changes to the target system automatically. It requires fewer resources involvement as it can perform most of the required tasks on its own. Moreover, Ansible is an open-source tool it doesn’t require any licensing.
Ansible Inventory file:
We know that Ansible works against multiple managed nodes or hosts in infrastructure at the same time. It performs these tasks using a list or group of lists which are known as inventory. This inventory file contains the list of hosts (nodes) that are managed by an Ansible control node. Information related to hosts is available at the following default path:
Default location: /etc/ansible/hosts
Anyone can create their own custom host’s file at any location and can use this while running the playbook by adding -i along with the command. Below is the example ansible-playbook command to run a custom inventory file.
Use -i option: ansible -i my_hosts
Another method is to define your inventory file in ansible.cfg file so that it considers that file as the default inventory file.
Ansible playbook examples
The ansible playbooks can launch tasks synchronously or asynchronously. Let’s see some simple basic ansible playbooks to understand how to write Ansible playbooks.
- Write Ansible playbooks in YML format and save them using the .yml extension.
- Start creating an ansible playbook with three consequent dashes (—)
- Every task in the playbook starts with a single dash (-) and a single space
- Remember that hosts and tasks are mandatory in a playbook
- Structure the data of ansible-playbook using proper indentation
- Perform the tasks using modules
- Like in any other language here also comments start with a # symbol
- Create a new user in managed nodes(servers) using the following playbook
- name: Playbook to create new user #name of the playbook hosts: all #host group name or all hosts become: true #run playbook as root user tasks: #startin a new task - name: creating new user #name of the task user: #task details name: john
2. Simple playbook to install a package in managed nodes (except ubuntu nodes) using the yum module
- name: Playbook to install GIT in managed nodes hosts: webservers become: true tasks: - name: install GIT yum: name: git state: installed
3. Ansible playbook to create/remove a file/directory using the file module
#creating a file in appservers --- - name: Playbook to create a file hosts: appservers become: true tasks: - name: Create a new file in appservers file: path: /home/ansadmin/samplefile state: touch
#creating a directory in appservers --- - name: playbook create a directory hosts: appservers become: true tasks: - name: Creating a directory file: path: /home/ansadmin/sampldirectory state: directory
# playbook to remove a file or directory --- - name: playbook to remove a file or directory hosts: appservers become: true tasks: - name: remove a file/directory file: path: /home/ansadmin/sampldirectory or sample file state: absent
4. Copy a file from one node to another node using the copy module – Ansible playbook example
--- - name: playbook to copy a file hosts: all become: true tasks: - name: copy a file copy: src: /opt/ansible/samplefile.html #source location dest: /home/ansadmin #destination location mode: 0600 #file permissions owner: john #file owner
5. Multitasking Ansible playbooks using yum module and service module (except ubuntu server)
--- - name: playbook to install a package hosts: all become: true tasks: - name: install httpd #installing httpd yum: name: httpd state: installed - name: start httpd service #starting httpd service service: name: httpd state: started
--- - name: playbook to uninstall a package hosts: all become: true tasks: - name: stop httpd service #stoppping httpd service service: name: httpd state: stopped - name: uninstall httpd #unstalling httpd yum: name: httpd state: removed
6. Sample playbook to Install any package onto ubuntu servers
- name: install apache2 on ubuntu server hosts: ubuntu server become: true tasks: - name: install apache2 apt: name: apache2 state: present - name: start apache2 service: name: apache2 state: started
Ansible playbook commands
Here are some basic ansible commands to perform operations on ansible playbooks.
- Create an Ansible playbook –> vi playbookname.yml
- view playbook –> cat playbookname.yml
- run the playbook –> ansible-playbook -i playbookname.yml
- Check syntax of playbook –> ansible-playbook -i playbookname.yml –check
- copy one ansible playbook to another playbook –> cp playbooksrc.yml playbookdest.yml
Simplicity in writing Ansible playbooks is helping it to overcome its competitors like chef and puppet. Today many cloud providers are choosing ansible tool for configuration management and deployments. Anyone with no prior programming language can easily work with ansible and can create Ansible playbooks. There are many online resources like Youtube, Udemy, docs are available to enhance the ansible knowledge. one can install the Ansible package and practice from any machine as it is an open-source tool. Hope this article is helpful, do comment to know more about ansible or cloud-related queries.