diff --git a/.gitignore b/.gitignore
index c5f9775..f37e381 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,5 @@
travis.yml
release-tools
bin
+.idea
+vendor
\ No newline at end of file
diff --git a/README.md b/README.md
index 8b4f2ac..0890733 100644
--- a/README.md
+++ b/README.md
@@ -1,12 +1,12 @@
COSI repos and images:
-[Spec](https://github.com/kubernetes-sigs/container-object-storage-interface-spec) \
-[API](https://github.com/kubernetes-sigs/container-object-storage-interface-api) \
-[Controller](https://github.com/kubernetes-sigs/container-object-storage-interface-controller)
+[Spec](https://sigs.k8s.io/container-object-storage-interface-spec) \
+[API](https://sigs.k8s.io/container-object-storage-interface-api) \
+[Controller](https://sigs.k8s.io/container-object-storage-interface-controller)
- [images: cosi-controller](https://quay.io/repository/containerobjectstorage/objectstorage-controller?tab=tags) \
[Provisioner Sidecar](https://sigs.k8s.io/container-object-storage-interface-provisioner-sidecar)
- images: cosi-provisioner \
- [CSI Adapter](https://github.com/kubernetes-sigs/container-object-storage-interface-csi-adapter)
+ [CSI Adapter](https://sigs.k8s.io/container-object-storage-interface-csi-adapter)
- images: cosi-node-adapter
@@ -28,7 +28,7 @@ COSI deprecated repos:
If you are new to a SIG Storage project, check out this [contributing guide](https://github.com/kubernetes/community/blob/master/sig-storage/CONTRIBUTING.md)
and the [community page](https://github.com/kubernetes/community/tree/master/sig-storage).
-If you are new to the SIG Storage COSI project, check out the [spec](https://github.com/kubernetes-sigs/container-object-storage-interface-spec/blob/master/spec.md), [KEP](https://github.com/kubernetes/enhancements/tree/master/keps/sig-storage/1979-object-storage-support), and [project board](https://github.com/orgs/kubernetes-sigs/projects/).
+If you are new to the SIG Storage COSI project, check out the [spec](https://sigs.k8s.io/container-object-storage-interface-spec/blob/master/spec.md), [KEP](https://github.com/kubernetes/enhancements/tree/master/keps/sig-storage/1979-object-storage-support), and [project board](https://github.com/orgs/kubernetes-sigs/projects/).
Learn how to engage with the Kubernetes community on the [community page](http://kubernetes.io/community/).
diff --git a/cmd/objectstorage-sidecar/app/objectstorage-sidecar.go b/cmd/objectstorage-sidecar/app/objectstorage-sidecar.go
index b3024d6..cc5aac9 100644
--- a/cmd/objectstorage-sidecar/app/objectstorage-sidecar.go
+++ b/cmd/objectstorage-sidecar/app/objectstorage-sidecar.go
@@ -9,7 +9,7 @@ import (
"sigs.k8s.io/container-object-storage-interface-provisioner-sidecar/pkg/controller/bucketaccess"
"sigs.k8s.io/container-object-storage-interface-provisioner-sidecar/pkg/grpcclient"
- osspec "github.com/kubernetes-sigs/container-object-storage-interface-spec"
+ osspec "sigs.k8s.io/container-object-storage-interface-spec"
"github.com/spf13/cobra"
@@ -54,15 +54,18 @@ func (so *SidecarOptions) Run() {
klog.Infof("creating provisioner client")
provisionerClient := osspec.NewProvisionerClient(grpcConn)
+ identityClient := osspec.NewIdentityClient(grpcConn)
klog.Infof("discovering driver name")
req := osspec.ProvisionerGetInfoRequest{}
- rsp, err := provisionerClient.ProvisionerGetInfo(ctx, &req)
+ rsp, err := identityClient.ProvisionerGetInfo(ctx, &req)
if err != nil {
klog.Errorf("error calling ProvisionerGetInfo: %v", err)
os.Exit(1)
}
+ // TODO: go routine with health check to vendor driver
+
provisionerName := rsp.Name
// TODO: Register provisioner using internal type
klog.Info("This sidecar is working with the driver identified as: ", provisionerName)
diff --git a/cmd/sample-driver/driver-server.go b/cmd/sample-driver/driver-server.go
index 12ca7d6..9d5e795 100644
--- a/cmd/sample-driver/driver-server.go
+++ b/cmd/sample-driver/driver-server.go
@@ -32,7 +32,7 @@ import (
"k8s.io/klog/v2"
- cosi "github.com/kubernetes-sigs/container-object-storage-interface-spec"
+ cosi "sigs.k8s.io/container-object-storage-interface-spec"
)
var (
@@ -63,41 +63,54 @@ func (ds DriverServer) ProvisionerCreateBucket(ctx context.Context, req *cosi.Pr
return nil, status.Error(codes.Unavailable, "Driver is missing version")
}
- err := ds.S3Client.MakeBucket(req.BucketName, "")
+ s3 := req.Protocol.GetS3()
+ if s3 == nil {
+ return nil, status.Error(codes.Unavailable, "Driver is missing protocol")
+ }
+
+ err := ds.S3Client.MakeBucket(s3.BucketName, "")
if err != nil {
// Check to see if the bucket already exists
- exists, errBucketExists := ds.S3Client.BucketExists(req.BucketName)
+ exists, errBucketExists := ds.S3Client.BucketExists(s3.BucketName)
if errBucketExists == nil && exists {
- klog.Info("Backend Bucket already exists", req.BucketName)
+ klog.Info("Backend Bucket already exists", s3.BucketName)
return &cosi.ProvisionerCreateBucketResponse{}, nil
} else {
klog.Error(err)
return &cosi.ProvisionerCreateBucketResponse{}, err
}
}
- klog.Info("Successfully created Backend Bucket", req.BucketName)
+ klog.Info("Successfully created Backend Bucket", s3.BucketName)
return &cosi.ProvisionerCreateBucketResponse{}, nil
}
func (ds *DriverServer) ProvisionerDeleteBucket(ctx context.Context, req *cosi.ProvisionerDeleteBucketRequest) (*cosi.ProvisionerDeleteBucketResponse, error) {
+ s3 := req.Protocol.GetS3()
+ if s3 == nil {
+ return nil, status.Error(codes.Unavailable, "Driver is missing protocol")
+ }
- if err := ds.S3Client.RemoveBucket(req.BucketName); err != nil {
- klog.Info("failed to delete bucket", req.BucketName)
+ if err := ds.S3Client.RemoveBucket(s3.BucketName); err != nil {
+ klog.Info("failed to delete bucket", s3.BucketName)
return nil, err
-
}
+
return &cosi.ProvisionerDeleteBucketResponse{}, nil
}
func (ds *DriverServer) ProvisionerGrantBucketAccess(ctx context.Context, req *cosi.ProvisionerGrantBucketAccessRequest) (*cosi.ProvisionerGrantBucketAccessResponse, error) {
-
creds, err := auth.GetNewCredentials()
if err != nil {
klog.Error("failed to generate new credentails")
return nil, err
}
+ s3 := req.Protocol.GetS3()
+ if s3 == nil {
+ return nil, status.Error(codes.Unavailable, "Driver is missing protocol")
+ }
+
if err := ds.S3AdminClient.AddUser(context.Background(), creds.AccessKey, creds.SecretKey); err != nil {
klog.Error("failed to create user", err)
return nil, err
@@ -110,7 +123,7 @@ func (ds *DriverServer) ProvisionerGrantBucketAccess(ctx context.Context, req *c
iampolicy.NewStatement(
policy.Allow,
iampolicy.NewActionSet("s3:*"),
- iampolicy.NewResourceSet(iampolicy.NewResource(req.GetBucketName()+"/*", "")),
+ iampolicy.NewResourceSet(iampolicy.NewResource(s3.BucketName+"/*", "")),
condition.NewFunctions(),
)},
}
diff --git a/go.mod b/go.mod
index 895e74f..39df6eb 100644
--- a/go.mod
+++ b/go.mod
@@ -5,17 +5,18 @@ go 1.15
require (
github.com/go-ini/ini v1.62.0 // indirect
github.com/kubernetes-csi/csi-lib-utils v0.9.0
- github.com/kubernetes-sigs/container-object-storage-interface-api v0.0.0-20210112203836-a74c106d3ab3
- github.com/kubernetes-sigs/container-object-storage-interface-spec v0.0.0-20210107181053-ef523592ca74
github.com/minio/minio v0.0.0-20210112204746-e09196d62633
github.com/minio/minio-go v6.0.14+incompatible
+ github.com/pkg/errors v0.9.1
github.com/spf13/cobra v0.0.5
github.com/spf13/viper v1.3.2
golang.org/x/net v0.0.0-20201216054612-986b41b23924
golang.org/x/time v0.0.0-20201208040808-7e3f01d25324
- google.golang.org/grpc v1.34.0
+ google.golang.org/grpc v1.35.0
k8s.io/api v0.19.4
k8s.io/apimachinery v0.19.4
k8s.io/client-go v0.19.4
k8s.io/klog/v2 v2.2.0
+ sigs.k8s.io/container-object-storage-interface-api v0.0.0-20210308183412-eb167f7cca3c
+ sigs.k8s.io/container-object-storage-interface-spec v0.0.0-20210224211525-dfa3af562c18
)
diff --git a/go.sum b/go.sum
index dc58ca4..4bd17b2 100644
--- a/go.sum
+++ b/go.sum
@@ -96,7 +96,7 @@ github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp
github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
-github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
+github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
github.com/colinmarc/hdfs/v2 v2.1.1/go.mod h1:M3x+k8UKKmxtFu++uAZ0OtDU8jR3jnaZIAc6yK4Ue0c=
@@ -115,6 +115,7 @@ github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwc
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+github.com/dave/jennifer v1.4.1/go.mod h1:7jEdnm+qBcxl8PC0zyp7vxcpSRnzXSt9r39tpTVGlwA=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -147,7 +148,7 @@ github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4s
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
-github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=
+github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
@@ -421,10 +422,6 @@ github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/kubernetes-csi/csi-lib-utils v0.9.0 h1:TbuDmxoVqM+fvVkzG/7sShyX/8jUln0ElLHuETcsQJI=
github.com/kubernetes-csi/csi-lib-utils v0.9.0/go.mod h1:8E2jVUX9j3QgspwHXa6LwyN7IHQDjW9jX3kwoWnSC+M=
-github.com/kubernetes-sigs/container-object-storage-interface-api v0.0.0-20210112203836-a74c106d3ab3 h1:SVbl8M9RAoLUqJ83eLxDWVyMHz09CZ+dkUjkR7kG9eo=
-github.com/kubernetes-sigs/container-object-storage-interface-api v0.0.0-20210112203836-a74c106d3ab3/go.mod h1:C7tjzC+nLe7H7+3UM/Z6a7F24yxOO8FSK3ZaVZrKDPQ=
-github.com/kubernetes-sigs/container-object-storage-interface-spec v0.0.0-20210107181053-ef523592ca74 h1:+i43Z3yKW7htLAATafmbZ7ULFwwT+8vwB7NMxZ1X3Ww=
-github.com/kubernetes-sigs/container-object-storage-interface-spec v0.0.0-20210107181053-ef523592ca74/go.mod h1:wojgWDesMMLuFza4p1YnpX3sdPeo0mDWmSbmPsxRDh0=
github.com/lib/pq v1.8.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4=
@@ -776,6 +773,7 @@ golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLL
golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20191002035440-2ec189313ef0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
@@ -962,9 +960,8 @@ google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQ
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.29.0/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
-google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
-google.golang.org/grpc v1.34.0 h1:raiipEjMOIC/TO2AvyTxP25XFdLxNIBwzDh3FM3XztI=
-google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
+google.golang.org/grpc v1.35.0 h1:TwIQcH3es+MojMVojxxfQ3l3OF2KzlRxML2xZq0kRo8=
+google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
@@ -1055,6 +1052,7 @@ k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
k8s.io/klog/v2 v2.2.0 h1:XRvcwJozkgZ1UQJmfMGpvRthQHOvihEhYtDfAaxMz/A=
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E=
+k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6 h1:+WnxoVtG8TMiudHBSEtrVL1egv36TkkJm+bA8AxicmQ=
k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o=
k8s.io/kube-openapi v0.0.0-20200923155610-8b5066479488 h1:mNpvQf4lkIHNOXCoM+Veu/UXwA56Yx1J7hY1Tvcs/oM=
k8s.io/kube-openapi v0.0.0-20200923155610-8b5066479488/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o=
@@ -1065,6 +1063,10 @@ k8s.io/utils v0.0.0-20200729134348-d5654de09c73/go.mod h1:jPW/WVKK9YHAvNhRxK0md/
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0=
+sigs.k8s.io/container-object-storage-interface-api v0.0.0-20210308183412-eb167f7cca3c h1:GANfOgppBbhCKqGFDVnuluhJ5km8gqNDatXn5ULGUt8=
+sigs.k8s.io/container-object-storage-interface-api v0.0.0-20210308183412-eb167f7cca3c/go.mod h1:yMgeGQDROJIdY1jymECN2ptefmQ4+e3EQB/S8gyIE0o=
+sigs.k8s.io/container-object-storage-interface-spec v0.0.0-20210224211525-dfa3af562c18 h1:TIx7kV6/3ZSQ5BETBx1QG1Va28zv1LZAvqRjs28n8ss=
+sigs.k8s.io/container-object-storage-interface-spec v0.0.0-20210224211525-dfa3af562c18/go.mod h1:kafkL5l/lTUrZXhVi/9p1GzpEE/ts29BkWkL3Ao33WU=
sigs.k8s.io/controller-runtime v0.6.3 h1:SBbr+inLPEKhvlJtrvDcwIpm+uhDvp63Bl72xYJtoOE=
sigs.k8s.io/controller-runtime v0.6.3/go.mod h1:WlZNXcM0++oyaQt4B7C2lEE5JYRs8vJUzRP4N4JpdAY=
sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw=
diff --git a/pkg/controller/bucket/bucket_controller.go b/pkg/controller/bucket/bucket_controller.go
index 9617f4b..4dfb6b6 100644
--- a/pkg/controller/bucket/bucket_controller.go
+++ b/pkg/controller/bucket/bucket_controller.go
@@ -19,6 +19,7 @@ package bucket
import (
"context"
"fmt"
+ "github.com/pkg/errors"
"strings"
"time"
@@ -29,11 +30,11 @@ import (
"k8s.io/client-go/util/retry"
"k8s.io/client-go/util/workqueue"
- "github.com/kubernetes-sigs/container-object-storage-interface-api/apis/objectstorage.k8s.io/v1alpha1"
- bucketclientset "github.com/kubernetes-sigs/container-object-storage-interface-api/clientset"
- "github.com/kubernetes-sigs/container-object-storage-interface-api/controller"
+ "sigs.k8s.io/container-object-storage-interface-api/apis/objectstorage.k8s.io/v1alpha1"
+ bucketclientset "sigs.k8s.io/container-object-storage-interface-api/clientset"
+ "sigs.k8s.io/container-object-storage-interface-api/controller"
- osspec "github.com/kubernetes-sigs/container-object-storage-interface-spec"
+ osspec "sigs.k8s.io/container-object-storage-interface-spec"
"k8s.io/klog/v2"
@@ -101,20 +102,28 @@ func (bl *bucketListener) Add(ctx context.Context, obj *v1alpha1.Bucket) error {
}
req := osspec.ProvisionerCreateBucketRequest{
- BucketName: obj.Name,
- BucketContext: bl.getParams(obj),
+ Parameters: bl.getParams(obj),
}
+ if req.Parameters == nil {
+ req.Parameters = make(map[string]string)
+ }
+
+ proto, err := obj.Spec.Protocol.ConvertToExternal()
+ if err != nil {
+ return errors.Wrap(err, "failed to parse protocol for API")
+ }
+ req.Protocol = proto
- req.BucketContext["ProtocolVersion"] = obj.Spec.Protocol.Version
+ req.Parameters["ProtocolVersion"] = obj.Spec.Protocol.Version
if obj.Spec.AnonymousAccessMode.Private {
- req.AnonymousBucketAccessMode = osspec.ProvisionerCreateBucketRequest_BUCKET_PRIVATE
+ req.AnonymousBucketAccessMode = osspec.AnonymousBucketAccessMode_Private
} else if obj.Spec.AnonymousAccessMode.PublicReadOnly {
- req.AnonymousBucketAccessMode = osspec.ProvisionerCreateBucketRequest_BUCKET_READ_ONLY
+ req.AnonymousBucketAccessMode = osspec.AnonymousBucketAccessMode_ReadOnly
} else if obj.Spec.AnonymousAccessMode.PublicReadWrite {
- req.AnonymousBucketAccessMode = osspec.ProvisionerCreateBucketRequest_BUCKET_WRITE_ONLY
+ req.AnonymousBucketAccessMode = osspec.AnonymousBucketAccessMode_ReadWrite
} else if obj.Spec.AnonymousAccessMode.PublicWriteOnly {
- req.AnonymousBucketAccessMode = osspec.ProvisionerCreateBucketRequest_BUCKET_READ_WRITE
+ req.AnonymousBucketAccessMode = osspec.AnonymousBucketAccessMode_WriteOnly
}
// TODO set grpc timeout
@@ -147,28 +156,19 @@ func (bl *bucketListener) Delete(ctx context.Context, obj *v1alpha1.Bucket) erro
}
req := osspec.ProvisionerDeleteBucketRequest{
- BucketContext: bl.getParams(obj),
+ Parameters: bl.getParams(obj),
+ }
+ if req.Parameters == nil {
+ req.Parameters = make(map[string]string)
}
- switch obj.Spec.Protocol.Name {
- case v1alpha1.ProtocolNameS3:
- req.BucketName = obj.Spec.Protocol.S3.BucketName
- req.BucketContext["Region"] = obj.Spec.Protocol.S3.Region
- req.BucketContext["SignatureVersion"] = string(obj.Spec.Protocol.S3.SignatureVersion)
- req.BucketContext["Endpoint"] = obj.Spec.Protocol.S3.Endpoint
- case v1alpha1.ProtocolNameAzure:
- req.BucketName = obj.Spec.Protocol.AzureBlob.ContainerName
- req.BucketContext["StorageAccount"] = obj.Spec.Protocol.AzureBlob.StorageAccount
- case v1alpha1.ProtocolNameGCS:
- req.BucketName = obj.Spec.Protocol.GCS.BucketName
- req.BucketContext["ServiceAccount"] = obj.Spec.Protocol.GCS.ServiceAccount
- req.BucketContext["PrivateKeyName"] = obj.Spec.Protocol.GCS.PrivateKeyName
- req.BucketContext["ProjectID"] = obj.Spec.Protocol.GCS.ProjectID
- default:
- return fmt.Errorf("unknown protocol: %s", obj.Spec.Protocol.Name)
+ proto, err := obj.Spec.Protocol.ConvertToExternal()
+ if err != nil {
+ return errors.Wrap(err, "failed to parse protocol for API")
}
+ req.Protocol = proto
- req.BucketContext["ProtocolVersion"] = obj.Spec.Protocol.Version
+ req.Parameters["ProtocolVersion"] = obj.Spec.Protocol.Version
// TODO set grpc timeout
rsp, err := bl.provisionerClient.ProvisionerDeleteBucket(ctx, &req)
diff --git a/pkg/controller/bucket/bucket_controller_test.go b/pkg/controller/bucket/bucket_controller_test.go
index 5df8ca4..90657a2 100644
--- a/pkg/controller/bucket/bucket_controller_test.go
+++ b/pkg/controller/bucket/bucket_controller_test.go
@@ -21,12 +21,12 @@ import (
"reflect"
"testing"
- "github.com/kubernetes-sigs/container-object-storage-interface-api/apis/objectstorage.k8s.io/v1alpha1"
+ "sigs.k8s.io/container-object-storage-interface-api/apis/objectstorage.k8s.io/v1alpha1"
- fakebucketclientset "github.com/kubernetes-sigs/container-object-storage-interface-api/clientset/fake"
+ fakebucketclientset "sigs.k8s.io/container-object-storage-interface-api/clientset/fake"
- osspec "github.com/kubernetes-sigs/container-object-storage-interface-spec"
- fakespec "github.com/kubernetes-sigs/container-object-storage-interface-spec/fake"
+ osspec "sigs.k8s.io/container-object-storage-interface-spec"
+ fakespec "sigs.k8s.io/container-object-storage-interface-spec/fake"
corev1 "k8s.io/api/core/v1"
@@ -78,8 +78,8 @@ func TestInitializeBucketClient(t *testing.T) {
func TestAddWrongProvisioner(t *testing.T) {
provisioner := "provisioner1"
- mpc := struct{ fakespec.MockProvisionerClient }{}
- mpc.CreateBucket = func(ctx context.Context, in *osspec.ProvisionerCreateBucketRequest, opts ...grpc.CallOption) (*osspec.ProvisionerCreateBucketResponse, error) {
+ mpc := struct{ fakespec.FakeProvisionerClient }{}
+ mpc.FakeProvisionerCreateBucket = func(ctx context.Context, in *osspec.ProvisionerCreateBucketRequest, opts ...grpc.CallOption) (*osspec.ProvisionerCreateBucketResponse, error) {
t.Errorf("grpc client called")
return nil, nil
}
@@ -103,128 +103,133 @@ func TestAddWrongProvisioner(t *testing.T) {
func TestAddValidProtocols(t *testing.T) {
provisioner := "provisioner1"
- region := "region1"
- bucketName := "bucket1"
protocolVersion := "proto1"
- sigVersion := v1alpha1.S3SignatureVersionV2
- account := "account1"
- keyName := "keyName1"
- projID := "id1"
anonAccess := "BUCKET_PRIVATE"
- mpc := struct{ fakespec.MockProvisionerClient }{}
+ bucketName := "bucket1"
+ s3 := v1alpha1.S3Protocol{
+ BucketName: "bucket1",
+ Endpoint: "127.0.0.1",
+ Region: "region1",
+ SignatureVersion: v1alpha1.S3SignatureVersionV2,
+ }
+ gcs := v1alpha1.GCSProtocol{
+ BucketName: "bucket1",
+ PrivateKeyName: "keyName1",
+ ProjectID: "id1",
+ ServiceAccount: "account1",
+ }
+ azure := v1alpha1.AzureProtocol{
+ ContainerName: "bucket1",
+ StorageAccount: "account1",
+ }
+ mpc := struct{ fakespec.FakeProvisionerClient }{}
testCases := []struct {
name string
protocolName v1alpha1.ProtocolName
+ setProtocol func(b *v1alpha1.Bucket)
createFunc func(ctx context.Context, in *osspec.ProvisionerCreateBucketRequest, opts ...grpc.CallOption) (*osspec.ProvisionerCreateBucketResponse, error)
params map[string]string
}{
{
name: "S3",
protocolName: v1alpha1.ProtocolNameS3,
- createFunc: func(ctx context.Context, in *osspec.ProvisionerCreateBucketRequest, opts ...grpc.CallOption) (*osspec.ProvisionerCreateBucketResponse, error) {
- if in.BucketName != bucketName {
- t.Errorf("expected %s, got %s", bucketName, in.BucketName)
+ setProtocol: func(b *v1alpha1.Bucket) {
+ b.Spec.Protocol.S3 = &s3
+ },
+ createFunc: func(ctx context.Context, req *osspec.ProvisionerCreateBucketRequest, opts ...grpc.CallOption) (*osspec.ProvisionerCreateBucketResponse, error) {
+ in := req.Protocol.GetS3()
+ if in.BucketName != s3.BucketName {
+ t.Errorf("expected %s, got %s", s3.BucketName, in.BucketName)
+ }
+ if in.Region != s3.Region {
+ t.Errorf("expected %s, got %s", s3.Region, in.Region)
+ }
+ sigver, ok := osspec.S3SignatureVersion_name[int32(in.SignatureVersion)]
+ if !ok {
+ sigver = osspec.S3SignatureVersion_name[int32(osspec.S3SignatureVersion_UnknownSignature)]
}
- if in.BucketContext["Region"] != region {
- t.Errorf("expected %s, got %s", region, in.BucketContext["Region"])
+ if sigver != string(s3.SignatureVersion) {
+ t.Errorf("expected %s, got %s", s3.SignatureVersion, sigver)
}
- if in.BucketContext["ProtocolVersion"] != protocolVersion {
- t.Errorf("expected %s, got %s", protocolVersion, in.BucketContext["ProtocolVersion"])
+ if in.Endpoint != s3.Endpoint {
+ t.Errorf("expected %s, got %s", in.Endpoint, in.Endpoint)
}
- if in.BucketContext["SignatureVersion"] != string(sigVersion) {
- t.Errorf("expected %s, got %s", sigVersion, in.BucketContext["SignatureVersion"])
+ if req.Parameters["ProtocolVersion"] != protocolVersion {
+ t.Errorf("expected %s, got %s", protocolVersion, req.Parameters["ProtocolVersion"])
}
return &osspec.ProvisionerCreateBucketResponse{}, nil
},
- params: map[string]string{
- "Region": region,
- "SignatureVersion": string(sigVersion),
- },
},
{
name: "GCS",
protocolName: v1alpha1.ProtocolNameGCS,
- createFunc: func(ctx context.Context, in *osspec.ProvisionerCreateBucketRequest, opts ...grpc.CallOption) (*osspec.ProvisionerCreateBucketResponse, error) {
- if in.BucketName != bucketName {
- t.Errorf("expected %s, got %s", bucketName, in.BucketName)
+ setProtocol: func(b *v1alpha1.Bucket) {
+ b.Spec.Protocol.GCS = &gcs
+ },
+ createFunc: func(ctx context.Context, req *osspec.ProvisionerCreateBucketRequest, opts ...grpc.CallOption) (*osspec.ProvisionerCreateBucketResponse, error) {
+ in := req.Protocol.GetGcs()
+ if in.BucketName != gcs.BucketName {
+ t.Errorf("expected %s, got %s", gcs.BucketName, in.BucketName)
}
- if in.BucketContext["ServiceAccount"] != account {
- t.Errorf("expected %s, got %s", account, in.BucketContext["ServiceAccount"])
+ if in.ServiceAccount != gcs.ServiceAccount {
+ t.Errorf("expected %s, got %s", gcs.ServiceAccount, in.ServiceAccount)
}
- if in.BucketContext["PrivateKeyName"] != keyName {
- t.Errorf("expected %s, got %s", keyName, in.BucketContext["PrivateKeyName"])
+ if in.PrivateKeyName != gcs.PrivateKeyName {
+ t.Errorf("expected %s, got %s", gcs.PrivateKeyName, in.PrivateKeyName)
}
- if in.BucketContext["ProjectID"] != projID {
- t.Errorf("expected %s, got %s", projID, in.BucketContext["ProjectID"])
+ if in.ProjectId != gcs.ProjectID {
+ t.Errorf("expected %s, got %s", gcs.ProjectID, in.ProjectId)
}
- if in.BucketContext["ProtocolVersion"] != protocolVersion {
- t.Errorf("expected %s, got %s", protocolVersion, in.BucketContext["ProtocolVersion"])
+ if req.Parameters["ProtocolVersion"] != protocolVersion {
+ t.Errorf("expected %s, got %s", protocolVersion, req.Parameters["ProtocolVersion"])
}
return &osspec.ProvisionerCreateBucketResponse{}, nil
},
- params: map[string]string{
- "ServiceAccount": account,
- "PrivateKeyName": keyName,
- "ProjectID": projID,
- },
},
{
name: "AzureBlob",
protocolName: v1alpha1.ProtocolNameAzure,
- createFunc: func(ctx context.Context, in *osspec.ProvisionerCreateBucketRequest, opts ...grpc.CallOption) (*osspec.ProvisionerCreateBucketResponse, error) {
- if in.BucketName != bucketName {
- t.Errorf("expected %s, got %s", bucketName, in.BucketName)
+ setProtocol: func(b *v1alpha1.Bucket) {
+ b.Spec.Protocol.AzureBlob = &azure
+ },
+ createFunc: func(ctx context.Context, req *osspec.ProvisionerCreateBucketRequest, opts ...grpc.CallOption) (*osspec.ProvisionerCreateBucketResponse, error) {
+ in := req.Protocol.GetAzureBlob()
+ if in.ContainerName != azure.ContainerName {
+ t.Errorf("expected %s, got %s", azure.ContainerName, in.ContainerName)
}
- if in.BucketContext["StorageAccount"] != account {
- t.Errorf("expected %s, got %s", account, in.BucketContext["StorageAccount"])
+ if in.StorageAccount != azure.StorageAccount {
+ t.Errorf("expected %s, got %s", azure.StorageAccount, in.StorageAccount)
}
- if in.BucketContext["ProtocolVersion"] != protocolVersion {
- t.Errorf("expected %s, got %s", protocolVersion, in.BucketContext["ProtocolVersion"])
+ if req.Parameters["ProtocolVersion"] != protocolVersion {
+ t.Errorf("expected %s, got %s", protocolVersion, req.Parameters["ProtocolVersion"])
}
return &osspec.ProvisionerCreateBucketResponse{}, nil
},
- params: map[string]string{
- "StorageAccount": account,
- },
},
{
name: "AnonymousAccessMode",
protocolName: v1alpha1.ProtocolNameAzure,
- createFunc: func(ctx context.Context, in *osspec.ProvisionerCreateBucketRequest, opts ...grpc.CallOption) (*osspec.ProvisionerCreateBucketResponse, error) {
- if in.BucketName != bucketName {
- t.Errorf("expected %s, got %s", bucketName, in.BucketName)
+ setProtocol: func(b *v1alpha1.Bucket) {
+ b.Spec.Protocol.AzureBlob = &azure
+ },
+ createFunc: func(ctx context.Context, req *osspec.ProvisionerCreateBucketRequest, opts ...grpc.CallOption) (*osspec.ProvisionerCreateBucketResponse, error) {
+ in := req.Protocol.GetAzureBlob()
+ if in.ContainerName != azure.ContainerName {
+ t.Errorf("expected %s, got %s", azure.ContainerName, in.ContainerName)
}
- if in.BucketContext["StorageAccount"] != account {
- t.Errorf("expected %s, got %s", account, in.BucketContext["StorageAccount"])
+ if in.StorageAccount != azure.StorageAccount {
+ t.Errorf("expected %s, got %s", azure.StorageAccount, in.StorageAccount)
}
- aMode := osspec.ProvisionerCreateBucketRequest_AnonymousBucketAccessMode(osspec.ProvisionerCreateBucketRequest_AnonymousBucketAccessMode_value[anonAccess])
- if in.AnonymousBucketAccessMode != aMode {
- t.Errorf("expected %s, got %s", aMode, in.AnonymousBucketAccessMode)
+ aMode := osspec.AnonymousBucketAccessMode(osspec.AnonymousBucketAccessMode_value[anonAccess])
+ if req.AnonymousBucketAccessMode != aMode {
+ t.Errorf("expected %s, got %s", aMode, req.AnonymousBucketAccessMode)
}
- if in.BucketContext["ProtocolVersion"] != protocolVersion {
- t.Errorf("expected %s, got %s", protocolVersion, in.BucketContext["ProtocolVersion"])
+ if req.Parameters["ProtocolVersion"] != protocolVersion {
+ t.Errorf("expected %s, got %s", protocolVersion, req.Parameters["ProtocolVersion"])
}
return &osspec.ProvisionerCreateBucketResponse{}, nil
},
- params: map[string]string{
- "StorageAccount": account,
- "AnonymousAccessMode": anonAccess,
- },
- },
- {
- name: "Empty parameters",
- protocolName: v1alpha1.ProtocolNameS3,
- createFunc: func(ctx context.Context, in *osspec.ProvisionerCreateBucketRequest, opts ...grpc.CallOption) (*osspec.ProvisionerCreateBucketResponse, error) {
- if in.BucketName != bucketName {
- t.Errorf("expected %s, got %s", bucketName, in.BucketName)
- }
- if in.BucketContext["ProtocolVersion"] != protocolVersion {
- t.Errorf("expected %s, got %s", protocolVersion, in.BucketContext["ProtocolVersion"])
- }
- return &osspec.ProvisionerCreateBucketResponse{}, nil
- },
- params: nil,
},
}
@@ -236,10 +241,8 @@ func TestAddValidProtocols(t *testing.T) {
Spec: v1alpha1.BucketSpec{
Provisioner: provisioner,
Protocol: v1alpha1.Protocol{
- RequestedProtocol: v1alpha1.RequestedProtocol{
- Name: tc.protocolName,
- Version: protocolVersion,
- },
+ Name: tc.protocolName,
+ Version: protocolVersion,
},
Parameters: tc.params,
},
@@ -248,7 +251,7 @@ func TestAddValidProtocols(t *testing.T) {
ctx := context.TODO()
client := fakebucketclientset.NewSimpleClientset(&b)
kubeClient := fakekubeclientset.NewSimpleClientset()
- mpc.CreateBucket = tc.createFunc
+ mpc.FakeProvisionerCreateBucket = tc.createFunc
bl := bucketListener{
provisionerName: provisioner,
provisionerClient: &mpc,
@@ -256,6 +259,7 @@ func TestAddValidProtocols(t *testing.T) {
kubeClient: kubeClient,
}
+ tc.setProtocol(&b)
t.Logf(tc.name)
err := bl.Add(ctx, &b)
if err != nil {
@@ -271,8 +275,8 @@ func TestAddValidProtocols(t *testing.T) {
func TestDeleteWrongProvisioner(t *testing.T) {
provisioner := "provisioner1"
- mpc := struct{ fakespec.MockProvisionerClient }{}
- mpc.DeleteBucket = func(ctx context.Context, in *osspec.ProvisionerDeleteBucketRequest, opts ...grpc.CallOption) (*osspec.ProvisionerDeleteBucketResponse, error) {
+ mpc := struct{ fakespec.FakeProvisionerClient }{}
+ mpc.FakeProvisionerDeleteBucket = func(ctx context.Context, in *osspec.ProvisionerDeleteBucketRequest, opts ...grpc.CallOption) (*osspec.ProvisionerDeleteBucketResponse, error) {
t.Errorf("grpc client called")
return nil, nil
}
@@ -304,7 +308,7 @@ func TestDeleteValidProtocols(t *testing.T) {
keyName := "keyName1"
projID := "id1"
endpoint := "endpoint1"
- mpc := struct{ fakespec.MockProvisionerClient }{}
+ mpc := struct{ fakespec.FakeProvisionerClient }{}
extraParamName := "ParamName"
extraParamValue := "ParamValue"
@@ -320,34 +324,35 @@ func TestDeleteValidProtocols(t *testing.T) {
setProtocol: func(b *v1alpha1.Bucket) {
b.Spec.Protocol.S3 = &v1alpha1.S3Protocol{
Region: region,
- Version: protocolVersion,
SignatureVersion: sigVersion,
BucketName: bucketName,
Endpoint: endpoint,
}
},
protocolName: v1alpha1.ProtocolNameS3,
- deleteFunc: func(ctx context.Context, in *osspec.ProvisionerDeleteBucketRequest, opts ...grpc.CallOption) (*osspec.ProvisionerDeleteBucketResponse, error) {
+ deleteFunc: func(ctx context.Context, req *osspec.ProvisionerDeleteBucketRequest, opts ...grpc.CallOption) (*osspec.ProvisionerDeleteBucketResponse, error) {
+ in := req.Protocol.GetS3()
if in.BucketName != bucketName {
t.Errorf("expected %s, got %s", bucketName, in.BucketName)
}
- if in.BucketContext["Region"] != region {
- t.Errorf("expected %s, got %s", region, in.BucketContext["Region"])
+ if in.Region != region {
+ t.Errorf("expected %s, got %s", region, in.Region)
}
- if in.BucketContext["ProtocolVersion"] != protocolVersion {
- t.Errorf("expected %s, got %s", protocolVersion, in.BucketContext["ProtocolVersion"])
+ sigver, ok := osspec.S3SignatureVersion_name[int32(in.SignatureVersion)]
+ if !ok {
+ sigver = osspec.S3SignatureVersion_name[int32(osspec.S3SignatureVersion_UnknownSignature)]
}
- if in.BucketContext["SignatureVersion"] != string(sigVersion) {
- t.Errorf("expected %s, got %s", sigVersion, in.BucketContext["SignatureVersion"])
+ if sigver != string(sigVersion) {
+ t.Errorf("expected %s, got %s", sigVersion, sigver)
}
- if in.BucketContext["Endpoint"] != endpoint {
- t.Errorf("expected %s, got %s", endpoint, in.BucketContext["Endpoint"])
+ if in.Endpoint != endpoint {
+ t.Errorf("expected %s, got %s", endpoint, in.Endpoint)
}
- if in.BucketContext[extraParamName] != extraParamValue {
- t.Errorf("expected %s, got %s", extraParamValue, in.BucketContext[extraParamName])
+ if req.Parameters[extraParamName] != extraParamValue {
+ t.Errorf("expected %s, got %s", extraParamValue, req.Parameters[extraParamName])
}
- if in.BucketContext["ProtocolVersion"] != protocolVersion {
- t.Errorf("expected %s, got %s", protocolVersion, in.BucketContext["ProtocolVersion"])
+ if req.Parameters["ProtocolVersion"] != protocolVersion {
+ t.Errorf("expected %s, got %s", protocolVersion, req.Parameters["ProtocolVersion"])
}
return &osspec.ProvisionerDeleteBucketResponse{}, nil
},
@@ -366,24 +371,25 @@ func TestDeleteValidProtocols(t *testing.T) {
}
},
protocolName: v1alpha1.ProtocolNameGCS,
- deleteFunc: func(ctx context.Context, in *osspec.ProvisionerDeleteBucketRequest, opts ...grpc.CallOption) (*osspec.ProvisionerDeleteBucketResponse, error) {
+ deleteFunc: func(ctx context.Context, req *osspec.ProvisionerDeleteBucketRequest, opts ...grpc.CallOption) (*osspec.ProvisionerDeleteBucketResponse, error) {
+ in := req.Protocol.GetGcs()
if in.BucketName != bucketName {
t.Errorf("expected %s, got %s", bucketName, in.BucketName)
}
- if in.BucketContext["ServiceAccount"] != account {
- t.Errorf("expected %s, got %s", region, in.BucketContext["ServiceAccount"])
+ if in.ServiceAccount != account {
+ t.Errorf("expected %s, got %s", region, in.ServiceAccount)
}
- if in.BucketContext["PrivateKeyName"] != keyName {
- t.Errorf("expected %s, got %s", region, in.BucketContext["PrivateKeyName"])
+ if in.PrivateKeyName != keyName {
+ t.Errorf("expected %s, got %s", region, in.PrivateKeyName)
}
- if in.BucketContext["ProjectID"] != projID {
- t.Errorf("expected %s, got %s", region, in.BucketContext["ProjectID"])
+ if in.ProjectId != projID {
+ t.Errorf("expected %s, got %s", region, in.ProjectId)
}
- if in.BucketContext[extraParamName] != extraParamValue {
- t.Errorf("expected %s, got %s", extraParamValue, in.BucketContext[extraParamName])
+ if req.Parameters[extraParamName] != extraParamValue {
+ t.Errorf("expected %s, got %s", extraParamValue, req.Parameters[extraParamName])
}
- if in.BucketContext["ProtocolVersion"] != protocolVersion {
- t.Errorf("expected %s, got %s", protocolVersion, in.BucketContext["ProtocolVersion"])
+ if req.Parameters["ProtocolVersion"] != protocolVersion {
+ t.Errorf("expected %s, got %s", protocolVersion, req.Parameters["ProtocolVersion"])
}
return &osspec.ProvisionerDeleteBucketResponse{}, nil
},
@@ -400,18 +406,19 @@ func TestDeleteValidProtocols(t *testing.T) {
}
},
protocolName: v1alpha1.ProtocolNameAzure,
- deleteFunc: func(ctx context.Context, in *osspec.ProvisionerDeleteBucketRequest, opts ...grpc.CallOption) (*osspec.ProvisionerDeleteBucketResponse, error) {
- if in.BucketName != bucketName {
- t.Errorf("expected %s, got %s", bucketName, in.BucketName)
+ deleteFunc: func(ctx context.Context, req *osspec.ProvisionerDeleteBucketRequest, opts ...grpc.CallOption) (*osspec.ProvisionerDeleteBucketResponse, error) {
+ in := req.Protocol.GetAzureBlob()
+ if in.ContainerName != bucketName {
+ t.Errorf("expected %s, got %s", bucketName, in.ContainerName)
}
- if in.BucketContext["StorageAccount"] != account {
- t.Errorf("expected %s, got %s", region, in.BucketContext["StorageAccount"])
+ if in.StorageAccount != account {
+ t.Errorf("expected %s, got %s", region, in.StorageAccount)
}
- if in.BucketContext[extraParamName] != extraParamValue {
- t.Errorf("expected %s, got %s", extraParamValue, in.BucketContext[extraParamName])
+ if req.Parameters[extraParamName] != extraParamValue {
+ t.Errorf("expected %s, got %s", extraParamValue, req.Parameters[extraParamName])
}
- if in.BucketContext["ProtocolVersion"] != protocolVersion {
- t.Errorf("expected %s, got %s", protocolVersion, in.BucketContext["ProtocolVersion"])
+ if req.Parameters["ProtocolVersion"] != protocolVersion {
+ t.Errorf("expected %s, got %s", protocolVersion, req.Parameters["ProtocolVersion"])
}
return &osspec.ProvisionerDeleteBucketResponse{}, nil
},
@@ -424,31 +431,32 @@ func TestDeleteValidProtocols(t *testing.T) {
setProtocol: func(b *v1alpha1.Bucket) {
b.Spec.Protocol.S3 = &v1alpha1.S3Protocol{
Region: region,
- Version: protocolVersion,
SignatureVersion: sigVersion,
BucketName: bucketName,
Endpoint: endpoint,
}
},
protocolName: v1alpha1.ProtocolNameS3,
- deleteFunc: func(ctx context.Context, in *osspec.ProvisionerDeleteBucketRequest, opts ...grpc.CallOption) (*osspec.ProvisionerDeleteBucketResponse, error) {
+ deleteFunc: func(ctx context.Context, req *osspec.ProvisionerDeleteBucketRequest, opts ...grpc.CallOption) (*osspec.ProvisionerDeleteBucketResponse, error) {
+ in := req.Protocol.GetS3()
if in.BucketName != bucketName {
t.Errorf("expected %s, got %s", bucketName, in.BucketName)
}
- if in.BucketContext["Region"] != region {
- t.Errorf("expected %s, got %s", region, in.BucketContext["Region"])
+ if in.Region != region {
+ t.Errorf("expected %s, got %s", region, in.Region)
}
- if in.BucketContext["ProtocolVersion"] != protocolVersion {
- t.Errorf("expected %s, got %s", protocolVersion, in.BucketContext["ProtocolVersion"])
+ sigver, ok := osspec.S3SignatureVersion_name[int32(in.SignatureVersion)]
+ if !ok {
+ sigver = osspec.S3SignatureVersion_name[int32(osspec.S3SignatureVersion_UnknownSignature)]
}
- if in.BucketContext["SignatureVersion"] != string(sigVersion) {
- t.Errorf("expected %s, got %s", sigVersion, in.BucketContext["SignatureVersion"])
+ if sigver != string(sigVersion) {
+ t.Errorf("expected %s, got %s", sigVersion, sigver)
}
- if in.BucketContext["Endpoint"] != endpoint {
- t.Errorf("expected %s, got %s", endpoint, in.BucketContext["Endpoint"])
+ if in.Endpoint != endpoint {
+ t.Errorf("expected %s, got %s", endpoint, in.Endpoint)
}
- if in.BucketContext["ProtocolVersion"] != protocolVersion {
- t.Errorf("expected %s, got %s", protocolVersion, in.BucketContext["ProtocolVersion"])
+ if req.Parameters["ProtocolVersion"] != protocolVersion {
+ t.Errorf("expected %s, got %s", protocolVersion, req.Parameters["ProtocolVersion"])
}
return &osspec.ProvisionerDeleteBucketResponse{}, nil
},
@@ -461,10 +469,8 @@ func TestDeleteValidProtocols(t *testing.T) {
Spec: v1alpha1.BucketSpec{
Provisioner: provisioner,
Protocol: v1alpha1.Protocol{
- RequestedProtocol: v1alpha1.RequestedProtocol{
- Name: tc.protocolName,
- Version: protocolVersion,
- },
+ Name: tc.protocolName,
+ Version: protocolVersion,
},
Parameters: tc.params,
},
@@ -475,7 +481,7 @@ func TestDeleteValidProtocols(t *testing.T) {
ctx := context.TODO()
client := fakebucketclientset.NewSimpleClientset(&b)
- mpc.DeleteBucket = tc.deleteFunc
+ mpc.FakeProvisionerDeleteBucket = tc.deleteFunc
bl := bucketListener{
provisionerName: provisioner,
provisionerClient: &mpc,
@@ -515,9 +521,7 @@ func TestDeleteInvalidProtocol(t *testing.T) {
},
Provisioner: provisioner,
Protocol: v1alpha1.Protocol{
- RequestedProtocol: v1alpha1.RequestedProtocol{
- Name: protocolName,
- },
+ Name: protocolName,
},
},
}
diff --git a/pkg/controller/bucketaccess/bucket_access_controller.go b/pkg/controller/bucketaccess/bucket_access_controller.go
index 3a5527a..37c6db5 100644
--- a/pkg/controller/bucketaccess/bucket_access_controller.go
+++ b/pkg/controller/bucketaccess/bucket_access_controller.go
@@ -19,6 +19,7 @@ package bucketaccess
import (
"context"
"fmt"
+ "github.com/pkg/errors"
"strings"
"time"
@@ -32,11 +33,11 @@ import (
"k8s.io/client-go/util/retry"
"k8s.io/client-go/util/workqueue"
- "github.com/kubernetes-sigs/container-object-storage-interface-api/apis/objectstorage.k8s.io/v1alpha1"
- bucketclientset "github.com/kubernetes-sigs/container-object-storage-interface-api/clientset"
- "github.com/kubernetes-sigs/container-object-storage-interface-api/controller"
+ "sigs.k8s.io/container-object-storage-interface-api/apis/objectstorage.k8s.io/v1alpha1"
+ bucketclientset "sigs.k8s.io/container-object-storage-interface-api/clientset"
+ "sigs.k8s.io/container-object-storage-interface-api/controller"
- osspec "github.com/kubernetes-sigs/container-object-storage-interface-spec"
+ osspec "sigs.k8s.io/container-object-storage-interface-spec"
"k8s.io/klog/v2"
@@ -114,30 +115,21 @@ func (bal *bucketAccessListener) Add(ctx context.Context, obj *v1alpha1.BucketAc
}
req := osspec.ProvisionerGrantBucketAccessRequest{
- Principal: obj.Spec.Principal,
- AccessPolicy: obj.Spec.PolicyActionsConfigMapData,
- BucketContext: bal.getParams(obj),
+ Principal: obj.Spec.Principal,
+ AccessPolicy: obj.Spec.PolicyActionsConfigMapData,
+ Parameters: bal.getParams(obj),
}
- switch bucket.Spec.Protocol.Name {
- case v1alpha1.ProtocolNameS3:
- req.BucketName = bucket.Spec.Protocol.S3.BucketName
- req.BucketContext["Region"] = bucket.Spec.Protocol.S3.Region
- req.BucketContext["Version"] = bucket.Spec.Protocol.S3.Version
- req.BucketContext["SignatureVersion"] = string(bucket.Spec.Protocol.S3.SignatureVersion)
- req.BucketContext["Endpoint"] = bucket.Spec.Protocol.S3.Endpoint
- case v1alpha1.ProtocolNameAzure:
- req.BucketName = bucket.Spec.Protocol.AzureBlob.ContainerName
- req.BucketContext["StorageAccount"] = bucket.Spec.Protocol.AzureBlob.StorageAccount
- case v1alpha1.ProtocolNameGCS:
- req.BucketName = bucket.Spec.Protocol.GCS.BucketName
- req.BucketContext["ServiceAccount"] = bucket.Spec.Protocol.GCS.ServiceAccount
- req.BucketContext["PrivateKeyName"] = bucket.Spec.Protocol.GCS.PrivateKeyName
- req.BucketContext["ProjectID"] = bucket.Spec.Protocol.GCS.ProjectID
- default:
- return fmt.Errorf("unknown protocol: %s", bucket.Spec.Protocol.Name)
+ if req.Parameters == nil {
+ req.Parameters = make(map[string]string)
}
+ proto, err := bucket.Spec.Protocol.ConvertToExternal()
+ if err != nil {
+ return errors.Wrap(err, "failed to parse protocol for API")
+ }
+ req.Protocol = proto
+
// TODO set grpc timeout
rsp, err := bal.provisionerClient.ProvisionerGrantBucketAccess(ctx, &req)
if err != nil {
@@ -205,28 +197,19 @@ func (bal *bucketAccessListener) Delete(ctx context.Context, obj *v1alpha1.Bucke
}
req := osspec.ProvisionerRevokeBucketAccessRequest{
- Principal: obj.Spec.Principal,
- BucketContext: bal.getParams(obj),
+ Principal: obj.Spec.Principal,
+ Parameters: bal.getParams(obj),
}
- switch bucket.Spec.Protocol.Name {
- case v1alpha1.ProtocolNameS3:
- req.BucketName = bucket.Spec.Protocol.S3.BucketName
- req.BucketContext["Region"] = bucket.Spec.Protocol.S3.Region
- req.BucketContext["Version"] = bucket.Spec.Protocol.S3.Version
- req.BucketContext["SignatureVersion"] = string(bucket.Spec.Protocol.S3.SignatureVersion)
- req.BucketContext["Endpoint"] = bucket.Spec.Protocol.S3.Endpoint
- case v1alpha1.ProtocolNameAzure:
- req.BucketName = bucket.Spec.Protocol.AzureBlob.ContainerName
- req.BucketContext["StorageAccount"] = bucket.Spec.Protocol.AzureBlob.StorageAccount
- case v1alpha1.ProtocolNameGCS:
- req.BucketName = bucket.Spec.Protocol.GCS.BucketName
- req.BucketContext["ServiceAccount"] = bucket.Spec.Protocol.GCS.ServiceAccount
- req.BucketContext["PrivateKeyName"] = bucket.Spec.Protocol.GCS.PrivateKeyName
- req.BucketContext["ProjectID"] = bucket.Spec.Protocol.GCS.ProjectID
- default:
- return fmt.Errorf("unknown protocol: %s", bucket.Spec.Protocol.Name)
+ if req.Parameters == nil {
+ req.Parameters = make(map[string]string)
+ }
+
+ proto, err := bucket.Spec.Protocol.ConvertToExternal()
+ if err != nil {
+ return errors.Wrap(err, "failed to parse protocol for API")
}
+ req.Protocol = proto
// TODO set grpc timeout
rsp, err := bal.provisionerClient.ProvisionerRevokeBucketAccess(ctx, &req)
diff --git a/pkg/controller/bucketaccess/bucket_access_controller_test.go b/pkg/controller/bucketaccess/bucket_access_controller_test.go
index 0bb9870..1612114 100644
--- a/pkg/controller/bucketaccess/bucket_access_controller_test.go
+++ b/pkg/controller/bucketaccess/bucket_access_controller_test.go
@@ -22,11 +22,11 @@ import (
"strings"
"testing"
- "github.com/kubernetes-sigs/container-object-storage-interface-api/apis/objectstorage.k8s.io/v1alpha1"
- fakebucketclientset "github.com/kubernetes-sigs/container-object-storage-interface-api/clientset/fake"
+ "sigs.k8s.io/container-object-storage-interface-api/apis/objectstorage.k8s.io/v1alpha1"
+ fakebucketclientset "sigs.k8s.io/container-object-storage-interface-api/clientset/fake"
- osspec "github.com/kubernetes-sigs/container-object-storage-interface-spec"
- fakespec "github.com/kubernetes-sigs/container-object-storage-interface-spec/fake"
+ osspec "sigs.k8s.io/container-object-storage-interface-spec"
+ fakespec "sigs.k8s.io/container-object-storage-interface-spec/fake"
corev1 "k8s.io/api/core/v1"
v1 "k8s.io/api/core/v1"
@@ -79,8 +79,8 @@ func TestInitializeBucketClient(t *testing.T) {
func TestAddWrongProvisioner(t *testing.T) {
provisioner := "provisioner1"
- mpc := struct{ fakespec.MockProvisionerClient }{}
- mpc.GrantBucketAccess = func(ctx context.Context, in *osspec.ProvisionerGrantBucketAccessRequest, opts ...grpc.CallOption) (*osspec.ProvisionerGrantBucketAccessResponse, error) {
+ mpc := struct{ fakespec.FakeProvisionerClient }{}
+ mpc.FakeProvisionerGrantBucketAccess = func(ctx context.Context, in *osspec.ProvisionerGrantBucketAccessRequest, opts ...grpc.CallOption) (*osspec.ProvisionerGrantBucketAccessResponse, error) {
t.Errorf("grpc client called")
return nil, nil
}
@@ -118,7 +118,7 @@ func TestAdd(t *testing.T) {
credsFile := "credsFile"
generatedPrincipal := "driverPrincipal"
sa := "serviceAccount"
- mpc := struct{ fakespec.MockProvisionerClient }{}
+ mpc := struct{ fakespec.FakeProvisionerClient }{}
extraParamName := "ParamName"
extraParamValue := "ParamValue"
@@ -136,34 +136,36 @@ func TestAdd(t *testing.T) {
setProtocol: func(b *v1alpha1.Bucket) {
b.Spec.Protocol.S3 = &v1alpha1.S3Protocol{
Region: region,
- Version: protocolVersion,
SignatureVersion: sigVersion,
BucketName: bucketName,
Endpoint: endpoint,
}
},
protocolName: v1alpha1.ProtocolNameS3,
- grantFunc: func(ctx context.Context, in *osspec.ProvisionerGrantBucketAccessRequest, opts ...grpc.CallOption) (*osspec.ProvisionerGrantBucketAccessResponse, error) {
+ grantFunc: func(ctx context.Context, req *osspec.ProvisionerGrantBucketAccessRequest, opts ...grpc.CallOption) (*osspec.ProvisionerGrantBucketAccessResponse, error) {
+ in := req.Protocol.GetS3()
if in.BucketName != bucketName {
t.Errorf("expected %s, got %s", bucketName, in.BucketName)
}
- if in.BucketContext["Region"] != region {
- t.Errorf("expected %s, got %s", region, in.BucketContext["Region"])
+ if in.Region != region {
+ t.Errorf("expected %s, got %s", region, in.Region)
}
- if in.Principal != principal {
- t.Errorf("expected %s, got %s", principal, in.Principal)
+ if req.Principal != principal {
+ t.Errorf("expected %s, got %s", principal, req.Principal)
}
- if in.BucketContext["Version"] != protocolVersion {
- t.Errorf("expected %s, got %s", protocolVersion, in.BucketContext["Version"])
+ // TODO do we need to check ProtocolVersion here? If so, from where?
+ sigver, ok := osspec.S3SignatureVersion_name[int32(in.SignatureVersion)]
+ if !ok {
+ sigver = osspec.S3SignatureVersion_name[int32(osspec.S3SignatureVersion_UnknownSignature)]
}
- if in.BucketContext["SignatureVersion"] != string(sigVersion) {
- t.Errorf("expected %s, got %s", sigVersion, in.BucketContext["SignatureVersion"])
+ if sigver != string(sigVersion) {
+ t.Errorf("expected %s, got %s", sigVersion, sigver)
}
- if in.BucketContext["Endpoint"] != endpoint {
- t.Errorf("expected %s, got %s", endpoint, in.BucketContext["Endpoint"])
+ if in.Endpoint != endpoint {
+ t.Errorf("expected %s, got %s", endpoint, in.Endpoint)
}
- if in.BucketContext[extraParamName] != extraParamValue {
- t.Errorf("expected %s, got %s", extraParamValue, in.BucketContext[extraParamName])
+ if req.Parameters[extraParamName] != extraParamValue {
+ t.Errorf("expected %s, got %s", extraParamValue, req.Parameters[extraParamName])
}
return &osspec.ProvisionerGrantBucketAccessResponse{
Principal: principal,
@@ -188,24 +190,25 @@ func TestAdd(t *testing.T) {
}
},
protocolName: v1alpha1.ProtocolNameGCS,
- grantFunc: func(ctx context.Context, in *osspec.ProvisionerGrantBucketAccessRequest, opts ...grpc.CallOption) (*osspec.ProvisionerGrantBucketAccessResponse, error) {
+ grantFunc: func(ctx context.Context, req *osspec.ProvisionerGrantBucketAccessRequest, opts ...grpc.CallOption) (*osspec.ProvisionerGrantBucketAccessResponse, error) {
+ in := req.Protocol.GetGcs()
if in.BucketName != bucketName {
t.Errorf("expected %s, got %s", bucketName, in.BucketName)
}
- if in.Principal != principal {
- t.Errorf("expected %s, got %s", principal, in.Principal)
+ if req.Principal != principal {
+ t.Errorf("expected %s, got %s", principal, req.Principal)
}
- if in.BucketContext["ServiceAccount"] != account {
- t.Errorf("expected %s, got %s", account, in.BucketContext["ServiceAccount"])
+ if in.ServiceAccount != account {
+ t.Errorf("expected %s, got %s", account, in.ServiceAccount)
}
- if in.BucketContext["PrivateKeyName"] != keyName {
- t.Errorf("expected %s, got %s", keyName, in.BucketContext["PrivateKeyName"])
+ if in.PrivateKeyName != keyName {
+ t.Errorf("expected %s, got %s", keyName, in.PrivateKeyName)
}
- if in.BucketContext["ProjectID"] != projID {
- t.Errorf("expected %s, got %s", projID, in.BucketContext["ProjectID"])
+ if in.ProjectId != projID {
+ t.Errorf("expected %s, got %s", projID, in.ProjectId)
}
- if in.BucketContext[extraParamName] != extraParamValue {
- t.Errorf("expected %s, got %s", extraParamValue, in.BucketContext[extraParamName])
+ if req.Parameters[extraParamName] != extraParamValue {
+ t.Errorf("expected %s, got %s", extraParamValue, req.Parameters[extraParamName])
}
return &osspec.ProvisionerGrantBucketAccessResponse{
Principal: principal,
@@ -228,18 +231,19 @@ func TestAdd(t *testing.T) {
}
},
protocolName: v1alpha1.ProtocolNameAzure,
- grantFunc: func(ctx context.Context, in *osspec.ProvisionerGrantBucketAccessRequest, opts ...grpc.CallOption) (*osspec.ProvisionerGrantBucketAccessResponse, error) {
- if in.BucketName != bucketName {
- t.Errorf("expected %s, got %s", bucketName, in.BucketName)
+ grantFunc: func(ctx context.Context, req *osspec.ProvisionerGrantBucketAccessRequest, opts ...grpc.CallOption) (*osspec.ProvisionerGrantBucketAccessResponse, error) {
+ in := req.Protocol.GetAzureBlob()
+ if in.ContainerName != bucketName {
+ t.Errorf("expected %s, got %s", bucketName, in.ContainerName)
}
- if in.Principal != principal {
- t.Errorf("expected %s, got %s", principal, in.Principal)
+ if req.Principal != principal {
+ t.Errorf("expected %s, got %s", principal, req.Principal)
}
- if in.BucketContext["StorageAccount"] != account {
- t.Errorf("expected %s, got %s", account, in.BucketContext["StorageAccount"])
+ if in.StorageAccount != account {
+ t.Errorf("expected %s, got %s", account, in.StorageAccount)
}
- if in.BucketContext[extraParamName] != extraParamValue {
- t.Errorf("expected %s, got %s", extraParamValue, in.BucketContext[extraParamName])
+ if req.Parameters[extraParamName] != extraParamValue {
+ t.Errorf("expected %s, got %s", extraParamValue, req.Parameters[extraParamName])
}
return &osspec.ProvisionerGrantBucketAccessResponse{
Principal: principal,
@@ -258,7 +262,6 @@ func TestAdd(t *testing.T) {
setProtocol: func(b *v1alpha1.Bucket) {
b.Spec.Protocol.S3 = &v1alpha1.S3Protocol{
Region: region,
- Version: protocolVersion,
SignatureVersion: sigVersion,
BucketName: bucketName,
Endpoint: endpoint,
@@ -283,7 +286,6 @@ func TestAdd(t *testing.T) {
setProtocol: func(b *v1alpha1.Bucket) {
b.Spec.Protocol.S3 = &v1alpha1.S3Protocol{
Region: region,
- Version: protocolVersion,
SignatureVersion: sigVersion,
BucketName: bucketName,
Endpoint: endpoint,
@@ -308,31 +310,33 @@ func TestAdd(t *testing.T) {
setProtocol: func(b *v1alpha1.Bucket) {
b.Spec.Protocol.S3 = &v1alpha1.S3Protocol{
Region: region,
- Version: protocolVersion,
SignatureVersion: sigVersion,
BucketName: bucketName,
Endpoint: endpoint,
}
},
protocolName: v1alpha1.ProtocolNameS3,
- grantFunc: func(ctx context.Context, in *osspec.ProvisionerGrantBucketAccessRequest, opts ...grpc.CallOption) (*osspec.ProvisionerGrantBucketAccessResponse, error) {
+ grantFunc: func(ctx context.Context, req *osspec.ProvisionerGrantBucketAccessRequest, opts ...grpc.CallOption) (*osspec.ProvisionerGrantBucketAccessResponse, error) {
+ in := req.Protocol.GetS3()
if in.BucketName != bucketName {
t.Errorf("expected %s, got %s", bucketName, in.BucketName)
}
- if in.BucketContext["Region"] != region {
- t.Errorf("expected %s, got %s", region, in.BucketContext["Region"])
+ if in.Region != region {
+ t.Errorf("expected %s, got %s", region, in.Region)
}
- if in.Principal != principal {
- t.Errorf("expected %s, got %s", principal, in.Principal)
+ if req.Principal != principal {
+ t.Errorf("expected %s, got %s", principal, req.Principal)
}
- if in.BucketContext["Version"] != protocolVersion {
- t.Errorf("expected %s, got %s", protocolVersion, in.BucketContext["Version"])
+ // TODO do we need to check ProtocolVersion here? If so, from where?
+ sigver, ok := osspec.S3SignatureVersion_name[int32(in.SignatureVersion)]
+ if !ok {
+ sigver = osspec.S3SignatureVersion_name[int32(osspec.S3SignatureVersion_UnknownSignature)]
}
- if in.BucketContext["SignatureVersion"] != string(sigVersion) {
- t.Errorf("expected %s, got %s", sigVersion, in.BucketContext["SignatureVersion"])
+ if sigver != string(sigVersion) {
+ t.Errorf("expected %s, got %s", sigVersion, sigver)
}
- if in.BucketContext["Endpoint"] != endpoint {
- t.Errorf("expected %s, got %s", endpoint, in.BucketContext["Endpoint"])
+ if in.Endpoint != endpoint {
+ t.Errorf("expected %s, got %s", endpoint, in.Endpoint)
}
return &osspec.ProvisionerGrantBucketAccessResponse{
Principal: principal,
@@ -354,9 +358,8 @@ func TestAdd(t *testing.T) {
Spec: v1alpha1.BucketSpec{
Provisioner: provisioner,
Protocol: v1alpha1.Protocol{
- RequestedProtocol: v1alpha1.RequestedProtocol{
- Name: tc.protocolName,
- },
+ Name: tc.protocolName,
+ Version: protocolVersion,
},
},
}
@@ -380,7 +383,7 @@ func TestAdd(t *testing.T) {
tc.setProtocol(&b)
client := fakebucketclientset.NewSimpleClientset(&ba, &b)
kubeClient := fakekubeclientset.NewSimpleClientset()
- mpc.GrantBucketAccess = tc.grantFunc
+ mpc.FakeProvisionerGrantBucketAccess = tc.grantFunc
bal := bucketAccessListener{
provisionerName: provisioner,
provisionerClient: &mpc,
@@ -423,8 +426,8 @@ func TestAdd(t *testing.T) {
func TestDeleteWrongProvisioner(t *testing.T) {
provisioner := "provisioner1"
- mpc := struct{ fakespec.MockProvisionerClient }{}
- mpc.RevokeBucketAccess = func(ctx context.Context, in *osspec.ProvisionerRevokeBucketAccessRequest, opts ...grpc.CallOption) (*osspec.ProvisionerRevokeBucketAccessResponse, error) {
+ mpc := struct{ fakespec.FakeProvisionerClient }{}
+ mpc.FakeProvisionerRevokeBucketAccess = func(ctx context.Context, in *osspec.ProvisionerRevokeBucketAccessRequest, opts ...grpc.CallOption) (*osspec.ProvisionerRevokeBucketAccessResponse, error) {
t.Errorf("grpc client called")
return nil, nil
}
@@ -452,13 +455,13 @@ func TestDelete(t *testing.T) {
bucketName := "bucket1"
principal := "principal1"
protocolVersion := "proto1"
- sigVersion := v1alpha1.S3SignatureVersion(v1alpha1.S3SignatureVersionV2)
+ sigVersion := v1alpha1.S3SignatureVersionV2
account := "account1"
keyName := "keyName1"
projID := "id1"
endpoint := "endpoint1"
instanceName := "instance"
- mpc := struct{ fakespec.MockProvisionerClient }{}
+ mpc := struct{ fakespec.FakeProvisionerClient }{}
extraParamName := "ParamName"
extraParamValue := "ParamValue"
@@ -475,34 +478,36 @@ func TestDelete(t *testing.T) {
setProtocol: func(b *v1alpha1.Bucket) {
b.Spec.Protocol.S3 = &v1alpha1.S3Protocol{
Region: region,
- Version: protocolVersion,
SignatureVersion: sigVersion,
BucketName: bucketName,
Endpoint: endpoint,
}
},
protocolName: v1alpha1.ProtocolNameS3,
- revokeFunc: func(ctx context.Context, in *osspec.ProvisionerRevokeBucketAccessRequest, opts ...grpc.CallOption) (*osspec.ProvisionerRevokeBucketAccessResponse, error) {
+ revokeFunc: func(ctx context.Context, req *osspec.ProvisionerRevokeBucketAccessRequest, opts ...grpc.CallOption) (*osspec.ProvisionerRevokeBucketAccessResponse, error) {
+ in := req.Protocol.GetS3()
if in.BucketName != bucketName {
t.Errorf("expected %s, got %s", bucketName, in.BucketName)
}
- if in.BucketContext["Region"] != region {
- t.Errorf("expected %s, got %s", region, in.BucketContext["Region"])
+ if in.Region != region {
+ t.Errorf("expected %s, got %s", region, in.Region)
}
- if in.Principal != principal {
- t.Errorf("expected %s, got %s", principal, in.Principal)
+ if req.Principal != principal {
+ t.Errorf("expected %s, got %s", principal, req.Principal)
}
- if in.BucketContext["Version"] != protocolVersion {
- t.Errorf("expected %s, got %s", protocolVersion, in.BucketContext["Version"])
+ // TODO do we need to check ProtocolVersion here? If so, from where?
+ sigver, ok := osspec.S3SignatureVersion_name[int32(in.SignatureVersion)]
+ if !ok {
+ sigver = osspec.S3SignatureVersion_name[int32(osspec.S3SignatureVersion_UnknownSignature)]
}
- if in.BucketContext["SignatureVersion"] != string(sigVersion) {
- t.Errorf("expected %s, got %s", sigVersion, in.BucketContext["SignatureVersion"])
+ if sigver != string(sigVersion) {
+ t.Errorf("expected %s, got %s", sigVersion, sigver)
}
- if in.BucketContext["Endpoint"] != endpoint {
- t.Errorf("expected %s, got %s", endpoint, in.BucketContext["Endpoint"])
+ if in.Endpoint != endpoint {
+ t.Errorf("expected %s, got %s", endpoint, in.Endpoint)
}
- if in.BucketContext[extraParamName] != extraParamValue {
- t.Errorf("expected %s, got %s", extraParamValue, in.BucketContext[extraParamName])
+ if req.Parameters[extraParamName] != extraParamValue {
+ t.Errorf("expected %s, got %s", extraParamValue, req.Parameters[extraParamName])
}
return &osspec.ProvisionerRevokeBucketAccessResponse{}, nil
},
@@ -522,24 +527,25 @@ func TestDelete(t *testing.T) {
}
},
protocolName: v1alpha1.ProtocolNameGCS,
- revokeFunc: func(ctx context.Context, in *osspec.ProvisionerRevokeBucketAccessRequest, opts ...grpc.CallOption) (*osspec.ProvisionerRevokeBucketAccessResponse, error) {
+ revokeFunc: func(ctx context.Context, req *osspec.ProvisionerRevokeBucketAccessRequest, opts ...grpc.CallOption) (*osspec.ProvisionerRevokeBucketAccessResponse, error) {
+ in := req.Protocol.GetGcs()
if in.BucketName != bucketName {
t.Errorf("expected %s, got %s", bucketName, in.BucketName)
}
- if in.Principal != principal {
- t.Errorf("expected %s, got %s", principal, in.Principal)
+ if req.Principal != principal {
+ t.Errorf("expected %s, got %s", principal, req.Principal)
}
- if in.BucketContext["ServiceAccount"] != account {
- t.Errorf("expected %s, got %s", account, in.BucketContext["ServiceAccount"])
+ if in.ServiceAccount != account {
+ t.Errorf("expected %s, got %s", account, in.ServiceAccount)
}
- if in.BucketContext["PrivateKeyName"] != keyName {
- t.Errorf("expected %s, got %s", keyName, in.BucketContext["PrivateKeyName"])
+ if in.PrivateKeyName != keyName {
+ t.Errorf("expected %s, got %s", keyName, in.PrivateKeyName)
}
- if in.BucketContext["ProjectID"] != projID {
- t.Errorf("expected %s, got %s", projID, in.BucketContext["ProjectID"])
+ if in.ProjectId != projID {
+ t.Errorf("expected %s, got %s", projID, in.ProjectId)
}
- if in.BucketContext[extraParamName] != extraParamValue {
- t.Errorf("expected %s, got %s", extraParamValue, in.BucketContext[extraParamName])
+ if req.Parameters[extraParamName] != extraParamValue {
+ t.Errorf("expected %s, got %s", extraParamValue, req.Parameters[extraParamName])
}
return &osspec.ProvisionerRevokeBucketAccessResponse{}, nil
},
@@ -557,18 +563,19 @@ func TestDelete(t *testing.T) {
}
},
protocolName: v1alpha1.ProtocolNameAzure,
- revokeFunc: func(ctx context.Context, in *osspec.ProvisionerRevokeBucketAccessRequest, opts ...grpc.CallOption) (*osspec.ProvisionerRevokeBucketAccessResponse, error) {
- if in.BucketName != bucketName {
- t.Errorf("expected %s, got %s", bucketName, in.BucketName)
+ revokeFunc: func(ctx context.Context, req *osspec.ProvisionerRevokeBucketAccessRequest, opts ...grpc.CallOption) (*osspec.ProvisionerRevokeBucketAccessResponse, error) {
+ in := req.Protocol.GetAzureBlob()
+ if in.ContainerName != bucketName {
+ t.Errorf("expected %s, got %s", bucketName, in.ContainerName)
}
- if in.Principal != principal {
- t.Errorf("expected %s, got %s", principal, in.Principal)
+ if req.Principal != principal {
+ t.Errorf("expected %s, got %s", principal, req.Principal)
}
- if in.BucketContext["StorageAccount"] != account {
- t.Errorf("expected %s, got %s", account, in.BucketContext["StorageAccount"])
+ if in.StorageAccount != account {
+ t.Errorf("expected %s, got %s", account, in.StorageAccount)
}
- if in.BucketContext[extraParamName] != extraParamValue {
- t.Errorf("expected %s, got %s", extraParamValue, in.BucketContext[extraParamName])
+ if req.Parameters[extraParamName] != extraParamValue {
+ t.Errorf("expected %s, got %s", extraParamValue, req.Parameters[extraParamName])
}
return &osspec.ProvisionerRevokeBucketAccessResponse{}, nil
},
@@ -582,34 +589,36 @@ func TestDelete(t *testing.T) {
setProtocol: func(b *v1alpha1.Bucket) {
b.Spec.Protocol.S3 = &v1alpha1.S3Protocol{
Region: region,
- Version: protocolVersion,
SignatureVersion: sigVersion,
BucketName: bucketName,
Endpoint: endpoint,
}
},
protocolName: v1alpha1.ProtocolNameS3,
- revokeFunc: func(ctx context.Context, in *osspec.ProvisionerRevokeBucketAccessRequest, opts ...grpc.CallOption) (*osspec.ProvisionerRevokeBucketAccessResponse, error) {
+ revokeFunc: func(ctx context.Context, req *osspec.ProvisionerRevokeBucketAccessRequest, opts ...grpc.CallOption) (*osspec.ProvisionerRevokeBucketAccessResponse, error) {
+ in := req.Protocol.GetS3()
if in.BucketName != bucketName {
t.Errorf("expected %s, got %s", bucketName, in.BucketName)
}
- if in.BucketContext["Region"] != region {
- t.Errorf("expected %s, got %s", region, in.BucketContext["Region"])
+ if in.Region != region {
+ t.Errorf("expected %s, got %s", region, in.Region)
}
- if in.Principal != principal {
- t.Errorf("expected %s, got %s", principal, in.Principal)
+ if req.Principal != principal {
+ t.Errorf("expected %s, got %s", principal, req.Principal)
}
- if in.BucketContext["Version"] != protocolVersion {
- t.Errorf("expected %s, got %s", protocolVersion, in.BucketContext["Version"])
+ // TODO do we need to check ProtocolVersion here? If so, from where?
+ sigver, ok := osspec.S3SignatureVersion_name[int32(in.SignatureVersion)]
+ if !ok {
+ sigver = osspec.S3SignatureVersion_name[int32(osspec.S3SignatureVersion_UnknownSignature)]
}
- if in.BucketContext["SignatureVersion"] != string(sigVersion) {
- t.Errorf("expected %s, got %s", sigVersion, in.BucketContext["SignatureVersion"])
+ if sigver != string(sigVersion) {
+ t.Errorf("expected %s, got %s", sigVersion, sigver)
}
- if in.BucketContext["Endpoint"] != endpoint {
- t.Errorf("expected %s, got %s", endpoint, in.BucketContext["Endpoint"])
+ if in.Endpoint != endpoint {
+ t.Errorf("expected %s, got %s", endpoint, in.Endpoint)
}
- if in.BucketContext[extraParamName] != extraParamValue {
- t.Errorf("expected %s, got %s", extraParamValue, in.BucketContext[extraParamName])
+ if req.Parameters[extraParamName] != extraParamValue {
+ t.Errorf("expected %s, got %s", extraParamValue, req.Parameters[extraParamName])
}
return &osspec.ProvisionerRevokeBucketAccessResponse{}, nil
},
@@ -623,31 +632,33 @@ func TestDelete(t *testing.T) {
setProtocol: func(b *v1alpha1.Bucket) {
b.Spec.Protocol.S3 = &v1alpha1.S3Protocol{
Region: region,
- Version: protocolVersion,
SignatureVersion: sigVersion,
BucketName: bucketName,
Endpoint: endpoint,
}
},
protocolName: v1alpha1.ProtocolNameS3,
- revokeFunc: func(ctx context.Context, in *osspec.ProvisionerRevokeBucketAccessRequest, opts ...grpc.CallOption) (*osspec.ProvisionerRevokeBucketAccessResponse, error) {
+ revokeFunc: func(ctx context.Context, req *osspec.ProvisionerRevokeBucketAccessRequest, opts ...grpc.CallOption) (*osspec.ProvisionerRevokeBucketAccessResponse, error) {
+ in := req.Protocol.GetS3()
if in.BucketName != bucketName {
t.Errorf("expected %s, got %s", bucketName, in.BucketName)
}
- if in.BucketContext["Region"] != region {
- t.Errorf("expected %s, got %s", region, in.BucketContext["Region"])
+ if in.Region != region {
+ t.Errorf("expected %s, got %s", region, in.Region)
}
- if in.Principal != principal {
- t.Errorf("expected %s, got %s", principal, in.Principal)
+ if req.Principal != principal {
+ t.Errorf("expected %s, got %s", principal, req.Principal)
}
- if in.BucketContext["Version"] != protocolVersion {
- t.Errorf("expected %s, got %s", protocolVersion, in.BucketContext["Version"])
+ // TODO do we need to check ProtocolVersion here? If so, from where?
+ sigver, ok := osspec.S3SignatureVersion_name[int32(in.SignatureVersion)]
+ if !ok {
+ sigver = osspec.S3SignatureVersion_name[int32(osspec.S3SignatureVersion_UnknownSignature)]
}
- if in.BucketContext["SignatureVersion"] != string(sigVersion) {
- t.Errorf("expected %s, got %s", sigVersion, in.BucketContext["SignatureVersion"])
+ if sigver != string(sigVersion) {
+ t.Errorf("expected %s, got %s", sigVersion, sigver)
}
- if in.BucketContext["Endpoint"] != endpoint {
- t.Errorf("expected %s, got %s", endpoint, in.BucketContext["Endpoint"])
+ if in.Endpoint != endpoint {
+ t.Errorf("expected %s, got %s", endpoint, in.Endpoint)
}
return &osspec.ProvisionerRevokeBucketAccessResponse{}, nil
},
@@ -664,9 +675,8 @@ func TestDelete(t *testing.T) {
Spec: v1alpha1.BucketSpec{
Provisioner: provisioner,
Protocol: v1alpha1.Protocol{
- RequestedProtocol: v1alpha1.RequestedProtocol{
- Name: tc.protocolName,
- },
+ Name: tc.protocolName,
+ Version: protocolVersion,
},
},
}
@@ -702,7 +712,7 @@ func TestDelete(t *testing.T) {
tc.setProtocol(&b)
client := fakebucketclientset.NewSimpleClientset(&ba, &b)
kubeClient := fakekubeclientset.NewSimpleClientset(&secret)
- mpc.RevokeBucketAccess = tc.revokeFunc
+ mpc.FakeProvisionerRevokeBucketAccess = tc.revokeFunc
bal := bucketAccessListener{
provisionerName: provisioner,
provisionerClient: &mpc,
diff --git a/pkg/grpcserver/server.go b/pkg/grpcserver/server.go
index 1051873..5684808 100644
--- a/pkg/grpcserver/server.go
+++ b/pkg/grpcserver/server.go
@@ -27,7 +27,7 @@ import (
"golang.org/x/net/context"
"google.golang.org/grpc"
- osi "github.com/kubernetes-sigs/container-object-storage-interface-spec"
+ osi "sigs.k8s.io/container-object-storage-interface-spec"
"k8s.io/klog/v2"
)