06/28/2022 | News release | Distributed by Public on 06/29/2022 10:08
Ansible Runner is a tool and Python library that helps when interfacing with Ansible directly or as part of another system. Ansible Runner works as a standalone tool, a container image interface, or a Python module that can be imported. The goal is to provide a stable and consistent interface abstraction to Ansible.
The Ansible Runner as a Service (ARaaS) wraps the ansible runner interface inside a REST API enabling Ansible playbooks to be executed and queried from other platforms.
Ensure your code delivers the experience and functionality the business expects by optimizing performance across test, pre-production, and production environments with AppDynamics.
The incentive for this is to:
ARaaS Features
Security
Monitoring
Playbook Execution
Playbook State
Inventory management
Developer Friendly
Deployment
ARaaS Prerequisites
So far, testing has been mainly against Fedora (28) and CentOS7 for the docker image. Package Dependencies:
ARaaS Installation
Assuming you have an environment that meets the python3 dependencies, simply unzip the archive and run the following command.
python3 ansible_runner_service.py
When you run from any directory outside of /usr, the script regards this as 'dev' mode. In this mode, all files and paths are relative to the path that you've unzipped the project into.
For 'prod' mode, a setup.py is provided. Once the package is installed and called from /usr/*/bin, the script will expect config and output files to be found in all the normal 'production' locations.
sudo python3 setup.py install --record installed_files --single-version-externally-managed
Once this is installed, you may start the service.
python3 ansible_runner_service.py
ARaaS API Endpoints
Once the service is running, you can point your browser to https://localhost:5001/api to show which endpoints are available.
Each endpoint is described along with a curl example showing invocation and output.
You may click on any row to expand the description of the API route and show the curl example.
The app uses a self-signed certificate, so all examples use the -k parameter (insecure mode).
ARaaS API Endpoints 'cheat sheet'
API Routes and descriptions
/api - Show available API endpoints (this info)
/api/v1/groups - List all the defined groups in the inventory
/api/v1/groups/<group_name> - Manage groups within the inventory
/ /v1/groupvars/<group_name> - Manage group variables
/api/v1/hosts - Return a list of hosts from the inventory
/api/v1/hosts/<host_name> - Show group membership for a given host
/api/v1/hosts/<host_name>/groups/<group_name> - Manage ansible control of a given host
/api/v1/hostvars/<host_name>/groups/<group_name> - Manage host variables for a specific group within the inventory
/api/v1/jobs/<play_uuid>/events - Return a list of events within a given playbook run (job)
/api/v1/jobs/<play_uuid>/events/<event_uuid> - Return the output of a specific task within a playbook
/api/v1/playbooks - Return the names of all available playbooks
/api/v1/playbooks/<play_uuid> - Query the state or cancel a playbook run (by uuid)
/api/v1/playbooks/<playbook_name> - Start a playbook by name, returning the play's uuid
/api/v1/playbooks/<playbook_name>/tags/ - Start a playbook using tags to control which tasks run
/metrics - Provide Prometheus compatible statistics which describe playbook activity
ARaaS Example
Get the list of available playbooks
curl -k -i https://localhost:5001/api/v1/playbooks -X GET
Run the playbook.yml playbook, passing the time_delay parameter (30 secs should be enough)
curl -k -i -H "Content-Type: application/json" --data '{"time_delay": 30}' https://localhost:5001/api/v1/playbooks/playbook.yml -X POST
Get a list of all the events in a playbook. The return list consists of all the job event ID's
curl -k -i https://localhost:5001/api/v1/jobs/de264512-32f1-11ec-aaf5-005056a854a6/events -X GET
To get specific output from a job event, you can query the job event
curl -k -i https://localhost:5001/api/v1/jobs/de264512-32f1-11ec-aaf5-005056a854a6/events/16-b853adec-9978-4499-8e6d-d2aecc34e108 -X GET
Obviously, you'll need to change the playbook UUID and job UUIDs for your run.
ARaaS and AppD Usecase
What can you do?…
…Yep, you got it right!
Final thought
That is cool, right? Wrapping a plain/CLI Ansible playbook inside a REST API call! Think of the (AppD/Others?) integration possibilities…
Related resources
This article aims to cover the basic functionality of Ansible Runner as a Service. Here are some helpful links to learn more:
We'd love to hear what you think. Ask a question or leave a comment below.
And stay connected with Cisco DevNet on social!
LinkedIn | Twitter @CiscoDevNet | Facebook | YouTube Channel
Share: