Reputation: 1
This REST call displays a list of VMs with CPU, Mem, Storage...how can I sum up total storage instead of displaying individual disk size?
https://APIID:[email protected]/rest/v3/SoftLayer_Account/getVirtualGuests?objectMask=mask[id,hostname,primaryIpAddress,primaryBackendIpAddress,maxCpu,maxMemory,domain,fullyQualifiedDomainName,createDate,operatingSystem[id,softwareDescription[longDescription]],networkVlans[vlanNumber,primarySubnetId,name],datacenter[name],powerState[keyName],blockDevices[id,mountType,diskImage[capacity]]]
Thanks Behzad
Upvotes: 0
Views: 80
Reputation: 191
This bit of python should work for you.
"""
Goes through each virtual guest, prints out the FQDN, each disk and its size
and then the total size for disks on that virtual guest.
"""
import SoftLayer
from pprint import pprint as pp
class example():
def __init__(self):
self.client = SoftLayer.Client()
def main(self):
mask = "mask[id,fullyQualifiedDomainName,blockDevices[diskImage[type]]]"
guests = self.client['SoftLayer_Account'].getVirtualGuests(mask=mask)
for guest in guests:
self.getSumStorage(guest)
def getSumStorage(self, guest):
"""
Gets the total disk space for each virtual guest.
DOES NOT COUNT SWAP SPACE in this total
"""
print("%s" % guest['fullyQualifiedDomainName'])
sumTotal = 0
for device in guest['blockDevices']:
try:
if device['diskImage']['type']['keyName'] == 'SWAP':
print("\tSWAP: %s - %s GB (not counted)" %(device['device'],device['diskImage']['capacity']) )
continue
else:
print("\tDisk: %s - %s GB" %(device['device'],device['diskImage']['capacity']) )
sumTotal = sumTotal + device['diskImage']['capacity']
except KeyError:
continue
print("TOTAL: %s GB" % sumTotal)
return sumTotal
if __name__ == "__main__":
main = example()
main.main()
Will output something like this:
$ python diskSum.py
LAMP1.asdf.com
Disk: 0 - 25 GB
SWAP: 1 - 2 GB (not counted)
TOTAL: 25 GB
LAMP2.asdf.com
Disk: 0 - 25 GB
SWAP: 1 - 2 GB (not counted)
TOTAL: 25 GB
Upvotes: 1
Reputation: 1104
Take account REST requests are only used to retrieve data of each datatype object, it means you wont be able to perform any calculation through REST.
In order to get the total storage, I recommend you to use some language like Python, Java, C#, Ruby, Golang, etc. which are supported by SoftLayer. See Softlayer API Overview
Upvotes: 0