1
0
mirror of https://github.com/rancher/types.git synced 2025-05-05 05:36:18 +00:00

Add transitioning field to container

This commit is contained in:
Darren Shepherd 2018-04-30 15:10:02 -07:00
parent 7d8da4b6ef
commit f781b5c3c4
2 changed files with 36 additions and 11 deletions
apis/project.cattle.io/v3/schema
mapper

View File

@ -494,6 +494,7 @@ func podTypes(schemas *types.Schemas) *types.Schemas {
EnvironmentFrom []EnvironmentFrom
InitContainer bool
State string
Transitioning string
TransitioningMessage string
ExitCode *int
RestartCount int

View File

@ -12,39 +12,62 @@ type ContainerStatus struct {
}
type containerState struct {
state string
message string
exitCode interface{}
restartCount int64
state string
message string
transitioning 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"))
func message(m map[string]interface{}) string {
if m["message"] == nil {
return convert.ToString(m["reason"])
}
return fmt.Sprintf("%s: %s", m["reason"], m["message"])
}
func checkStatus(containerStates map[string]containerState, containerStatus []map[string]interface{}) {
for _, status := range containerStatus {
name := convert.ToString(status["name"])
restartCount, _ := convert.ToNumber(status["restartCount"])
s := containerState{
state: "pending",
restartCount: restartCount,
state: "pending",
restartCount: restartCount,
transitioning: "no",
}
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.message = message(m)
s.exitCode = m["exitCode"]
if convert.ToString(s.exitCode) == "0" {
s.transitioning = "no"
} else {
s.transitioning = "error"
}
case "running":
s.state = "running"
s.transitioning = "no"
case "waiting":
s.state = "waiting"
s.message = fmt.Sprintf("%s: %s", m["reason"], m["message"])
s.transitioning = "yes"
s.message = message(m)
}
}
containerStates[name] = s
}
}
func (n ContainerStatus) FromInternal(data map[string]interface{}) {
containerStates := map[string]containerState{}
containerStatus := convert.ToMapSlice(values.GetValueN(data, "status", "containerStatuses"))
checkStatus(containerStates, containerStatus)
containerStatus = convert.ToMapSlice(values.GetValueN(data, "status", "initContainerStatuses"))
checkStatus(containerStates, containerStatus)
containers := convert.ToMapSlice(values.GetValueN(data, "containers"))
for _, container := range containers {
@ -56,6 +79,7 @@ func (n ContainerStatus) FromInternal(data map[string]interface{}) {
state, ok := containerStates[name]
if ok {
container["state"] = state.state
container["transitioning"] = state.transitioning
container["transitioningMessage"] = state.message
container["restartCount"] = state.restartCount
container["exitCode"] = state.exitCode