Skip to content

Commit 3109e96

Browse files
committed
Major refactor and bugfixes
- Requires changes to API from this PR kubernetes-retired/container-object-storage-interface-api#35 - Requires changes to SPEC from this PR kubernetes-retired/container-object-storage-interface-spec#25
1 parent 88931d8 commit 3109e96

21 files changed

+990
-927
lines changed
File renamed without changes.

Diff for: cmd/sample-driver/driver-server.go renamed to cmd/minio-cosi-driver/driver-server.go

+67-57
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,11 @@ limitations under the License.
1717
package main
1818

1919
import (
20-
"fmt"
21-
2220
"github.com/minio/minio-go"
23-
"github.com/minio/minio/pkg/auth"
24-
"github.com/minio/minio/pkg/bucket/policy"
25-
"github.com/minio/minio/pkg/bucket/policy/condition"
26-
iampolicy "github.com/minio/minio/pkg/iam/policy"
21+
// "github.com/minio/minio/pkg/auth"
22+
// "github.com/minio/minio/pkg/bucket/policy"
23+
// "github.com/minio/minio/pkg/bucket/policy/condition"
24+
// iampolicy "github.com/minio/minio/pkg/iam/policy"
2725
"github.com/minio/minio/pkg/madmin"
2826

2927
"golang.org/x/net/context"
@@ -40,6 +38,16 @@ type DriverServer struct {
4038
S3AdminClient *madmin.AdminClient
4139
}
4240

41+
// type IdentityServer struct {
42+
// Name, Version string
43+
// }
44+
45+
// func (ds *IdentityServer) ProvisionerGetInfo(context.Context, *cosi.ProvisionerGetInfoRequest) (*cosi.ProvisionerGetInfoResponse, error) {
46+
// rsp := &cosi.ProvisionerGetInfoResponse{}
47+
// rsp.Name = fmt.Sprintf("%s-%s", ds.Name, ds.Version)
48+
// return rsp, nil
49+
// }
50+
4351
func (ds DriverServer) ProvisionerCreateBucket(ctx context.Context, req *cosi.ProvisionerCreateBucketRequest) (*cosi.ProvisionerCreateBucketResponse, error) {
4452
klog.Infof("Using minio to create Backend Bucket")
4553

@@ -66,63 +74,65 @@ func (ds DriverServer) ProvisionerCreateBucket(ctx context.Context, req *cosi.Pr
6674
}
6775

6876
func (ds *DriverServer) ProvisionerDeleteBucket(ctx context.Context, req *cosi.ProvisionerDeleteBucketRequest) (*cosi.ProvisionerDeleteBucketResponse, error) {
69-
s3 := req.Protocol.GetS3()
70-
if s3 == nil {
71-
return nil, status.Error(codes.Unavailable, "Driver is missing protocol")
72-
}
77+
// s3 := req.Protocol.GetS3()
78+
// if s3 == nil {
79+
// return nil, status.Error(codes.Unavailable, "Driver is missing protocol")
80+
// }
7381

74-
if err := ds.S3Client.RemoveBucket(s3.BucketName); err != nil {
75-
klog.Info("failed to delete bucket", s3.BucketName)
76-
return nil, err
77-
}
82+
// if err := ds.S3Client.RemoveBucket(s3.BucketName); err != nil {
83+
// klog.Info("failed to delete bucket", s3.BucketName)
84+
// return nil, err
85+
// }
7886

7987
return &cosi.ProvisionerDeleteBucketResponse{}, nil
8088
}
8189

8290
func (ds *DriverServer) ProvisionerGrantBucketAccess(ctx context.Context, req *cosi.ProvisionerGrantBucketAccessRequest) (*cosi.ProvisionerGrantBucketAccessResponse, error) {
83-
creds, err := auth.GetNewCredentials()
84-
if err != nil {
85-
klog.Error("failed to generate new credentails")
86-
return nil, err
87-
}
88-
89-
s3 := req.Protocol.GetS3()
90-
if s3 == nil {
91-
return nil, status.Error(codes.Unavailable, "Driver is missing protocol")
92-
}
93-
94-
if err := ds.S3AdminClient.AddUser(context.Background(), creds.AccessKey, creds.SecretKey); err != nil {
95-
klog.Error("failed to create user", err)
96-
return nil, err
97-
}
98-
99-
// Create policy
100-
p := iampolicy.Policy{
101-
Version: iampolicy.DefaultVersion,
102-
Statements: []iampolicy.Statement{
103-
iampolicy.NewStatement(
104-
policy.Allow,
105-
iampolicy.NewActionSet("s3:*"),
106-
iampolicy.NewResourceSet(iampolicy.NewResource(s3.BucketName+"/*", "")),
107-
condition.NewFunctions(),
108-
)},
109-
}
110-
111-
if err := ds.S3AdminClient.AddCannedPolicy(context.Background(), "s3:*", &p); err != nil {
112-
klog.Error("failed to add canned policy", err)
113-
return nil, err
114-
}
115-
116-
if err := ds.S3AdminClient.SetPolicy(context.Background(), "s3:*", creds.AccessKey, false); err != nil {
117-
klog.Error("failed to set policy", err)
118-
return nil, err
119-
}
120-
121-
return &cosi.ProvisionerGrantBucketAccessResponse{
122-
Principal: req.Principal,
123-
CredentialsFileContents: fmt.Sprintf("[default]\naws_access_key %s\naws_secret_key %s", creds.AccessKey, creds.SecretKey),
124-
CredentialsFilePath: ".aws/credentials",
125-
}, nil
91+
// creds, err := auth.GetNewCredentials()
92+
// if err != nil {
93+
// klog.Error("failed to generate new credentails")
94+
// return nil, err
95+
// }
96+
97+
// s3 := req.Protocol.GetS3()
98+
// if s3 == nil {
99+
// return nil, status.Error(codes.Unavailable, "Driver is missing protocol")
100+
// }
101+
102+
// if err := ds.S3AdminClient.AddUser(context.Background(), creds.AccessKey, creds.SecretKey); err != nil {
103+
// klog.Error("failed to create user", err)
104+
// return nil, err
105+
// }
106+
107+
// // Create policy
108+
// p := iampolicy.Policy{
109+
// Version: iampolicy.DefaultVersion,
110+
// Statements: []iampolicy.Statement{
111+
// iampolicy.NewStatement(
112+
// policy.Allow,
113+
// iampolicy.NewActionSet("s3:*"),
114+
// iampolicy.NewResourceSet(iampolicy.NewResource(s3.BucketName+"/*", "")),
115+
// condition.NewFunctions(),
116+
// )},
117+
// }
118+
119+
// if err := ds.S3AdminClient.AddCannedPolicy(context.Background(), "s3:*", &p); err != nil {
120+
// klog.Error("failed to add canned policy", err)
121+
// return nil, err
122+
// }
123+
124+
// if err := ds.S3AdminClient.SetPolicy(context.Background(), "s3:*", creds.AccessKey, false); err != nil {
125+
// klog.Error("failed to set policy", err)
126+
// return nil, err
127+
// }
128+
129+
// return &cosi.ProvisionerGrantBucketAccessResponse{
130+
// Principal: req.Principal,
131+
// CredentialsFileContents: fmt.Sprintf("[default]\naws_access_key %s\naws_secret_key %s", creds.AccessKey, creds.SecretKey),
132+
// CredentialsFilePath: ".aws/credentials",
133+
// }, nil
134+
135+
return &cosi.ProvisionerGrantBucketAccessResponse{}, nil
126136
}
127137

128138
func (ds *DriverServer) ProvisionerRevokeBucketAccess(ctx context.Context, req *cosi.ProvisionerRevokeBucketAccessRequest) (*cosi.ProvisionerRevokeBucketAccessResponse, error) {
File renamed without changes.

Diff for: cmd/sample-driver/sample-driver.go renamed to cmd/minio-cosi-driver/sample-driver.go

+33-38
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,12 @@ package main
1919
import (
2020
"context"
2121
"flag"
22-
"fmt"
2322
"os"
2423
"os/signal"
2524
"strings"
2625
"syscall"
27-
26+
"time"
27+
2828
"github.com/minio/minio-go"
2929
"github.com/minio/minio/pkg/madmin"
3030
"github.com/spf13/cobra"
@@ -35,11 +35,10 @@ import (
3535
)
3636

3737
var (
38-
cosiAddress = "tcp://0.0.0.0:9000"
39-
s3Endpoint = "tcp://0.0.0.0:9000"
38+
cosiAddress = "unix:///var/run/cosi/cosi.sock"
39+
s3 = "localhost:9000"
4040
accessKey = "AKIAIOSFODNN7EXAMPLE"
4141
secretKey = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
42-
ctx context.Context
4342
)
4443

4544
var cmd = &cobra.Command{
@@ -48,7 +47,7 @@ var cmd = &cobra.Command{
4847
SilenceErrors: true,
4948
SilenceUsage: true,
5049
RunE: func(c *cobra.Command, args []string) error {
51-
return run(args, cosiAddress)
50+
return run(c.Context(), args, cosiAddress)
5251
},
5352
DisableFlagsInUseLine: true,
5453
Version: VERSION,
@@ -65,19 +64,9 @@ func init() {
6564
StringVarP(ptr, name, short, dfault, desc)
6665
}
6766
strFlag(cmd, &cosiAddress, "listen-address", "", cosiAddress, "The address for the driver to listen on")
68-
strFlag(cmd, &s3Endpoint, "s3-endpoint", "", "", "S3-endpont")
69-
strFlag(cmd, &accessKey, "access-key", "", "", "S3-AccessKey")
70-
strFlag(cmd, &secretKey, "secret-key", "", "", "S3-SecretKey")
71-
hideFlag := func(name string) {
72-
cmd.PersistentFlags().MarkHidden(name)
73-
}
74-
hideFlag("alsologtostderr")
75-
hideFlag("log_backtrace_at")
76-
hideFlag("log_dir")
77-
hideFlag("logtostderr")
78-
hideFlag("master")
79-
hideFlag("stderrthreshold")
80-
hideFlag("vmodule")
67+
strFlag(cmd, &s3, "s3-endpoint", "", s3, "S3 endpont")
68+
strFlag(cmd, &accessKey, "access-key", "", accessKey, "S3 AccessKey")
69+
strFlag(cmd, &secretKey, "secret-key", "", secretKey, "S3 SecretKey")
8170

8271
// Substitute _ for -
8372
replacer := strings.NewReplacer("-", "_")
@@ -87,41 +76,47 @@ func init() {
8776
flag.CommandLine.Parse([]string{})
8877
viper.BindPFlags(cmd.PersistentFlags())
8978

90-
var cancel context.CancelFunc
79+
}
80+
81+
func main() {
82+
ctx, cancel := context.WithCancel(context.Background())
83+
defer cancel()
9184

92-
ctx, cancel = context.WithCancel(context.Background())
9385
sigs := make(chan os.Signal, 1)
9486
signal.Notify(sigs, syscall.SIGINT, syscall.SIGTERM, syscall.SIGSEGV)
9587

9688
go func() {
97-
s := <-sigs
89+
sig := <-sigs
9890
cancel()
99-
klog.Error(fmt.Sprintf("%s %s", s.String(), "Signal received. Exiting"))
100-
}()
101-
102-
}
103-
104-
func main() {
105-
if err := cmd.Execute(); err != nil {
106-
klog.Fatal(err.Error())
10791

92+
klog.InfoS("Signal received", "signal", sig)
93+
<-time.After(30 * time.Second)
94+
95+
os.Exit(1)
96+
97+
}()
98+
if err := cmd.ExecuteContext(ctx); err != nil {
99+
klog.ErrorS(err, "Exiting on error")
100+
os.Exit(1)
108101
}
109102
}
110103

111-
func run(args []string, endpoint string) error {
104+
func run(ctx context.Context, args []string, endpoint string) error {
112105
// Initialize minio client object.
113-
minioClient, err := minio.New(s3Endpoint, accessKey, secretKey, false)
106+
minioClient, err := minio.New(s3, accessKey, secretKey, false)
114107
if err != nil {
115-
klog.Fatalln(err)
108+
klog.ErrorS(err, "could not create minio client", "endpoint", s3)
109+
return err
116110
}
117-
minioAdminClient, err := madmin.New(s3Endpoint, accessKey, secretKey, false)
111+
minioAdminClient, err := madmin.New(s3, accessKey, secretKey, false)
118112
if err != nil {
119-
klog.Fatalln(err)
113+
klog.ErrorS(err, "could not create minio admin client", "endpoint", s3)
114+
return err
120115
}
116+
121117
cds := DriverServer{S3Client: minioClient, S3AdminClient: minioAdminClient}
122118
ids := IdentityServer{Name: PROVISIONER_NAME, Version: VERSION}
119+
123120
s := grpcserver.NewNonBlockingGRPCServer()
124-
s.Start(endpoint, &cds, &ids)
125-
s.Wait()
126-
return nil
121+
return s.Run(ctx, endpoint, &cds, &ids)
127122
}

Diff for: cmd/objectstorage-sidecar/app/objectstorage-sidecar.go

-109
This file was deleted.

0 commit comments

Comments
 (0)