What is Ansible: Advantages, Features, and Architecture

If you’re in IT, you hear about Ansible more and more lately. CIO calls it the DevOps “darling” for software automation, adding that Ansible “has come from nowhere to be the No. 1 choice for software automation in many organizations.” StackShare lists more than 1,000 companies that use Ansible, including Intel, Evernote, and Hootsuite, and the Ansible blog says Apple and NASA have adopted it as well. So what exactly is Ansible, and why has it gained popularity so quickly? We’ll delve into that here, and we’ll also tell you a bit about why Ansible and Docker work so well together, and how to use Ansible in Docker. You’ll get a glimpse of why the Ansible-Docker combination is so powerful. Let’s get started by going through what is ansible.

What is Ansible?

Ansible is an open-source automation tool, or platform, used for IT tasks such as configuration management, application deployment, intraservice orchestration, and provisioning. Automation is crucial these days, with IT environments that are too complex and often need to scale too quickly for system administrators and developers to keep up if they had to do everything manually. Automation simplifies complex tasks, not just making developers’ jobs more manageable but allowing them to focus attention on other tasks that add value to an organization. In other words, it frees up time and increases efficiency. And Ansible, as noted above, is rapidly rising to the top in the world of automation tools. Let’s look at some of the reasons for Ansible’s popularity.

Now that we have seen what is Ansible, let us find out the various advantages of Ansible.

Increase team productivity and improve business outcomes with the Ansible Foundation Training Course. Enroll now!

Advantages of Ansible

  • Free: Ansible is an open-source tool.
  • Very simple to set up and use: No special coding skills are necessary to use Ansible’s playbooks (more on playbooks later).
  • Powerful: Ansible lets you model even highly complex IT workflows. 
  • Flexible: You can orchestrate the entire application environment no matter where it’s deployed. You can also customize it based on your needs.
  • Agentless: You don’t need to install any other software or firewall ports on the client systems you want to automate. You also don’t have to set up a separate management structure.
  • Efficient: Because you don’t need to install any extra software, there’s more room for application resources on your server.

Next, in our path to understanding what ansible is, let us find out the features and capabilities of Ansible.

Ansible’s Features and Capabilities

Configuration Management

Ansible is designed to be very simple, reliable, and consistent for configuration management. If you’re already in IT, you can get up and running with it very quickly. Ansible configurations are simple data descriptions of infrastructure and are both readable by humans and parsable by machines. All you need to start managing systems is a password or an SSH (Secure Socket Shell, a network protocol) key. An example of how easy Ansible makes configuration management: If you want to install an updated version of a specific type of software on all the machines in your enterprise, all you have to do is write out all the IP addresses of the nodes (also called remote hosts) and write an Ansible playbook to install it on all the nodes, then run the playbook from your control machine.

Application Deployment

Ansible lets you quickly and easily deploy multitier apps. You won’t need to write custom code to automate your systems; you list the tasks required to be done by writing a playbook, and Ansible will figure out how to get your systems to the state you want them to be in. In other words, you won’t have to configure the applications on every machine manually. When you run a playbook from your control machine, Ansible uses SSH to communicate with the remote hosts and run all the commands (tasks).

Orchestration

As the name suggests, orchestration involves bringing different elements into a beautifully run whole operation—similar to the way a musical conductor brings the notes produced by all the different instruments into a cohesive artistic work. For example, with application deployment, you need to manage not just the front-end and backend services but the databases, networks, storage, and so on. You also need to make sure that all the tasks are handled in the proper order. Ansible uses automated workflows, provisioning, and more to make orchestrating tasks easy. And once you’ve defined your infrastructure using the Ansible playbooks, you can use that same orchestration wherever you need to, thanks to the portability of Ansible playbooks.

Security and Compliance

As with application deployment, sitewide security policies (such as firewall rules or locking down users) can be implemented along with other automated processes. If you configure the security details on the control machine and run the associated playbook, all the remote hosts will automatically be updated with those details. That means you won’t need to monitor each machine for security compliance continually manually. And for extra security, an admin’s user ID and password aren’t retrievable in plain text on Ansible.

Cloud Provisioning

The first step in automating your applications’ life cycle is automating the provisioning of your infrastructure. With Ansible, you can provision cloud platforms, virtualized hosts, network devices, and bare-metal servers.

Next in our learning of what is Ansible, let us learn the Ansible architecture.

Ansible Architecture

Now let’s talk a bit about the pieces that make up the Ansible environment.

Modules

Modules are like small programs that Ansible pushes out from a control machine to all the nodes or remote hosts. The modules are executed using playbooks (see below), and they control things such as services, packages, and files. Ansible executes all the modules for installing updates or whatever the required task is, and then removes them when finished. Ansible provides more than 450 modules for everyday tasks.

Plugins

As you probably already know from many other tools and platforms, plugins are extra pieces of code that augment functionality. Ansible comes with a number of its plugins, but you can write your own as well. Action, cache, and callback plugins are three examples.

Inventories

All the machines you’re using with Ansible (the control machine plus nodes) are listed in a single simple file, along with their IP addresses, databases, servers and so on. Once you register the inventory, you can assign variables to any of the hosts using a simple text file. You can also pull inventory from sources like EC2 (Amazon Elastic Compute Cloud).

Playbooks

