Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

break api.Probe out of api.LivenessProbe #3818

Merged
merged 1 commit into from
Jan 28, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
18 changes: 8 additions & 10 deletions pkg/api/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -273,15 +273,10 @@ type ExecAction struct {
Command []string `json:"command,omitempty"`
}

// LivenessProbe describes a liveness probe to be examined to the container.
// TODO: pass structured data to the actions, and document that data here.
type LivenessProbe struct {
// HTTPGetProbe parameters, required if Type == 'http'
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"`
// Probe describes a liveness probe to be examined to the container.
type Probe struct {
// The action taken to determine the health of a container
Handler `json:",inline"`
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I suggested embedding here. However, I realized this is inconsistent with VolumeSource.

@bgrant0607 preference for style? The difference in JSON comes down to:

"livenessProbe": { "initalDelaySeconds": 10, "exec": { ... } }
"volumes": [ { "name": "vol1", "hostDir": { "path": "/tmp" } } ]

vs

"livenessProbe": { "initalDelaySeconds": 10, "handler": { "exec": { ... } } }
"volumes": [ { "name": "vol1", "source": { "hostDir": { "path": "/tmp" } } } ]

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I prefer inlining/embedding.

// Length of time before health checking is activated. In seconds.
InitialDelaySeconds int64 `json:"initialDelaySeconds,omitempty"`
}
Expand Down Expand Up @@ -316,7 +311,7 @@ type Container struct {
// Optional: Defaults to unlimited.
CPU resource.Quantity `json:"cpu,omitempty"`
VolumeMounts []VolumeMount `json:"volumeMounts,omitempty"`
LivenessProbe *LivenessProbe `json:"livenessProbe,omitempty"`
LivenessProbe *Probe `json:"livenessProbe,omitempty"`
Lifecycle *Lifecycle `json:"lifecycle,omitempty"`
// Optional: Defaults to /dev/termination-log
TerminationMessagePath string `json:"terminationMessagePath,omitempty"`
Expand All @@ -334,6 +329,9 @@ type Handler struct {
Exec *ExecAction `json:"exec,omitempty"`
// HTTPGet specifies the http request to perform.
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
Expand Down
27 changes: 27 additions & 0 deletions pkg/api/v1beta1/conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -811,6 +811,33 @@ func init() {
}
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 one of the conversion functions is malformed, detect it immediately.
Expand Down
8 changes: 5 additions & 3 deletions pkg/api/v1beta1/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -270,14 +270,16 @@ type Container struct {
}

// 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.
type Handler struct {
// One and only one of the following should be specified.
// 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 *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
Expand Down
27 changes: 27 additions & 0 deletions pkg/api/v1beta2/conversion.go
Original file line number Diff line number Diff line change
Expand Up @@ -724,6 +724,33 @@ func init() {
}
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 one of the conversion functions is malformed, detect it immediately.
Expand Down
7 changes: 5 additions & 2 deletions pkg/api/v1beta2/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -238,9 +238,12 @@ type Container struct {
type Handler struct {
// One and only one of the following should be specified.
// 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 *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
Expand Down
18 changes: 8 additions & 10 deletions pkg/api/v1beta3/types.go
Original file line number Diff line number Diff line change
Expand Up @@ -291,15 +291,10 @@ type ExecAction struct {
Command []string `json:"command,omitempty"`
}

// LivenessProbe describes how to probe a container for liveness.
// TODO: pass structured data to the actions, and document that data here.
type LivenessProbe struct {
// HTTPGetProbe parameters, required if Type == 'HTTP'
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"`
// Probe describes a liveness probe to be examined to the container.
type Probe struct {
// The action taken to determine the health of a container
Handler `json:",inline"`
// Length of time before health checking is activated. In seconds.
InitialDelaySeconds int64 `json:"initialDelaySeconds,omitempty"`
}
Expand Down Expand Up @@ -334,7 +329,7 @@ type Container struct {
// Optional: Defaults to unlimited. Units: Cores. (500m == 1/2 core)
CPU resource.Quantity `json:"cpu,omitempty"`
VolumeMounts []VolumeMount `json:"volumeMounts,omitempty"`
LivenessProbe *LivenessProbe `json:"livenessProbe,omitempty"`
LivenessProbe *Probe `json:"livenessProbe,omitempty"`
Lifecycle *Lifecycle `json:"lifecycle,omitempty"`
// Optional: Defaults to /dev/termination-log
TerminationMessagePath string `json:"terminationMessagePath,omitempty"`
Expand All @@ -352,6 +347,9 @@ type Handler struct {
Exec *ExecAction `json:"exec,omitempty"`
// HTTPGet specifies the http request to perform.
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
Expand Down
2 changes: 1 addition & 1 deletion pkg/kubelet/kubelet_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -914,7 +914,7 @@ func TestSyncPodUnhealthy(t *testing.T) {
Spec: api.PodSpec{
Containers: []api.Container{
{Name: "bar",
LivenessProbe: &api.LivenessProbe{
LivenessProbe: &api.Probe{
// Always returns healthy == false
},
},
Expand Down
2 changes: 1 addition & 1 deletion pkg/kubelet/probe.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ var (
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 {
return execprober.Probe(kl.newExecInContainer(podFullName, podUID, container))
}
Expand Down
12 changes: 8 additions & 4 deletions pkg/kubelet/probe_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -65,8 +65,10 @@ func TestGetURLParts(t *testing.T) {
state := api.PodStatus{PodIP: "127.0.0.1"}
container := api.Container{
Ports: []api.Port{{Name: "found", HostPort: 93}},
LivenessProbe: &api.LivenessProbe{
HTTPGet: test.probe,
LivenessProbe: &api.Probe{
Handler: api.Handler{
HTTPGet: test.probe,
},
},
}
p, err := extractPort(test.probe.Port, container)
Expand Down Expand Up @@ -106,8 +108,10 @@ func TestGetTCPAddrParts(t *testing.T) {
host := "1.2.3.4"
container := api.Container{
Ports: []api.Port{{Name: "found", HostPort: 93}},
LivenessProbe: &api.LivenessProbe{
TCPSocket: test.probe,
LivenessProbe: &api.Probe{
Handler: api.Handler{
TCPSocket: test.probe,
},
},
}
port, err := extractPort(test.probe.Port, container)
Expand Down