blob: dd4a0514ec9aea990ef4bf25883d2de1210f067f [file] [log] [blame]
Ildar Svetlov9ae28ba2020-03-27 15:01:41 +04001package quotasets
2
3import (
4 "fmt"
5
6 "gerrit.mcp.mirantis.net/debian/gophercloud.git"
7)
8
9// Get returns public data about a previously created QuotaSet.
10func Get(client *gophercloud.ServiceClient, projectID string) (r GetResult) {
11 _, r.Err = client.Get(getURL(client, projectID), &r.Body, nil)
12 return
13}
14
15// GetDefaults returns public data about the project's default block storage quotas.
16func GetDefaults(client *gophercloud.ServiceClient, projectID string) (r GetResult) {
17 _, r.Err = client.Get(getDefaultsURL(client, projectID), &r.Body, nil)
18 return
19}
20
21// GetUsage returns detailed public data about a previously created QuotaSet.
22func GetUsage(client *gophercloud.ServiceClient, projectID string) (r GetUsageResult) {
23 u := fmt.Sprintf("%s?usage=true", getURL(client, projectID))
24 _, r.Err = client.Get(u, &r.Body, nil)
25 return
26}
27
28// Updates the quotas for the given projectID and returns the new QuotaSet.
29func Update(client *gophercloud.ServiceClient, projectID string, opts UpdateOptsBuilder) (r UpdateResult) {
30 b, err := opts.ToBlockStorageQuotaUpdateMap()
31 if err != nil {
32 r.Err = err
33 return
34 }
35
36 _, r.Err = client.Put(updateURL(client, projectID), b, &r.Body, &gophercloud.RequestOpts{
37 OkCodes: []int{200},
38 })
39 return r
40}
41
42// UpdateOptsBuilder enables extensins to add parameters to the update request.
43type UpdateOptsBuilder interface {
44 // Extra specific name to prevent collisions with interfaces for other quotas
45 // (e.g. neutron)
46 ToBlockStorageQuotaUpdateMap() (map[string]interface{}, error)
47}
48
49// ToBlockStorageQuotaUpdateMap builds the update options into a serializable
50// format.
51func (opts UpdateOpts) ToBlockStorageQuotaUpdateMap() (map[string]interface{}, error) {
52 return gophercloud.BuildRequestBody(opts, "quota_set")
53}
54
55// Options for Updating the quotas of a Tenant.
56// All int-values are pointers so they can be nil if they are not needed.
57// You can use gopercloud.IntToPointer() for convenience
58type UpdateOpts struct {
59 // Volumes is the number of volumes that are allowed for each project.
60 Volumes *int `json:"volumes,omitempty"`
61
62 // Snapshots is the number of snapshots that are allowed for each project.
63 Snapshots *int `json:"snapshots,omitempty"`
64
65 // Gigabytes is the size (GB) of volumes and snapshots that are allowed for
66 // each project.
67 Gigabytes *int `json:"gigabytes,omitempty"`
68
69 // PerVolumeGigabytes is the size (GB) of volumes and snapshots that are
70 // allowed for each project and the specifed volume type.
71 PerVolumeGigabytes *int `json:"per_volume_gigabytes,omitempty"`
72
73 // Backups is the number of backups that are allowed for each project.
74 Backups *int `json:"backups,omitempty"`
75
76 // BackupGigabytes is the size (GB) of backups that are allowed for each
77 // project.
78 BackupGigabytes *int `json:"backup_gigabytes,omitempty"`
79
80 // Groups is the number of groups that are allowed for each project.
81 Groups *int `json:"groups,omitempty"`
82
83 // Force will update the quotaset even if the quota has already been used
84 // and the reserved quota exceeds the new quota.
85 Force bool `json:"force,omitempty"`
86}
87
88// Resets the quotas for the given tenant to their default values.
89func Delete(client *gophercloud.ServiceClient, projectID string) (r DeleteResult) {
90 _, r.Err = client.Delete(updateURL(client, projectID), &gophercloud.RequestOpts{
91 OkCodes: []int{200},
92 })
93 return
94}