mirror of https://github.com/k3s-io/k3s
1. fix rbd device works at block mode not get mapped to container when docker restart
2. Add unit test case for rbdpull/8/head
parent
15cd355281
commit
ca276336e1
|
@ -410,10 +410,10 @@ func (plugin *rbdPlugin) ConstructBlockVolumeSpec(podUID types.UID, volumeName,
|
||||||
if len(globalMapPath) == 1 {
|
if len(globalMapPath) == 1 {
|
||||||
return nil, fmt.Errorf("failed to retrieve volume plugin information from globalMapPathUUID: %v", globalMapPathUUID)
|
return nil, fmt.Errorf("failed to retrieve volume plugin information from globalMapPathUUID: %v", globalMapPathUUID)
|
||||||
}
|
}
|
||||||
return getVolumeSpecFromGlobalMapPath(globalMapPath)
|
return getVolumeSpecFromGlobalMapPath(globalMapPath, volumeName)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getVolumeSpecFromGlobalMapPath(globalMapPath string) (*volume.Spec, error) {
|
func getVolumeSpecFromGlobalMapPath(globalMapPath, volumeName string) (*volume.Spec, error) {
|
||||||
// Retrieve volume spec information from globalMapPath
|
// Retrieve volume spec information from globalMapPath
|
||||||
// globalMapPath example:
|
// globalMapPath example:
|
||||||
// plugins/kubernetes.io/{PluginName}/{DefaultKubeletVolumeDevicesDirName}/{volumePluginDependentPath}
|
// plugins/kubernetes.io/{PluginName}/{DefaultKubeletVolumeDevicesDirName}/{volumePluginDependentPath}
|
||||||
|
@ -423,6 +423,9 @@ func getVolumeSpecFromGlobalMapPath(globalMapPath string) (*volume.Spec, error)
|
||||||
}
|
}
|
||||||
block := v1.PersistentVolumeBlock
|
block := v1.PersistentVolumeBlock
|
||||||
rbdVolume := &v1.PersistentVolume{
|
rbdVolume := &v1.PersistentVolume{
|
||||||
|
ObjectMeta: metav1.ObjectMeta{
|
||||||
|
Name: volumeName,
|
||||||
|
},
|
||||||
Spec: v1.PersistentVolumeSpec{
|
Spec: v1.PersistentVolumeSpec{
|
||||||
PersistentVolumeSource: v1.PersistentVolumeSource{
|
PersistentVolumeSource: v1.PersistentVolumeSource{
|
||||||
RBD: &v1.RBDPersistentVolumeSource{
|
RBD: &v1.RBDPersistentVolumeSource{
|
||||||
|
|
|
@ -39,6 +39,60 @@ import (
|
||||||
volumetest "k8s.io/kubernetes/pkg/volume/testing"
|
volumetest "k8s.io/kubernetes/pkg/volume/testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
testVolName = "vol-1234"
|
||||||
|
testRBDImage = "volume-a4b47414-a675-47dc-a9cc-c223f13439b0"
|
||||||
|
testRBDPool = "volumes"
|
||||||
|
testGlobalPath = "plugins/kubernetes.io/rbd/volumeDevices/volumes-image-volume-a4b47414-a675-47dc-a9cc-c223f13439b0"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestGetVolumeSpecFromGlobalMapPath(t *testing.T) {
|
||||||
|
// make our test path for fake GlobalMapPath
|
||||||
|
// /tmp symbolized our pluginDir
|
||||||
|
// /tmp/testGlobalPathXXXXX/plugins/kubernetes.io/rbd/volumeDevices/pdVol1
|
||||||
|
tmpVDir, err := utiltesting.MkTmpdir("rbdBlockTest")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("can't make a temp dir: %v", err)
|
||||||
|
}
|
||||||
|
//deferred clean up
|
||||||
|
defer os.RemoveAll(tmpVDir)
|
||||||
|
|
||||||
|
expectedGlobalPath := filepath.Join(tmpVDir, testGlobalPath)
|
||||||
|
|
||||||
|
//Bad Path
|
||||||
|
badspec, err := getVolumeSpecFromGlobalMapPath("", testVolName)
|
||||||
|
if badspec != nil || err == nil {
|
||||||
|
t.Fatalf("Expected not to get spec from GlobalMapPath but did")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Good Path
|
||||||
|
spec, err := getVolumeSpecFromGlobalMapPath(expectedGlobalPath, testVolName)
|
||||||
|
if spec == nil || err != nil {
|
||||||
|
t.Fatalf("Failed to get spec from GlobalMapPath: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if spec.PersistentVolume.Name != testVolName {
|
||||||
|
t.Errorf("Invalid spec name for GlobalMapPath spec: %s", spec.PersistentVolume.Name)
|
||||||
|
}
|
||||||
|
|
||||||
|
if spec.PersistentVolume.Spec.RBD.RBDPool != testRBDPool {
|
||||||
|
t.Errorf("Invalid RBDPool from GlobalMapPath spec: %s", spec.PersistentVolume.Spec.RBD.RBDPool)
|
||||||
|
}
|
||||||
|
|
||||||
|
if spec.PersistentVolume.Spec.RBD.RBDImage != testRBDImage {
|
||||||
|
t.Errorf("Invalid RBDImage from GlobalMapPath spec: %s", spec.PersistentVolume.Spec.RBD.RBDImage)
|
||||||
|
}
|
||||||
|
|
||||||
|
block := v1.PersistentVolumeBlock
|
||||||
|
specMode := spec.PersistentVolume.Spec.VolumeMode
|
||||||
|
if &specMode == nil {
|
||||||
|
t.Errorf("Invalid volumeMode from GlobalMapPath spec: %v - %v", &specMode, block)
|
||||||
|
}
|
||||||
|
if *specMode != block {
|
||||||
|
t.Errorf("Invalid volumeMode from GlobalMapPath spec: %v - %v", *specMode, block)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func TestCanSupport(t *testing.T) {
|
func TestCanSupport(t *testing.T) {
|
||||||
tmpDir, err := utiltesting.MkTmpdir("rbd_test")
|
tmpDir, err := utiltesting.MkTmpdir("rbd_test")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in New Issue