Ansible is designed around the way people work and the way people work together
What is Ansible
Ansible is simple IT engine for automation, it is designed for manage many systems, rather than just one at a time. Ansible automates cloud provisioning, configuration management, application deployment, intra-service orchestration, and many other IT operations. It is easy to deploy due to using no agents and no additional custom security infrastructure. We can define own configuration management in simple YAML language, which is named ansible-playbook. YAML is easier to read and write by humans than other common data formats like XML or JSON. Furthermore, most programming languages contain libraries which operate and work YAML.
Ansible works collaterally on many systems in your infrastructure, so it is important to specify a roster to keep
hosts. This list is named
inventory, which can be in one of many formats.
For this example, the format is an
INI-like and is saved in
Playbook is the way to direct systems, which is particularly powerful, compact and easy to read and write. As we said configuration multi-system management is formatted in YAML language. Ansible playbook consists of
plays, which contain
hosts we would like to manage, and
tasks we want to
Ansible for Embedded Linux
Note: This paragraph is relevant to Yocto build system There is possibility to need build image with custom Linux-based system for embedded with Ansible, using complete development environment, with tools, metadata and documentation, named Yocto. In addition, we would like to run ansible-playbook via python. It seems to be hard to implement. Nothing more simple! It is needed to add recipe to image with ansible from Python Ansible package #### Additional information For more information go to
Python API is very powerful, so we can manage and run ansible-playbook from python level, there is possibility to control nodes, write various plugins, extend Ansible to respond to various python events and plug in inventory data from external data sources.
Note: There is a permanent structure to build python program which operates ansible commands: First of all we have to import some modules needed to run ansible in python.
- Let’s describe some of them: *
jsonmodule to convert output to json format
ansiblemodule to manage e.g. inventory or plays *
TaskQueueManageris responsible for loading the play strategy plugin, which dispatches the Play’s tasks to hosts
CallbackBasemodule - base ansible callback class, that does nothing here, but new callbacks, which inherits from CallbackBase class and override methods, can execute custom actions
- ResultCallback which inherits from
CallbackBaseand manage the output of ansible. We can create and modify own methods to regulate the behaviour of the ansbile in python controller.
Note: we can override more methods. All specification can be found in CallbackBase
- Next step is to initialize needed objects. Options class to replace Ansible OptParser. Since we’re not calling it via CLI, we need something to provide options.
- Instantiate our
ResultCallbackfor handling results as they come in
- Then the script creates a VariableManager object, which is responsible for adding in all variables from the various sources, and keeping variable precedence consistent. Then create play with tasks - basic jobs we want to handle by ansible.
- Actually run it, using the
Runnerobject for collecting needed data and running the Ansible Playbook executor. The actual execution of the playbook is in a run method, so we can call it when we need to. The
__init__method just sets everything up for us. This should run your roles against your hosts! It will still output the usual data to Stderr/Stdout.
Ansible delivers IT automation that ends repetitive tasks and frees up DevOps teams for more strategic work. Manage the Ansbile via Python API is easy, it can be applied to operate a configuration on many systems at the time, using only simple python program.
We hope you enjoyed this post. If you have any comments please leave it below,
if you think this post provide valuable information please share with interested
parties. We are always open for leveraging Ansible and Python in IoT and
embedded environment. If you have project that can benefit from those IT
automation do not hesitate to drop us email