Using API clients with ara-server¶
Once you’ve installed ara-server, you need to know how you’re going to use it.
Typically, ara-server is consumed by ara-clients which currently provides two python clients for the API.
ARA Offline REST API client¶
The default client, AraOfflineClient, is meant to be used to query the API
without requiring users to start or host an instance of ara-server.
To use the offline client, first install ara-server and ara-clients,
for example:
# Install ara-server and ara-clients
python3 -m venv ~/.ara/venv
~/.ara/venv/bin/pip install ara-server ara-clients
Then you can use it like this:
#!/usr/bin/env python3
# Import the client
from ara.clients.offline import AraOfflineClient
# Instanciate the offline client
client = AraOfflineClient()
ARA HTTP REST API client¶
AraHttpClient works with the same interface, methods and behavior as
AraOfflineClient.
The HTTP client does not require ara-server to be installed in order to be
used but expects a functional API endpoint at a specified location.
You can set your client to communicate with a remote ara-server API by
specifying an endpoint parameter:
#!/usr/bin/env python3
# Import the client
from ara.clients.http import AraHttpClient
# Instanciate the HTTP client with an endpoint where ara-server is listening
client = AraHttpClient(endpoint="https://api.demo.recordsansible.org")
Example API usage¶
Note
API documentation is a work in progress.
Once you’ve instanciated your client, you’re ready to query the API.
Here’s a code example to help you get started:
# Get a list of failed playbooks
# /api/v1/playbooks?status=failed
playbooks = client.get("/api/v1/playbooks", status="failed")
# If there are any failed playbooks, retrieve their failed results
# and provide some insight.
for playbook in playbooks["results"]:
# Retrieve results for this playbook
# /api/v1/results?playbook=<:id>&status=failed
results = client.get("/api/v1/results", playbook=playbook["id"], status="failed")
# Iterate over failed results to get meaningful data back
for result in results["results"]:
# Get the task that generated this result
# /api/v1/tasks/<:id>
task = client.get(f"/api/v1/tasks/{result['task']}")
# Get the file from which this task ran from
# /api/v1/files/<:id>
file = client.get(f"/api/v1/files/{task['file']}")
# Get the host on which this result happened
# /api/v1/hosts/<:id>
host = client.get(f"/api/v1/hosts/{result['host']}")
# Print something useful
print(f"Failure on {host['name']}: '{task['name']}' ({file['path']}:{task['lineno']})")