diff --git a/pkg/volume/hostpath/host_path.go b/pkg/volume/hostpath/host_path.go index 2868b90b704..a0246a1fd49 100644 --- a/pkg/volume/hostpath/host_path.go +++ b/pkg/volume/hostpath/host_path.go @@ -188,7 +188,7 @@ func newDeleter(spec *volume.Spec, host volume.VolumeHost) (volume.Deleter, erro } func newProvisioner(options volume.VolumeOptions, host volume.VolumeHost, plugin *hostPathPlugin) (volume.Provisioner, error) { - return &hostPathProvisioner{options: options, host: host, plugin: plugin}, nil + return &hostPathProvisioner{options: options, host: host, plugin: plugin, basePath: "hostpath_pv"}, nil } // HostPath volumes represent a bare host file or directory mount. @@ -268,19 +268,20 @@ func (c *hostPathUnmounter) TearDownAt(dir string) error { // hostPathProvisioner implements a Provisioner for the HostPath plugin // This implementation is meant for testing only and only works in a single node cluster. type hostPathProvisioner struct { - host volume.VolumeHost - options volume.VolumeOptions - plugin *hostPathPlugin + host volume.VolumeHost + options volume.VolumeOptions + plugin *hostPathPlugin + basePath string } -// Create for hostPath simply creates a local /tmp/hostpath_pv/%s directory as a new PersistentVolume. +// Create for hostPath simply creates a local /tmp/%/%s directory as a new PersistentVolume, default /tmp/hostpath_pv/%s. // This Provisioner is meant for development and testing only and WILL NOT WORK in a multi-node cluster. func (r *hostPathProvisioner) Provision(selectedNode *v1.Node, allowedTopologies []v1.TopologySelectorTerm) (*v1.PersistentVolume, error) { if util.CheckPersistentVolumeClaimModeBlock(r.options.PVC) { return nil, fmt.Errorf("%s does not support block volume provisioning", r.plugin.GetPluginName()) } - fullpath := fmt.Sprintf("/tmp/hostpath_pv/%s", uuid.NewUUID()) + fullpath := fmt.Sprintf("/tmp/%s/%s", r.basePath, uuid.NewUUID()) capacity := r.options.PVC.Spec.Resources.Requests[v1.ResourceName(v1.ResourceStorage)] pv := &v1.PersistentVolume{ diff --git a/pkg/volume/hostpath/host_path_test.go b/pkg/volume/hostpath/host_path_test.go index aca0ecc33f1..b967d8058e7 100644 --- a/pkg/volume/hostpath/host_path_test.go +++ b/pkg/volume/hostpath/host_path_test.go @@ -19,7 +19,6 @@ package hostpath import ( "fmt" "os" - "path/filepath" "testing" "k8s.io/api/core/v1" @@ -154,15 +153,15 @@ func TestDeleterTempDir(t *testing.T) { } func TestProvisioner(t *testing.T) { - tempPath := fmt.Sprintf("/tmp/hostpath.%s", uuid.NewUUID()) plugMgr := volume.VolumePluginMgr{} plugMgr.InitPlugins(ProbeVolumePlugins(volume.VolumeConfig{ProvisioningEnabled: true}), nil, volumetest.NewFakeVolumeHost("/tmp/fake", nil, nil)) - spec := &volume.Spec{PersistentVolume: &v1.PersistentVolume{Spec: v1.PersistentVolumeSpec{PersistentVolumeSource: v1.PersistentVolumeSource{HostPath: &v1.HostPathVolumeSource{Path: tempPath}}}}} + spec := &volume.Spec{PersistentVolume: &v1.PersistentVolume{Spec: v1.PersistentVolumeSpec{ + PersistentVolumeSource: v1.PersistentVolumeSource{HostPath: &v1.HostPathVolumeSource{Path: fmt.Sprintf("/tmp/hostpath.%s", uuid.NewUUID())}}}}} plug, err := plugMgr.FindCreatablePluginBySpec(spec) if err != nil { - t.Errorf("Can't find the plugin by name") + t.Fatalf("Can't find the plugin by name") } options := volume.VolumeOptions{ PVC: volumetest.CreateTestPVC("1Gi", []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce}), @@ -170,9 +169,16 @@ func TestProvisioner(t *testing.T) { } creator, err := plug.NewProvisioner(options) if err != nil { - t.Errorf("Failed to make a new Provisioner: %v", err) + t.Fatalf("Failed to make a new Provisioner: %v", err) } - pv, err := creator.Provision(nil, nil) + + hostPathCreator, ok := creator.(*hostPathProvisioner) + if !ok { + t.Fatal("Not a hostPathProvisioner") + } + hostPathCreator.basePath = fmt.Sprintf("%s.%s", "hostPath_pv", uuid.NewUUID()) + + pv, err := hostPathCreator.Provision(nil, nil) if err != nil { t.Errorf("Unexpected error creating volume: %v", err) } @@ -191,8 +197,7 @@ func TestProvisioner(t *testing.T) { t.Errorf("Expected reclaim policy %+v but got %+v", v1.PersistentVolumeReclaimDelete, pv.Spec.PersistentVolumeReclaimPolicy) } - pvDir := filepath.Dir(pv.Spec.HostPath.Path) - os.RemoveAll(pvDir) + os.RemoveAll(hostPathCreator.basePath) }