From e691f8d6b17a483a3667178d1414af69e3b092e2 Mon Sep 17 00:00:00 2001 From: Krish Chowdhary Date: Thu, 4 Mar 2021 13:05:57 -0500 Subject: [PATCH 1/2] update dependencies to sigs.k8s.*, update mod versions --- .gitignore | 2 ++ Makefile | 2 +- README.md | 10 +++++----- .../app/objectstorage-sidecar.go | 2 +- cmd/sample-driver/driver-server.go | 2 +- go.mod | 6 +++--- go.sum | 19 +++++++++++++++---- pkg/controller/bucket/bucket_controller.go | 8 ++++---- .../bucket/bucket_controller_test.go | 8 ++++---- .../bucketaccess/bucket_access_controller.go | 8 ++++---- .../bucket_access_controller_test.go | 8 ++++---- pkg/grpcserver/server.go | 2 +- 12 files changed, 45 insertions(+), 32 deletions(-) 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/Makefile b/Makefile index 9a6bd2c..ec48ffc 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ reltools: release-tools/build.make release-tools/build.make: $(eval CURDIR := $(shell pwd)) $(eval TMP := $(shell mktemp -d)) - $(shell cd ${TMP} && git clone https://github.com/kubernetes-sigs/container-object-storage-interface-spec) + $(shell cd ${TMP} && git clone https://sigs.k8s.io/container-object-storage-interface-spec) $(shell cp -r ${TMP}/container-object-storage-interface-spec/release-tools ${CURDIR}/) $(shell rm -rf ${TMP}) ln -s release-tools/travis.yml travis.yml 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..787b2cd 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" diff --git a/cmd/sample-driver/driver-server.go b/cmd/sample-driver/driver-server.go index 12ca7d6..e4c155a 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 ( diff --git a/go.mod b/go.mod index 895e74f..2305f20 100644 --- a/go.mod +++ b/go.mod @@ -5,17 +5,17 @@ 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/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-20210225042325-7c26b4fc1ed9 + sigs.k8s.io/container-object-storage-interface-spec v0.0.0-20210224211525-dfa3af562c18 ) diff --git a/go.sum b/go.sum index dc58ca4..d7e048b 100644 --- a/go.sum +++ b/go.sum @@ -97,6 +97,7 @@ github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4 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 +116,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= @@ -148,6 +150,7 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF 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 +424,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 +775,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= @@ -965,6 +965,8 @@ google.golang.org/grpc v1.29.0/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3Iji 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 +1057,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 +1068,14 @@ 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-20210112203836-a74c106d3ab3 h1:SVbl8M9RAoLUqJ83eLxDWVyMHz09CZ+dkUjkR7kG9eo= +sigs.k8s.io/container-object-storage-interface-api v0.0.0-20210112203836-a74c106d3ab3/go.mod h1:C7tjzC+nLe7H7+3UM/Z6a7F24yxOO8FSK3ZaVZrKDPQ= +sigs.k8s.io/container-object-storage-interface-api v0.0.0-20210225042325-7c26b4fc1ed9 h1:ZjGviVPvDVxOhCF7+dsbAk5GPfUpEnM0DtR5yH7S6ww= +sigs.k8s.io/container-object-storage-interface-api v0.0.0-20210225042325-7c26b4fc1ed9/go.mod h1:4V9ty4CWneFEQJbr+yQPjkCdUH3EKfjXM4AQXLY4Sa8= +sigs.k8s.io/container-object-storage-interface-spec v0.0.0-20210107181053-ef523592ca74 h1:+i43Z3yKW7htLAATafmbZ7ULFwwT+8vwB7NMxZ1X3Ww= +sigs.k8s.io/container-object-storage-interface-spec v0.0.0-20210107181053-ef523592ca74/go.mod h1:wojgWDesMMLuFza4p1YnpX3sdPeo0mDWmSbmPsxRDh0= +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..57aae6c 100644 --- a/pkg/controller/bucket/bucket_controller.go +++ b/pkg/controller/bucket/bucket_controller.go @@ -29,11 +29,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" diff --git a/pkg/controller/bucket/bucket_controller_test.go b/pkg/controller/bucket/bucket_controller_test.go index 5df8ca4..1cf4953 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" diff --git a/pkg/controller/bucketaccess/bucket_access_controller.go b/pkg/controller/bucketaccess/bucket_access_controller.go index 3a5527a..bce9c14 100644 --- a/pkg/controller/bucketaccess/bucket_access_controller.go +++ b/pkg/controller/bucketaccess/bucket_access_controller.go @@ -32,11 +32,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" diff --git a/pkg/controller/bucketaccess/bucket_access_controller_test.go b/pkg/controller/bucketaccess/bucket_access_controller_test.go index 0bb9870..dfa51dc 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" 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" ) From 7be94a6e6882314de80497d5d93b5055503581a3 Mon Sep 17 00:00:00 2001 From: Krish Chowdhary Date: Thu, 4 Mar 2021 17:34:37 -0500 Subject: [PATCH 2/2] update controllers, test and sample driver to use updated api/spec --- Makefile | 2 +- .../app/objectstorage-sidecar.go | 5 +- cmd/sample-driver/driver-server.go | 31 +- go.mod | 3 +- go.sum | 13 +- pkg/controller/bucket/bucket_controller.go | 50 ++-- .../bucket/bucket_controller_test.go | 280 +++++++++--------- .../bucketaccess/bucket_access_controller.go | 61 ++-- .../bucket_access_controller_test.go | 256 ++++++++-------- 9 files changed, 353 insertions(+), 348 deletions(-) diff --git a/Makefile b/Makefile index ec48ffc..9a6bd2c 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ reltools: release-tools/build.make release-tools/build.make: $(eval CURDIR := $(shell pwd)) $(eval TMP := $(shell mktemp -d)) - $(shell cd ${TMP} && git clone https://sigs.k8s.io/container-object-storage-interface-spec) + $(shell cd ${TMP} && git clone https://github.com/kubernetes-sigs/container-object-storage-interface-spec) $(shell cp -r ${TMP}/container-object-storage-interface-spec/release-tools ${CURDIR}/) $(shell rm -rf ${TMP}) ln -s release-tools/travis.yml travis.yml diff --git a/cmd/objectstorage-sidecar/app/objectstorage-sidecar.go b/cmd/objectstorage-sidecar/app/objectstorage-sidecar.go index 787b2cd..cc5aac9 100644 --- a/cmd/objectstorage-sidecar/app/objectstorage-sidecar.go +++ b/cmd/objectstorage-sidecar/app/objectstorage-sidecar.go @@ -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 e4c155a..9d5e795 100644 --- a/cmd/sample-driver/driver-server.go +++ b/cmd/sample-driver/driver-server.go @@ -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 2305f20..39df6eb 100644 --- a/go.mod +++ b/go.mod @@ -7,6 +7,7 @@ require ( github.com/kubernetes-csi/csi-lib-utils v0.9.0 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 @@ -16,6 +17,6 @@ require ( 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-20210225042325-7c26b4fc1ed9 + 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 d7e048b..4bd17b2 100644 --- a/go.sum +++ b/go.sum @@ -96,7 +96,6 @@ 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= @@ -149,7 +148,6 @@ 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= @@ -962,9 +960,6 @@ 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= @@ -1068,12 +1063,8 @@ 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-20210112203836-a74c106d3ab3 h1:SVbl8M9RAoLUqJ83eLxDWVyMHz09CZ+dkUjkR7kG9eo= -sigs.k8s.io/container-object-storage-interface-api v0.0.0-20210112203836-a74c106d3ab3/go.mod h1:C7tjzC+nLe7H7+3UM/Z6a7F24yxOO8FSK3ZaVZrKDPQ= -sigs.k8s.io/container-object-storage-interface-api v0.0.0-20210225042325-7c26b4fc1ed9 h1:ZjGviVPvDVxOhCF7+dsbAk5GPfUpEnM0DtR5yH7S6ww= -sigs.k8s.io/container-object-storage-interface-api v0.0.0-20210225042325-7c26b4fc1ed9/go.mod h1:4V9ty4CWneFEQJbr+yQPjkCdUH3EKfjXM4AQXLY4Sa8= -sigs.k8s.io/container-object-storage-interface-spec v0.0.0-20210107181053-ef523592ca74 h1:+i43Z3yKW7htLAATafmbZ7ULFwwT+8vwB7NMxZ1X3Ww= -sigs.k8s.io/container-object-storage-interface-spec v0.0.0-20210107181053-ef523592ca74/go.mod h1:wojgWDesMMLuFza4p1YnpX3sdPeo0mDWmSbmPsxRDh0= +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= diff --git a/pkg/controller/bucket/bucket_controller.go b/pkg/controller/bucket/bucket_controller.go index 57aae6c..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" @@ -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 1cf4953..90657a2 100644 --- a/pkg/controller/bucket/bucket_controller_test.go +++ b/pkg/controller/bucket/bucket_controller_test.go @@ -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 bce9c14..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" @@ -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 dfa51dc..1612114 100644 --- a/pkg/controller/bucketaccess/bucket_access_controller_test.go +++ b/pkg/controller/bucketaccess/bucket_access_controller_test.go @@ -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,