add Probers to Probe pkgs.

pull/6/head
Mike Danese 2015-01-27 10:00:21 -08:00
parent a298402bd4
commit 6eb0b89cbd
7 changed files with 38 additions and 11 deletions

View File

@ -32,23 +32,29 @@ import (
"github.com/golang/glog"
)
var (
execprober = execprobe.New()
httprober = httprobe.New()
tcprober = tcprobe.New()
)
func (kl *Kubelet) probeContainer(p *api.LivenessProbe, podFullName string, podUID types.UID, status api.PodStatus, container api.Container) (probe.Status, error) {
if p.Exec != nil {
return execprobe.Probe(kl.newExecInContainer(podFullName, podUID, container))
return execprober.Probe(kl.newExecInContainer(podFullName, podUID, container))
}
if p.HTTPGet != nil {
port, err := extractPort(p.HTTPGet.Port, container)
if err != nil {
return probe.Unknown, err
}
return httprobe.Probe(extractGetParams(p.HTTPGet, status, port))
return httprober.Probe(extractGetParams(p.HTTPGet, status, port))
}
if p.TCPSocket != nil {
port, err := extractPort(p.TCPSocket.Port, container)
if err != nil {
return probe.Unknown, err
}
return tcprobe.Probe(status.PodIP, port)
return tcprober.Probe(status.PodIP, port)
}
glog.Warningf("Failed to find probe builder for %s %+v", container.Name, container.LivenessProbe)
return probe.Unknown, nil

View File

@ -27,7 +27,13 @@ import (
const defaultHealthyOutput = "ok"
func Probe(e uexec.Cmd) (probe.Status, error) {
func New() ExecProber {
return ExecProber{}
}
type ExecProber struct{}
func (pr ExecProber) Probe(e uexec.Cmd) (probe.Status, error) {
data, err := e.CombinedOutput()
glog.V(4).Infof("health check response: %s", string(data))
if err != nil {

View File

@ -42,6 +42,7 @@ type healthCheckTest struct {
}
func TestExec(t *testing.T) {
prober := New()
fake := FakeCmd{}
tests := []healthCheckTest{
// Ok
@ -54,7 +55,7 @@ func TestExec(t *testing.T) {
for _, test := range tests {
fake.out = test.output
fake.err = test.err
status, err := Probe(&fake)
status, err := prober.Probe(&fake)
if status != test.expectedStatus {
t.Errorf("expected %v, got %v", test.expectedStatus, status)
}

View File

@ -27,11 +27,17 @@ import (
"github.com/golang/glog"
)
var client = &http.Client{}
func New() HTTPProber {
return HTTPProber{&http.Client{}}
}
type HTTPProber struct {
client HTTPGetInterface
}
// Probe returns a ProbeRunner capable of running an http check.
func Probe(host string, port int, path string) (probe.Status, error) {
return DoHTTPProbe(formatURL(host, port, path), client)
func (pr *HTTPProber) Probe(host string, port int, path string) (probe.Status, error) {
return DoHTTPProbe(formatURL(host, port, path), pr.client)
}
type HTTPGetInterface interface {

View File

@ -46,6 +46,7 @@ func TestFormatURL(t *testing.T) {
}
func TestHTTPProbeChecker(t *testing.T) {
prober := New()
testCases := []struct {
status int
health probe.Status
@ -70,7 +71,7 @@ func TestHTTPProbeChecker(t *testing.T) {
if err != nil {
t.Errorf("Unexpected error: %v", err)
}
health, err := Probe(host, p, "")
health, err := prober.Probe(host, p, "")
if test.health == probe.Unknown && err == nil {
t.Errorf("Expected error")
}

View File

@ -25,7 +25,13 @@ import (
"github.com/golang/glog"
)
func Probe(host string, port int) (probe.Status, error) {
func New() TCPProber {
return TCPProber{}
}
type TCPProber struct{}
func (pr TCPProber) Probe(host string, port int) (probe.Status, error) {
return DoTCPProbe(net.JoinHostPort(host, strconv.Itoa(port)))
}

View File

@ -28,6 +28,7 @@ import (
)
func TestTcpHealthChecker(t *testing.T) {
prober := New()
tests := []struct {
expectedStatus probe.Status
usePort bool
@ -58,7 +59,7 @@ func TestTcpHealthChecker(t *testing.T) {
if !test.usePort {
p = -1
}
status, err := Probe(host, p)
status, err := prober.Probe(host, p)
if status != test.expectedStatus {
t.Errorf("expected: %v, got: %v", test.expectedStatus, status)
}