Skip to content

Refactor Quota Summary API#10505

Open
julien-vaz wants to merge 27 commits intoapache:mainfrom
scclouds:refactor-quota-summary-api
Open

Refactor Quota Summary API#10505
julien-vaz wants to merge 27 commits intoapache:mainfrom
scclouds:refactor-quota-summary-api

Conversation

@julien-vaz
Copy link
Contributor

@julien-vaz julien-vaz commented Mar 5, 2025

Description

The quotaSummary API has abstract behaviors and codes, as well as return values not aligned with its purposes. Furthermore, when the account is a project, no information is returned.

Also, in the UI, when opening the Quota Summary details for accounts who owned removed domains, the CloudStack launches an error to the user.

Therefore, this PR:

  • improves the API's behavior and return values;
  • adds information for project accounts (through parameter listall=true);
  • adds information for accounts/domains which have been already removed and a filter for accounts in the UI;

Types of changes

  • Breaking change (fix or feature that would cause existing functionality to change)
  • New feature (non-breaking change which adds functionality)
  • Bug fix (non-breaking change which fixes an issue)
  • Enhancement (improves an existing feature and functionality)
  • Cleanup (Code refactoring and cleanup, that may add test cases)
  • build/CI
  • test (unit or integration test code)

Feature/Enhancement Scale or Bug Severity

Feature/Enhancement Scale

  • Major
  • Minor

How Has This Been Tested?

On CloudMonkey I called quotaSummary API and checked the return value:

  • only relevant information about the summaries is being displayed;
  • accounts and domains which have been removed are especified in the summary;
  • project accounts are also being considered by the API.

On the UI, the filter for removed accounts is working properly.

@julien-vaz
Copy link
Contributor Author

@blueorangutan package

@blueorangutan
Copy link

@julien-vaz a [SL] Jenkins job has been kicked to build packages. It will be bundled with KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

@blueorangutan
Copy link

Packaging result [SF]: ✖️ el8 ✖️ el9 ✖️ debian ✖️ suse15. SL-JID 12665

@codecov
Copy link

codecov bot commented Mar 5, 2025

Codecov Report

❌ Patch coverage is 6.66667% with 210 lines in your changes missing coverage. Please review.
✅ Project coverage is 17.92%. Comparing base (da85858) to head (90180dd).

Files with missing lines Patch % Lines
...udstack/api/response/QuotaResponseBuilderImpl.java 20.31% 50 Missing and 1 partial ⚠️
...org/apache/cloudstack/quota/vo/QuotaSummaryVO.java 0.00% 47 Missing ⚠️
...ache/cloudstack/quota/dao/QuotaSummaryDaoImpl.java 0.00% 28 Missing ⚠️
...c/main/java/com/cloud/user/AccountManagerImpl.java 0.00% 28 Missing ⚠️
.../cloudstack/api/response/QuotaSummaryResponse.java 0.00% 24 Missing ⚠️
...apache/cloudstack/api/command/QuotaSummaryCmd.java 4.76% 18 Missing and 2 partials ⚠️
...ache/cloudstack/quota/QuotaAccountStateFilter.java 0.00% 11 Missing ⚠️
.../main/java/com/cloud/domain/dao/DomainDaoImpl.java 0.00% 1 Missing ⚠️
Additional details and impacted files
@@             Coverage Diff              @@
##               main   #10505      +/-   ##
============================================
- Coverage     17.93%   17.92%   -0.02%     
+ Complexity    16160    16154       -6     
============================================
  Files          5939     5942       +3     
  Lines        533147   533263     +116     
  Branches      65237    65252      +15     
============================================
- Hits          95607    95564      -43     
- Misses       426797   426966     +169     
+ Partials      10743    10733      -10     
Flag Coverage Δ
uitests 3.66% <ø> (ø)
unittests 19.03% <6.66%> (-0.02%) ⬇️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@winterhazel winterhazel self-requested a review March 6, 2025 13:06
@julien-vaz
Copy link
Contributor Author

@blueorangutan package

@blueorangutan
Copy link

@julien-vaz a [SL] Jenkins job has been kicked to build packages. It will be bundled with KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

@blueorangutan
Copy link

Packaging result [SF]: ✖️ el8 ✖️ el9 ✖️ debian ✖️ suse15. SL-JID 12690

@julien-vaz
Copy link
Contributor Author

julien-vaz commented Mar 11, 2025

