github.com/IBM-Cloud/bluemix-go@v0.0.0-20240423071914-9e96525baef4/api/resource/resourcev2/managementv2/resource_quota.go (about) 1 package managementv2 2 3 import ( 4 "fmt" 5 6 "github.com/IBM-Cloud/bluemix-go/bmxerror" 7 "github.com/IBM-Cloud/bluemix-go/client" 8 ) 9 10 type quotaDefinitionQueryResult struct { 11 QuotaDefinitions []QuotaDefinition `json:"resources"` 12 } 13 14 type QuotaDefinition struct { 15 ID string `json:"_id,omitempty"` 16 Revision string `json:"_rev,omitempty"` 17 Name string `json:"name,omitmempty"` 18 Type string `json:"type,omitempty"` 19 ServiceInstanceCountLimit int `json:"number_of_service_instances,omitempty"` 20 AppCountLimit int `json:"number_of_apps,omitempty"` 21 AppInstanceCountLimit int `json:"instances_per_app,omitempty"` 22 AppInstanceMemoryLimit string `json:"instance_memory,omitempty"` 23 TotalAppMemoryLimit string `json:"total_app_memory,omitempty"` 24 VSICountLimit int `json:"vsi_limit,omitempty"` 25 ResourceQuotas []ResourceQuota `json:"resource_quotas,omitempty"` 26 CreatedAt string `json:"created_at,omitempty"` 27 UpdatedAt string `json:"updated_at,omitempty"` 28 } 29 30 type ResourceQuota struct { 31 ID string `json:"_id,omitempty"` 32 ResourceID string `json:"resource_id,omitempty"` 33 Limit int `json:"limit,omitempty"` 34 } 35 36 //ErrCodeResourceQuotaDoesnotExist ... 37 const ErrCodeResourceQuotaDoesnotExist = "ResourceQuotaDoesnotExist" 38 39 type ResourceQuotaRepository interface { 40 // List all quota definitions 41 List() ([]QuotaDefinition, error) 42 // Query quota definitions having specific name 43 FindByName(name string) ([]QuotaDefinition, error) 44 // Get quota definition by ID 45 Get(id string) (*QuotaDefinition, error) 46 } 47 48 type resourceQuota struct { 49 client *client.Client 50 } 51 52 func newResourceQuotaAPI(c *client.Client) ResourceQuotaRepository { 53 return &resourceQuota{ 54 client: c, 55 } 56 } 57 58 func (r *resourceQuota) List() ([]QuotaDefinition, error) { 59 resp := quotaDefinitionQueryResult{} 60 // TODO: change to use pagination if it's available on backend 61 _, err := r.client.Get("/v2/quota_definitions", &resp) 62 if err != nil { 63 return []QuotaDefinition{}, err 64 } 65 return resp.QuotaDefinitions, nil 66 } 67 68 func (r *resourceQuota) FindByName(name string) ([]QuotaDefinition, error) { 69 allQuotas, err := r.List() 70 if err != nil { 71 return []QuotaDefinition{}, err 72 } 73 74 quotas := []QuotaDefinition{} 75 for _, quota := range allQuotas { 76 if quota.Name == name { 77 quotas = append(quotas, quota) 78 } 79 } 80 81 if len(quotas) == 0 { 82 return quotas, bmxerror.New(ErrCodeResourceQuotaDoesnotExist, 83 fmt.Sprintf("Given quota : %q doesn't exist", name)) 84 } 85 86 return quotas, nil 87 } 88 89 func (r *resourceQuota) Get(id string) (*QuotaDefinition, error) { 90 quota := QuotaDefinition{} 91 _, err := r.client.Get("/v2/quota_definitions/"+id, "a) 92 if err != nil { 93 return nil, err 94 } 95 return "a, nil 96 }