Skip to content

Commit 5f37448

Browse files
committed
Code changes (excluding vendor)
1 parent 391a291 commit 5f37448

File tree

16 files changed

+721
-542
lines changed

16 files changed

+721
-542
lines changed

cmd/gce-pd-csi-driver/main.go

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ import (
2727
"strings"
2828
"time"
2929

30+
"k8s.io/client-go/kubernetes"
31+
"k8s.io/client-go/rest"
3032
"k8s.io/klog/v2"
3133
"k8s.io/utils/strings/slices"
3234
"sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/common"
@@ -36,6 +38,7 @@ import (
3638
driver "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-pd-csi-driver"
3739
"sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/metrics"
3840
mountmanager "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/mount-manager"
41+
"sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/nodelabels"
3942
)
4043

4144
var (
@@ -94,7 +97,7 @@ var (
9497

9598
extraTagsStr = flag.String("extra-tags", "", "Extra tags to attach to each Compute Disk, Image, Snapshot created. It is a comma separated list of parent id, key and value like '<parent_id1>/<tag_key1>/<tag_value1>,...,<parent_idN>/<tag_keyN>/<tag_valueN>'. parent_id is the Organization or the Project ID or Project name where the tag key and the tag value resources exist. A maximum of 50 tags bindings is allowed for a resource. See https://cloud.google.com/resource-manager/docs/tags/tags-overview, https://cloud.google.com/resource-manager/docs/tags/tags-creating-and-managing for details")
9699

97-
diskTopology = flag.Bool("disk-topology", false, "If set to true, the driver will add a disk-type.gke.io/[some-disk-type] topology label to the Topologies returned in CreateVolumeResponse.")
100+
diskTopology = flag.Bool("disk-topology", false, "If set to true, the driver will add a topology.gke.io/[disk-type] topology label to the Topologies returned in CreateVolumeResponse. Label is only added if all cluster nodes have at least one disk support label")
98101

99102
version string
100103
)
@@ -230,11 +233,24 @@ func handle() {
230233

231234
initialBackoffDuration := time.Duration(*errorBackoffInitialDurationMs) * time.Millisecond
232235
maxBackoffDuration := time.Duration(*errorBackoffMaxDurationMs) * time.Millisecond
233-
// TODO(2042): Move more of the constructor args into this struct
234236
args := &driver.GCEControllerServerArgs{
235237
EnableDiskTopology: *diskTopology,
236238
}
237239

240+
if *diskTopology {
241+
klog.V(2).Infof("Setting up kubeClient")
242+
kubeClient, err := instantiateKubeClient()
243+
if err != nil {
244+
klog.Fatalf("Failed to instantiate Kubernetes client: %v", err)
245+
}
246+
klog.V(2).Infof("Setting up node lister with informer")
247+
labelVerifier, err := nodelabels.NewVerifier(ctx, kubeClient)
248+
if err != nil {
249+
klog.Fatalf("Failed to create node label verifier: %v", err)
250+
}
251+
args.LabelVerifier = labelVerifier
252+
}
253+
238254
controllerServer = driver.NewControllerServer(gceDriver, cloudProvider, initialBackoffDuration, maxBackoffDuration, fallbackRequisiteZones, *enableStoragePoolsFlag, *enableDataCacheFlag, multiZoneVolumeHandleConfig, listVolumesConfig, provisionableDisksConfig, *enableHdHAFlag, args)
239255
} else if *cloudConfigFilePath != "" {
240256
klog.Warningf("controller service is disabled but cloud config given - it has no effect")
@@ -259,13 +275,23 @@ func handle() {
259275
klog.Fatalf("Failed to get node info from API server: %v", err.Error())
260276
}
261277

262-
// TODO(2042): Move more of the constructor args into this struct
263278
nsArgs := &driver.NodeServerArgs{
264279
EnableDeviceInUseCheck: *enableDeviceInUseCheck,
265280
DeviceInUseTimeout: *deviceInUseTimeout,
266281
EnableDataCache: *enableDataCacheFlag,
267282
DataCacheEnabledNodePool: isDataCacheEnabledNodePool,
283+
EnableDiskTopology: *diskTopology,
284+
}
285+
286+
if *diskTopology {
287+
klog.V(2).Infof("Setting up kubeClient")
288+
kubeClient, err := instantiateKubeClient()
289+
if err != nil {
290+
klog.Fatalf("Failed to instantiate Kubernetes client: %v", err)
291+
}
292+
nsArgs.KubeClient = kubeClient
268293
}
294+
269295
nodeServer = driver.NewNodeServer(gceDriver, mounter, deviceUtils, meta, statter, nsArgs)
270296

271297
if *maxConcurrentFormatAndMount > 0 {
@@ -304,6 +330,18 @@ func handle() {
304330
gceDriver.Run(*endpoint, *grpcLogCharCap, *enableOtelTracing, metricsManager)
305331
}
306332

333+
func instantiateKubeClient() (*kubernetes.Clientset, error) {
334+
cfg, err := rest.InClusterConfig()
335+
if err != nil {
336+
return nil, fmt.Errorf("failed to create REST Config for k8s client: %w", err)
337+
}
338+
kubeClient, err := kubernetes.NewForConfig(cfg)
339+
if err != nil {
340+
return nil, fmt.Errorf("failed to create k8s client: %w", err)
341+
}
342+
return kubeClient, nil
343+
}
344+
307345
func notEmpty(v string) bool {
308346
return v != ""
309347
}

go.mod

Lines changed: 43 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -5,32 +5,32 @@ go 1.23.0
55
toolchain go1.23.6
66

77
require (
8-
cloud.google.com/go/compute/metadata v0.6.0
9-
cloud.google.com/go/kms v1.18.0
8+
cloud.google.com/go/compute/metadata v0.5.0
9+
cloud.google.com/go/kms v1.17.1
1010
cloud.google.com/go/resourcemanager v1.9.7
11-
github.com/GoogleCloudPlatform/k8s-cloud-provider v1.33.0
12-
github.com/container-storage-interface/spec v1.11.0
13-
github.com/fsnotify/fsnotify v1.9.0
14-
github.com/google/go-cmp v0.7.0
11+
github.com/GoogleCloudPlatform/k8s-cloud-provider v1.24.0
12+
github.com/container-storage-interface/spec v1.10.0
13+
github.com/fsnotify/fsnotify v1.8.0
14+
github.com/google/go-cmp v0.6.0
1515
github.com/google/uuid v1.6.0
16-
github.com/googleapis/gax-go/v2 v2.12.5
16+
github.com/googleapis/gax-go/v2 v2.12.4
1717
github.com/hashicorp/golang-lru/v2 v2.0.7
1818
github.com/kubernetes-csi/csi-proxy/client v1.2.1
1919
github.com/kubernetes-csi/csi-test/v5 v5.3.1
2020
github.com/onsi/ginkgo/v2 v2.22.2
2121
github.com/onsi/gomega v1.36.2
22-
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0
23-
go.opentelemetry.io/otel v1.35.0
24-
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0
25-
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.35.0
26-
go.opentelemetry.io/otel/sdk v1.35.0
22+
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.53.0
23+
go.opentelemetry.io/otel v1.32.0
24+
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.32.0
25+
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.32.0
26+
go.opentelemetry.io/otel/sdk v1.32.0
2727
golang.org/x/oauth2 v0.27.0
28-
golang.org/x/sys v0.32.0
28+
golang.org/x/sys v0.30.0
2929
golang.org/x/time v0.10.0
30-
google.golang.org/api v0.187.0
31-
google.golang.org/genproto v0.0.0-20240624140628-dc46fd24d27d
32-
google.golang.org/grpc v1.71.0
33-
google.golang.org/protobuf v1.36.6
30+
google.golang.org/api v0.183.0
31+
google.golang.org/genproto v0.0.0-20240528184218-531527333157
32+
google.golang.org/grpc v1.67.1
33+
google.golang.org/protobuf v1.36.5
3434
gopkg.in/gcfg.v1 v1.2.3
3535
k8s.io/api v0.32.3
3636
k8s.io/apimachinery v0.32.3
@@ -44,25 +44,25 @@ require (
4444
)
4545

4646
require (
47-
cloud.google.com/go v0.115.0 // indirect
48-
cloud.google.com/go/auth v0.6.1 // indirect
47+
cloud.google.com/go v0.114.0 // indirect
48+
cloud.google.com/go/auth v0.5.1 // indirect
4949
cloud.google.com/go/auth/oauth2adapt v0.2.2 // indirect
5050
cloud.google.com/go/iam v1.1.8 // indirect
5151
cloud.google.com/go/longrunning v0.5.7 // indirect
52-
github.com/Microsoft/go-winio v0.6.2 // indirect
52+
github.com/Microsoft/go-winio v0.6.1 // indirect
5353
github.com/beorn7/perks v1.0.1 // indirect
5454
github.com/blang/semver/v4 v4.0.0 // indirect
5555
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
5656
github.com/cespare/xxhash/v2 v2.3.0 // indirect
5757
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
5858
github.com/emicklei/go-restful/v3 v3.12.2 // indirect
5959
github.com/felixge/httpsnoop v1.0.4 // indirect
60-
github.com/fxamacker/cbor/v2 v2.8.0 // indirect
60+
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
6161
github.com/go-logr/logr v1.4.2 // indirect
6262
github.com/go-logr/stdr v1.2.2 // indirect
63-
github.com/go-openapi/jsonpointer v0.21.1 // indirect
63+
github.com/go-openapi/jsonpointer v0.21.0 // indirect
6464
github.com/go-openapi/jsonreference v0.21.0 // indirect
65-
github.com/go-openapi/swag v0.23.1 // indirect
65+
github.com/go-openapi/swag v0.23.0 // indirect
6666
github.com/go-task/slim-sprig/v3 v3.0.0 // indirect
6767
github.com/gogo/protobuf v1.3.2 // indirect
6868
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
@@ -71,11 +71,11 @@ require (
7171
github.com/google/gnostic-models v0.6.9 // indirect
7272
github.com/google/gofuzz v1.2.1-0.20210504230335-f78f29fc09ea // indirect
7373
github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad // indirect
74-
github.com/google/s2a-go v0.1.9 // indirect
75-
github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect
76-
github.com/grpc-ecosystem/grpc-gateway/v2 v2.26.1 // indirect
77-
github.com/hashicorp/errwrap v1.1.0 // indirect
78-
github.com/hashicorp/go-multierror v1.1.1 // indirect
74+
github.com/google/s2a-go v0.1.7 // indirect
75+
github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect
76+
github.com/grpc-ecosystem/grpc-gateway/v2 v2.23.0 // indirect
77+
github.com/hashicorp/errwrap v1.0.0 // indirect
78+
github.com/hashicorp/go-multierror v1.1.0 // indirect
7979
github.com/josharian/intern v1.0.0 // indirect
8080
github.com/json-iterator/go v1.1.12 // indirect
8181
github.com/mailru/easyjson v0.9.0 // indirect
@@ -85,28 +85,28 @@ require (
8585
github.com/modern-go/reflect2 v1.0.2 // indirect
8686
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
8787
github.com/pkg/errors v0.9.1 // indirect
88-
github.com/prometheus/client_golang v1.22.0 // indirect
89-
github.com/prometheus/client_model v0.6.2 // indirect
90-
github.com/prometheus/common v0.62.0 // indirect
91-
github.com/prometheus/procfs v0.16.1 // indirect
92-
github.com/sirupsen/logrus v1.9.3 // indirect
93-
github.com/spf13/pflag v1.0.6 // indirect
88+
github.com/prometheus/client_golang v1.19.1 // indirect
89+
github.com/prometheus/client_model v0.6.1 // indirect
90+
github.com/prometheus/common v0.55.0 // indirect
91+
github.com/prometheus/procfs v0.15.1 // indirect
92+
github.com/sirupsen/logrus v1.9.0 // indirect
93+
github.com/spf13/pflag v1.0.5 // indirect
9494
github.com/x448/float16 v0.8.4 // indirect
9595
go.opencensus.io v0.24.0 // indirect
96-
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
97-
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 // indirect
98-
go.opentelemetry.io/otel/metric v1.35.0 // indirect
99-
go.opentelemetry.io/otel/trace v1.35.0 // indirect
100-
go.opentelemetry.io/proto/otlp v1.5.0 // indirect
96+
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.53.0 // indirect
97+
go.opentelemetry.io/otel/metric v1.32.0 // indirect
98+
go.opentelemetry.io/otel/trace v1.32.0 // indirect
99+
go.opentelemetry.io/proto/otlp v1.3.1 // indirect
101100
go4.org v0.0.0-20201209231011-d4a079459e60 // indirect
102101
golang.org/x/crypto v0.35.0 // indirect
102+
golang.org/x/mod v0.23.0 // indirect
103103
golang.org/x/net v0.35.0 // indirect
104-
golang.org/x/sync v0.13.0 // indirect
104+
golang.org/x/sync v0.11.0 // indirect
105105
golang.org/x/term v0.29.0 // indirect
106106
golang.org/x/text v0.22.0 // indirect
107107
golang.org/x/tools v0.30.0 // indirect
108-
google.golang.org/genproto/googleapis/api v0.0.0-20250218202821-56aae31c358a // indirect
109-
google.golang.org/genproto/googleapis/rpc v0.0.0-20250218202821-56aae31c358a // indirect
108+
google.golang.org/genproto/googleapis/api v0.0.0-20241104194629-dd2ea8efbc28 // indirect
109+
google.golang.org/genproto/googleapis/rpc v0.0.0-20241104194629-dd2ea8efbc28 // indirect
110110
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
111111
gopkg.in/inf.v0 v0.9.1 // indirect
112112
gopkg.in/warnings.v0 v0.1.2 // indirect
@@ -115,7 +115,7 @@ require (
115115
k8s.io/kube-openapi v0.0.0-20241212222426-2c72e554b1e7 // indirect
116116
k8s.io/test-infra v0.0.0-20210730160938-8ad9b8c53bd8 // indirect
117117
sigs.k8s.io/json v0.0.0-20241010143419-9aa6b5e7a4b3 // indirect
118-
sigs.k8s.io/structured-merge-diff/v4 v4.7.0 // indirect
118+
sigs.k8s.io/structured-merge-diff/v4 v4.6.0 // indirect
119119
sigs.k8s.io/yaml v1.4.0 // indirect
120120
)
121121

0 commit comments

Comments
 (0)