Merge pull request #1873 from derekwaynecarr/kubelet_handleRun_namespace_aware

Make kubelet handleRun work for pods in non-default namespace
This commit is contained in:
Dawn Chen 2014-10-17 15:23:40 -07:00
commit 7611c839e9
2 changed files with 17 additions and 14 deletions

View File

@ -301,14 +301,16 @@ func (s *Server) handleRun(w http.ResponseWriter, req *http.Request) {
return return
} }
parts := strings.Split(u.Path, "/") parts := strings.Split(u.Path, "/")
var podID, uuid, container string var podNamespace, podID, uuid, container string
if len(parts) == 4 { if len(parts) == 5 {
podID = parts[2] podNamespace = parts[2]
container = parts[3] podID = parts[3]
} else if len(parts) == 5 {
podID = parts[2]
uuid = parts[3]
container = parts[4] container = parts[4]
} else if len(parts) == 6 {
podNamespace = parts[2]
podID = parts[3]
uuid = parts[4]
container = parts[5]
} else { } else {
http.Error(w, "Unexpected path for command running", http.StatusBadRequest) http.Error(w, "Unexpected path for command running", http.StatusBadRequest)
return return
@ -316,8 +318,7 @@ func (s *Server) handleRun(w http.ResponseWriter, req *http.Request) {
podFullName := GetPodFullName(&api.BoundPod{ podFullName := GetPodFullName(&api.BoundPod{
TypeMeta: api.TypeMeta{ TypeMeta: api.TypeMeta{
ID: podID, ID: podID,
// TODO: I am broken Namespace: podNamespace,
Namespace: api.NamespaceDefault,
Annotations: map[string]string{ConfigSourceAnnotationKey: "etcd"}, Annotations: map[string]string{ConfigSourceAnnotationKey: "etcd"},
}, },
}) })

View File

@ -386,8 +386,9 @@ func TestServeLogs(t *testing.T) {
func TestServeRunInContainer(t *testing.T) { func TestServeRunInContainer(t *testing.T) {
fw := newServerTest() fw := newServerTest()
output := "foo bar" output := "foo bar"
podNamespace := "other"
podName := "foo" podName := "foo"
expectedPodName := podName + ".default.etcd" expectedPodName := podName + "." + podNamespace + ".etcd"
expectedContainerName := "baz" expectedContainerName := "baz"
expectedCommand := "ls -a" expectedCommand := "ls -a"
fw.fakeKubelet.runFunc = func(podFullName, uuid, containerName string, cmd []string) ([]byte, error) { fw.fakeKubelet.runFunc = func(podFullName, uuid, containerName string, cmd []string) ([]byte, error) {
@ -404,7 +405,7 @@ func TestServeRunInContainer(t *testing.T) {
return []byte(output), nil return []byte(output), nil
} }
resp, err := http.Get(fw.testHTTPServer.URL + "/run/" + podName + "/" + expectedContainerName + "?cmd=ls%20-a") resp, err := http.Get(fw.testHTTPServer.URL + "/run/" + podNamespace + "/" + podName + "/" + expectedContainerName + "?cmd=ls%20-a")
if err != nil { if err != nil {
t.Fatalf("Got error GETing: %v", err) t.Fatalf("Got error GETing: %v", err)
@ -425,8 +426,9 @@ func TestServeRunInContainer(t *testing.T) {
func TestServeRunInContainerWithUUID(t *testing.T) { func TestServeRunInContainerWithUUID(t *testing.T) {
fw := newServerTest() fw := newServerTest()
output := "foo bar" output := "foo bar"
podNamespace := "other"
podName := "foo" podName := "foo"
expectedPodName := podName + ".default.etcd" expectedPodName := podName + "." + podNamespace + ".etcd"
expectedUuid := "7e00838d_-_3523_-_11e4_-_8421_-_42010af0a720" expectedUuid := "7e00838d_-_3523_-_11e4_-_8421_-_42010af0a720"
expectedContainerName := "baz" expectedContainerName := "baz"
expectedCommand := "ls -a" expectedCommand := "ls -a"
@ -447,7 +449,7 @@ func TestServeRunInContainerWithUUID(t *testing.T) {
return []byte(output), nil return []byte(output), nil
} }
resp, err := http.Get(fw.testHTTPServer.URL + "/run/" + podName + "/" + expectedUuid + "/" + expectedContainerName + "?cmd=ls%20-a") resp, err := http.Get(fw.testHTTPServer.URL + "/run/" + podNamespace + "/" + podName + "/" + expectedUuid + "/" + expectedContainerName + "?cmd=ls%20-a")
if err != nil { if err != nil {
t.Fatalf("Got error GETing: %v", err) t.Fatalf("Got error GETing: %v", err)