rename api.LivenessProbe to api.Probe and break out Actions

This commit is contained in:
Mike Danese 2015-01-26 16:35:52 -08:00
parent c8f61885df
commit 78f33e950a
9 changed files with 90 additions and 31 deletions

View File

@ -273,15 +273,10 @@ type ExecAction struct {
Command []string `json:"command,omitempty"` Command []string `json:"command,omitempty"`
} }
// LivenessProbe describes a liveness probe to be examined to the container. // Probe describes a liveness probe to be examined to the container.
// TODO: pass structured data to the actions, and document that data here. type Probe struct {
type LivenessProbe struct { // The action taken to determine the health of a container
// HTTPGetProbe parameters, required if Type == 'http' Handler `json:",inline"`
HTTPGet *HTTPGetAction `json:"httpGet,omitempty"`
// TCPSocketProbe parameter, required if Type == 'tcp'
TCPSocket *TCPSocketAction `json:"tcpSocket,omitempty"`
// ExecProbe parameter, required if Type == 'exec'
Exec *ExecAction `json:"exec,omitempty"`
// Length of time before health checking is activated. In seconds. // Length of time before health checking is activated. In seconds.
InitialDelaySeconds int64 `json:"initialDelaySeconds,omitempty"` InitialDelaySeconds int64 `json:"initialDelaySeconds,omitempty"`
} }
@ -316,7 +311,7 @@ type Container struct {
// Optional: Defaults to unlimited. // Optional: Defaults to unlimited.
CPU resource.Quantity `json:"cpu,omitempty"` CPU resource.Quantity `json:"cpu,omitempty"`
VolumeMounts []VolumeMount `json:"volumeMounts,omitempty"` VolumeMounts []VolumeMount `json:"volumeMounts,omitempty"`
LivenessProbe *LivenessProbe `json:"livenessProbe,omitempty"` LivenessProbe *Probe `json:"livenessProbe,omitempty"`
Lifecycle *Lifecycle `json:"lifecycle,omitempty"` Lifecycle *Lifecycle `json:"lifecycle,omitempty"`
// Optional: Defaults to /dev/termination-log // Optional: Defaults to /dev/termination-log
TerminationMessagePath string `json:"terminationMessagePath,omitempty"` TerminationMessagePath string `json:"terminationMessagePath,omitempty"`
@ -334,6 +329,9 @@ type Handler struct {
Exec *ExecAction `json:"exec,omitempty"` Exec *ExecAction `json:"exec,omitempty"`
// HTTPGet specifies the http request to perform. // HTTPGet specifies the http request to perform.
HTTPGet *HTTPGetAction `json:"httpGet,omitempty"` HTTPGet *HTTPGetAction `json:"httpGet,omitempty"`
// TCPSocket specifies an action involving a TCP port.
// TODO: implement a realistic TCP lifecycle hook
TCPSocket *TCPSocketAction `json:"tcpSocket,omitempty"`
} }
// Lifecycle describes actions that the management system should take in response to container lifecycle // Lifecycle describes actions that the management system should take in response to container lifecycle

View File

