Skip to content

Commit 715e202

Browse files
committed
GetClosestVolumeIDFromTargetPath server implementation
1 parent 3c5fc2c commit 715e202

File tree

8 files changed

+85
-3
lines changed

8 files changed

+85
-3
lines changed

integrationtests/volume_test.go

+4
Original file line numberDiff line numberDiff line change
@@ -172,4 +172,8 @@ func TestVolumeAPIs(t *testing.T) {
172172
skipTestOnCondition(t, isRunningOnGhActions())
173173
v1VolumeTests(t)
174174
})
175+
t.Run("v2alpha1Tests", func(t *testing.T) {
176+
skipTestOnCondition(t, isRunningOnGhActions())
177+
v2alpha1VolumeTests(t)
178+
})
175179
}

pkg/os/volume/api.go

+6-1
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ type VolumeAPI struct{}
4545
// verifies that the API is implemented
4646
var _ API = &VolumeAPI{}
4747

48+
var (
49+
// VolumeRegexp matches a Volume
50+
VolumeRegexp = regexp.MustCompile(`^Volume\{[\w-]*\}`)
51+
)
52+
4853
// New - Construct a new Volume API Implementation.
4954
func New() VolumeAPI {
5055
return VolumeAPI{}
@@ -304,7 +309,7 @@ func findClosestVolume(path string) (string, error) {
304309
return "", err
305310
}
306311
// if it has the form Volume{volumeid}\ then it's a volume
307-
if strings.HasPrefix(target, "Volume") {
312+
if VolumeRegexp.Match([]byte(target)) {
308313
// symlinks that are pointing to Volumes don't have this prefix
309314
target = "\\\\?\\" + target
310315
return target, nil

pkg/server/volume/api_group_generated.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/server/volume/impl/types.go

+8
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,14 @@ type GetVolumeIDFromTargetPathResponse struct {
8585
VolumeId string
8686
}
8787

88+
type GetClosestVolumeIDFromTargetPathRequest struct {
89+
TargetPath string
90+
}
91+
92+
type GetClosestVolumeIDFromTargetPathResponse struct {
93+
VolumeId string
94+
}
95+
8896
// These structs are used in APIs less than v1beta3 and rerouted internally
8997

9098
type DismountVolumeRequest struct {

pkg/server/volume/impl/v1/server_generated.go

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/server/volume/impl/v2alpha1/conversion_generated.go

+40
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/server/volume/server.go

+21
Original file line numberDiff line numberDiff line change
@@ -290,3 +290,24 @@ func (s *Server) GetVolumeIDFromTargetPath(context context.Context, request *int
290290

291291
return response, nil
292292
}
293+
294+
func (s *Server) GetClosestVolumeIDFromTargetPath(context context.Context, request *internal.GetClosestVolumeIDFromTargetPathRequest, version apiversion.Version) (*internal.GetClosestVolumeIDFromTargetPathResponse, error) {
295+
klog.V(2).Infof("GetClosestVolumeIDFromTargetPath: Request: %+v", request)
296+
297+
targetPath := request.TargetPath
298+
if targetPath == "" {
299+
return nil, fmt.Errorf("target path is empty")
300+
}
301+
302+
volume, err := s.hostAPI.GetClosestVolumeIDFromTargetPath(targetPath)
303+
if err != nil {
304+
klog.Errorf("failed GetClosestVolumeIDFromTargetPath: %v", err)
305+
return nil, err
306+
}
307+
308+
response := &internal.GetClosestVolumeIDFromTargetPathResponse{
309+
VolumeId: volume,
310+
}
311+
312+
return response, nil
313+
}

pkg/server/volume/server_test.go

+4
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@ func (volumeAPI *fakeVolumeAPI) GetVolumeIDFromTargetPath(mount string) (string,
5858
return "id", nil
5959
}
6060

61+
func (volumeAPI *fakeVolumeAPI) GetClosestVolumeIDFromTargetPath(mount string) (string, error) {
62+
return "id", nil
63+
}
64+
6165
func (volumeAPI *fakeVolumeAPI) GetVolumeStats(volumeID string) (int64, int64, error) {
6266
return -1, -1, nil
6367
}

0 commit comments

Comments
 (0)