diff --git a/device.go b/device.go index d5e8c53738..98a2c27f88 100644 --- a/device.go +++ b/device.go @@ -31,6 +31,7 @@ const ( driverSCSIType = "scsi" driverNvdimmType = "nvdimm" driverEphemeralType = "ephemeral" + driverLocalType = "local" ) const ( diff --git a/mount.go b/mount.go index 7b74b1f258..01ae3bc1d4 100644 --- a/mount.go +++ b/mount.go @@ -198,6 +198,7 @@ var storageHandlerList = map[string]storageHandler{ driverMmioBlkType: virtioMmioBlkStorageHandler, driverSCSIType: virtioSCSIStorageHandler, driverEphemeralType: ephemeralStorageHandler, + driverLocalType: localStorageHandler, } func ephemeralStorageHandler(storage pb.Storage, s *sandbox) (string, error) { @@ -215,6 +216,16 @@ func ephemeralStorageHandler(storage pb.Storage, s *sandbox) (string, error) { return "", nil } +func localStorageHandler(storage pb.Storage, s *sandbox) (string, error) { + s.Lock() + defer s.Unlock() + newStorage := s.setSandboxStorage(storage.MountPoint) + if newStorage { + return "", os.MkdirAll(storage.MountPoint, os.ModePerm) + } + return "", nil +} + // virtio9pStorageHandler handles the storage for 9p driver. func virtio9pStorageHandler(storage pb.Storage, s *sandbox) (string, error) { return commonStorageHandler(storage) diff --git a/mount_test.go b/mount_test.go index db66a3bece..84231c1843 100644 --- a/mount_test.go +++ b/mount_test.go @@ -48,6 +48,21 @@ func TestEphemeralStorageHandlerSuccessful(t *testing.T) { assert.Nil(t, err, "ephemeralStorageHandler() failed: %v", err) } +func TestLocalStorageHandlerSuccessful(t *testing.T) { + skipUnlessRoot(t) + + storage, err := createSafeAndFakeStorage() + if err != nil { + t.Fatal(err) + } + defer syscall.Unmount(storage.MountPoint, 0) + defer os.RemoveAll(storage.MountPoint) + + sbs := make(map[string]*sandboxStorage) + _, err = localStorageHandler(storage, &sandbox{storages: sbs}) + assert.Nil(t, err, "localStorageHandler() failed: %v", err) +} + func TestVirtio9pStorageHandlerSuccessful(t *testing.T) { skipUnlessRoot(t)