@ -811,6 +811,33 @@ func init() {
} }
return nil return nil
}, },
func(in *newer.Probe, out *LivenessProbe, s conversion.Scope) error {
if err := s.Convert(&in.Exec, &out.Exec, 0); err != nil {
return err
}
if err := s.Convert(&in.HTTPGet, &out.HTTPGet, 0); err != nil {
return err
}
if err := s.Convert(&in.TCPSocket, &out.TCPSocket, 0); err != nil {
return err
}
out.InitialDelaySeconds = in.InitialDelaySeconds
return nil
},
func(in *LivenessProbe, out *newer.Probe, s conversion.Scope) error {
if err := s.Convert(&in.Exec, &out.Exec, 0); err != nil {
return err
}
if err := s.Convert(&in.HTTPGet, &out.HTTPGet, 0); err != nil {
return err
}
if err := s.Convert(&in.TCPSocket, &out.TCPSocket, 0); err != nil {
return err
}
out.InitialDelaySeconds = in.InitialDelaySeconds
return nil
},
) )
if err != nil { if err != nil {
// If one of the conversion functions is malformed, detect it immediately. // If one of the conversion functions is malformed, detect it immediately.

View File

@ -270,14 +270,16 @@ type Container struct {
} }
// Handler defines a specific action that should be taken // Handler defines a specific action that should be taken
// TODO: merge this with liveness probing?
// TODO: pass structured data to these actions, and document that data here. // TODO: pass structured data to these actions, and document that data here.
type Handler struct { type Handler struct {
// One and only one of the following should be specified. // One and only one of the following should be specified.
// Exec specifies the action to take. // Exec specifies the action to take.
Exec *ExecAction `json:"exec,omitempty" description:"exec-based hook handler"` Exec *ExecAction `json:"exec,omitempty" description:"exec-based handler"`
// HTTPGet specifies the http request to perform. // HTTPGet specifies the http request to perform.
HTTPGet *HTTPGetAction `json:"httpGet,omitempty" description:"HTTP-based hook handler"` HTTPGet *HTTPGetAction `json:"httpGet,omitempty" description:"HTTP-based handler"`
// TCPSocket specifies an action involving a TCP port.
// TODO: implement a realistic TCP lifecycle hook
TCPSocket *TCPSocketAction `json:"tcpSocket,omitempty" description:"TCP-based handler; TCP hooks not yet supported"`
} }
// Lifecycle describes actions that the management system should take in response to container lifecycle // Lifecycle describes actions that the management system should take in response to container lifecycle

View File

@ -724,6 +724,33 @@ func init() {
} }
return nil return nil
}, },
func(in *newer.Probe, out *LivenessProbe, s conversion.Scope) error {
if err := s.Convert(&in.Exec, &out.Exec, 0); err != nil {
return err
}
if err := s.Convert(&in.HTTPGet, &out.HTTPGet, 0); err != nil {
return err
}
if err := s.Convert(&in.TCPSocket, &out.TCPSocket, 0); err != nil {
return err
}
out.InitialDelaySeconds = in.InitialDelaySeconds
return nil
},
func(in *LivenessProbe, out *newer.Probe, s conversion.Scope) error {
if err := s.Convert(&in.Exec, &out.Exec, 0); err != nil {
return err
}
if err := s.Convert(&in.HTTPGet, &out.HTTPGet, 0); err != nil {
return err
}
if err := s.Convert(&in.TCPSocket, &out.TCPSocket, 0); err != nil {
return err
}
out.InitialDelaySeconds = in.InitialDelaySeconds
return nil
},
) )
if err != nil { if err != nil {
// If one of the conversion functions is malformed, detect it immediately. // If one of the conversion functions is malformed, detect it immediately.

View File

@ -238,9 +238,12 @@ type Container struct {
type Handler struct { type Handler struct {
// One and only one of the following should be specified. // One and only one of the following should be specified.
// Exec specifies the action to take. // Exec specifies the action to take.
Exec *ExecAction `json:"exec,omitempty" description:"exec-based hook handler"` Exec *ExecAction `json:"exec,omitempty" description:"exec-based handler"`
// HTTPGet specifies the http request to perform. // HTTPGet specifies the http request to perform.
HTTPGet *HTTPGetAction `json:"httpGet,omitempty" description:"HTTP-based hook handler"` HTTPGet *HTTPGetAction `json:"httpGet,omitempty" description:"HTTP-based handler"`
// TCPSocket specifies an action involving a TCP port.
// TODO: implement a realistic TCP lifecycle hook
TCPSocket *TCPSocketAction `json:"tcpSocket,omitempty" description:"TCP-based handler; TCP hooks not yet supported"`
} }
// Lifecycle describes actions that the management system should take in response to container lifecycle // Lifecycle describes actions that the management system should take in response to container lifecycle

View File

@ -291,15 +291,10 @@ type ExecAction struct {
Command []string `json:"command,omitempty"` Command []string `json:"command,omitempty"`
} }
// LivenessProbe describes how to probe a container for liveness. // Probe describes a liveness probe to be examined to the container.
// TODO: pass structured data to the actions, and document that data here. type Probe struct {
type LivenessProbe struct { // The action taken to determine the health of a container
// HTTPGetProbe parameters, required if Type == 'HTTP' Handler `json:",inline"`
HTTPGet *HTTPGetAction `json:"httpGet,omitempty"`
// TCPSocketProbe parameter, required if Type == 'TCP'
TCPSocket *TCPSocketAction `json:"tcpSocket,omitempty"`
// ExecProbe parameter, required if Type == 'Exec'
Exec *ExecAction `json:"exec,omitempty"`
// Length of time before health checking is activated. In seconds. // Length of time before health checking is activated. In seconds.
InitialDelaySeconds int64 `json:"initialDelaySeconds,omitempty"` InitialDelaySeconds int64 `json:"initialDelaySeconds,omitempty"`
} }
@ -334,7 +329,7 @@ type Container struct {
// Optional: Defaults to unlimited. Units: Cores. (500m == 1/2 core) // Optional: Defaults to unlimited. Units: Cores. (500m == 1/2 core)
CPU resource.Quantity `json:"cpu,omitempty"` CPU resource.Quantity `json:"cpu,omitempty"`
VolumeMounts []VolumeMount `json:"volumeMounts,omitempty"` VolumeMounts []VolumeMount `json:"volumeMounts,omitempty"`
LivenessProbe *LivenessProbe `json:"livenessProbe,omitempty"` LivenessProbe *Probe `json:"livenessProbe,omitempty"`
Lifecycle *Lifecycle `json:"lifecycle,omitempty"` Lifecycle *Lifecycle `json:"lifecycle,omitempty"`
// Optional: Defaults to /dev/termination-log // Optional: Defaults to /dev/termination-log
TerminationMessagePath string `json:"terminationMessagePath,omitempty"` TerminationMessagePath string `json:"terminationMessagePath,omitempty"`
@ -352,6 +347,9 @@ type Handler struct {
Exec *ExecAction `json:"exec,omitempty"` Exec *ExecAction `json:"exec,omitempty"`
// HTTPGet specifies the http request to perform. // HTTPGet specifies the http request to perform.
HTTPGet *HTTPGetAction `json:"httpGet,omitempty"` HTTPGet *HTTPGetAction `json:"httpGet,omitempty"`
// TCPSocket specifies an action involving a TCP port.
// TODO: implement a realistic TCP lifecycle hook
TCPSocket *TCPSocketAction `json:"tcpSocket,omitempty"`
} }
// Lifecycle describes actions that the management system should take in response to container lifecycle // Lifecycle describes actions that the management system should take in response to container lifecycle

View File

@ -914,7 +914,7 @@ func TestSyncPodUnhealthy(t *testing.T) {
Spec: api.PodSpec{ Spec: api.PodSpec{
Containers: []api.Container{ Containers: []api.Container{
{Name: "bar", {Name: "bar",
LivenessProbe: &api.LivenessProbe{ LivenessProbe: &api.Probe{
// Always returns healthy == false // Always returns healthy == false
}, },
}, },

View File

@ -38,7 +38,7 @@ var (
tcprober = tcprobe.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) { func (kl *Kubelet) probeContainer(p *api.Probe, podFullName string, podUID types.UID, status api.PodStatus, container api.Container) (probe.Status, error) {
if p.Exec != nil { if p.Exec != nil {
return execprober.Probe(kl.newExecInContainer(podFullName, podUID, container)) return execprober.Probe(kl.newExecInContainer(podFullName, podUID, container))
} }

View File

@ -65,8 +65,10 @@ func TestGetURLParts(t *testing.T) {
state := api.PodStatus{PodIP: "127.0.0.1"} state := api.PodStatus{PodIP: "127.0.0.1"}
container := api.Container{ container := api.Container{
Ports: []api.Port{{Name: "found", HostPort: 93}}, Ports: []api.Port{{Name: "found", HostPort: 93}},
LivenessProbe: &api.LivenessProbe{ LivenessProbe: &api.Probe{
HTTPGet: test.probe, Handler: api.Handler{
HTTPGet: test.probe,
},
}, },
} }
p, err := extractPort(test.probe.Port, container) p, err := extractPort(test.probe.Port, container)
@ -106,8 +108,10 @@ func TestGetTCPAddrParts(t *testing.T) {
host := "1.2.3.4" host := "1.2.3.4"
container := api.Container{ container := api.Container{
Ports: []api.Port{{Name: "found", HostPort: 93}}, Ports: []api.Port{{Name: "found", HostPort: 93}},
LivenessProbe: &api.LivenessProbe{ LivenessProbe: &api.Probe{
TCPSocket: test.probe, Handler: api.Handler{
TCPSocket: test.probe,
},
}, },
} }
port, err := extractPort(test.probe.Port, container) port, err := extractPort(test.probe.Port, container)