Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

In this worked example, we will produce the same CSV file output as in the first PowerShell worked example

...

Code Block
languagepy
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
languagepy
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
languagepy
  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.

...