Skip to content

Commit dd8b1f9

Browse files
author
Krish Chowdhary
committed
update controllers, test and sample driver to use updated api/spec
1 parent e3feeb4 commit dd8b1f9

File tree

9 files changed

+353
-348
lines changed

9 files changed

+353
-348
lines changed

Diff for: container-object-storage-interface-provisioner-sidecar/Makefile

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ reltools: release-tools/build.make
2020
release-tools/build.make:
2121
$(eval CURDIR := $(shell pwd))
2222
$(eval TMP := $(shell mktemp -d))
23-
$(shell cd ${TMP} && git clone https://sigs.k8s.io/container-object-storage-interface-spec)
23+
$(shell cd ${TMP} && git clone https://github.com/kubernetes-sigs/container-object-storage-interface-spec)
2424
$(shell cp -r ${TMP}/container-object-storage-interface-spec/release-tools ${CURDIR}/)
2525
$(shell rm -rf ${TMP})
2626
ln -s release-tools/travis.yml travis.yml

Diff for: container-object-storage-interface-provisioner-sidecar/cmd/objectstorage-sidecar/app/objectstorage-sidecar.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -54,15 +54,18 @@ func (so *SidecarOptions) Run() {
5454

5555
klog.Infof("creating provisioner client")
5656
provisionerClient := osspec.NewProvisionerClient(grpcConn)
57+
identityClient := osspec.NewIdentityClient(grpcConn)
5758

5859
klog.Infof("discovering driver name")
5960
req := osspec.ProvisionerGetInfoRequest{}
60-
rsp, err := provisionerClient.ProvisionerGetInfo(ctx, &req)
61+
rsp, err := identityClient.ProvisionerGetInfo(ctx, &req)
6162
if err != nil {
6263
klog.Errorf("error calling ProvisionerGetInfo: %v", err)
6364
os.Exit(1)
6465
}
6566

67+
// TODO: go routine with health check to vendor driver
68+
6669
provisionerName := rsp.Name
6770
// TODO: Register provisioner using internal type
6871
klog.Info("This sidecar is working with the driver identified as: ", provisionerName)

Diff for: container-object-storage-interface-provisioner-sidecar/cmd/sample-driver/driver-server.go

+22-9
Original file line numberDiff line numberDiff line change
@@ -63,41 +63,54 @@ func (ds DriverServer) ProvisionerCreateBucket(ctx context.Context, req *cosi.Pr
6363
return nil, status.Error(codes.Unavailable, "Driver is missing version")
6464
}
6565

66-
err := ds.S3Client.MakeBucket(req.BucketName, "")
66+
s3 := req.Protocol.GetS3()
67+
if s3 == nil {
68+
return nil, status.Error(codes.Unavailable, "Driver is missing protocol")
69+
}
70+
71+
err := ds.S3Client.MakeBucket(s3.BucketName, "")
6772
if err != nil {
6873
// Check to see if the bucket already exists
69-
exists, errBucketExists := ds.S3Client.BucketExists(req.BucketName)
74+
exists, errBucketExists := ds.S3Client.BucketExists(s3.BucketName)
7075
if errBucketExists == nil && exists {
71-
klog.Info("Backend Bucket already exists", req.BucketName)
76+
klog.Info("Backend Bucket already exists", s3.BucketName)
7277
return &cosi.ProvisionerCreateBucketResponse{}, nil
7378
} else {
7479
klog.Error(err)
7580
return &cosi.ProvisionerCreateBucketResponse{}, err
7681
}
7782
}
78-
klog.Info("Successfully created Backend Bucket", req.BucketName)
83+
klog.Info("Successfully created Backend Bucket", s3.BucketName)
7984

8085
return &cosi.ProvisionerCreateBucketResponse{}, nil
8186
}
8287

8388
func (ds *DriverServer) ProvisionerDeleteBucket(ctx context.Context, req *cosi.ProvisionerDeleteBucketRequest) (*cosi.ProvisionerDeleteBucketResponse, error) {
89+
s3 := req.Protocol.GetS3()
90+
if s3 == nil {
91+
return nil, status.Error(codes.Unavailable, "Driver is missing protocol")
92+
}
8493

85-
if err := ds.S3Client.RemoveBucket(req.BucketName); err != nil {
86-
klog.Info("failed to delete bucket", req.BucketName)
94+
if err := ds.S3Client.RemoveBucket(s3.BucketName); err != nil {
95+
klog.Info("failed to delete bucket", s3.BucketName)
8796
return nil, err
88-
8997
}
98+
9099
return &cosi.ProvisionerDeleteBucketResponse{}, nil
91100
}
92101

93102
func (ds *DriverServer) ProvisionerGrantBucketAccess(ctx context.Context, req *cosi.ProvisionerGrantBucketAccessRequest) (*cosi.ProvisionerGrantBucketAccessResponse, error) {
94-
95103
creds, err := auth.GetNewCredentials()
96104
if err != nil {
97105
klog.Error("failed to generate new credentails")
98106
return nil, err
99107
}
100108

109+
s3 := req.Protocol.GetS3()
110+
if s3 == nil {
111+
return nil, status.Error(codes.Unavailable, "Driver is missing protocol")
112+
}
113+
101114
if err := ds.S3AdminClient.AddUser(context.Background(), creds.AccessKey, creds.SecretKey); err != nil {
102115
klog.Error("failed to create user", err)
103116
return nil, err
@@ -110,7 +123,7 @@ func (ds *DriverServer) ProvisionerGrantBucketAccess(ctx context.Context, req *c
110123
iampolicy.NewStatement(
111124
policy.Allow,
112125
iampolicy.NewActionSet("s3:*"),
113-
iampolicy.NewResourceSet(iampolicy.NewResource(req.GetBucketName()+"/*", "")),
126+
iampolicy.NewResourceSet(iampolicy.NewResource(s3.BucketName+"/*", "")),
114127
condition.NewFunctions(),
115128
)},
116129
}

Diff for: container-object-storage-interface-provisioner-sidecar/go.mod

+2-1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ require (
77
github.com/kubernetes-csi/csi-lib-utils v0.9.0
88
github.com/minio/minio v0.0.0-20210112204746-e09196d62633
99
github.com/minio/minio-go v6.0.14+incompatible
10+
github.com/pkg/errors v0.9.1
1011
github.com/spf13/cobra v0.0.5
1112
github.com/spf13/viper v1.3.2
1213
golang.org/x/net v0.0.0-20201216054612-986b41b23924
@@ -16,6 +17,6 @@ require (
1617
k8s.io/apimachinery v0.19.4
1718
k8s.io/client-go v0.19.4
1819
k8s.io/klog/v2 v2.2.0
19-
sigs.k8s.io/container-object-storage-interface-api v0.0.0-20210225042325-7c26b4fc1ed9
20+
sigs.k8s.io/container-object-storage-interface-api v0.0.0-20210308183412-eb167f7cca3c
2021
sigs.k8s.io/container-object-storage-interface-spec v0.0.0-20210224211525-dfa3af562c18
2122
)

Diff for: container-object-storage-interface-provisioner-sidecar/go.sum

+2-11
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,6 @@ github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp
9696
github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE=
9797
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
9898
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
99-
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
10099
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
101100
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
102101
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
149148
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
150149
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
151150
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
152-
github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=
153151
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
154152
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
155153
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
962960
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
963961
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
964962
google.golang.org/grpc v1.29.0/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
965-
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
966-
google.golang.org/grpc v1.34.0 h1:raiipEjMOIC/TO2AvyTxP25XFdLxNIBwzDh3FM3XztI=
967-
google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
968963
google.golang.org/grpc v1.35.0 h1:TwIQcH3es+MojMVojxxfQ3l3OF2KzlRxML2xZq0kRo8=
969964
google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
970965
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/
10681063
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
10691064
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
10701065
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0=
1071-
sigs.k8s.io/container-object-storage-interface-api v0.0.0-20210112203836-a74c106d3ab3 h1:SVbl8M9RAoLUqJ83eLxDWVyMHz09CZ+dkUjkR7kG9eo=
1072-
sigs.k8s.io/container-object-storage-interface-api v0.0.0-20210112203836-a74c106d3ab3/go.mod h1:C7tjzC+nLe7H7+3UM/Z6a7F24yxOO8FSK3ZaVZrKDPQ=
1073-
sigs.k8s.io/container-object-storage-interface-api v0.0.0-20210225042325-7c26b4fc1ed9 h1:ZjGviVPvDVxOhCF7+dsbAk5GPfUpEnM0DtR5yH7S6ww=
1074-
sigs.k8s.io/container-object-storage-interface-api v0.0.0-20210225042325-7c26b4fc1ed9/go.mod h1:4V9ty4CWneFEQJbr+yQPjkCdUH3EKfjXM4AQXLY4Sa8=
1075-
sigs.k8s.io/container-object-storage-interface-spec v0.0.0-20210107181053-ef523592ca74 h1:+i43Z3yKW7htLAATafmbZ7ULFwwT+8vwB7NMxZ1X3Ww=
1076-
sigs.k8s.io/container-object-storage-interface-spec v0.0.0-20210107181053-ef523592ca74/go.mod h1:wojgWDesMMLuFza4p1YnpX3sdPeo0mDWmSbmPsxRDh0=
1066+
sigs.k8s.io/container-object-storage-interface-api v0.0.0-20210308183412-eb167f7cca3c h1:GANfOgppBbhCKqGFDVnuluhJ5km8gqNDatXn5ULGUt8=
1067+
sigs.k8s.io/container-object-storage-interface-api v0.0.0-20210308183412-eb167f7cca3c/go.mod h1:yMgeGQDROJIdY1jymECN2ptefmQ4+e3EQB/S8gyIE0o=
10771068
sigs.k8s.io/container-object-storage-interface-spec v0.0.0-20210224211525-dfa3af562c18 h1:TIx7kV6/3ZSQ5BETBx1QG1Va28zv1LZAvqRjs28n8ss=
10781069
sigs.k8s.io/container-object-storage-interface-spec v0.0.0-20210224211525-dfa3af562c18/go.mod h1:kafkL5l/lTUrZXhVi/9p1GzpEE/ts29BkWkL3Ao33WU=
10791070
sigs.k8s.io/controller-runtime v0.6.3 h1:SBbr+inLPEKhvlJtrvDcwIpm+uhDvp63Bl72xYJtoOE=

Diff for: container-object-storage-interface-provisioner-sidecar/pkg/controller/bucket/bucket_controller.go

+25-25
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package bucket
1919
import (
2020
"context"
2121
"fmt"
22+
"github.com/pkg/errors"
2223
"strings"
2324
"time"
2425

@@ -101,20 +102,28 @@ func (bl *bucketListener) Add(ctx context.Context, obj *v1alpha1.Bucket) error {
101102
}
102103

103104
req := osspec.ProvisionerCreateBucketRequest{
104-
BucketName: obj.Name,
105-
BucketContext: bl.getParams(obj),
105+
Parameters: bl.getParams(obj),
106106
}
107+
if req.Parameters == nil {
108+
req.Parameters = make(map[string]string)
109+
}
110+
111+
proto, err := obj.Spec.Protocol.ConvertToExternal()
112+
if err != nil {
113+
return errors.Wrap(err, "failed to parse protocol for API")
114+
}
115+
req.Protocol = proto
107116

108-
req.BucketContext["ProtocolVersion"] = obj.Spec.Protocol.Version
117+
req.Parameters["ProtocolVersion"] = obj.Spec.Protocol.Version
109118

110119
if obj.Spec.AnonymousAccessMode.Private {
111-
req.AnonymousBucketAccessMode = osspec.ProvisionerCreateBucketRequest_BUCKET_PRIVATE
120+
req.AnonymousBucketAccessMode = osspec.AnonymousBucketAccessMode_Private
112121
} else if obj.Spec.AnonymousAccessMode.PublicReadOnly {
113-
req.AnonymousBucketAccessMode = osspec.ProvisionerCreateBucketRequest_BUCKET_READ_ONLY
122+
req.AnonymousBucketAccessMode = osspec.AnonymousBucketAccessMode_ReadOnly
114123
} else if obj.Spec.AnonymousAccessMode.PublicReadWrite {
115-
req.AnonymousBucketAccessMode = osspec.ProvisionerCreateBucketRequest_BUCKET_WRITE_ONLY
124+
req.AnonymousBucketAccessMode = osspec.AnonymousBucketAccessMode_ReadWrite
116125
} else if obj.Spec.AnonymousAccessMode.PublicWriteOnly {
117-
req.AnonymousBucketAccessMode = osspec.ProvisionerCreateBucketRequest_BUCKET_READ_WRITE
126+
req.AnonymousBucketAccessMode = osspec.AnonymousBucketAccessMode_WriteOnly
118127
}
119128

120129
// TODO set grpc timeout
@@ -147,28 +156,19 @@ func (bl *bucketListener) Delete(ctx context.Context, obj *v1alpha1.Bucket) erro
147156
}
148157

149158
req := osspec.ProvisionerDeleteBucketRequest{
150-
BucketContext: bl.getParams(obj),
159+
Parameters: bl.getParams(obj),
160+
}
161+
if req.Parameters == nil {
162+
req.Parameters = make(map[string]string)
151163
}
152164

153-
switch obj.Spec.Protocol.Name {
154-
case v1alpha1.ProtocolNameS3:
155-
req.BucketName = obj.Spec.Protocol.S3.BucketName
156-
req.BucketContext["Region"] = obj.Spec.Protocol.S3.Region
157-
req.BucketContext["SignatureVersion"] = string(obj.Spec.Protocol.S3.SignatureVersion)
158-
req.BucketContext["Endpoint"] = obj.Spec.Protocol.S3.Endpoint
159-
case v1alpha1.ProtocolNameAzure:
160-
req.BucketName = obj.Spec.Protocol.AzureBlob.ContainerName
161-
req.BucketContext["StorageAccount"] = obj.Spec.Protocol.AzureBlob.StorageAccount
162-
case v1alpha1.ProtocolNameGCS:
163-
req.BucketName = obj.Spec.Protocol.GCS.BucketName
164-
req.BucketContext["ServiceAccount"] = obj.Spec.Protocol.GCS.ServiceAccount
165-
req.BucketContext["PrivateKeyName"] = obj.Spec.Protocol.GCS.PrivateKeyName
166-
req.BucketContext["ProjectID"] = obj.Spec.Protocol.GCS.ProjectID
167-
default:
168-
return fmt.Errorf("unknown protocol: %s", obj.Spec.Protocol.Name)
165+
proto, err := obj.Spec.Protocol.ConvertToExternal()
166+
if err != nil {
167+
return errors.Wrap(err, "failed to parse protocol for API")
169168
}
169+
req.Protocol = proto
170170

171-
req.BucketContext["ProtocolVersion"] = obj.Spec.Protocol.Version
171+
req.Parameters["ProtocolVersion"] = obj.Spec.Protocol.Version
172172

173173
// TODO set grpc timeout
174174
rsp, err := bl.provisionerClient.ProvisionerDeleteBucket(ctx, &req)

0 commit comments

Comments
 (0)