Skip to main content

Receptor plugin to communicate with Ansible Tower API

Project description

receptor-catalog

Receptor Catalog Worker Plugin

This plugin allows the receptor node to send HTTP GET and POST requests to Ansible Tower.

The config file on the receptor for this plugin should have the following values defined in the receptor.conf

[plugin_receptor_catalog]
debug=True
username=admin
password=******
url=https://your_ansible_tower/
verify_ssl=False

The payload supported by the plugin contains

  1. method: GET|POST
  2. href_slug: the href to the resource or collection e.g api/v2/job_templates/
  3. accept_encoding {Optional}: gzip
  4. fetch_all_pages {Optional}: True|False
  5. params: Extra query or post parameters as a hash/dictionary
  6. apply_filter {Optional}: A JMESPath search string to limit the amount of data that is returned. The filter can be specified as a hash/dictionary or as a string. The hash is used when filtering responses from a list call when the response contains an array of objects. The string filter is used when dealing with a single object.

The response payload coming back will have the following keys

  1. status: The HTTP Status code
  2. body: The response body received from the Ansible Tower if Accept-Encoding was gzip, the body will be compressed and the caller would have to uncompress the data. The first 2 bytes of the payload can be checked to see if the data has been gzip compressed. A valid gzip'ed buffer would start with 0x1f 0x8B

To install the plugin in your local dev environment

python setup.py install

To run the tests

python setup.py test

Filtering Examples

Filters are based on JMESPath which allows us to search and filter out sections of JSON. https://jmespath.org

When fetching an array of objects you have to specific the filter as a dictionary with the key name containing the name of the attribute. e.g apply_filter ={results='results[].{catalog_id:id, url:url,created:created,name:name, modified:modified, playbook:playbook}'}

Here we are filtering the results key so we have to specify the filter as a dictionary. The plugin will swap out the contents of the key with the filtered results. The filtered response will contain


{

"count": 28,

"next": "/api/v2/job_templates/?page=2",

"previous": null,

"results": [

{

"catalog_id": 5,

"url": "/api/v2/job_templates/5/",

"created": "2019-05-29T15:17:05.466994Z",

"name": "Demo Job Template",

"modified": "2019-05-29T15:17:05.467018Z",

"playbook": "hello_world.yml"

},

{

"catalog_id": 58,

"url": "/api/v2/job_templates/58/",

"created": "2020-03-06T21:56:55.134663Z",

"name": "Ephemeral Template",

"modified": "2020-03-06T22:15:15.655800Z",

"playbook": "hello_world.yml"

},

When a single object needs to be filtered we specify the filter as a string

apply_filter = '{id:id, url:url, name:name, description:descripti on, playbook:playbook}'

The response contains

{

"id": 6565,

"url": "/api/v2/jobs/6565/",

"name": "Hello World",

"description": "Test Description",

"playbook": "hello_world.yml"

}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

receptor-catalog-0.6.3.tar.gz (9.0 kB view hashes)

Uploaded Source

Built Distribution

receptor_catalog-0.6.3-py3-none-any.whl (9.3 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page