1
0
mirror of https://github.com/rancher/types.git synced 2025-09-23 02:47:07 +00:00

Show state on containers and fix jobs

This commit is contained in:
Darren Shepherd
2018-04-26 16:56:50 -07:00
parent 61843eab66
commit 6796a6867b
3 changed files with 88 additions and 8 deletions

View File

@@ -472,6 +472,7 @@ func podTypes(schemas *types.Schemas) *types.Schemas {
&m.AnnotationField{Field: "description"},
&m.AnnotationField{Field: "publicEndpoints", List: true},
mapper.ContainerPorts{},
mapper.ContainerStatus{},
).
// Must import handlers before Container
MustImport(&Version, v1.ContainerPort{}, struct {
@@ -489,9 +490,13 @@ func podTypes(schemas *types.Schemas) *types.Schemas {
MustImport(&Version, v1.Handler{}, handlerOverride{}).
MustImport(&Version, v1.Probe{}, handlerOverride{}).
MustImport(&Version, v1.Container{}, struct {
Environment map[string]string
EnvironmentFrom []EnvironmentFrom
InitContainer bool
Environment map[string]string
EnvironmentFrom []EnvironmentFrom
InitContainer bool
State string
TransitioningMessage string
ExitCode *int
RestartCount int
}{}).
MustImport(&Version, v1.PodSpec{}, struct {
Scheduling *Scheduling

View File

@@ -0,0 +1,73 @@
package mapper
import (
"fmt"
"github.com/rancher/norman/types"
"github.com/rancher/norman/types/convert"
"github.com/rancher/norman/types/values"
)
type ContainerStatus struct {
}
type containerState struct {
state string
message string
exitCode interface{}
restartCount int64
}
func (n ContainerStatus) FromInternal(data map[string]interface{}) {
containerStates := map[string]containerState{}
containerStatus := convert.ToMapSlice(values.GetValueN(data, "status", "containerStatuses"))
for _, status := range containerStatus {
name := convert.ToString(status["name"])
restartCount, _ := convert.ToNumber(status["restartCount"])
s := containerState{
state: "pending",
restartCount: restartCount,
}
for k, v := range convert.ToMapInterface(status["state"]) {
m := convert.ToMapInterface(v)
switch k {
case "terminated":
s.state = "terminated"
s.message = fmt.Sprintf("%s: %s", m["reason"], m["message"])
s.exitCode = m["exitCode"]
case "running":
s.state = "running"
case "waiting":
s.state = "waiting"
s.message = fmt.Sprintf("%s: %s", m["reason"], m["message"])
}
}
containerStates[name] = s
}
containers := convert.ToMapSlice(values.GetValueN(data, "containers"))
for _, container := range containers {
if container == nil {
continue
}
name := convert.ToString(container["name"])
state, ok := containerStates[name]
if ok {
container["state"] = state.state
container["transitioningMessage"] = state.message
container["restartCount"] = state.restartCount
container["exitCode"] = state.exitCode
} else {
container["state"] = "unknown"
}
}
}
func (n ContainerStatus) ToInternal(data map[string]interface{}) {
}
func (n ContainerStatus) ModifySchema(schema *types.Schema, schemas *types.Schemas) error {
return nil
}

View File

@@ -226,10 +226,12 @@ func genericStatus(data map[string]interface{}) {
}
}
if state == "" {
val, ok := values.GetValueN(data, "status", "phase").(string)
if val != "" && ok {
state = val
phase, ok := values.GetValueN(data, "status", "phase").(string)
if phase != "" && ok {
if phase == "Succeeded" {
state = "succeeded"
} else if state == "" {
state = phase
}
}
@@ -260,7 +262,7 @@ func genericStatus(data map[string]interface{}) {
data["state"] = strings.ToLower(state)
data["transitioningMessage"] = message
val, ok := values.GetValue(data, "metadata", "removed")
val, ok = values.GetValue(data, "metadata", "removed")
if ok && val != "" && val != nil {
data["state"] = "removing"
data["transitioning"] = "yes"