I've just successfully builded the packages locally with -Dnoredist. Therefore, I'm requesting the package building again

@julien-vaz
Copy link
Contributor Author

@blueorangutan package

@blueorangutan
Copy link

@julien-vaz a [SL] Jenkins job has been kicked to build packages. It will be bundled with KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

@blueorangutan
Copy link

Packaging result [SF]: ✖️ el8 ✖️ el9 ✖️ debian ✖️ suse15. SL-JID 12739

@julien-vaz
Copy link
Contributor Author

@blueorangutan package

@blueorangutan
Copy link

@julien-vaz a [SL] Jenkins job has been kicked to build packages. It will be bundled with KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

@blueorangutan
Copy link

Packaging result [SF]: ✔️ el8 ✔️ el9 ✔️ debian ✔️ suse15. SL-JID 12743

…/command/QuotaSummaryCmd.java

Co-authored-by: Fabricio Duarte <fabricio.duarte.jr@gmail.com>
@bernardodemarco bernardodemarco self-requested a review June 4, 2025 17:39
@sureshanaparti
Copy link
Contributor

@blueorangutan package

@blueorangutan
Copy link

@sureshanaparti a [SL] Jenkins job has been kicked to build packages. It will be bundled with KVM, XenServer and VMware SystemVM templates. I'll keep you posted as I make progress.

@winterhazel
Copy link
Member

@blueorangutan package

@blueorangutan
Copy link

@winterhazel a [SL] Jenkins job has been kicked to build packages. It will be bundled with no SystemVM templates. I'll keep you posted as I make progress.

@blueorangutan
Copy link

Packaging result [SF]: ✖️ el8 ✖️ el9 ✖️ debian ✖️ suse15. SL-JID 16688

@winterhazel
Copy link
Member

@blueorangutan package

@blueorangutan
Copy link

@winterhazel a [SL] Jenkins job has been kicked to build packages. It will be bundled with no SystemVM templates. I'll keep you posted as I make progress.

@blueorangutan
Copy link

Packaging result [SF]: ✖️ el8 ✖️ el9 ✖️ debian ✖️ suse15. SL-JID 16689

@winterhazel winterhazel self-requested a review February 11, 2026 20:56
@winterhazel
Copy link
Member

@blueorangutan package

@blueorangutan
Copy link

@winterhazel a [SL] Jenkins job has been kicked to build packages. It will be bundled with no SystemVM templates. I'll keep you posted as I make progress.

@blueorangutan
Copy link

Packaging result [SF]: ✔️ el8 ✔️ el9 ✔️ el10 ✔️ debian ✔️ suse15. SL-JID 16887

@DaanHoogland
Copy link
Contributor

@blueorangutan test

@blueorangutan
Copy link

@DaanHoogland a [SL] Trillian-Jenkins test job (ol8 mgmt + kvm-ol8) has been kicked to run smoke tests

@blueorangutan
Copy link

[SF] Trillian test result (tid-15511)
Environment: kvm-ol8 (x2), zone: Advanced Networking with Mgmt server ol8
Total time taken: 52683 seconds
Marvin logs: https://github.com/blueorangutan/acs-prs/releases/download/trillian/pr10505-t15511-kvm-ol8.zip
Smoke tests completed. 146 look OK, 4 have errors, 0 did not run
Only failed and skipped tests results shown below:

Test Result Time (s) Test File
test_LoginApiDomain Error 6.90 test_accounts.py
ContextSuite context=TestListIdsParams>:teardown Error 1.13 test_list_ids_parameter.py
test_01_snapshot_root_disk Error 5.88 test_snapshots.py
test_02_list_snapshots_with_removed_data_store Error 45.55 test_snapshots.py
test_02_list_snapshots_with_removed_data_store Error 45.56 test_snapshots.py
ContextSuite context=TestSnapshotStandaloneBackup>:teardown Error 25.41 test_snapshots.py
test_01_snapshot_usage Error 19.63 test_usage.py
test_01_vpn_usage Error 1.08 test_usage.py

@github-actions
Copy link

This pull request has merge conflicts. Dear author, please fix the conflicts and sync your branch with the base branch.

@winterhazel
Copy link
Member

winterhazel commented Mar 1, 2026

Looks good.

I tested by fuzzing a little with the API's parameters (account, accountid, accountstatetoshow, domainid, keyword, listall, projectid) for root admin, domain admin, and user accounts. In the tests, I validated that the API returned the expected response while performing correct permission checking.

