blob: 9cbfe4f600da3c383f965e3de9b1a72a154c2572 [file] [log] [blame]
Dan Kirkwoodc0a80992016-03-07 13:47:25 -07001package quotasets
Dan Kirkwoodceb84092016-03-01 13:58:34 -07002
3import (
4 "github.com/mitchellh/mapstructure"
5 "github.com/rackspace/gophercloud"
6 "github.com/rackspace/gophercloud/pagination"
7)
8
Dan Kirkwoodc0a80992016-03-07 13:47:25 -07009// Quotaset is a set of operational limits that allow for control of compute usage.
Dan Kirkwoodceb84092016-03-01 13:58:34 -070010const sample = `
11{
12 "quota_set" : {
13 "fixed_ips" : -1,
14 "security_groups" : 10,
15 "id" : "56b6c3eb639e48c691052919e5a60dc3",
16 "injected_files" : 5,
17 "injected_file_path_bytes" : 255,
18 "cores" : 108,
19 "security_group_rules" : 20,
20 "keypairs" : 10,
21 "instances" : 25,
22 "ram" : 204800,
23 "metadata_items" : 128,
24 "injected_file_content_bytes" : 10240
25 }
26}
27`
28
Dan Kirkwoodc0a80992016-03-07 13:47:25 -070029type Quotaset struct {
Dan Kirkwoodceb84092016-03-01 13:58:34 -070030 //ID is tenant associated with this quota_set
31 ID string `mapstructure:"id"`
32 //FixedIps is number of fixed ips alloted this quota_set
33 FixedIps int `mapstructure:"fixed_ips"`
34 // FloatingIps is number of floatinh ips alloted this quota_set
35 FloatingIps int `mapstructure:"floating_ips"`
36 // InjectedFileContentBytes is content bytes allowed for each injected file
37 InjectedFileContentBytes int `mapstructure:"injected_file_content_bytes"`
38 // InjectedFilePathBytes is allowed bytes for each injected file path
39 InjectedFilePathBytes int `mapstructure:"injected_file_path_bytes"`
40 // InjectedFiles is injected files allowed for each project
41 InjectedFiles int `mapstructure:"injected_files"`
42 // KeyPairs is number of ssh keypairs
43 KeyPairs int `mapstructure:"keypairs"`
44 // MetadataItems is number of metadata items allowed for each instance
45 MetadataItems int `mapstructure:"metadata_items"`
46 // Ram is megabytes allowed for each instance
47 Ram int `mapstructure:"ram"`
48 // SecurityGroupRules is rules allowed for each security group
49 SecurityGroupRules int `mapstructure:"security_group_rules"`
50 // SecurityGroups security groups allowed for each project
51 SecurityGroups int `mapstructure:"security_groups"`
52 // Cores is number of instance cores allowed for each project
53 Cores int `mapstructure:"cores"`
54 // Instances is number of instances allowed for each project
55 Instances int `mapstructure:"instances"`
56}
57
Dan Kirkwoodc0a80992016-03-07 13:47:25 -070058// QuotasetPage stores a single, only page of Quotaset results from a List call.
59type QuotasetPage struct {
Dan Kirkwoodceb84092016-03-01 13:58:34 -070060 pagination.SinglePageBase
61}
62
Dan Kirkwoodc0a80992016-03-07 13:47:25 -070063// IsEmpty determines whether or not a QuotasetsetPage is empty.
64func (page QuotasetPage) IsEmpty() (bool, error) {
65 ks, err := ExtractQuotasets(page)
Dan Kirkwoodceb84092016-03-01 13:58:34 -070066 return len(ks) == 0, err
67}
68
Dan Kirkwoodc0a80992016-03-07 13:47:25 -070069// ExtractQuotasets interprets a page of results as a slice of Quotasets.
70func ExtractQuotasets(page pagination.Page) ([]Quotaset, error) {
Dan Kirkwoodceb84092016-03-01 13:58:34 -070071 var resp struct {
Dan Kirkwoodc0a80992016-03-07 13:47:25 -070072 Quotasets []Quotaset `mapstructure:"quotas"`
Dan Kirkwoodceb84092016-03-01 13:58:34 -070073 }
74
Dan Kirkwoodc0a80992016-03-07 13:47:25 -070075 err := mapstructure.Decode(page.(QuotasetPage).Body, &resp)
76 results := make([]Quotaset, len(resp.Quotasets))
77 for i, q := range resp.Quotasets {
Dan Kirkwoodceb84092016-03-01 13:58:34 -070078 results[i] = q
79 }
80 return results, err
81}
82
83type quotaResult struct {
84 gophercloud.Result
85}
86
Dan Kirkwoodc0a80992016-03-07 13:47:25 -070087// Extract is a method that attempts to interpret any Quotaset resource response as a Quotaset struct.
88func (r quotaResult) Extract() (*Quotaset, error) {
Dan Kirkwoodceb84092016-03-01 13:58:34 -070089 if r.Err != nil {
90 return nil, r.Err
91 }
92
93 var res struct {
Dan Kirkwoodc0a80992016-03-07 13:47:25 -070094 Quotaset *Quotaset `json:"quota_set" mapstructure:"quota_set"`
Dan Kirkwoodceb84092016-03-01 13:58:34 -070095 }
96
97 err := mapstructure.Decode(r.Body, &res)
Dan Kirkwoodc0a80992016-03-07 13:47:25 -070098 return res.Quotaset, err
Dan Kirkwoodceb84092016-03-01 13:58:34 -070099}
100
Dan Kirkwoodceb84092016-03-01 13:58:34 -0700101// GetResult is the response from a Get operation. Call its Extract method to interpret it
Dan Kirkwoodc0a80992016-03-07 13:47:25 -0700102// as a Quotaset.
Dan Kirkwoodceb84092016-03-01 13:58:34 -0700103type GetResult struct {
104 quotaResult
105}