diff --git a/cmd/gce-pd-csi-driver/main.go b/cmd/gce-pd-csi-driver/main.go index 3a7894b06..0a69f8d72 100644 --- a/cmd/gce-pd-csi-driver/main.go +++ b/cmd/gce-pd-csi-driver/main.go @@ -26,6 +26,7 @@ import ( "k8s.io/klog/v2" "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/common" + "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/deviceutils" gce "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-cloud-provider/compute" metadataservice "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-cloud-provider/metadata" driver "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-pd-csi-driver" @@ -134,7 +135,7 @@ func handle() { if err != nil { klog.Fatalf("Failed to get safe mounter: %w", err) } - deviceUtils := mountmanager.NewDeviceUtils() + deviceUtils := deviceutils.NewDeviceUtils() statter := mountmanager.NewStatter(mounter) meta, err := metadataservice.NewMetadataService() if err != nil { diff --git a/creds/cloud-sa.json b/creds/cloud-sa.json new file mode 100644 index 000000000..e69de29bb diff --git a/pkg/mount-manager/device-utils.go b/pkg/deviceutils/device-utils.go similarity index 96% rename from pkg/mount-manager/device-utils.go rename to pkg/deviceutils/device-utils.go index ad9c0679f..dba9d3c58 100644 --- a/pkg/mount-manager/device-utils.go +++ b/pkg/deviceutils/device-utils.go @@ -12,7 +12,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package mountmanager +package deviceutils import ( "fmt" @@ -27,6 +27,7 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "k8s.io/klog/v2" pathutils "k8s.io/utils/path" + "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/resizefs" ) const ( @@ -84,6 +85,9 @@ type DeviceUtils interface { // DisableDevice performs necessary disabling prior to a device being // detached from a node. The path is that from GetDiskByIdPaths. DisableDevice(devicePath string) error + + // Resize returns whether or not a device needs resizing. + Resize(resizer resizefs.Resizefs, devicePath string, deviceMountPath string) (bool, error) } type deviceUtils struct { @@ -274,6 +278,10 @@ func (m *deviceUtils) VerifyDevicePath(devicePaths []string, deviceName string) return devicePath, nil } +func (m *deviceUtils) Resize(resizer resizefs.Resizefs, devicePath string, deviceMountPath string) (bool, error) { + return resizer.Resize(devicePath, deviceMountPath) +} + // getDevFsSerial returns the serial number of the /dev/* path at devFsPath. // If devFsPath does not start with a known prefix, returns the empty string. func getDevFsSerial(devFsPath string) (string, error) { diff --git a/pkg/mount-manager/device-utils_linux.go b/pkg/deviceutils/device-utils_linux.go similarity index 97% rename from pkg/mount-manager/device-utils_linux.go rename to pkg/deviceutils/device-utils_linux.go index 10476601f..3e1cda5c4 100644 --- a/pkg/mount-manager/device-utils_linux.go +++ b/pkg/deviceutils/device-utils_linux.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package mountmanager +package deviceutils import ( "fmt" diff --git a/pkg/mount-manager/device-utils_test.go b/pkg/deviceutils/device-utils_test.go similarity index 98% rename from pkg/mount-manager/device-utils_test.go rename to pkg/deviceutils/device-utils_test.go index dd3d22b00..630ab4c75 100644 --- a/pkg/mount-manager/device-utils_test.go +++ b/pkg/deviceutils/device-utils_test.go @@ -1,4 +1,4 @@ -package mountmanager +package deviceutils import ( "testing" diff --git a/pkg/mount-manager/device-utils_windows.go b/pkg/deviceutils/device-utils_windows.go similarity index 97% rename from pkg/mount-manager/device-utils_windows.go rename to pkg/deviceutils/device-utils_windows.go index 5cf7a892b..8b2055a17 100644 --- a/pkg/mount-manager/device-utils_windows.go +++ b/pkg/deviceutils/device-utils_windows.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package mountmanager +package deviceutils func (_ *deviceUtils) DisableDevice(devicePath string) error { // No disabling is necessary on windows. diff --git a/pkg/mount-manager/fake-device-utils.go b/pkg/deviceutils/fake-device-utils.go similarity index 84% rename from pkg/mount-manager/fake-device-utils.go rename to pkg/deviceutils/fake-device-utils.go index be68f492f..747340761 100644 --- a/pkg/mount-manager/fake-device-utils.go +++ b/pkg/deviceutils/fake-device-utils.go @@ -12,7 +12,9 @@ See the License for the specific language governing permissions and limitations under the License. */ -package mountmanager +package deviceutils + +import "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/resizefs" type fakeDeviceUtils struct { } @@ -38,3 +40,7 @@ func (_ *fakeDeviceUtils) DisableDevice(devicePath string) error { // No-op for testing. return nil } + +func (_ *fakeDeviceUtils) Resize(resizer resizefs.Resizefs, devicePath string, deviceMountPath string) (bool, error) { + return false, nil +} diff --git a/pkg/gce-pd-csi-driver/gce-pd-driver.go b/pkg/gce-pd-csi-driver/gce-pd-driver.go index a54d89f88..d1c8b747f 100644 --- a/pkg/gce-pd-csi-driver/gce-pd-driver.go +++ b/pkg/gce-pd-csi-driver/gce-pd-driver.go @@ -23,6 +23,7 @@ import ( "k8s.io/klog/v2" "k8s.io/mount-utils" common "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/common" + "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/deviceutils" gce "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-cloud-provider/compute" metadataservice "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-cloud-provider/metadata" mountmanager "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/mount-manager" @@ -137,7 +138,7 @@ func NewIdentityServer(gceDriver *GCEDriver) *GCEIdentityServer { } } -func NewNodeServer(gceDriver *GCEDriver, mounter *mount.SafeFormatAndMount, deviceUtils mountmanager.DeviceUtils, meta metadataservice.MetadataService, statter mountmanager.Statter) *GCENodeServer { +func NewNodeServer(gceDriver *GCEDriver, mounter *mount.SafeFormatAndMount, deviceUtils deviceutils.DeviceUtils, meta metadataservice.MetadataService, statter mountmanager.Statter) *GCENodeServer { return &GCENodeServer{ Driver: gceDriver, Mounter: mounter, diff --git a/pkg/gce-pd-csi-driver/node.go b/pkg/gce-pd-csi-driver/node.go index 603916592..de37b0fca 100644 --- a/pkg/gce-pd-csi-driver/node.go +++ b/pkg/gce-pd-csi-driver/node.go @@ -30,6 +30,7 @@ import ( "k8s.io/mount-utils" "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/common" + "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/deviceutils" metadataservice "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-cloud-provider/metadata" mountmanager "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/mount-manager" "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/resizefs" @@ -38,7 +39,7 @@ import ( type GCENodeServer struct { Driver *GCEDriver Mounter *mount.SafeFormatAndMount - DeviceUtils mountmanager.DeviceUtils + DeviceUtils deviceutils.DeviceUtils VolumeStatter mountmanager.Statter MetadataService metadataservice.MetadataService @@ -343,10 +344,9 @@ func (ns *GCENodeServer) NodeStageVolume(ctx context.Context, req *csi.NodeStage // Part 4: Resize filesystem. // https://github.com/kubernetes/kubernetes/issues/94929 resizer := resizefs.NewResizeFs(ns.Mounter) - _, err = resizer.Resize(devicePath, stagingTargetPath) + _, err = ns.DeviceUtils.Resize(resizer, devicePath, stagingTargetPath) if err != nil { - return nil, status.Error(codes.Internal, fmt.Sprintf("error when resizing volume %s: %v", volumeID, err)) - + return nil, status.Error(codes.Internal, fmt.Sprintf("error when resizing volume %s from device '%s' at path '%s': %v", volumeID, devicePath, stagingTargetPath, err)) } 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 resizer := resizefs.NewResizeFs(ns.Mounter) _, err = resizer.Resize(devicePath, volumePath) if err != nil { - return nil, status.Error(codes.Internal, fmt.Sprintf("error when resizing volume %s: %v", volKey.String(), err)) + 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)) } diff --git a/pkg/gce-pd-csi-driver/node_test.go b/pkg/gce-pd-csi-driver/node_test.go index 14f686677..3125c0309 100644 --- a/pkg/gce-pd-csi-driver/node_test.go +++ b/pkg/gce-pd-csi-driver/node_test.go @@ -19,16 +19,18 @@ import ( "context" "fmt" "io/ioutil" - "k8s.io/utils/exec" - testingexec "k8s.io/utils/exec/testing" "os" "path/filepath" "testing" + "k8s.io/utils/exec" + testingexec "k8s.io/utils/exec/testing" + csi "github.com/container-storage-interface/spec/lib/go/csi" "google.golang.org/grpc/codes" "google.golang.org/grpc/status" "k8s.io/mount-utils" + "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/deviceutils" metadataservice "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-cloud-provider/metadata" mountmanager "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/mount-manager" ) @@ -38,14 +40,14 @@ const defaultTargetPath = "/mnt/test" const defaultStagingPath = "/staging" func getTestGCEDriver(t *testing.T) *GCEDriver { - return getCustomTestGCEDriver(t, mountmanager.NewFakeSafeMounter(), mountmanager.NewFakeDeviceUtils(), metadataservice.NewFakeService()) + return getCustomTestGCEDriver(t, mountmanager.NewFakeSafeMounter(), deviceutils.NewFakeDeviceUtils(), metadataservice.NewFakeService()) } func getTestGCEDriverWithCustomMounter(t *testing.T, mounter *mount.SafeFormatAndMount) *GCEDriver { - return getCustomTestGCEDriver(t, mounter, mountmanager.NewFakeDeviceUtils(), metadataservice.NewFakeService()) + return getCustomTestGCEDriver(t, mounter, deviceutils.NewFakeDeviceUtils(), metadataservice.NewFakeService()) } -func getCustomTestGCEDriver(t *testing.T, mounter *mount.SafeFormatAndMount, deviceUtils mountmanager.DeviceUtils, metaService metadataservice.MetadataService) *GCEDriver { +func getCustomTestGCEDriver(t *testing.T, mounter *mount.SafeFormatAndMount, deviceUtils deviceutils.DeviceUtils, metaService metadataservice.MetadataService) *GCEDriver { gceDriver := GetGCEDriver() nodeServer := NewNodeServer(gceDriver, mounter, deviceUtils, metaService, mountmanager.NewFakeStatter(mounter)) err := gceDriver.SetupGCEDriver(driver, "test-vendor", nil, nil, nil, nodeServer) @@ -58,7 +60,7 @@ func getCustomTestGCEDriver(t *testing.T, mounter *mount.SafeFormatAndMount, dev func getTestBlockingGCEDriver(t *testing.T, readyToExecute chan chan struct{}) *GCEDriver { gceDriver := GetGCEDriver() mounter := mountmanager.NewFakeSafeBlockingMounter(readyToExecute) - nodeServer := NewNodeServer(gceDriver, mounter, mountmanager.NewFakeDeviceUtils(), metadataservice.NewFakeService(), mountmanager.NewFakeStatter(mounter)) + nodeServer := NewNodeServer(gceDriver, mounter, deviceutils.NewFakeDeviceUtils(), metadataservice.NewFakeService(), mountmanager.NewFakeStatter(mounter)) err := gceDriver.SetupGCEDriver(driver, "test-vendor", nil, nil, nil, nodeServer) if err != nil { t.Fatalf("Failed to setup GCE Driver: %v", err) diff --git a/test/e2e/tests/single_zone_e2e_test.go b/test/e2e/tests/single_zone_e2e_test.go index 9b2a03366..802cf488b 100644 --- a/test/e2e/tests/single_zone_e2e_test.go +++ b/test/e2e/tests/single_zone_e2e_test.go @@ -26,8 +26,8 @@ import ( "k8s.io/apimachinery/pkg/util/wait" "k8s.io/klog/v2" "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/common" + "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/deviceutils" gce "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-cloud-provider/compute" - mountmanager "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/mount-manager" testutils "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/test/e2e/utils" "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/test/remote" @@ -122,7 +122,7 @@ var _ = Describe("GCE PD CSI Driver", func() { }() // MESS UP THE symlink - devicePaths := mountmanager.NewDeviceUtils().GetDiskByIdPaths(volName, "") + devicePaths := deviceutils.NewDeviceUtils().GetDiskByIdPaths(volName, "") for _, devicePath := range devicePaths { err = testutils.RmAll(instance, devicePath) Expect(err).To(BeNil(), "failed to remove /dev/by-id folder") @@ -194,7 +194,7 @@ var _ = Describe("GCE PD CSI Driver", func() { }() // DELETE THE symlink - devicePaths := mountmanager.NewDeviceUtils().GetDiskByIdPaths(volName, "") + devicePaths := deviceutils.NewDeviceUtils().GetDiskByIdPaths(volName, "") for _, devicePath := range devicePaths { err = testutils.RmAll(instance, devicePath) Expect(err).To(BeNil(), "failed to remove /dev/by-id folder") diff --git a/test/sanity/sanity_test.go b/test/sanity/sanity_test.go index d3ac9b36d..20c2e816f 100644 --- a/test/sanity/sanity_test.go +++ b/test/sanity/sanity_test.go @@ -28,6 +28,7 @@ import ( sanity "github.com/kubernetes-csi/csi-test/v4/pkg/sanity" compute "google.golang.org/api/compute/v1" common "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/common" + "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/deviceutils" gce "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-cloud-provider/compute" metadataservice "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-cloud-provider/metadata" driver "sigs.k8s.io/gcp-compute-persistent-disk-csi-driver/pkg/gce-pd-csi-driver" @@ -60,7 +61,7 @@ func TestSanity(t *testing.T) { } mounter := mountmanager.NewFakeSafeMounter() - deviceUtils := mountmanager.NewFakeDeviceUtils() + deviceUtils := deviceutils.NewFakeDeviceUtils() //Initialize GCE Driver identityServer := driver.NewIdentityServer(gceDriver)