In one of the latest commits, I added a change in ParamProcessWorker.java which we forgot to include in commit 7d70e32 that facilitates the permissioning logic of this API. I will open a separate PR for it this week.

Environment configuration

My environment had two domains: ROOT and d1.

MariaDB [cloud]> select uuid,name,path,parent from domain;
+--------------------------------------+------+------+--------+
| uuid                                 | name | path | parent |
+--------------------------------------+------+------+--------+
| de3f3dfb-f84b-11f0-8ace-32e0826870ba | ROOT | /    |   NULL |
| dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d | d1   | /d1/ |      1 |
+--------------------------------------+------+------+--------+

Each domain had a domain admin (dr for ROOT and d1 for d1) and a user account (ur for ROOT and u1 for d1). ROOT also had a project and the root admin.

MariaDB [cloud]> select uuid,account_name,domain_id,role_id from account;
+--------------------------------------+--------------------------+-----------+---------+
| uuid                                 | account_name             | domain_id | role_id |
+--------------------------------------+--------------------------+-----------+---------+
| f684aae8-f84b-11f0-8ace-32e0826870ba | system                   |         1 |       1 |
| f684da1a-f84b-11f0-8ace-32e0826870ba | admin                    |         1 |       1 |
| 17dfdcce-fd02-46d0-85ae-7de91fda634c | baremetal-system-account |         1 |       4 |
| aaba75a0-a575-41be-80e1-dbea14c10e51 | dr                       |         1 |       3 |
| feaffae2-7ba4-45dc-b46f-20ae86192685 | d1                       |         2 |       3 |
| 2f49212d-d6d5-437b-800d-a7bb4a8def4b | u1                       |         2 |       4 |
| b029e8b8-e539-4d1a-906d-3d4f2fb36b82 | ur                       |         1 |       4 |
| b14100c6-d9f6-450e-87a2-0833bb45e5f8 | PrjAcct-aa-1             |         1 |    NULL |
+--------------------------------------+--------------------------+-----------+---------+

