Behzad Koohi
Behzad Koohi

Reputation: 1

Softlayer VSI total Sotrage

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

Answers (2)

Chris Gallo
Chris Gallo

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

Albert Camacho
Albert Camacho

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

Related Questions