Ansible playbooks are like instruction manuals for tasks. They are simple files written in YAML, which stands for YAML Ain’t Markup Language, a human-readable data serialization language. Playbooks are really at the heart of what makes Ansible so popular is because they describe the tasks to be done quickly and without the need for the user to know or remember any particular syntax. Not only can they declare configurations, but they can orchestrate the steps of any manually ordered task, and can execute tasks at the same time or at different times.

Each playbook is composed of one or multiple plays, and the goal of a play is to map a group of hosts to well-defined roles, represented by tasks.

APIs

Various APIs (application programming interfaces) are available so you can extend Ansible’s connection types (meaning more than just SSH for transport), callbacks and more.

Learn the basics of Devops

Watch the beginner level video lessons for FREEGet Access Now
Learn the basics of Devops

What is Ansible Tower?

Ansible Tower is Red Hat’s commercial web-based solution for managing Ansible. Its best-known feature is an easy-to-use UI (user interface) for managing configurations and deployments, which is a significant improvement over the original UI. Ansible Tower contains the essential features of Ansible, especially those that are easier to see in a graphical format rather than a text-based format. It is free for up to 10 nodes. 

As we are learning more about what is Ansible, let us learn the several advantages of Ansible.

Advantages of Using Ansible With Docker

Ansible does a great job of automating Docker and operationalizing the process of building and deploying containers. If you’re managing a traditional IT system, for example, it can be hard to add container-tooling functionality. But Ansible removes the need to do processes manually. There are four main advantages of using Ansible with Docker:

  1. Portability/Flexibility

    The fact that Ansible playbooks are portable, meaning they can be used anywhere, as well as repeatable, can save you a lot of time and effort. For example, if you use a pure Dockerfile to build a container, then you can reproduce the application only in a Docker container. If you use an Ansible playbook to create a container, on the other hand, then you can reproduce the application in Docker, on the cloud, and so on.
  2. Auditability

    Even if you create containers, you’ll still need to monitor code and track vulnerabilities. Using Ansible with Docker, you can easily track who has deployed which containers as well as what’s in all of the containers, and know that you can rebuild any containers as necessary.
  3. Management of Entire Environments

    With Ansible, you already know you can manage your Docker containers. But you can also maintain the environment that all the containers are in, even in highly complex environments. Ansible can monitor containers and non-containers at the same time, which is essential because containerized applications often need to “talk” with noncontainerized applications. 
  4. Similar Syntax

    As mentioned, Ansible used YAML files for its playbooks. Docker uses its non-YAML scripts, but they are very similar and can do almost the same things.

How to Use Ansible With Docker?

First, let’s talk about what Docker is. Docker is a Linux-based open-source platform used to help automate the deployment of applications within software containers. (A container is a unit of software in which code and all of its dependencies are packaged together; setting up software this way helps an application run reliably and consistently in multiple computing environments.) 

Now let’s delve further into using Ansible with Docker. As mentioned, you can use Ansible to automate Docker and to build and deploy Docker containers. First, you’ll need to have Docker SDK for Python installed. After you install the tools, examine the last Ansible rolebdd, and then perform deployment using the blue-green technique. Don’t forget to test! Run both integration and stress tests; otherwise, your application may not run correctly. Make sure you have the newest version of the container, run the old application at the same time as the new one, run tests after deployment, do the notifying about the latest release, redo the configuration to point to the new release, and then finally, stop the previous (old) version.

Once the application has passed all the tests, and the configuration is set to the new application, here’s how you get Ansible and Docker to work together. First, make sure you have Git, Vagrant, and VirtualBox installed. Next, create a Vagrant file that has an Ubuntu virtual machine. Then run your Ansible playbook—this will install and configure everything. Then you can deploy your application. Remember that some of the components have to be downloaded, so this may add the time the first time you deploy.

Managing Docker Containers Using Ansible Modules

Ansible has several modules for managing Docker; a few of these are docker_image, docker_container, and docker_service. Docker_image is used for building, loading, or removing images and also for tagging and archiving images. Docker_container lets you create and destroy Docker containers, as well as start, stop and update them. Docker_service assists in starting, shutting down, and scaling services. As updates are continually being made to both Ansible and Docker, look for the most recent list of modules and their functions, along with system requirements and more, in the Ansible guide to working with Docker.

Check out the following video to learn more about what is Ansible -

To sum up, using Ansible with Docker can significantly simplify your processes by allowing you to work with containers and to automate all that work! It’s no wonder the Ansible-Docker combination is so popular. And learning how to use Ansible with Docker won’t just benefit your organization; according to Payscale, the average salary of a developer with Ansible skills is $110,000 per year, and some developers earn even more. According to Dice, Ansible is the highest-paying DevOps skill.

To learn more about Ansible and get started on the path to earning more and being more valuable to your company, check out Simplilearn’s Ansible Training Course today.

About the Author

Shivam AroraShivam Arora

Shivam Arora is a Senior Product Manager at Simplilearn. Passionate about driving product growth, Shivam has managed key AI and IOT based products across different business functions. He has 6+ years of product experience with a Masters in Marketing and Business Analytics.

View More
  • Disclaimer
  • PMP, PMI, PMBOK, CAPM, PgMP, PfMP, ACP, PBA, RMP, SP, and OPM3 are registered marks of the Project Management Institute, Inc.