Skip to content
This repository was archived by the owner on Dec 3, 2024. It is now read-only.

Commit cd171b0

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

File tree

6 files changed

+348
-335
lines changed

6 files changed

+348
-335
lines changed

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)

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
}

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)