| Ildar Svetlov | 9ae28ba | 2020-03-27 15:01:41 +0400 | [diff] [blame] | 1 | package quotasets |
| 2 | |
| 3 | import ( |
| 4 | "fmt" |
| 5 | |
| 6 | "gerrit.mcp.mirantis.net/debian/gophercloud.git" |
| 7 | ) |
| 8 | |
| 9 | // Get returns public data about a previously created QuotaSet. |
| 10 | func 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. |
| 16 | func 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. |
| 22 | func 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. |
| 29 | func 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. |
| 43 | type 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. |
| 51 | func (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 |
| 58 | type 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. |
| 89 | func 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 | } |