Skip to content

Commit

Permalink
Merge pull request kubernetes#2667 from thockin/klet-dirs
Browse files Browse the repository at this point in the history
Kubelet directory-name builder funcs
  • Loading branch information
lavalamp committed Dec 8, 2014
2 parents c5667e1 + acc6b95 commit 4845e52
Show file tree
Hide file tree
Showing 2 changed files with 79 additions and 5 deletions.
38 changes: 37 additions & 1 deletion pkg/kubelet/kubelet.go
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,42 @@ type Kubelet struct {
maxContainerCount int
}

// GetRootDir returns the full path to the directory under which kubelet can
// store data. These functions are useful to pass interfaces to other modules
// that may need to know where to write data without getting a whole kubelet
// instance.
func (kl *Kubelet) GetRootDir() string {
return kl.rootDirectory
}

// GetPodsDir returns the full path to the directory under which pod
// directories are created.
// TODO(thockin): For now, this is the same as the root because that is assumed
// in other code. Will fix.
func (kl *Kubelet) GetPodsDir() string {
return kl.GetRootDir()
}

// GetPodDir returns the full path to the per-pod data directory for the
// specified pod. This directory may not exist if the pod does not exist.
func (kl *Kubelet) GetPodDir(podUID string) string {
return path.Join(kl.GetRootDir(), podUID)
}

// GetPodVolumesDir returns the full path to the per-pod data directory under
// which volumes are created for the specified pod. This directory may not
// exist if the pod does not exist.
func (kl *Kubelet) GetPodVolumesDir(podUID string) string {
return path.Join(kl.GetPodDir(podUID), "volumes")
}

// GetPodContainerDir returns the full path to the per-pod data directory under
// which container data is held for the specified pod. This directory may not
// exist if the pod or container does not exist.
func (kl *Kubelet) GetPodContainerDir(podUID, ctrName string) string {
return path.Join(kl.GetPodDir(podUID), ctrName)
}

type ByCreated []*docker.Container

func (a ByCreated) Len() int { return len(a) }
Expand Down Expand Up @@ -477,7 +513,7 @@ func (kl *Kubelet) runContainer(pod *api.BoundPod, container *api.Container, pod
}

if len(container.TerminationMessagePath) != 0 {
p := path.Join(kl.rootDirectory, pod.Name, container.Name)
p := kl.GetPodContainerDir(pod.UID, container.Name)
if err := os.MkdirAll(p, 0750); err != nil {
glog.Errorf("Error on creating %s: %v", p, err)
} else {
Expand Down
46 changes: 42 additions & 4 deletions pkg/kubelet/kubelet_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ package kubelet
import (
"fmt"
"net/http"
"os"
"path"
"reflect"
"regexp"
"strconv"
Expand Down Expand Up @@ -78,6 +80,40 @@ func verifyBoolean(t *testing.T, expected, value bool) {
}
}

func TestKubeletDirs(t *testing.T) {
kubelet, _, _ := newTestKubelet(t)
root := kubelet.rootDirectory
if err := os.MkdirAll(root, 0750); err != nil {
t.Fatalf("can't mkdir(%q): %s", root, err)
}

var exp, got string

got = kubelet.GetPodsDir()
exp = root
if got != exp {
t.Errorf("expected %q', got %q", exp, got)
}

got = kubelet.GetPodDir("abc123")
exp = path.Join(root, "abc123")
if got != exp {
t.Errorf("expected %q', got %q", exp, got)
}

got = kubelet.GetPodVolumesDir("abc123")
exp = path.Join(root, "abc123/volumes")
if got != exp {
t.Errorf("expected %q', got %q", exp, got)
}

got = kubelet.GetPodContainerDir("abc123", "def456")
exp = path.Join(root, "abc123/def456")
if got != exp {
t.Errorf("expected %q', got %q", exp, got)
}
}

func TestKillContainerWithError(t *testing.T) {
fakeDocker := &dockertools.FakeDockerClient{
Err: fmt.Errorf("sample error"),
Expand Down Expand Up @@ -196,6 +232,7 @@ func TestSyncPodsWithTerminationLog(t *testing.T) {
err := kubelet.SyncPods([]api.BoundPod{
{
ObjectMeta: api.ObjectMeta{
UID: "0123-45-67-89ab-cdef",
Name: "foo",
Namespace: "new",
Annotations: map[string]string{ConfigSourceAnnotationKey: "test"},
Expand All @@ -216,10 +253,11 @@ func TestSyncPodsWithTerminationLog(t *testing.T) {

fakeDocker.Lock()
parts := strings.Split(fakeDocker.Container.HostConfig.Binds[0], ":")
if fakeDocker.Container.HostConfig == nil ||
!matchString(t, "/tmp/kubelet/foo/bar/k8s_bar\\.[a-f0-9]", parts[0]) ||
parts[1] != "/dev/somepath" {
t.Errorf("Unexpected containers created %v", fakeDocker.Container)
if !matchString(t, kubelet.GetPodContainerDir("0123-45-67-89ab-cdef", "bar")+"/k8s_bar\\.[a-f0-9]", parts[0]) {
t.Errorf("Unexpected host path: %s", parts[0])
}
if parts[1] != "/dev/somepath" {
t.Errorf("Unexpected container path: %s", parts[1])
}
fakeDocker.Unlock()
}
Expand Down

0 comments on commit 4845e52

Please sign in to comment.