What Is Ansible?

If you’re in IT, you’re hearing 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!

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.

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.


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 an 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 certain 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 just list the tasks needed 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 manually configure the applications on every machine. 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 musical 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 continually manually monitor each machine for security compliance. 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.

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 common 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 own 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 list 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 because they describe the tasks to be done easily and without the need for the user to know or remember any special 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.

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 big improvement over the original UI. Ansible Tower contains the most important 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. 

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 build 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 manage 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 important 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 own 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 a 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 new release, redo the configuration to point to the new release, and then finally, stop the previous (old) release.

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 constantly 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.

To sum up, using Ansible with Docker can greatly 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 Foundation 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.