Test 1 (user accounts)

  • No parameters: returns only the user account's own summary.

     (u1) 🐱 > quota summary
     {
       "count": 1,
       "summary": [
         {
           "account": "u1",
           "accountid": "2f49212d-d6d5-437b-800d-a7bb4a8def4b",
           "accountremoved": false,
           "balance": 11,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
  • account: allows listing their own summary, but not the summary of other accounts.

     (u1) 🐱 > quota summary account=u1 domainid=dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d
     {
       "count": 1,
       "summary": [
         {
           "account": "u1",
           "accountid": "2f49212d-d6d5-437b-800d-a7bb4a8def4b",
           "accountremoved": false,
           "balance": 11,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
     (u1) 🐱 > quota summary account=d1 domainid=dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d
     🙈 Error: (HTTP 531, error code 4365) Caller does not have permission to operate with provided resource.
  • accountid: allows listing their own summary, but not the summary of other accounts.

     (u1) 🐱 > quota summary accountid=2f49212d-d6d5-437b-800d-a7bb4a8def4b
     {
       "count": 1,
       "summary": [
         {
           "account": "u1",
           "accountid": "2f49212d-d6d5-437b-800d-a7bb4a8def4b",
           "accountremoved": false,
           "balance": 11,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
     (u1) 🐱 > quota summary accountid=aaba75a0-a575-41be-80e1-dbea14c10e51
     🙈 Error: (HTTP 531, error code 4365) Caller does not have permission to operate with provided resource.
  • accountstatetoshow: the filtering is performed correctly, but only lists their own summary.

     (u1) 🐱 > quota summary accountstatetoshow=ACTIVE
     {
       "count": 1,
       "summary": [
         {
           "account": "u1",
           "accountid": "2f49212d-d6d5-437b-800d-a7bb4a8def4b",
           "accountremoved": false,
           "balance": 11,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
     (u1) 🐱 > quota summary accountstatetoshow=REMOVED
     (u1) 🐱 > quota summary accountstatetoshow=ALL
     {
       "count": 1,
       "summary": [
         {
           "account": "u1",
           "accountid": "2f49212d-d6d5-437b-800d-a7bb4a8def4b",
           "accountremoved": false,
           "balance": 11,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
  • domainid: only lists their own summary.

     (u1) 🐱 > quota summary domainid=dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d
     {
       "count": 1,
       "summary": [
         {
           "account": "u1",
           "accountid": "2f49212d-d6d5-437b-800d-a7bb4a8def4b",
           "accountremoved": false,
           "balance": 11,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
     (u1) 🐱 > quota summary domainid=de3f3dfb-f84b-11f0-8ace-32e0826870ba
     🙈 Error: (HTTP 531, error code 4365) Account Account [{"accountName":"u1","id":6,"uuid":"2f49212d-d6d5-437b-800d-a7bb4a8def4b"}] does not have permission to operate within domain id=de3f3dfb-f84b-11f0-8ace-32e0826870ba
  • keyword: allows filtering accounts that include this keyword in their name, but only returns the calling account anyways.

     (u1) 🐱 > quota summary keyword=u
     {
       "count": 1,
       "summary": [
         {
           "account": "u1",
           "accountid": "2f49212d-d6d5-437b-800d-a7bb4a8def4b",
           "accountremoved": false,
           "balance": 11,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
     (u1) 🐱 > quota summary keyword=a
     (u1) 🐱 > quota summary keyword=admin
     (u1) 🐱 > quota summary keyword=admin listall=true
  • listall: is ignored.

     (u1) 🐱 > quota summary listall=true
     {
       "count": 1,
       "summary": [
         {
           "account": "u1",
           "accountid": "2f49212d-d6d5-437b-800d-a7bb4a8def4b",
           "accountremoved": false,
           "balance": 11,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
     (u1) 🐱 > quota summary domainid=dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d listall=true
     {
       "count": 1,
       "summary": [
         {
           "account": "u1",
           "accountid": "2f49212d-d6d5-437b-800d-a7bb4a8def4b",
           "accountremoved": false,
           "balance": 11,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
  • projectid: user accounts are able to obtain the summary of projects which they belong to.

     (u1) 🐱 > quota summary projectid=c1ce41c4-7b01-4386-8264-479db5ace0bc
     🙈 Error: (HTTP 432, error code 9999) The API [quotaSummary] does not exist or is not available for this account/user in project [c1ce41c4-7b01-4386-8264-479db5ace0bc].
     (u1) 🐱 > set profile ur
     Loaded server profile: ur
     Url:         http://192.168.32.10:8080/client/api
     Username:    ur
     Domain:      /
     API Key:     
     Total APIs:  364
    
     (ur) 🐱 > quota summary projectid=c1ce41c4-7b01-4386-8264-479db5ace0bc
     {
       "count": 1,
       "summary": [
         {
           "account": "PrjAcct-aa-1",
           "accountid": "b14100c6-d9f6-450e-87a2-0833bb45e5f8",
           "accountremoved": false,
           "balance": 10,
           "currency": "$",
           "domain": "/",
           "domainid": "de3f3dfb-f84b-11f0-8ace-32e0826870ba",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "projectid": "c1ce41c4-7b01-4386-8264-479db5ace0bc",
           "projectname": "aa",
           "projectremoved": false,
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }

Test 2 (domain admins)

  • No parameters: returns only their own summary.

     (d1) 🐱 > quota summary
     {
       "count": 1,
       "summary": [
         {
           "account": "d1",
           "accountid": "feaffae2-7ba4-45dc-b46f-20ae86192685",
           "accountremoved": false,
           "balance": 21,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
  • account: allows listing the summary of accounts which belong to their domain.

     (d1) 🐱 > quota summary account=u1 domainid=dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d
     {
       "count": 1,
       "summary": [
         {
           "account": "u1",
           "accountid": "2f49212d-d6d5-437b-800d-a7bb4a8def4b",
           "accountremoved": false,
           "balance": 11,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
     (d1) 🐱 > quota summary account=d1 domainid=dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d
     {
       "count": 1,
       "summary": [
         {
           "account": "d1",
           "accountid": "feaffae2-7ba4-45dc-b46f-20ae86192685",
           "accountremoved": false,
           "balance": 21,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
     (d1) 🐱 > quota summary account=admin domainid=de3f3dfb-f84b-11f0-8ace-32e0826870ba
     🙈 Error: (HTTP 531, error code 4365) Caller does not have permission to operate with provided resource.
  • accountid: allows listing the summary of accounts belonging to their domain.

     (d1) 🐱 > quota summary accountid=2f49212d-d6d5-437b-800d-a7bb4a8def4b
     {
       "count": 1,
       "summary": [
         {
           "account": "u1",
           "accountid": "2f49212d-d6d5-437b-800d-a7bb4a8def4b",
           "accountremoved": false,
           "balance": 11,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
     (d1) 🐱 > quota summary accountid=feaffae2-7ba4-45dc-b46f-20ae86192685
     {
       "count": 1,
       "summary": [
         {
           "account": "d1",
           "accountid": "feaffae2-7ba4-45dc-b46f-20ae86192685",
           "accountremoved": false,
           "balance": 21,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
     (d1) 🐱 > quota summary accountid=f684da1a-f84b-11f0-8ace-32e0826870ba
     🙈 Error: (HTTP 531, error code 4365) Caller does not have permission to operate with provided resource.
  • accountstatetoshow: filtering is performed correctly.

     (d1) 🐱 > quota summary accountstatetoshow=ALL
     {
       "count": 1,
       "summary": [
         {
           "account": "d1",
           "accountid": "feaffae2-7ba4-45dc-b46f-20ae86192685",
           "accountremoved": false,
           "balance": 21,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
     (d1) 🐱 > quota summary accountstatetoshow=ACTIVE
     {
       "count": 1,
       "summary": [
         {
           "account": "d1",
           "accountid": "feaffae2-7ba4-45dc-b46f-20ae86192685",
           "accountremoved": false,
           "balance": 21,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
     (d1) 🐱 > quota summary accountstatetoshow=REMOVED
     (d1) 🐱 > quota summary accountstatetoshow=REMOVED listall=true
     (d1) 🐱 > quota summary accountstatetoshow=ACTIVE listall=true
     {
       "count": 2,
       "summary": [
         {
           "account": "d1",
           "accountid": "feaffae2-7ba4-45dc-b46f-20ae86192685",
           "accountremoved": false,
           "balance": 21,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         },
         {
           "account": "u1",
           "accountid": "2f49212d-d6d5-437b-800d-a7bb4a8def4b",
           "accountremoved": false,
           "balance": 11,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
  • domainid: allows listing the summary of all accounts belonging to their domain.

     (d1) 🐱 > quota summary domainid=dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d
     {
       "count": 2,
       "summary": [
         {
           "account": "d1",
           "accountid": "feaffae2-7ba4-45dc-b46f-20ae86192685",
           "accountremoved": false,
           "balance": 21,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         },
         {
           "account": "u1",
           "accountid": "2f49212d-d6d5-437b-800d-a7bb4a8def4b",
           "accountremoved": false,
           "balance": 11,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
     (d1) 🐱 > quota summary domainid=de3f3dfb-f84b-11f0-8ace-32e0826870ba
     🙈 Error: (HTTP 531, error code 4365) Account Account [{"accountName":"d1","id":5,"uuid":"feaffae2-7ba4-45dc-b46f-20ae86192685"}] does not have permission to operate within domain id=de3f3dfb-f84b-11f0-8ace-32e0826870ba
  • keyword: allows filtering the summary of accounts that include this keyword in their account name, but only returns accounts that belong to their domain.

     (d1) 🐱 > quota summary listall=true keyword=d
     {
       "count": 1,
       "summary": [
         {
           "account": "d1",
           "accountid": "feaffae2-7ba4-45dc-b46f-20ae86192685",
           "accountremoved": false,
           "balance": 21,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
     (d1) 🐱 > quota summary listall=true keyword=1
     {
       "count": 2,
       "summary": [
         {
           "account": "d1",
           "accountid": "feaffae2-7ba4-45dc-b46f-20ae86192685",
           "accountremoved": false,
           "balance": 21,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         },
         {
           "account": "u1",
           "accountid": "2f49212d-d6d5-437b-800d-a7bb4a8def4b",
           "accountremoved": false,
           "balance": 11,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
     (d1) 🐱 > quota summary listall=true keyword=admin
  • listall: allows listing the summary of all accounts belonging to their domain.

     (d1) 🐱 > quota summary listall=true
     {
       "count": 2,
       "summary": [
         {
           "account": "d1",
           "accountid": "feaffae2-7ba4-45dc-b46f-20ae86192685",
           "accountremoved": false,
           "balance": 21,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         },
         {
           "account": "u1",
           "accountid": "2f49212d-d6d5-437b-800d-a7bb4a8def4b",
           "accountremoved": false,
           "balance": 11,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
     (d1) 🐱 > quota summary listall=false
     {
       "count": 1,
       "summary": [
         {
           "account": "d1",
           "accountid": "feaffae2-7ba4-45dc-b46f-20ae86192685",
           "accountremoved": false,
           "balance": 21,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
     (d1) 🐱 > quota summary domainid=de3f3dfb-f84b-11f0-8ace-32e0826870ba listall=true
     🙈 Error: (HTTP 531, error code 4365) Account Account [{"accountName":"d1","id":5,"uuid":"feaffae2-7ba4-45dc-b46f-20ae86192685"}] does not have permission to operate within domain id=de3f3dfb-f84b-11f0-8ace-32e0826870ba
  • projectid: allows listing the summary of projects belonging to their domain.

     (d1) 🐱 > quota summary projectid=c1ce41c4-7b01-4386-8264-479db5ace0bc
     🙈 Error: (HTTP 531, error code 4365) Account Account [{"accountName":"d1","id":5,"uuid":"feaffae2-7ba4-45dc-b46f-20ae86192685"}] does not have permission to operate within domain id=de3f3dfb-f84b-11f0-8ace-32e0826870ba
     (dr) 🐱 > quota summary projectid=c1ce41c4-7b01-4386-8264-479db5ace0bc
     {
       "count": 1,
       "summary": [
         {
           "account": "PrjAcct-aa-1",
           "accountid": "b14100c6-d9f6-450e-87a2-0833bb45e5f8",
           "accountremoved": false,
           "balance": 10,
           "currency": "$",
           "domain": "/",
           "domainid": "de3f3dfb-f84b-11f0-8ace-32e0826870ba",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "projectid": "c1ce41c4-7b01-4386-8264-479db5ace0bc",
           "projectname": "aa",
           "projectremoved": false,
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }

Test 3 (root admins)

  • No parameters: returns only their own summary.

     (admin) 🐱 > quota summary
     {
       "count": 1,
       "summary": [
         {
           "account": "admin",
           "accountid": "f684da1a-f84b-11f0-8ace-32e0826870ba",
           "accountremoved": false,
           "balance": 91.03,
           "currency": "$",
           "domain": "/",
           "domainid": "de3f3dfb-f84b-11f0-8ace-32e0826870ba",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
  • account: allows listing the summary of all accounts.

     (admin) 🐱 > quota summary account=dr domainid=de3f3dfb-f84b-11f0-8ace-32e0826870ba
     {
       "count": 1,
       "summary": [
         {
           "account": "dr",
           "accountid": "aaba75a0-a575-41be-80e1-dbea14c10e51",
           "accountremoved": false,
           "balance": 20,
           "currency": "$",
           "domain": "/",
           "domainid": "de3f3dfb-f84b-11f0-8ace-32e0826870ba",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
     (admin) 🐱 > quota summary account=u1 domainid=dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d
     {
       "count": 1,
       "summary": [
         {
           "account": "u1",
           "accountid": "2f49212d-d6d5-437b-800d-a7bb4a8def4b",
           "accountremoved": false,
           "balance": 11,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
  • accountid: allows listing the summary of all accounts.

     (admin) 🐱 > quota summary accountid=f684da1a-f84b-11f0-8ace-32e0826870ba
     {
       "count": 1,
       "summary": [
         {
           "account": "admin",
           "accountid": "f684da1a-f84b-11f0-8ace-32e0826870ba",
           "accountremoved": false,
           "balance": 91.03,
           "currency": "$",
           "domain": "/",
           "domainid": "de3f3dfb-f84b-11f0-8ace-32e0826870ba",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
     (admin) 🐱 > quota summary accountid=b029e8b8-e539-4d1a-906d-3d4f2fb36b82
     {
       "count": 1,
       "summary": [
         {
           "account": "ur",
           "accountid": "b029e8b8-e539-4d1a-906d-3d4f2fb36b82",
           "accountremoved": false,
           "balance": 10,
           "currency": "$",
           "domain": "/",
           "domainid": "de3f3dfb-f84b-11f0-8ace-32e0826870ba",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
     (admin) 🐱 > quota summary accountid=feaffae2-7ba4-45dc-b46f-20ae86192685
     {
       "count": 1,
       "summary": [
         {
           "account": "d1",
           "accountid": "feaffae2-7ba4-45dc-b46f-20ae86192685",
           "accountremoved": false,
           "balance": 21,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
  • accountstatetoshow: filtering is performed correctly.

     (admin) 🐱 > quota summary listall=true accountstatetoshow=ENABLED
     {
       "count": 6,
       "summary": [
         {
           "account": "admin",
           "accountid": "f684da1a-f84b-11f0-8ace-32e0826870ba",
           "accountremoved": false,
           "balance": 91.03,
           "currency": "$",
           "domain": "/",
           "domainid": "de3f3dfb-f84b-11f0-8ace-32e0826870ba",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         },
         {
           "account": "d1",
           "accountid": "feaffae2-7ba4-45dc-b46f-20ae86192685",
           "accountremoved": false,
           "balance": 21,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         },
         {
           "account": "dr",
           "accountid": "aaba75a0-a575-41be-80e1-dbea14c10e51",
           "accountremoved": false,
           "balance": 20,
           "currency": "$",
           "domain": "/",
           "domainid": "de3f3dfb-f84b-11f0-8ace-32e0826870ba",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         },
         {
           "account": "PrjAcct-aa-1",
           "accountid": "b14100c6-d9f6-450e-87a2-0833bb45e5f8",
           "accountremoved": false,
           "balance": 10,
           "currency": "$",
           "domain": "/",
           "domainid": "de3f3dfb-f84b-11f0-8ace-32e0826870ba",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "projectid": "c1ce41c4-7b01-4386-8264-479db5ace0bc",
           "projectname": "aa",
           "projectremoved": false,
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         },
         {
           "account": "u1",
           "accountid": "2f49212d-d6d5-437b-800d-a7bb4a8def4b",
           "accountremoved": false,
           "balance": 11,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         },
         {
           "account": "ur",
           "accountid": "b029e8b8-e539-4d1a-906d-3d4f2fb36b82",
           "accountremoved": false,
           "balance": 10,
           "currency": "$",
           "domain": "/",
           "domainid": "de3f3dfb-f84b-11f0-8ace-32e0826870ba",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
     (admin) 🐱 > quota summary listall=true accountstatetoshow=REMOVED
    
  • domainid: allows listing the summary of all domains.

     (admin) 🐱 > quota summary domainid=de3f3dfb-f84b-11f0-8ace-32e0826870ba
     {
       "count": 4,
       "summary": [
         {
           "account": "admin",
           "accountid": "f684da1a-f84b-11f0-8ace-32e0826870ba",
           "accountremoved": false,
           "balance": 91.03,
           "currency": "$",
           "domain": "/",
           "domainid": "de3f3dfb-f84b-11f0-8ace-32e0826870ba",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         },
         {
           "account": "dr",
           "accountid": "aaba75a0-a575-41be-80e1-dbea14c10e51",
           "accountremoved": false,
           "balance": 20,
           "currency": "$",
           "domain": "/",
           "domainid": "de3f3dfb-f84b-11f0-8ace-32e0826870ba",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         },
         {
           "account": "PrjAcct-aa-1",
           "accountid": "b14100c6-d9f6-450e-87a2-0833bb45e5f8",
           "accountremoved": false,
           "balance": 10,
           "currency": "$",
           "domain": "/",
           "domainid": "de3f3dfb-f84b-11f0-8ace-32e0826870ba",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "projectid": "c1ce41c4-7b01-4386-8264-479db5ace0bc",
           "projectname": "aa",
           "projectremoved": false,
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         },
         {
           "account": "ur",
           "accountid": "b029e8b8-e539-4d1a-906d-3d4f2fb36b82",
           "accountremoved": false,
           "balance": 10,
           "currency": "$",
           "domain": "/",
           "domainid": "de3f3dfb-f84b-11f0-8ace-32e0826870ba",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
     (admin) 🐱 > quota summary domainid=dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d
     {
       "count": 2,
       "summary": [
         {
           "account": "d1",
           "accountid": "feaffae2-7ba4-45dc-b46f-20ae86192685",
           "accountremoved": false,
           "balance": 21,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         },
         {
           "account": "u1",
           "accountid": "2f49212d-d6d5-437b-800d-a7bb4a8def4b",
           "accountremoved": false,
           "balance": 11,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
  • keyword: allows filtering accounts that include this keyword in their name.

     (admin) 🐱 > quota summary listall=true keyword=d
     {
       "count": 3,
       "summary": [
         {
           "account": "admin",
           "accountid": "f684da1a-f84b-11f0-8ace-32e0826870ba",
           "accountremoved": false,
           "balance": 91.03,
           "currency": "$",
           "domain": "/",
           "domainid": "de3f3dfb-f84b-11f0-8ace-32e0826870ba",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         },
         {
           "account": "d1",
           "accountid": "feaffae2-7ba4-45dc-b46f-20ae86192685",
           "accountremoved": false,
           "balance": 21,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         },
         {
           "account": "dr",
           "accountid": "aaba75a0-a575-41be-80e1-dbea14c10e51",
           "accountremoved": false,
           "balance": 20,
           "currency": "$",
           "domain": "/",
           "domainid": "de3f3dfb-f84b-11f0-8ace-32e0826870ba",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
  • listall: allows listing the summary of all accounts in the environment.

     (admin) 🐱 > quota summary listall=true
     {
       "count": 6,
       "summary": [
         {
           "account": "admin",
           "accountid": "f684da1a-f84b-11f0-8ace-32e0826870ba",
           "accountremoved": false,
           "balance": 91.03,
           "currency": "$",
           "domain": "/",
           "domainid": "de3f3dfb-f84b-11f0-8ace-32e0826870ba",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         },
         {
           "account": "d1",
           "accountid": "feaffae2-7ba4-45dc-b46f-20ae86192685",
           "accountremoved": false,
           "balance": 21,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         },
         {
           "account": "dr",
           "accountid": "aaba75a0-a575-41be-80e1-dbea14c10e51",
           "accountremoved": false,
           "balance": 20,
           "currency": "$",
           "domain": "/",
           "domainid": "de3f3dfb-f84b-11f0-8ace-32e0826870ba",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         },
         {
           "account": "PrjAcct-aa-1",
           "accountid": "b14100c6-d9f6-450e-87a2-0833bb45e5f8",
           "accountremoved": false,
           "balance": 10,
           "currency": "$",
           "domain": "/",
           "domainid": "de3f3dfb-f84b-11f0-8ace-32e0826870ba",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "projectid": "c1ce41c4-7b01-4386-8264-479db5ace0bc",
           "projectname": "aa",
           "projectremoved": false,
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         },
         {
           "account": "u1",
           "accountid": "2f49212d-d6d5-437b-800d-a7bb4a8def4b",
           "accountremoved": false,
           "balance": 11,
           "currency": "$",
           "domain": "/d1/",
           "domainid": "dc5064ad-d4a8-4bb3-ae18-a52e4810ac3d",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         },
         {
           "account": "ur",
           "accountid": "b029e8b8-e539-4d1a-906d-3d4f2fb36b82",
           "accountremoved": false,
           "balance": 10,
           "currency": "$",
           "domain": "/",
           "domainid": "de3f3dfb-f84b-11f0-8ace-32e0826870ba",
           "domainremoved": false,
           "enddate": "2026-03-02T12:00:00-0300",
           "quota": 0,
           "quotaenabled": true,
           "startdate": "2026-03-01T12:00:00-0300",
           "state": "ENABLED"
         }
       ]
     }
  • projectid: allows listing the summary of all projects in the environment.

    (admin) 🐱 > quota summary projectid=c1ce41c4-7b01-4386-8264-479db5ace0bc
    {
      "count": 1,
      "summary": [
        {
          "account": "PrjAcct-aa-1",
          "accountid": "b14100c6-d9f6-450e-87a2-0833bb45e5f8",
          "accountremoved": false,
          "balance": 10,
          "currency": "$",
          "domain": "/",
          "domainid": "de3f3dfb-f84b-11f0-8ace-32e0826870ba",
          "domainremoved": false,
          "enddate": "2026-03-02T12:00:00-0300",
          "projectid": "c1ce41c4-7b01-4386-8264-479db5ace0bc",
          "projectname": "aa",
          "projectremoved": false,
          "quota": 0,
          "quotaenabled": true,
          "startdate": "2026-03-01T12:00:00-0300",
          "state": "ENABLED"
        }
      ]
    }

@winterhazel
Copy link
Member

@blueorangutan package

@blueorangutan
Copy link

@winterhazel a [SL] Jenkins job has been kicked to build packages. It will be bundled with no SystemVM templates. I'll keep you posted as I make progress.

@blueorangutan
Copy link

Packaging result [SF]: ✔️ el8 ✔️ el9 ✔️ el10 ✔️ debian ✔️ suse15. SL-JID 16979

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

9 participants