diff --git a/cluster/saltbase/salt/kubelet/init.sls b/cluster/saltbase/salt/kubelet/init.sls index ca48be9cd12..a1ffd09f4ba 100644 --- a/cluster/saltbase/salt/kubelet/init.sls +++ b/cluster/saltbase/salt/kubelet/init.sls @@ -93,7 +93,7 @@ kubelet: - system: True - gid_from_name: True - shell: /sbin/nologin - - home: /var/lib/kubelet + - home: /var/kubelet - groups: - docker - require: diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index 040efc7eea5..aa3351e3935 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -487,7 +487,13 @@ func (kl *Kubelet) determineActiveVolumes() map[string]volume.Cleaner { name := result["volumeName"] podID := result["podID"] identifier := path.Join(podID, name) - activeVolumes[identifier], err = volume.CreateVolumeCleaner(kind, fullPath) + cleaner, err := volume.CreateVolumeCleaner(kind, fullPath) + if err != nil { + glog.Errorf("Could not create cleaner for volume %v.", identifier) + } + if cleaner != nil { + activeVolumes[identifier] = cleaner + } } return nil }) diff --git a/pkg/volume/volume.go b/pkg/volume/volume.go index 506f7463416..4828212f7a7 100644 --- a/pkg/volume/volume.go +++ b/pkg/volume/volume.go @@ -31,7 +31,6 @@ var ErrUnsupportedVolumeType = errors.New("unsupported volume type") type Interface interface { // GetPath returns the directory path the volume is mounted to. GetPath() string - } // The Builder interface provides the method to set up/mount the volume. @@ -39,7 +38,6 @@ type Builder interface { Interface // SetUp prepares and mounts/unpacks the volume to a directory path. SetUp() error - } // The Cleaner interface provides the method to cleanup/unmount the volumes. @@ -90,7 +88,7 @@ func (emptyDir *EmptyDirectoryBuilder) GetPath() string { return path.Join(emptyDir.RootDir, emptyDir.PodID, "volumes", "empty", emptyDir.Name) } -// EmptyDirectoryCleaners only need to know what path the are cleaning +// EmptyDirectoryCleaners only need to know what path they are cleaning type EmptyDirectoryCleaner struct { Path string } @@ -110,10 +108,6 @@ func CreateEmptyDirectoryBuilder(volume *api.Volume, podID string, rootDir strin return &EmptyDirectoryBuilder{volume.Name, podID, rootDir} } -func CreateEmptyDirectoryCleaner(path string) *EmptyDirectoryCleaner { - return &EmptyDirectoryCleaner{path} -} - // CreateVolumeBuilder returns a Builder capable of mounting a volume described by an // *api.Volume, or an error. func CreateVolumeBuilder(volume *api.Volume, podID string, rootDir string) (Builder, error) { @@ -136,10 +130,11 @@ func CreateVolumeBuilder(volume *api.Volume, podID string, rootDir string) (Buil return vol, nil } +// CreateVolumeCleaner returns a Cleaner capable of tearing down a volume. func CreateVolumeCleaner(kind string, path string) (Cleaner, error) { switch kind { case "empty": - return CreateEmptyDirectoryCleaner(path), nil + return &EmptyDirectoryCleaner{path}, nil default: return nil, ErrUnsupportedVolumeType } diff --git a/pkg/volume/volume_test.go b/pkg/volume/volume_test.go index 482aa90dc2d..c62336a413b 100644 --- a/pkg/volume/volume_test.go +++ b/pkg/volume/volume_test.go @@ -46,7 +46,7 @@ func TestCreateVolumeBuilders(t *testing.T) { }, "/dir/path", "my-id", - "host", + "", }, { api.Volume{ @@ -59,7 +59,7 @@ func TestCreateVolumeBuilders(t *testing.T) { "my-id", "empty", }, - {api.Volume{}, "", ""}, + {api.Volume{}, "", "", ""}, { api.Volume{ Name: "empty-dir", @@ -72,9 +72,9 @@ func TestCreateVolumeBuilders(t *testing.T) { } for _, createVolumesTest := range createVolumesTests { tt := createVolumesTest - v, err := CreateVolumeBuilder(&tt.volume, tt.podID, tempDir) + vb, err := CreateVolumeBuilder(&tt.volume, tt.podID, tempDir) if tt.volume.Source == nil { - if v != nil { + if vb != nil { t.Errorf("Expected volume to be nil") } continue @@ -88,47 +88,24 @@ func TestCreateVolumeBuilders(t *testing.T) { if err != nil { t.Errorf("Unexpected error: %v", err) } - err = v.SetUp() + err = vb.SetUp() if err != nil { t.Errorf("Unexpected error: %v", err) } - path := v.GetPath() + path := vb.GetPath() if path != tt.path { t.Errorf("Unexpected bind path. Expected %v, got %v", tt.path, path) } - v, err = CreateVolumeCleaner(tt.kind) + vc, err := CreateVolumeCleaner(tt.kind, vb.GetPath()) if tt.kind == "" { if err != ErrUnsupportedVolumeType { t.Errorf("Unexpected error: %v", err) } + continue } - err = v.TearDown() + err = vc.TearDown() if err != nil { t.Errorf("Unexpected error: %v", err) } } } -func TestEmptySetUpAndTearDown(t *testing.T) { - volumes := []api.Volume{ - { - Name: "empty-dir", - Source: &api.VolumeSource{ - EmptyDirectory: &api.EmptyDirectory{}, - }, - }, - } - expectedPath := "/tmp/kubelet/fakeID/volumes/empty/empty-dir" - for _, volume := range volumes { - volumeBuilder, _ := CreateVolumeBuilder(&volume, "fakeID", "/tmp/kubelet") - volumeBuilder.SetUp() - if _, err := os.Stat(expectedPath); os.IsNotExist(err) { - t.Errorf("Mount directory %v does not exist after SetUp", expectedPath) - } - volumeCleaner, _ := CreateVolumeCleaner("empty", expectedPath) - volumeCleaner.TearDown() - if _, err := os.Stat(expectedPath); !os.IsNotExist(err) { - t.Errorf("Mount directory %v still exists after TearDown", expectedPath) - } - } - os.RemoveAll("/tmp/kubelet") -}