Quobyte API update

This commit is contained in:
Venkata Subbarao Chunduri 2018-05-30 13:56:37 +02:00
parent 15cd355281
commit 6eef91b7cf
4 changed files with 46 additions and 1 deletions

2
Godeps/Godeps.json generated
View File

@ -2528,7 +2528,7 @@
}, },
{ {
"ImportPath": "github.com/quobyte/api", "ImportPath": "github.com/quobyte/api",
"Rev": "f2b94aa4aa4f8fcf279fe667ccd916abe6a064d5" "Rev": "206ef832283c1a0144bbc762be2634d49987b5ff"
}, },
{ {
"ImportPath": "github.com/rancher/go-rancher/client", "ImportPath": "github.com/rancher/go-rancher/client",

View File

@ -2,7 +2,9 @@
package quobyte package quobyte
import ( import (
"log"
"net/http" "net/http"
"regexp"
) )
// retry policy codes // retry policy codes
@ -43,6 +45,17 @@ func NewQuobyteClient(url string, username string, password string) *QuobyteClie
// CreateVolume creates a new Quobyte volume. Its root directory will be owned by given user and group // CreateVolume creates a new Quobyte volume. Its root directory will be owned by given user and group
func (client QuobyteClient) CreateVolume(request *CreateVolumeRequest) (string, error) { func (client QuobyteClient) CreateVolume(request *CreateVolumeRequest) (string, error) {
var response volumeUUID var response volumeUUID
if request.TenantID != "" && !IsValidUUID(request.TenantID) {
log.Printf("Tenant name resolution: Resolving %s to UUID\n", request.TenantID)
tenantUUID, err := client.ResolveTenantNameToUUID(request.TenantID)
if err != nil {
return "", err
}
request.TenantID = tenantUUID
}
if err := client.sendRequest("createVolume", request, &response); err != nil { if err := client.sendRequest("createVolume", request, &response); err != nil {
return "", err return "", err
} }
@ -168,3 +181,23 @@ func (client *QuobyteClient) SetTenant(tenantName string) (string, error) {
return response.TenantID, nil return response.TenantID, nil
} }
// IsValidUUID Validates given uuid
func IsValidUUID(uuid string) bool {
r := regexp.MustCompile("^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-4[a-fA-F0-9]{3}-[8|9|aA|bB][a-fA-F0-9]{3}-[a-fA-F0-9]{12}$")
return r.MatchString(uuid)
}
// ResolveTenantNameToUUID Returns UUID for given name, error if not found.
func (client *QuobyteClient) ResolveTenantNameToUUID(name string) (string, error) {
request := &resolveTenantNameRequest{
TenantName: name,
}
var response resolveTenantNameResponse
err := client.sendRequest("resolveTenantName", request, &response)
if err != nil {
return "", err
}
return response.TenantID, nil
}

View File

@ -5,6 +5,7 @@ import (
"encoding/json" "encoding/json"
"errors" "errors"
"io" "io"
"log"
"math/rand" "math/rand"
"net/http" "net/http"
"reflect" "reflect"
@ -110,5 +111,8 @@ func (client QuobyteClient) sendRequest(method string, request interface{}, resp
} }
defer resp.Body.Close() defer resp.Body.Close()
if resp.StatusCode < 200 || resp.StatusCode > 299 {
log.Printf("Warning: HTTP status code for request is %s\n", strconv.Itoa(resp.StatusCode))
}
return decodeResponse(resp.Body, &response) return decodeResponse(resp.Body, &response)
} }

View File

@ -22,6 +22,14 @@ type resolveVolumeNameRequest struct {
retryPolicy retryPolicy
} }
type resolveTenantNameRequest struct {
TenantName string `json:"tenant_name,omitempty"`
}
type resolveTenantNameResponse struct {
TenantID string `json:"tenant_id,omitempty"`
}
type volumeUUID struct { type volumeUUID struct {
VolumeUUID string `json:"volume_uuid,omitempty"` VolumeUUID string `json:"volume_uuid,omitempty"`
} }