Skip to content

Commit a4be109

Browse files
committed
Merge remote-tracking branch 'origin/master' into add_pv_labels
2 parents 9f02563 + 41af246 commit a4be109

16 files changed

+75
-40
lines changed

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

+10-4
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ import (
2626
"k8s.io/klog/v2"
2727

2828
"sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/common"
29+
"sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/deviceutils"
2930
gce "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-cloud-provider/compute"
3031
metadataservice "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-cloud-provider/metadata"
3132
driver "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-pd-csi-driver"
@@ -41,8 +42,11 @@ var (
4142
runNodeService = flag.Bool("run-node-service", true, "If set to false then the CSI driver does not activate its node service (default: true)")
4243
httpEndpoint = flag.String("http-endpoint", "", "The TCP network address where the prometheus metrics endpoint will listen (example: `:8080`). The default is empty string, which means metrics endpoint is disabled.")
4344
metricsPath = flag.String("metrics-path", "/metrics", "The HTTP path where prometheus metrics will be exposed. Default is `/metrics`.")
45+
grpcLogCharCap = flag.Int("grpc-log-char-cap", 10000, "The maximum amount of characters logged for every grpc responses")
4446

45-
extraVolumeLabelsStr = flag.String("extra-labels", "", "Extra labels to attach to each PD created. It is a comma separated list of key value pairs like '<key1>=<value1>,<key2>=<value2>'. See https://cloud.google.com/compute/docs/labeling-resources for details")
47+
errorBackoffInitialDurationMs = flag.Int("backoff-initial-duration-ms", 200, "The amount of ms for the initial duration of the backoff condition for controller publish/unpublish CSI operations. Default is 200.")
48+
errorBackoffMaxDurationMs = flag.Int("backoff-max-duration-ms", 300000, "The amount of ms for the max duration of the backoff condition for controller publish/unpublish CSI operations. Default is 300000 (5m).")
49+
extraVolumeLabelsStr = flag.String("extra-labels", "", "Extra labels to attach to each PD created. It is a comma separated list of key value pairs like '<key1>=<value1>,<key2>=<value2>'. See https://cloud.google.com/compute/docs/labeling-resources for details")
4650

4751
attachDiskBackoffDuration = flag.Duration("attach-disk-backoff-duration", 5*time.Second, "Duration for attachDisk backoff")
4852
attachDiskBackoffFactor = flag.Float64("attach-disk-backoff-factor", 0.0, "Factor for attachDisk backoff")
@@ -122,7 +126,9 @@ func handle() {
122126
if err != nil {
123127
klog.Fatalf("Failed to get cloud provider: %w", err)
124128
}
125-
controllerServer = driver.NewControllerServer(gceDriver, cloudProvider)
129+
initialBackoffDuration := time.Duration(*errorBackoffInitialDurationMs) * time.Millisecond
130+
maxBackoffDuration := time.Duration(*errorBackoffMaxDurationMs) * time.Microsecond
131+
controllerServer = driver.NewControllerServer(gceDriver, cloudProvider, initialBackoffDuration, maxBackoffDuration)
126132
} else if *cloudConfigFilePath != "" {
127133
klog.Warningf("controller service is disabled but cloud config given - it has no effect")
128134
}
@@ -134,7 +140,7 @@ func handle() {
134140
if err != nil {
135141
klog.Fatalf("Failed to get safe mounter: %w", err)
136142
}
137-
deviceUtils := mountmanager.NewDeviceUtils()
143+
deviceUtils := deviceutils.NewDeviceUtils()
138144
statter := mountmanager.NewStatter(mounter)
139145
meta, err := metadataservice.NewMetadataService()
140146
if err != nil {
@@ -160,5 +166,5 @@ func handle() {
160166
gce.WaitForOpBackoff.Steps = *waitForOpBackoffSteps
161167
gce.WaitForOpBackoff.Cap = *waitForOpBackoffCap
162168

163-
gceDriver.Run(*endpoint)
169+
gceDriver.Run(*endpoint, *grpcLogCharCap)
164170
}

creds/cloud-sa.json

Whitespace-only changes.

pkg/mount-manager/device-utils.go renamed to pkg/deviceutils/device-utils.go

+9-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ See the License for the specific language governing permissions and
1212
limitations under the License.
1313
*/
1414

15-
package mountmanager
15+
package deviceutils
1616

1717
import (
1818
"fmt"
@@ -27,6 +27,7 @@ import (
2727
"k8s.io/apimachinery/pkg/util/wait"
2828
"k8s.io/klog/v2"
2929
pathutils "k8s.io/utils/path"
30+
"sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/resizefs"
3031
)
3132

3233
const (
@@ -84,6 +85,9 @@ type DeviceUtils interface {
8485
// DisableDevice performs necessary disabling prior to a device being
8586
// detached from a node. The path is that from GetDiskByIdPaths.
8687
DisableDevice(devicePath string) error
88+
89+
// Resize returns whether or not a device needs resizing.
90+
Resize(resizer resizefs.Resizefs, devicePath string, deviceMountPath string) (bool, error)
8791
}
8892

8993
type deviceUtils struct {
@@ -274,6 +278,10 @@ func (m *deviceUtils) VerifyDevicePath(devicePaths []string, deviceName string)
274278
return devicePath, nil
275279
}
276280

281+
func (m *deviceUtils) Resize(resizer resizefs.Resizefs, devicePath string, deviceMountPath string) (bool, error) {
282+
return resizer.Resize(devicePath, deviceMountPath)
283+
}
284+
277285
// getDevFsSerial returns the serial number of the /dev/* path at devFsPath.
278286
// If devFsPath does not start with a known prefix, returns the empty string.
279287
func getDevFsSerial(devFsPath string) (string, error) {

pkg/mount-manager/device-utils_linux.go renamed to pkg/deviceutils/device-utils_linux.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
1414
limitations under the License.
1515
*/
1616

17-
package mountmanager
17+
package deviceutils
1818

1919
import (
2020
"fmt"

pkg/mount-manager/device-utils_test.go renamed to pkg/deviceutils/device-utils_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package mountmanager
1+
package deviceutils
22

33
import (
44
"testing"

pkg/mount-manager/device-utils_windows.go renamed to pkg/deviceutils/device-utils_windows.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
1414
limitations under the License.
1515
*/
1616

17-
package mountmanager
17+
package deviceutils
1818

1919
func (_ *deviceUtils) DisableDevice(devicePath string) error {
2020
// No disabling is necessary on windows.

pkg/mount-manager/fake-device-utils.go renamed to pkg/deviceutils/fake-device-utils.go

+7-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,9 @@ See the License for the specific language governing permissions and
1212
limitations under the License.
1313
*/
1414

15-
package mountmanager
15+
package deviceutils
16+
17+
import "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/resizefs"
1618

1719
type fakeDeviceUtils struct {
1820
}
@@ -38,3 +40,7 @@ func (_ *fakeDeviceUtils) DisableDevice(devicePath string) error {
3840
// No-op for testing.
3941
return nil
4042
}
43+
44+
func (_ *fakeDeviceUtils) Resize(resizer resizefs.Resizefs, devicePath string, deviceMountPath string) (bool, error) {
45+
return false, nil
46+
}

pkg/gce-pd-csi-driver/controller.go

+3-8
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,6 @@ import (
3737
gce "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-cloud-provider/compute"
3838
)
3939

40-
const (
41-
errorBackoffInitialDuration = 200 * time.Millisecond
42-
errorBackoffMaxDuration = 5 * time.Minute
43-
)
44-
4540
type GCEControllerServer struct {
4641
Driver *GCEDriver
4742
CloudProvider gce.GCECompute
@@ -517,7 +512,7 @@ func (gceCS *GCEControllerServer) executeControllerPublishVolume(ctx context.Con
517512

518513
attached, err := diskIsAttachedAndCompatible(deviceName, instance, volumeCapability, readWrite)
519514
if err != nil {
520-
return nil, status.Error(codes.AlreadyExists, fmt.Sprintf("Disk %v already published to node %v but incompatbile: %v", volKey.Name, nodeID, err))
515+
return nil, status.Error(codes.AlreadyExists, fmt.Sprintf("Disk %v already published to node %v but incompatible: %v", volKey.Name, nodeID, err))
521516
}
522517
if attached {
523518
// Volume is attached to node. Success!
@@ -1596,8 +1591,8 @@ func pickRandAndConsecutive(slice []string, n int) ([]string, error) {
15961591
return ret, nil
15971592
}
15981593

1599-
func newCsiErrorBackoff() *csiErrorBackoff {
1600-
return &csiErrorBackoff{flowcontrol.NewBackOff(errorBackoffInitialDuration, errorBackoffMaxDuration)}
1594+
func newCsiErrorBackoff(initialDuration, errorBackoffMaxDuration time.Duration) *csiErrorBackoff {
1595+
return &csiErrorBackoff{flowcontrol.NewBackOff(initialDuration, errorBackoffMaxDuration)}
16011596
}
16021597

16031598
func (_ *csiErrorBackoff) backoffId(nodeId, volumeId string) csiErrorBackoffId {

pkg/gce-pd-csi-driver/controller_test.go

+2
Original file line numberDiff line numberDiff line change
@@ -2149,6 +2149,8 @@ type backoffTesterConfig struct {
21492149
}
21502150

21512151
func newFakeCsiErrorBackoff(tc *clock.FakeClock) *csiErrorBackoff {
2152+
errorBackoffInitialDuration := 200 * time.Millisecond
2153+
errorBackoffMaxDuration := 5 * time.Minute
21522154
return &csiErrorBackoff{flowcontrol.NewFakeBackOff(errorBackoffInitialDuration, errorBackoffMaxDuration, tc)}
21532155
}
21542156

pkg/gce-pd-csi-driver/gce-pd-driver.go

+10-4
Original file line numberDiff line numberDiff line change
@@ -16,18 +16,22 @@ package gceGCEDriver
1616

1717
import (
1818
"fmt"
19+
"time"
1920

2021
csi "github.com/container-storage-interface/spec/lib/go/csi"
2122
"google.golang.org/grpc/codes"
2223
"google.golang.org/grpc/status"
2324
"k8s.io/klog/v2"
2425
"k8s.io/mount-utils"
2526
common "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/common"
27+
"sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/deviceutils"
2628
gce "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-cloud-provider/compute"
2729
metadataservice "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-cloud-provider/metadata"
2830
mountmanager "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/mount-manager"
2931
)
3032

33+
var maxLogChar int
34+
3135
type GCEDriver struct {
3236
name string
3337
vendorVersion string
@@ -137,7 +141,7 @@ func NewIdentityServer(gceDriver *GCEDriver) *GCEIdentityServer {
137141
}
138142
}
139143

140-
func NewNodeServer(gceDriver *GCEDriver, mounter *mount.SafeFormatAndMount, deviceUtils mountmanager.DeviceUtils, meta metadataservice.MetadataService, statter mountmanager.Statter) *GCENodeServer {
144+
func NewNodeServer(gceDriver *GCEDriver, mounter *mount.SafeFormatAndMount, deviceUtils deviceutils.DeviceUtils, meta metadataservice.MetadataService, statter mountmanager.Statter) *GCENodeServer {
141145
return &GCENodeServer{
142146
Driver: gceDriver,
143147
Mounter: mounter,
@@ -148,17 +152,19 @@ func NewNodeServer(gceDriver *GCEDriver, mounter *mount.SafeFormatAndMount, devi
148152
}
149153
}
150154

151-
func NewControllerServer(gceDriver *GCEDriver, cloudProvider gce.GCECompute) *GCEControllerServer {
155+
func NewControllerServer(gceDriver *GCEDriver, cloudProvider gce.GCECompute, errorBackoffInitialDuration, errorBackoffMaxDuration time.Duration) *GCEControllerServer {
152156
return &GCEControllerServer{
153157
Driver: gceDriver,
154158
CloudProvider: cloudProvider,
155159
seen: map[string]int{},
156160
volumeLocks: common.NewVolumeLocks(),
157-
errorBackoff: newCsiErrorBackoff(),
161+
errorBackoff: newCsiErrorBackoff(errorBackoffInitialDuration, errorBackoffMaxDuration),
158162
}
159163
}
160164

161-
func (gceDriver *GCEDriver) Run(endpoint string) {
165+
func (gceDriver *GCEDriver) Run(endpoint string, grpcLogCharCap int) {
166+
maxLogChar = grpcLogCharCap
167+
162168
klog.V(4).Infof("Driver: %v", gceDriver.name)
163169
//Start the nonblocking GRPC
164170
s := NewNonBlockingGRPCServer()

pkg/gce-pd-csi-driver/gce-pd-driver_test.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ package gceGCEDriver
1616

1717
import (
1818
"testing"
19+
"time"
1920

2021
gce "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-cloud-provider/compute"
2122
)
@@ -43,7 +44,10 @@ func initBlockingGCEDriver(t *testing.T, cloudDisks []*gce.CloudDisk, readyToExe
4344
func initGCEDriverWithCloudProvider(t *testing.T, cloudProvider gce.GCECompute) *GCEDriver {
4445
vendorVersion := "test-vendor"
4546
gceDriver := GetGCEDriver()
46-
controllerServer := NewControllerServer(gceDriver, cloudProvider)
47+
errorBackoffInitialDuration := 200 * time.Millisecond
48+
errorBackoffMaxDuration := 5 * time.Minute
49+
50+
controllerServer := NewControllerServer(gceDriver, cloudProvider, errorBackoffInitialDuration, errorBackoffMaxDuration)
4751
err := gceDriver.SetupGCEDriver(driver, vendorVersion, nil, nil, controllerServer, nil)
4852
if err != nil {
4953
t.Fatalf("Failed to setup GCE Driver: %v", err)

pkg/gce-pd-csi-driver/node.go

+5-5
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ import (
3030
"k8s.io/mount-utils"
3131

3232
"sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/common"
33+
"sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/deviceutils"
3334
metadataservice "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-cloud-provider/metadata"
3435
mountmanager "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/mount-manager"
3536
"sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/resizefs"
@@ -38,7 +39,7 @@ import (
3839
type GCENodeServer struct {
3940
Driver *GCEDriver
4041
Mounter *mount.SafeFormatAndMount
41-
DeviceUtils mountmanager.DeviceUtils
42+
DeviceUtils deviceutils.DeviceUtils
4243
VolumeStatter mountmanager.Statter
4344
MetadataService metadataservice.MetadataService
4445

@@ -343,10 +344,9 @@ func (ns *GCENodeServer) NodeStageVolume(ctx context.Context, req *csi.NodeStage
343344
// Part 4: Resize filesystem.
344345
// https://github.com/kubernetes/kubernetes/issues/94929
345346
resizer := resizefs.NewResizeFs(ns.Mounter)
346-
_, err = resizer.Resize(devicePath, stagingTargetPath)
347+
_, err = ns.DeviceUtils.Resize(resizer, devicePath, stagingTargetPath)
347348
if err != nil {
348-
return nil, status.Error(codes.Internal, fmt.Sprintf("error when resizing volume %s: %v", volumeID, err))
349-
349+
return nil, status.Error(codes.Internal, fmt.Sprintf("error when resizing volume %s from device '%s' at path '%s': %v", volumeID, devicePath, stagingTargetPath, err))
350350
}
351351

352352
klog.V(4).Infof("NodeStageVolume succeeded on %v to %s", volumeID, stagingTargetPath)
@@ -508,7 +508,7 @@ func (ns *GCENodeServer) NodeExpandVolume(ctx context.Context, req *csi.NodeExpa
508508
resizer := resizefs.NewResizeFs(ns.Mounter)
509509
_, err = resizer.Resize(devicePath, volumePath)
510510
if err != nil {
511-
return nil, status.Error(codes.Internal, fmt.Sprintf("error when resizing volume %s: %v", volKey.String(), err))
511+
return nil, status.Error(codes.Internal, fmt.Sprintf("error when resizing volume %s from device '%s' at path '%s': %v", volKey.String(), devicePath, volumePath, err))
512512

513513
}
514514

pkg/gce-pd-csi-driver/node_test.go

+8-6
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,18 @@ import (
1919
"context"
2020
"fmt"
2121
"io/ioutil"
22-
"k8s.io/utils/exec"
23-
testingexec "k8s.io/utils/exec/testing"
2422
"os"
2523
"path/filepath"
2624
"testing"
2725

26+
"k8s.io/utils/exec"
27+
testingexec "k8s.io/utils/exec/testing"
28+
2829
csi "github.com/container-storage-interface/spec/lib/go/csi"
2930
"google.golang.org/grpc/codes"
3031
"google.golang.org/grpc/status"
3132
"k8s.io/mount-utils"
33+
"sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/deviceutils"
3234
metadataservice "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-cloud-provider/metadata"
3335
mountmanager "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/mount-manager"
3436
)
@@ -38,14 +40,14 @@ const defaultTargetPath = "/mnt/test"
3840
const defaultStagingPath = "/staging"
3941

4042
func getTestGCEDriver(t *testing.T) *GCEDriver {
41-
return getCustomTestGCEDriver(t, mountmanager.NewFakeSafeMounter(), mountmanager.NewFakeDeviceUtils(), metadataservice.NewFakeService())
43+
return getCustomTestGCEDriver(t, mountmanager.NewFakeSafeMounter(), deviceutils.NewFakeDeviceUtils(), metadataservice.NewFakeService())
4244
}
4345

4446
func getTestGCEDriverWithCustomMounter(t *testing.T, mounter *mount.SafeFormatAndMount) *GCEDriver {
45-
return getCustomTestGCEDriver(t, mounter, mountmanager.NewFakeDeviceUtils(), metadataservice.NewFakeService())
47+
return getCustomTestGCEDriver(t, mounter, deviceutils.NewFakeDeviceUtils(), metadataservice.NewFakeService())
4648
}
4749

48-
func getCustomTestGCEDriver(t *testing.T, mounter *mount.SafeFormatAndMount, deviceUtils mountmanager.DeviceUtils, metaService metadataservice.MetadataService) *GCEDriver {
50+
func getCustomTestGCEDriver(t *testing.T, mounter *mount.SafeFormatAndMount, deviceUtils deviceutils.DeviceUtils, metaService metadataservice.MetadataService) *GCEDriver {
4951
gceDriver := GetGCEDriver()
5052
nodeServer := NewNodeServer(gceDriver, mounter, deviceUtils, metaService, mountmanager.NewFakeStatter(mounter))
5153
err := gceDriver.SetupGCEDriver(driver, "test-vendor", nil, nil, nil, nodeServer)
@@ -58,7 +60,7 @@ func getCustomTestGCEDriver(t *testing.T, mounter *mount.SafeFormatAndMount, dev
5860
func getTestBlockingGCEDriver(t *testing.T, readyToExecute chan chan struct{}) *GCEDriver {
5961
gceDriver := GetGCEDriver()
6062
mounter := mountmanager.NewFakeSafeBlockingMounter(readyToExecute)
61-
nodeServer := NewNodeServer(gceDriver, mounter, mountmanager.NewFakeDeviceUtils(), metadataservice.NewFakeService(), mountmanager.NewFakeStatter(mounter))
63+
nodeServer := NewNodeServer(gceDriver, mounter, deviceutils.NewFakeDeviceUtils(), metadataservice.NewFakeService(), mountmanager.NewFakeStatter(mounter))
6264
err := gceDriver.SetupGCEDriver(driver, "test-vendor", nil, nil, nil, nodeServer)
6365
if err != nil {
6466
t.Fatalf("Failed to setup GCE Driver: %v", err)

pkg/gce-pd-csi-driver/utils.go

+5-1
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,11 @@ func logGRPC(ctx context.Context, req interface{}, info *grpc.UnaryServerInfo, h
6969
if err != nil {
7070
klog.Errorf("%s returned with error: %w", info.FullMethod, err)
7171
} else {
72-
klog.V(4).Infof("%s returned with response: %s", info.FullMethod, resp)
72+
cappedStr := fmt.Sprintf("%v", resp)
73+
if len(cappedStr) > maxLogChar {
74+
cappedStr = cappedStr[:maxLogChar] + fmt.Sprintf(" [response body too large, log capped to %d chars]", maxLogChar)
75+
}
76+
klog.V(4).Infof("%s returned with response: %s", info.FullMethod, cappedStr)
7377
}
7478
return resp, err
7579
}

test/e2e/tests/single_zone_e2e_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ import (
2626
"k8s.io/apimachinery/pkg/util/wait"
2727
"k8s.io/klog/v2"
2828
"sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/common"
29+
"sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/deviceutils"
2930
gce "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-cloud-provider/compute"
30-
mountmanager "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/mount-manager"
3131
testutils "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/test/e2e/utils"
3232
"sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/test/remote"
3333

@@ -122,7 +122,7 @@ var _ = Describe("GCE PD CSI Driver", func() {
122122
}()
123123

124124
// MESS UP THE symlink
125-
devicePaths := mountmanager.NewDeviceUtils().GetDiskByIdPaths(volName, "")
125+
devicePaths := deviceutils.NewDeviceUtils().GetDiskByIdPaths(volName, "")
126126
for _, devicePath := range devicePaths {
127127
err = testutils.RmAll(instance, devicePath)
128128
Expect(err).To(BeNil(), "failed to remove /dev/by-id folder")
@@ -194,7 +194,7 @@ var _ = Describe("GCE PD CSI Driver", func() {
194194
}()
195195

196196
// DELETE THE symlink
197-
devicePaths := mountmanager.NewDeviceUtils().GetDiskByIdPaths(volName, "")
197+
devicePaths := deviceutils.NewDeviceUtils().GetDiskByIdPaths(volName, "")
198198
for _, devicePath := range devicePaths {
199199
err = testutils.RmAll(instance, devicePath)
200200
Expect(err).To(BeNil(), "failed to remove /dev/by-id folder")

0 commit comments

Comments
 (0)