vADC Docs

Tech Tip: Using the RESTful Control API with Python - listpools

by ricknelson on ‎02-27-2013 10:21 AM (1,013 Views)

The following code uses Stingray's RESTful API to list all the pools defined on a cluster. The code is written in Python. This example has more extensive comments then the following examples and most of these are applicable to all the examples. This program does a single GET request for the list of pools and then loops through that list, each element of which is a dictionary, and then outputs the pool name.

listpools.py


#! /usr/bin/env python


import requests # The REST Client


import json # For serializing and deserializing JSON


import sys



print "Pools:\n"



url = 'https://stingray.example.com:9070/api/tm/1.0/config/active/pools';



# Setup the session


client = requests.Session()


# Set the Userid and Password.  These need to match a UserId and Password for a Stingray user


client.auth = ('admin', 'admin')


# Don't require that the Stingray's certiciate be from a certiticate authority because


# Stingray certificates are self-signed.


client.verify = False



try:


    # Do the HTTP GET to get the lists of pools


    response = client.get(url)


except requests.exceptions.ConnectionError:


    # We weren't able to connect to the Stingray.  The most likely reasons for this are that the


    # hostname of the Stingray instance is incorrect, or this client doesn't have network access


    # to the Stingray instance or to port 9070 on the Stingray instance, or the RESTful API could


    # be disabled on the Stingray instance, or the Stingray instance isn't using the default port.


    print "Error: Unable to connect to " + url


    sys.exit(1)



data = json.loads(response.content) # Deserialize the JSON response into a dictionary


if response.status_code == 200: # We always expect a 200


    # Since we are getting a list of pools we expect the first element to be 'children'


    if data.has_key('children'):


        # The value for the key 'children' will be a list containing a dictionary for each pool


        # with key, 'name', set to the name of the pool and key, 'href', set to the URL of the pool


        pools = data['children']


        for i, pool in enumerate(pools):


            print pool['name'] # This is the name of the pool


    else:


        print 'Error: No children found'


else:


    print "Error getting pool list: URL=%s Status=%d Id=%s: %s" %(url, response.status_code, data['error_id'], data['error_text'])








Running the example

This code was tested with Python 2.7.3 and version 1.1.0 of the requests library.

Run the Python script as follows:

$ listpools.py

Pools:


Pool1

Pool2

Read More