diff --git a/runtime/kubernetes/kubernetes.go b/runtime/kubernetes/kubernetes.go index fc3e23fe..a6b301f3 100644 --- a/runtime/kubernetes/kubernetes.go +++ b/runtime/kubernetes/kubernetes.go @@ -152,6 +152,22 @@ func (k *kubernetes) getService(labels map[string]string) ([]*service, error) { status = item.Status.Phase } + // now try get a deeper status + state := item.Status.Containers[0].State + + // set start time + if state.Running != nil { + svc.Metadata["started"] = state.Running.Started + } + + // set status from waiting + if v := state.Waiting; v != nil { + if len(v.Reason) > 0 { + status = v.Reason + } + } + // TODO: set from terminated + svc.Metadata["status"] = status } diff --git a/util/kubernetes/client/types.go b/util/kubernetes/client/types.go index cfbcd23c..b8bcf383 100644 --- a/util/kubernetes/client/types.go +++ b/util/kubernetes/client/types.go @@ -14,6 +14,12 @@ type EnvVar struct { Value string `json:"value,omitempty"` } +type Condition struct { + Started string `json:"startedAt,omitempty"` + Reason string `json:"reason,omitempty"` + Message string `json:"message,omitempty"` +} + // Container defined container runtime values type Container struct { Name string `json:"name"` @@ -34,8 +40,8 @@ type DeploymentSpec struct { // DeploymentCondition describes the state of deployment type DeploymentCondition struct { Type string `json:"type"` - Reason string `json:"reason,omitempty"` - Message string `json:"message,omitempty"` + reason string `json:"reason,omitempty"` + message string `json:"message,omitempty"` } // DeploymentStatus is returned when querying deployment @@ -103,10 +109,11 @@ type Pod struct { // PodStatus type PodStatus struct { - Conditions []PodCondition `json:"conditions,omitempty"` - PodIP string `json:"podIP"` - Phase string `json:"phase"` - Reason string `json:"reason"` + Conditions []PodCondition `json:"conditions,omitempty"` + Containers []ContainerStatus `json:"containerStatuses"` + PodIP string `json:"podIP"` + Phase string `json:"phase"` + Reason string `json:"reason"` } // PodCondition describes the state of pod @@ -116,6 +123,16 @@ type PodCondition struct { Message string `json:"message,omitempty"` } +type ContainerStatus struct { + State ContainerState `json:"state"` +} + +type ContainerState struct { + Running *Condition `json:"running"` + Terminated *Condition `json:"terminated"` + Waiting *Condition `json:"waiting"` +} + // Resource is API resource type Resource struct { Name string