Software Development Kit (SDK) and API Discussions

How to read "quota-user-name" out of "quota-report" via API?


Hi there

I want to create an interface for my Windows admins to see actual quota usage on the filer. I managed to get an output via invoking "quota-report", but I'm unable to read the value of "quota-user-name" out of my "quota-report".

Code is (Perl):

*** snip ***

                my $quota_info = $out->child_get("quotas");
                my @result = $quota_info->children_get();
                foreach $quota (@result) {
                        my $quota_username = $quota->child_get_string("quota-user-name");
                        my $quota_limit = $quota->child_get_int("disk-limit");
                        my $quota_used = $quota->child_get_int("disk-used");
                        print ("Quota: $quota_username: $quota_limit (Limit), $quota_used (Used)\n");

*** snap ***

$quota_username is always empty, but in some cases there is a value there:

*** snip ***


*** snap ***

Does someone has a clue how to get the value "BUILTIN\Administrators" out of my quota-report? I guess, it's pretty simple ...

Thanks in advance.



little grave digging but better late than never

reason is quite simple - lack of info in SDK - I had hit the same wall when I was writing some tools for quota  beeing feed up with Ontap WebGUI 😕

reason is: quota-users is only populated then you have user with default quota applied 

when in etc/quotas you have entry then user quota-user is empty but instead quota-target contains user to whom you had entered specfic quota

and it is not the end ...of fun

I don't know that weed SDK developers smoke - but to access quota-users data you have to iterate not to child but to child of the child (I really cant think a reason why it is done this manner)

sorry for C# but it should be clear enough


if (quoInfo.GetChildByName("quota-target") != null)


     if (quoInfo.GetChildByName("quota-users") != null)


                 NaElement targetElem = quoInfo.GetChildByName("quota-users");

                 System.Collections.IList users = targetElem.GetChildren();

                 System.Collections.IEnumerator usersIter = users.GetEnumerator();

                 while (usersIter.MoveNext())


                             NaElement usersInfo = (NaElement)usersIter.Current;

               if (usersInfo.GetChildByName("quota-user-name") != null)


                    Console.Write(usersInfo.GetChildContent("quota-user-name") + "\t");





Hope it helps someone


Is there a way I can have the above snippet in Python. The following is what I have:

output = s.invoke("quota-report")

quotalist = output.child_get("quotas").children_get()

for q in quotalist:

     print q.child_get_string("disk-limit")

     print q.child_get_string("quota-type") --> "user"

     print "Target", q.child_get_string("quota-target") --> "this is blank for all the listings"


     # Tried the following:

     u = NaElement ("quota-user")


     print q.child_get(u) --> "None"

From what I see the quota-target should not be "null" but the api is throwing the target as "null"

Any help here will be appreciated.


I don't see anything wrong with the way you're trying to access quota-target, so it's likely that quota-target is being returned blank from the API call. You can see the raw results of the API like this to verify:


The documentation for quota-target notes:

For an explicit quota, this value is a fully qualified quota target which is the quota target specified in the /etc/quotas file and the domain in the QUOTA_TARGET_DOMAIN directive is in effect. See na_quotas(5) for more information. Mulitple targets are comma separated. For a derived quota, the field is blank.

Are your quotas derived rather than explicit? That would explain them being blank.