Skip to content

Commit 7d17a14

Browse files
feat: initial implementation (WIP)
TODO: - tests - integration tests Signed-off-by: Mateusz Urbanek <[email protected]>
1 parent 55483e1 commit 7d17a14

File tree

11 files changed

+500
-30
lines changed

11 files changed

+500
-30
lines changed

cmd/linode-cosi-driver/main.go

+26-2
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,14 @@ import (
2727
"syscall"
2828
"time"
2929

30+
"github.com/go-logr/logr"
3031
"github.com/grpc-ecosystem/go-grpc-middleware/v2/interceptors/logging"
3132
"github.com/grpc-ecosystem/go-grpc-middleware/v2/interceptors/recovery"
3233
"github.com/linode/linode-cosi-driver/pkg/endpoint"
3334
"github.com/linode/linode-cosi-driver/pkg/envflag"
3435
"github.com/linode/linode-cosi-driver/pkg/grpc/handlers"
3536
grpclogger "github.com/linode/linode-cosi-driver/pkg/grpc/logger"
37+
"github.com/linode/linode-cosi-driver/pkg/kubereader/tracedkubereader"
3638
"github.com/linode/linode-cosi-driver/pkg/linodeclient"
3739
"github.com/linode/linode-cosi-driver/pkg/linodeclient/tracedclient"
3840
maxprocslogger "github.com/linode/linode-cosi-driver/pkg/maxprocs/logger"
@@ -47,7 +49,11 @@ import (
4749
semconv "go.opentelemetry.io/otel/semconv/v1.21.0"
4850
"go.uber.org/automaxprocs/maxprocs"
4951
"google.golang.org/grpc"
52+
v1 "k8s.io/api/core/v1"
5053
cosi "sigs.k8s.io/container-object-storage-interface-spec"
54+
"sigs.k8s.io/controller-runtime/pkg/client"
55+
"sigs.k8s.io/controller-runtime/pkg/client/config"
56+
ctrlLog "sigs.k8s.io/controller-runtime/pkg/log"
5157
)
5258

5359
const (
@@ -67,12 +73,26 @@ func main() {
6773

6874
// TODO: any logger settup must be done here, before first log call.
6975
log := slog.Default()
76+
ctrlLog.SetLogger(logr.FromSlogHandler(log.Handler()))
77+
78+
kubeclient, err := client.New(config.GetConfigOrDie(), client.Options{
79+
Cache: &client.CacheOptions{
80+
DisableFor: []client.Object{
81+
&v1.Secret{},
82+
},
83+
},
84+
})
85+
if err != nil {
86+
slog.Error("initializing kube client failed", "error", err)
87+
os.Exit(1)
88+
}
7089

7190
if err := run(context.Background(), log, mainOptions{
7291
cosiEndpoint: cosiEndpoint,
7392
linodeToken: linodeToken,
7493
linodeURL: linodeURL,
7594
linodeAPIVersion: linodeAPIVersion,
95+
kubeclient: kubeclient,
7696
},
7797
); err != nil {
7898
slog.Error("critical failure", "error", err)
@@ -85,6 +105,7 @@ type mainOptions struct {
85105
linodeToken string
86106
linodeURL string
87107
linodeAPIVersion string
108+
kubeclient client.Client
88109
}
89110

90111
func run(ctx context.Context, log *slog.Logger, opts mainOptions) error {
@@ -112,7 +133,7 @@ func run(ctx context.Context, log *slog.Logger, opts mainOptions) error {
112133
// initialize Linode client
113134
client, err := linodeclient.NewLinodeClient(
114135
opts.linodeToken,
115-
fmt.Sprintf("LinodeCOSI/%s", version.Version),
136+
version.UserAgent(),
116137
opts.linodeURL,
117138
opts.linodeAPIVersion)
118139
if err != nil {
@@ -121,10 +142,13 @@ func run(ctx context.Context, log *slog.Logger, opts mainOptions) error {
121142

122143
client.SetLogger(restylogger.Wrap(log))
123144

145+
podName := os.Getenv(envK8sPodName)
146+
124147
// create provisioner server
125148
prvSrv, err := provisioner.New(
126149
log,
127-
tracedclient.NewClientWithTracing(client, os.Getenv(envK8sPodName)),
150+
tracedclient.NewClientWithTracing(client, podName),
151+
tracedkubereader.NewKubeReaderWithTracing(opts.kubeclient, podName),
128152
)
129153
if err != nil {
130154
return fmt.Errorf("failed to create provisioner server: %w", err)

go.mod

+36-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
module github.com/linode/linode-cosi-driver
22

3-
go 1.22
3+
go 1.22.0
44

5-
toolchain go1.22.3
5+
toolchain go1.22.5
66

77
require (
8+
github.com/go-logr/logr v1.4.2
89
github.com/go-resty/resty/v2 v2.13.1
910
github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.1.0
1011
github.com/linode/linodego v1.37.0
@@ -17,23 +18,42 @@ require (
1718
go.opentelemetry.io/otel/trace v1.28.0
1819
go.uber.org/automaxprocs v1.5.3
1920
google.golang.org/grpc v1.65.0
21+
k8s.io/api v0.30.3
22+
k8s.io/apimachinery v0.30.3
2023
sigs.k8s.io/container-object-storage-interface-spec v0.1.0
24+
sigs.k8s.io/controller-runtime v0.18.4
2125
)
2226

2327
require (
2428
github.com/beorn7/perks v1.0.1 // indirect
2529
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
2630
github.com/cespare/xxhash/v2 v2.3.0 // indirect
27-
github.com/go-logr/logr v1.4.2 // indirect
31+
github.com/davecgh/go-spew v1.1.1 // indirect
32+
github.com/emicklei/go-restful/v3 v3.11.0 // indirect
33+
github.com/evanphx/json-patch/v5 v5.9.0 // indirect
2834
github.com/go-logr/stdr v1.2.2 // indirect
35+
github.com/go-openapi/jsonpointer v0.19.6 // indirect
36+
github.com/go-openapi/jsonreference v0.20.2 // indirect
37+
github.com/go-openapi/swag v0.22.3 // indirect
38+
github.com/gogo/protobuf v1.3.2 // indirect
2939
github.com/golang/protobuf v1.5.4 // indirect
40+
github.com/google/gnostic-models v0.6.8 // indirect
41+
github.com/google/gofuzz v1.2.0 // indirect
3042
github.com/google/uuid v1.6.0 // indirect
3143
github.com/grpc-ecosystem/grpc-gateway/v2 v2.20.0 // indirect
44+
github.com/imdario/mergo v0.3.6 // indirect
45+
github.com/josharian/intern v1.0.0 // indirect
46+
github.com/json-iterator/go v1.1.12 // indirect
47+
github.com/mailru/easyjson v0.7.7 // indirect
48+
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
49+
github.com/modern-go/reflect2 v1.0.2 // indirect
3250
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
51+
github.com/pkg/errors v0.9.1 // indirect
3352
github.com/prometheus/client_golang v1.19.1 // indirect
3453
github.com/prometheus/client_model v0.6.1 // indirect
3554
github.com/prometheus/common v0.55.0 // indirect
3655
github.com/prometheus/procfs v0.15.1 // indirect
56+
github.com/spf13/pflag v1.0.5 // indirect
3757
go.opentelemetry.io/contrib/bridges/prometheus v0.53.0 // indirect
3858
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.4.0 // indirect
3959
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.28.0 // indirect
@@ -49,10 +69,23 @@ require (
4969
go.opentelemetry.io/otel/sdk/log v0.4.0 // indirect
5070
go.opentelemetry.io/proto/otlp v1.3.1 // indirect
5171
golang.org/x/net v0.27.0 // indirect
72+
golang.org/x/oauth2 v0.21.0 // indirect
5273
golang.org/x/sys v0.22.0 // indirect
74+
golang.org/x/term v0.22.0 // indirect
5375
golang.org/x/text v0.16.0 // indirect
76+
golang.org/x/time v0.5.0 // indirect
5477
google.golang.org/genproto/googleapis/api v0.0.0-20240701130421-f6361c86f094 // indirect
5578
google.golang.org/genproto/googleapis/rpc v0.0.0-20240701130421-f6361c86f094 // indirect
5679
google.golang.org/protobuf v1.34.2 // indirect
80+
gopkg.in/inf.v0 v0.9.1 // indirect
5781
gopkg.in/ini.v1 v1.67.0 // indirect
82+
gopkg.in/yaml.v2 v2.4.0 // indirect
83+
gopkg.in/yaml.v3 v3.0.1 // indirect
84+
k8s.io/client-go v0.30.3 // indirect
85+
k8s.io/klog/v2 v2.120.1 // indirect
86+
k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect
87+
k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect
88+
sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect
89+
sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect
90+
sigs.k8s.io/yaml v1.3.0 // indirect
5891
)

0 commit comments

Comments
 (0)