runtime: normalised service statuses (#1994)
This commit is contained in:
@@ -184,16 +184,15 @@ func (k *kubernetes) getService(labels map[string]string, opts ...client.GetOpti
|
||||
|
||||
// parse out deployment status and inject into service metadata
|
||||
if len(kdep.Status.Conditions) > 0 {
|
||||
svc.Status(kdep.Status.Conditions[0].Type, nil)
|
||||
status := transformStatus(kdep.Status.Conditions[0].Type)
|
||||
svc.Status(status, nil)
|
||||
svc.Metadata["started"] = kdep.Status.Conditions[0].LastUpdateTime
|
||||
} else {
|
||||
svc.Status("n/a", nil)
|
||||
svc.Status(runtime.Unknown, nil)
|
||||
}
|
||||
|
||||
// get the real status
|
||||
for _, item := range podList.Items {
|
||||
var status string
|
||||
|
||||
// check the name
|
||||
if item.Metadata.Labels["name"] != name {
|
||||
continue
|
||||
@@ -203,12 +202,7 @@ func (k *kubernetes) getService(labels map[string]string, opts ...client.GetOpti
|
||||
continue
|
||||
}
|
||||
|
||||
switch item.Status.Phase {
|
||||
case "Failed":
|
||||
status = item.Status.Reason
|
||||
default:
|
||||
status = item.Status.Phase
|
||||
}
|
||||
status := transformStatus(item.Status.Phase)
|
||||
|
||||
// skip if we can't get the container
|
||||
if len(item.Status.Containers) == 0 {
|
||||
@@ -225,11 +219,9 @@ func (k *kubernetes) getService(labels map[string]string, opts ...client.GetOpti
|
||||
|
||||
// set status from waiting
|
||||
if v := state.Waiting; v != nil {
|
||||
if len(v.Reason) > 0 {
|
||||
status = v.Reason
|
||||
}
|
||||
status = runtime.Pending
|
||||
}
|
||||
// TODO: set from terminated
|
||||
|
||||
svc.Status(status, nil)
|
||||
}
|
||||
|
||||
@@ -744,3 +736,34 @@ func (k *kubernetes) DeleteNamespace(ns string) error {
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
// transformStatus takes a deployment status (deploymentcondition.type) and transforms it into a
|
||||
// runtime service status, e.g. containercreating => starting
|
||||
func transformStatus(depStatus string) runtime.ServiceStatus {
|
||||
switch strings.ToLower(depStatus) {
|
||||
case "pending":
|
||||
return runtime.Pending
|
||||
case "containercreating":
|
||||
return runtime.Starting
|
||||
case "imagepullbackoff":
|
||||
return runtime.Error
|
||||
case "crashloopbackoff":
|
||||
return runtime.Error
|
||||
case "error":
|
||||
return runtime.Error
|
||||
case "running":
|
||||
return runtime.Running
|
||||
case "available":
|
||||
return runtime.Running
|
||||
case "succeeded":
|
||||
return runtime.Stopped
|
||||
case "failed":
|
||||
return runtime.Error
|
||||
case "waiting":
|
||||
return runtime.Pending
|
||||
case "terminated":
|
||||
return runtime.Stopped
|
||||
default:
|
||||
return runtime.Unknown
|
||||
}
|
||||
}
|
||||
|
@@ -149,7 +149,7 @@ func (s *service) Start(k client.Client, opts ...client.CreateOption) error {
|
||||
if logger.V(logger.DebugLevel, logger.DefaultLogger) {
|
||||
logger.Debugf("Runtime failed to create deployment: %v", err)
|
||||
}
|
||||
s.Status("error", err)
|
||||
s.Status(runtime.Error, err)
|
||||
v := parseError(err)
|
||||
if v.Reason == "AlreadyExists" {
|
||||
return runtime.ErrAlreadyExists
|
||||
@@ -161,7 +161,7 @@ func (s *service) Start(k client.Client, opts ...client.CreateOption) error {
|
||||
if logger.V(logger.DebugLevel, logger.DefaultLogger) {
|
||||
logger.Debugf("Runtime failed to create service: %v", err)
|
||||
}
|
||||
s.Status("error", err)
|
||||
s.Status(runtime.Error, err)
|
||||
v := parseError(err)
|
||||
if v.Reason == "AlreadyExists" {
|
||||
return runtime.ErrAlreadyExists
|
||||
@@ -169,7 +169,7 @@ func (s *service) Start(k client.Client, opts ...client.CreateOption) error {
|
||||
return err
|
||||
}
|
||||
|
||||
s.Status("started", nil)
|
||||
s.Status(runtime.Running, nil)
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -180,7 +180,7 @@ func (s *service) Stop(k client.Client, opts ...client.DeleteOption) error {
|
||||
if logger.V(logger.DebugLevel, logger.DefaultLogger) {
|
||||
logger.Debugf("Runtime failed to delete service: %v", err)
|
||||
}
|
||||
s.Status("error", err)
|
||||
s.Status(runtime.Error, err)
|
||||
return err
|
||||
}
|
||||
// delete deployment once the service has been deleted
|
||||
@@ -188,11 +188,11 @@ func (s *service) Stop(k client.Client, opts ...client.DeleteOption) error {
|
||||
if logger.V(logger.DebugLevel, logger.DefaultLogger) {
|
||||
logger.Debugf("Runtime failed to delete deployment: %v", err)
|
||||
}
|
||||
s.Status("error", err)
|
||||
s.Status(runtime.Error, err)
|
||||
return err
|
||||
}
|
||||
|
||||
s.Status("stopped", nil)
|
||||
s.Status(runtime.Stopped, nil)
|
||||
|
||||
return nil
|
||||
}
|
||||
@@ -202,7 +202,7 @@ func (s *service) Update(k client.Client, opts ...client.UpdateOption) error {
|
||||
if logger.V(logger.DebugLevel, logger.DefaultLogger) {
|
||||
logger.Debugf("Runtime failed to update deployment: %v", err)
|
||||
}
|
||||
s.Status("error", err)
|
||||
s.Status(runtime.Error, err)
|
||||
return err
|
||||
}
|
||||
if err := k.Update(serviceResource(s.kservice), opts...); err != nil {
|
||||
@@ -215,13 +215,13 @@ func (s *service) Update(k client.Client, opts ...client.UpdateOption) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *service) Status(status string, err error) {
|
||||
func (s *service) Status(status runtime.ServiceStatus, err error) {
|
||||
s.Service.Status = status
|
||||
s.Metadata["lastStatusUpdate"] = time.Now().Format(time.RFC3339)
|
||||
|
||||
if err == nil {
|
||||
s.Metadata["status"] = status
|
||||
delete(s.Metadata, "error")
|
||||
return
|
||||
}
|
||||
s.Metadata["status"] = "error"
|
||||
s.Metadata["error"] = err.Error()
|
||||
}
|
||||
|
Reference in New Issue
Block a user