mirror of https://github.com/k3s-io/k3s
commit
4845e524af
|
@ -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) }
|
||||
|
@ -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 {
|
||||
|
|
|
@ -19,6 +19,8 @@ package kubelet
|
|||
import (
|
||||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
"path"
|
||||
"reflect"
|
||||
"regexp"
|
||||
"strconv"
|
||||
|
@ -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"),
|
||||
|
@ -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"},
|
||||
|
@ -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()
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue