diff --git a/pkg/kubelet/kubelet.go b/pkg/kubelet/kubelet.go index a0d2ca07536..5f9787f24cf 100644 --- a/pkg/kubelet/kubelet.go +++ b/pkg/kubelet/kubelet.go @@ -41,6 +41,7 @@ import ( kubecontainer "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/container" "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/dockertools" "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/envvars" + "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/lifecycle" "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/metrics" "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/network" "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/prober" @@ -260,7 +261,7 @@ func NewMainKubelet( klet.podManager = newBasicPodManager(klet.kubeClient) klet.prober = prober.New(klet.runner, klet.readinessManager, klet.containerRefManager, klet.recorder) - klet.handlerRunner = newHandlerRunner(klet.httpClient, klet.runner, klet.containerManager) + klet.handlerRunner = lifecycle.NewHandlerRunner(klet.httpClient, klet.runner, klet.containerManager) // TODO(vmarmol): Remove when the circular dependency is removed :( containerManager.Prober = klet.prober @@ -291,10 +292,6 @@ func NewMainKubelet( return klet, nil } -type httpGetter interface { - Get(url string) (*http.Response, error) -} - type serviceLister interface { List() (api.ServiceList, error) } @@ -326,7 +323,7 @@ type Kubelet struct { // Optional, defaults to simple Docker implementation runner prober.ContainerCommandRunner // Optional, client for http requests, defaults to empty client - httpClient httpGetter + httpClient kubeletTypes.HttpGetter // cAdvisor used for container information. cadvisor cadvisor.Interface diff --git a/pkg/kubelet/kubelet_test.go b/pkg/kubelet/kubelet_test.go index 804bc25ad14..a7240eedf05 100644 --- a/pkg/kubelet/kubelet_test.go +++ b/pkg/kubelet/kubelet_test.go @@ -43,6 +43,7 @@ import ( "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/container" kubecontainer "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/container" "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/dockertools" + "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/lifecycle" "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/metrics" "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/network" "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/prober" @@ -121,7 +122,7 @@ func newTestKubelet(t *testing.T) *TestKubelet { kubelet.containerManager.Puller = &dockertools.FakeDockerPuller{} kubelet.prober = prober.New(nil, kubelet.readinessManager, kubelet.containerRefManager, kubelet.recorder) kubelet.containerManager.Prober = kubelet.prober - kubelet.handlerRunner = newHandlerRunner(&fakeHTTP{}, &fakeContainerCommandRunner{}, kubelet.containerManager) + kubelet.handlerRunner = lifecycle.NewHandlerRunner(&fakeHTTP{}, &fakeContainerCommandRunner{}, kubelet.containerManager) kubelet.volumeManager = newVolumeManager() kubelet.runtimeHooks = newKubeletRuntimeHooks(kubelet.recorder) return &TestKubelet{kubelet, fakeDocker, mockCadvisor, fakeKubeClient, waitGroup, fakeMirrorClient} @@ -787,7 +788,7 @@ func TestSyncPodsWithPodInfraCreatesContainerCallsHandler(t *testing.T) { waitGroup := testKubelet.waitGroup fakeHttp := fakeHTTP{} kubelet.httpClient = &fakeHttp - kubelet.handlerRunner = newHandlerRunner(kubelet.httpClient, &fakeContainerCommandRunner{}, kubelet.containerManager) + kubelet.handlerRunner = lifecycle.NewHandlerRunner(kubelet.httpClient, &fakeContainerCommandRunner{}, kubelet.containerManager) pods := []*api.Pod{ { ObjectMeta: api.ObjectMeta{ @@ -1744,7 +1745,7 @@ func TestRunHandlerExec(t *testing.T) { kubelet := testKubelet.kubelet fakeDocker := testKubelet.fakeDocker kubelet.runner = &fakeCommandRunner - kubelet.handlerRunner = newHandlerRunner(&fakeHTTP{}, kubelet.runner, kubelet.containerManager) + kubelet.handlerRunner = lifecycle.NewHandlerRunner(&fakeHTTP{}, kubelet.runner, kubelet.containerManager) containerID := "abc1234" podName := "podFoo" @@ -1799,7 +1800,7 @@ func TestRunHandlerHttp(t *testing.T) { testKubelet := newTestKubelet(t) kubelet := testKubelet.kubelet kubelet.httpClient = &fakeHttp - kubelet.handlerRunner = newHandlerRunner(kubelet.httpClient, &fakeContainerCommandRunner{}, kubelet.containerManager) + kubelet.handlerRunner = lifecycle.NewHandlerRunner(kubelet.httpClient, &fakeContainerCommandRunner{}, kubelet.containerManager) containerID := "abc1234" podName := "podFoo" @@ -1867,7 +1868,7 @@ func TestSyncPodEventHandlerFails(t *testing.T) { kubelet.httpClient = &fakeHTTP{ err: fmt.Errorf("test error"), } - kubelet.handlerRunner = newHandlerRunner(kubelet.httpClient, &fakeContainerCommandRunner{}, kubelet.containerManager) + kubelet.handlerRunner = lifecycle.NewHandlerRunner(kubelet.httpClient, &fakeContainerCommandRunner{}, kubelet.containerManager) pods := []*api.Pod{ { diff --git a/pkg/kubelet/lifecycle/doc.go b/pkg/kubelet/lifecycle/doc.go new file mode 100644 index 00000000000..ac6f4661f22 --- /dev/null +++ b/pkg/kubelet/lifecycle/doc.go @@ -0,0 +1,18 @@ +/* +Copyright 2015 Google Inc. All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Handlers for pod lifecycle events. +package lifecycle diff --git a/pkg/kubelet/handlers.go b/pkg/kubelet/lifecycle/handlers.go similarity index 87% rename from pkg/kubelet/handlers.go rename to pkg/kubelet/lifecycle/handlers.go index 54e5bf6e940..123bca0aa50 100644 --- a/pkg/kubelet/handlers.go +++ b/pkg/kubelet/lifecycle/handlers.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package kubelet +package lifecycle import ( "fmt" @@ -25,19 +25,20 @@ import ( kubecontainer "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/container" "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/dockertools" "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/prober" + kubeletTypes "github.com/GoogleCloudPlatform/kubernetes/pkg/kubelet/types" "github.com/GoogleCloudPlatform/kubernetes/pkg/util" "github.com/golang/glog" ) -type handlerRunner struct { - httpGetter httpGetter +type HandlerRunner struct { + httpGetter kubeletTypes.HttpGetter commandRunner prober.ContainerCommandRunner containerManager *dockertools.DockerManager } // TODO(yifan): Merge commandRunner and containerManager once containerManager implements the ContainerCommandRunner interface. -func newHandlerRunner(httpGetter httpGetter, commandRunner prober.ContainerCommandRunner, containerManager *dockertools.DockerManager) kubecontainer.HandlerRunner { - return &handlerRunner{ +func NewHandlerRunner(httpGetter kubeletTypes.HttpGetter, commandRunner prober.ContainerCommandRunner, containerManager *dockertools.DockerManager) kubecontainer.HandlerRunner { + return &HandlerRunner{ httpGetter: httpGetter, commandRunner: commandRunner, containerManager: containerManager, @@ -45,7 +46,7 @@ func newHandlerRunner(httpGetter httpGetter, commandRunner prober.ContainerComma } // TODO(yifan): Use a strong type for containerID. -func (hr *handlerRunner) Run(containerID string, pod *api.Pod, container *api.Container, handler *api.Handler) error { +func (hr *HandlerRunner) Run(containerID string, pod *api.Pod, container *api.Container, handler *api.Handler) error { switch { case handler.Exec != nil: _, err := hr.commandRunner.RunInContainer(containerID, handler.Exec.Command) @@ -84,7 +85,7 @@ func resolvePort(portReference util.IntOrString, container *api.Container) (int, return -1, fmt.Errorf("couldn't find port: %v in %v", portReference, container) } -func (hr *handlerRunner) runHTTPHandler(pod *api.Pod, container *api.Container, handler *api.Handler) error { +func (hr *HandlerRunner) runHTTPHandler(pod *api.Pod, container *api.Container, handler *api.Handler) error { host := handler.HTTPGet.Host if len(host) == 0 { status, err := hr.containerManager.GetPodStatus(pod) diff --git a/pkg/kubelet/handlers_test.go b/pkg/kubelet/lifecycle/handlers_test.go similarity index 99% rename from pkg/kubelet/handlers_test.go rename to pkg/kubelet/lifecycle/handlers_test.go index 87d3e551a12..068928753ac 100644 --- a/pkg/kubelet/handlers_test.go +++ b/pkg/kubelet/lifecycle/handlers_test.go @@ -14,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. */ -package kubelet +package lifecycle import ( "testing" diff --git a/pkg/kubelet/types/docker.go b/pkg/kubelet/types/types.go similarity index 88% rename from pkg/kubelet/types/docker.go rename to pkg/kubelet/types/types.go index 475046b5eaa..d719885a912 100644 --- a/pkg/kubelet/types/docker.go +++ b/pkg/kubelet/types/types.go @@ -16,5 +16,11 @@ limitations under the License. package types +import "net/http" + // DockerID is an ID of docker container. It is a type to make it clear when we're working with docker container Ids type DockerID string + +type HttpGetter interface { + Get(url string) (*http.Response, error) +}