In this worked example, we will produce the same CSV file output as in the first PowerShell worked example.
...
Code Block | ||
---|---|---|
| ||
import requests r = requests.get('http://vm-mike-2012b/api/v1/devices',auth=('admin','password')) max = r.headers['X-fetch-count'] data = r.json() count = len(data) |
By default the REST API "/api/v1/devices" page will return 200 devices at a time. We can increase or decrease this using the "fetch_size" parameter. The variable max contains the total number of devices. If this is more than 200 we would need to fetch a second batch - see other worked examples in this series for more details on that. In this example we will print at most 200. data holds the RestAPI data converted into a Python data structure, count is the number of devices returned.
...
Code Block | ||
---|---|---|
| ||
i = 0
print ('Host,RAM,CPU Type')
while (i < count):
row = data[i]
if ( 'host_name' in row ):
hostname = row['host_name']
else:
hostname = '(no hostname)'
|
The JSON to Python converter does not create empty key-value pairs for missing data, so we need to test for the key's existence each time when we're using it in a script (hence all the if..else statements)
For each device, we get the host_name (which can be empty) and the self (which is always set) values. 'self' contains a URL pointing to detailed information on the device which we then fetch to get the RAM and CPU information.
Code Block | ||
---|---|---|
| ||
url2 = row['self']
r2 = requests.get(url2,auth=('admin','password'))
device = r2.json()
if ('total_memory_mb' in device):
ram = device['total_memory_mb']
else:
ram = '(unknown ram)'
if ('cpu' in device):
cpu = device['cpu'][0]['cpu_model']
else:
cpu = '(unknown cpu)'
# remove commas from the cpu string
cpu = cpu.replace(',','')
print (hostname,',',ram,',',cpu,sep='')
i+=1 |
The JSON to Python converter does not create empty key-value pairs for missing data, so we need to test for the key's existence each time when we're using it in a script (hence all the if..else statements)
...
The CPU information if present is an array. In almost all architectures CPUs in a multi-cpu motherboard are identical, so for the putposes of this example, we just save the results for the first CPU.
...