mirror of
https://github.com/ceph/ceph-csi.git
synced 2024-10-19 05:39:51 +00:00
47b202554e
This commit adds the Azure SDK for Azure key vault KMS integration to the Ceph CSI driver. Signed-off-by: Praveen M <m.praveen@ibm.com>
76 lines
2.4 KiB
Go
76 lines
2.4 KiB
Go
//go:build go1.18
|
|
// +build go1.18
|
|
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// Licensed under the MIT License.
|
|
|
|
package runtime
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"net/http"
|
|
|
|
"github.com/Azure/azure-sdk-for-go/sdk/azcore/policy"
|
|
)
|
|
|
|
// APIVersionOptions contains options for API versions
|
|
type APIVersionOptions struct {
|
|
// Location indicates where to set the version on a request, for example in a header or query param
|
|
Location APIVersionLocation
|
|
// Name is the name of the header or query parameter, for example "api-version"
|
|
Name string
|
|
}
|
|
|
|
// APIVersionLocation indicates which part of a request identifies the service version
|
|
type APIVersionLocation int
|
|
|
|
const (
|
|
// APIVersionLocationQueryParam indicates a query parameter
|
|
APIVersionLocationQueryParam = 0
|
|
// APIVersionLocationHeader indicates a header
|
|
APIVersionLocationHeader = 1
|
|
)
|
|
|
|
// newAPIVersionPolicy constructs an APIVersionPolicy. If version is "", Do will be a no-op. If version
|
|
// isn't empty and opts.Name is empty, Do will return an error.
|
|
func newAPIVersionPolicy(version string, opts *APIVersionOptions) *apiVersionPolicy {
|
|
if opts == nil {
|
|
opts = &APIVersionOptions{}
|
|
}
|
|
return &apiVersionPolicy{location: opts.Location, name: opts.Name, version: version}
|
|
}
|
|
|
|
// apiVersionPolicy enables users to set the API version of every request a client sends.
|
|
type apiVersionPolicy struct {
|
|
// location indicates whether "name" refers to a query parameter or header.
|
|
location APIVersionLocation
|
|
|
|
// name of the query param or header whose value should be overridden; provided by the client.
|
|
name string
|
|
|
|
// version is the value (provided by the user) that replaces the default version value.
|
|
version string
|
|
}
|
|
|
|
// Do sets the request's API version, if the policy is configured to do so, replacing any prior value.
|
|
func (a *apiVersionPolicy) Do(req *policy.Request) (*http.Response, error) {
|
|
if a.version != "" {
|
|
if a.name == "" {
|
|
// user set ClientOptions.APIVersion but the client ctor didn't set PipelineOptions.APIVersionOptions
|
|
return nil, errors.New("this client doesn't support overriding its API version")
|
|
}
|
|
switch a.location {
|
|
case APIVersionLocationHeader:
|
|
req.Raw().Header.Set(a.name, a.version)
|
|
case APIVersionLocationQueryParam:
|
|
q := req.Raw().URL.Query()
|
|
q.Set(a.name, a.version)
|
|
req.Raw().URL.RawQuery = q.Encode()
|
|
default:
|
|
return nil, fmt.Errorf("unknown APIVersionLocation %d", a.location)
|
|
}
|
|
}
|
|
return req.Next()
|
|
}
|