Skip to content

Commit 4870d73

Browse files
committed
Conversion webhook review
Signed-off-by: Leonardo Cecchi <[email protected]>
1 parent ba5e7fa commit 4870d73

File tree

5 files changed

+27
-37
lines changed

5 files changed

+27
-37
lines changed

cmd/snapshot-conversion-webhook/main.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,12 @@ import (
2121
"crypto/tls"
2222
"flag"
2323

24-
"github.com/kubernetes-csi/csi-lib-utils/standardflags"
25-
"github.com/kubernetes-csi/external-snapshotter/v8/pkg/webhook"
2624
"k8s.io/component-base/logs"
2725
logsapi "k8s.io/component-base/logs/api/v1"
2826
"k8s.io/klog/v2"
27+
28+
"github.com/kubernetes-csi/csi-lib-utils/standardflags"
29+
"github.com/kubernetes-csi/external-snapshotter/v8/pkg/webhook"
2930
)
3031

3132
var (
@@ -63,9 +64,6 @@ func main() {
6364
}
6465

6566
// Create new cert watcher
66-
ctx, cancel := context.WithCancel(context.Background())
67-
defer cancel() // stops certwatcher
68-
6967
cw, err := webhook.NewCertWatcher(*certFile, *keyFile)
7068
if err != nil {
7169
klog.Fatalf("failed to initialize new cert watcher: %v", err)
@@ -75,6 +73,9 @@ func main() {
7573
}
7674

7775
// Start the webhook server
76+
ctx, cancel := context.WithCancel(context.Background())
77+
defer cancel() // stops certwatcher
78+
7879
if err := webhook.StartServer(ctx, tlsConfig, cw, *port); err != nil {
7980
klog.Fatalf("server stopped: %v", err)
8081
}

deploy/kubernetes/webhook-example/webhook.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@ spec:
2323
args:
2424
- '--tls-cert-file=/etc/snapshot-conversion-webhook/certs/tls.crt'
2525
- '--tls-private-key-file=/etc/snapshot-conversion-webhook/certs/tls.key'
26-
# uncomment the following line to enable webhook for VolumeGroupSnapshot, VolumeGroupSnapshotContent and VolumeGroupSnapshotClass.
2726
ports:
2827
- containerPort: 443 # change the port as needed
2928
volumeMounts:

pkg/sidecar-controller/groupsnapshot_helper.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,13 @@ import (
2424
"strings"
2525
"time"
2626

27+
"github.com/container-storage-interface/spec/lib/go/csi"
2728
v1 "k8s.io/api/core/v1"
2829
"k8s.io/apimachinery/pkg/api/errors"
2930
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3031
"k8s.io/client-go/tools/cache"
3132
klog "k8s.io/klog/v2"
3233

33-
"github.com/container-storage-interface/spec/lib/go/csi"
3434
crdv1beta2 "github.com/kubernetes-csi/external-snapshotter/client/v8/apis/volumegroupsnapshot/v1beta2"
3535
crdv1 "github.com/kubernetes-csi/external-snapshotter/client/v8/apis/volumesnapshot/v1"
3636
"github.com/kubernetes-csi/external-snapshotter/v8/pkg/utils"

pkg/webhook/convert.go

Lines changed: 18 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -43,37 +43,26 @@ func convertGroupSnapshotCRD(obj *unstructured.Unstructured, toVersion string) (
4343
return nil, statusErrorWithMessage("conversion from a version to itself should not call the webhook: %s", toVersion)
4444
}
4545

46-
switch obj.GetAPIVersion() {
47-
case "groupsnapshot.storage.k8s.io/v1beta1":
48-
switch toVersion {
49-
case "groupsnapshot.storage.k8s.io/v1beta2":
50-
switch kind {
51-
case "VolumeGroupSnapshotContent":
52-
if err := convertVolumeGroupSnapshotContentFromV1beta1ToV1beta2(convertedObject); err != nil {
53-
return nil, statusErrorWithMessage("%s", err.Error())
54-
}
55-
default:
56-
return nil, statusErrorWithMessage("unexpected conversion kind %q", kind)
57-
}
58-
default:
59-
return nil, statusErrorWithMessage("unexpected conversion version %q", toVersion)
46+
if kind != "VolumeGroupSnapshotContent" {
47+
return nil, statusErrorWithMessage("unexpected conversion kind %q", kind)
48+
}
49+
50+
const v1beta1Version = "groupsnapshot.storage.k8s.io/v1beta1"
51+
const v1beta2Version = "groupsnapshot.storage.k8s.io/v1beta2"
52+
53+
switch {
54+
case fromVersion == v1beta1Version && toVersion == v1beta2Version:
55+
if err := convertVolumeGroupSnapshotContentFromV1beta1ToV1beta2(convertedObject); err != nil {
56+
return nil, statusErrorWithMessage("%s", err.Error())
6057
}
61-
case "groupsnapshot.storage.k8s.io/v1beta2":
62-
switch toVersion {
63-
case "groupsnapshot.storage.k8s.io/v1beta1":
64-
switch kind {
65-
case "VolumeGroupSnapshotContent":
66-
if err := convertVolumeGroupSnapshotContentFromV1beta2ToV1beta1(convertedObject); err != nil {
67-
return nil, statusErrorWithMessage("%s", err.Error())
68-
}
69-
default:
70-
return nil, statusErrorWithMessage("unexpected conversion kind %q", kind)
71-
}
72-
default:
73-
return nil, statusErrorWithMessage("unexpected conversion version %q", toVersion)
58+
59+
case fromVersion == v1beta2Version && toVersion == v1beta1Version:
60+
if err := convertVolumeGroupSnapshotContentFromV1beta2ToV1beta1(convertedObject); err != nil {
61+
return nil, statusErrorWithMessage("%s", err.Error())
7462
}
63+
7564
default:
76-
return nil, statusErrorWithMessage("unexpected conversion version %q", fromVersion)
65+
return nil, statusErrorWithMessage("unexpected conversion version from %q to %q", fromVersion, toVersion)
7766
}
7867

7968
return convertedObject, statusSucceed()
@@ -151,7 +140,7 @@ func convertVolumeGroupSnapshotContentFromV1beta2ToV1beta1(obj *unstructured.Uns
151140
delete(mapEntry, "readyToUse")
152141
delete(mapEntry, "restoreSize")
153142
} else {
154-
return fmt.Errorf("unexpected content in .status.volumeSnapshotInfoList[%q]: expected map", i)
143+
return fmt.Errorf("unexpected content in .status.volumeSnapshotInfoList[%d]: expected map", i)
155144
}
156145
}
157146

pkg/webhook/webhook_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,14 @@ import (
2828
"math/big"
2929
"net"
3030
"os"
31+
"path"
3132
"testing"
3233
"time"
3334
)
3435

3536
func TestWebhookCertReload(t *testing.T) {
3637
// Initialize test space
37-
tmpDir := os.TempDir() + "/webhook-cert-tests"
38+
tmpDir := path.Join(t.TempDir(), "/webhook-cert-tests")
3839
certFile := tmpDir + "/tls.crt"
3940
keyFile := tmpDir + "/tls.key"
4041
port := 30443

0 commit comments

Comments
 (0)