Skip to content

Commit 577dd58

Browse files
authored
feat(api): improve pod container status logic and add simplified status to pod details (#8913)
* feat(api): improve pod container status logic and add simplified status to pod details * regenerate schema
1 parent 848c714 commit 577dd58

File tree

5 files changed

+101
-46
lines changed

5 files changed

+101
-46
lines changed

modules/api/pkg/resource/pod/container.go

+5
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ const (
3030
Waiting ContainerState = "Waiting"
3131
Running ContainerState = "Running"
3232
Terminated ContainerState = "Terminated"
33+
Failed ContainerState = "Failed"
3334
Unknown ContainerState = "Unknown"
3435
)
3536

@@ -52,6 +53,10 @@ func toContainerState(state v1.ContainerState) ContainerState {
5253
}
5354

5455
if state.Terminated != nil {
56+
if state.Terminated.ExitCode > 0 {
57+
return Failed
58+
}
59+
5560
return Terminated
5661
}
5762

modules/api/pkg/resource/pod/detail.go

+17-6
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,15 @@ type Container struct {
8989
// Status of a pod container
9090
Status *v1.ContainerStatus `json:"status"`
9191

92+
// State is a simplified status.
93+
// One of:
94+
// - Waiting
95+
// - Running
96+
// - Terminated
97+
// - Failed
98+
// - Unknown
99+
State ContainerState `json:"state"`
100+
92101
// Probes
93102
LivenessProbe *v1.Probe `json:"livenessProbe"`
94103
ReadinessProbe *v1.Probe `json:"readinessProbe"`
@@ -259,17 +268,19 @@ func extractContainerInfo(containerList []v1.Container, pod *v1.Pod, configMaps
259268
}
260269
vars = append(vars, evalEnvFrom(container, configMaps, secrets)...)
261270

262-
volume_mounts := extractContainerMounts(container, pod)
271+
volumeMounts := extractContainerMounts(container, pod)
272+
status, state := extractContainerStatus(pod, &container)
263273

264274
containers = append(containers, Container{
265275
Name: container.Name,
266276
Image: container.Image,
267277
Env: vars,
268278
Commands: container.Command,
269279
Args: container.Args,
270-
VolumeMounts: volume_mounts,
280+
VolumeMounts: volumeMounts,
271281
SecurityContext: container.SecurityContext,
272-
Status: extractContainerStatus(pod, &container),
282+
Status: status,
283+
State: toContainerState(state),
273284
LivenessProbe: container.LivenessProbe,
274285
ReadinessProbe: container.ReadinessProbe,
275286
StartupProbe: container.StartupProbe,
@@ -439,14 +450,14 @@ func extractContainerResourceValue(fs *v1.ResourceFieldSelector, container *v1.C
439450
return "", fmt.Errorf("Unsupported container resource : %v", fs.Resource)
440451
}
441452

442-
func extractContainerStatus(pod *v1.Pod, container *v1.Container) *v1.ContainerStatus {
453+
func extractContainerStatus(pod *v1.Pod, container *v1.Container) (*v1.ContainerStatus, v1.ContainerState) {
443454
statuses := append(pod.Status.ContainerStatuses, pod.Status.InitContainerStatuses...)
444455

445456
for _, status := range statuses {
446457
if status.Name == container.Name {
447-
return &status
458+
return &status, status.State
448459
}
449460
}
450461

451-
return nil
462+
return nil, v1.ContainerState{}
452463
}

modules/api/schema/swagger.json

+25-21
Original file line numberDiff line numberDiff line change
@@ -9600,8 +9600,8 @@
96009600
},
96019601
"clusterrolebinding.ClusterRoleBindingDetail": {
96029602
"required": [
9603-
"typeMeta",
96049603
"objectMeta",
9604+
"typeMeta",
96059605
"roleRef",
96069606
"errors"
96079607
],
@@ -10034,13 +10034,13 @@
1003410034
},
1003510035
"cronjob.CronJobDetail": {
1003610036
"required": [
10037+
"suspend",
1003710038
"active",
1003810039
"lastSchedule",
1003910040
"containerImages",
1004010041
"objectMeta",
1004110042
"typeMeta",
1004210043
"schedule",
10043-
"suspend",
1004410044
"concurrencyPolicy",
1004510045
"startingDeadlineSeconds",
1004610046
"errors"
@@ -10158,11 +10158,11 @@
1015810158
},
1015910159
"daemonset.DaemonSetDetail": {
1016010160
"required": [
10161-
"podInfo",
1016210161
"containerImages",
1016310162
"initContainerImages",
1016410163
"objectMeta",
1016510164
"typeMeta",
10165+
"podInfo",
1016610166
"errors"
1016710167
],
1016810168
"properties": {
@@ -10702,13 +10702,13 @@
1070210702
},
1070310703
"horizontalpodautoscaler.HorizontalPodAutoscalerDetail": {
1070410704
"required": [
10705-
"minReplicas",
1070610705
"maxReplicas",
1070710706
"currentCPUUtilizationPercentage",
1070810707
"targetCPUUtilizationPercentage",
1070910708
"objectMeta",
1071010709
"typeMeta",
1071110710
"scaleTargetRef",
10711+
"minReplicas",
1071210712
"currentReplicas",
1071310713
"desiredReplicas",
1071410714
"lastScaleTime"
@@ -10985,13 +10985,13 @@
1098510985
},
1098610986
"job.JobDetail": {
1098710987
"required": [
10988+
"objectMeta",
10989+
"typeMeta",
1098810990
"podInfo",
1098910991
"containerImages",
1099010992
"initContainerImages",
1099110993
"parallelism",
1099210994
"jobStatus",
10993-
"objectMeta",
10994-
"typeMeta",
1099510995
"completions",
1099610996
"errors"
1099710997
],
@@ -11485,10 +11485,10 @@
1148511485
},
1148611486
"node.NodeDetail": {
1148711487
"required": [
11488-
"objectMeta",
1148911488
"typeMeta",
1149011489
"ready",
1149111490
"allocatedResources",
11491+
"objectMeta",
1149211492
"phase",
1149311493
"podCIDR",
1149411494
"providerID",
@@ -11663,13 +11663,13 @@
1166311663
"required": [
1166411664
"objectMeta",
1166511665
"reclaimPolicy",
11666-
"storageClass",
11666+
"reason",
1166711667
"status",
1166811668
"claim",
11669-
"reason",
1167011669
"typeMeta",
1167111670
"capacity",
1167211671
"accessModes",
11672+
"storageClass",
1167311673
"mountOptions",
1167411674
"message",
1167511675
"persistentVolumeSource"
@@ -11788,13 +11788,13 @@
1178811788
},
1178911789
"persistentvolumeclaim.PersistentVolumeClaimDetail": {
1179011790
"required": [
11791-
"capacity",
11792-
"accessModes",
11793-
"storageClass",
1179411791
"objectMeta",
1179511792
"typeMeta",
1179611793
"status",
11797-
"volume"
11794+
"volume",
11795+
"capacity",
11796+
"accessModes",
11797+
"storageClass"
1179811798
],
1179911799
"properties": {
1180011800
"accessModes": {
@@ -11860,6 +11860,7 @@
1186011860
"volumeMounts",
1186111861
"securityContext",
1186211862
"status",
11863+
"state",
1186311864
"livenessProbe",
1186411865
"readinessProbe",
1186511866
"startupProbe"
@@ -11904,6 +11905,9 @@
1190411905
"startupProbe": {
1190511906
"$ref": "#/definitions/v1.Probe"
1190611907
},
11908+
"state": {
11909+
"type": "string"
11910+
},
1190711911
"status": {
1190811912
"$ref": "#/definitions/v1.ContainerStatus"
1190911913
},
@@ -12223,11 +12227,11 @@
1222312227
},
1222412228
"replicaset.ReplicaSetDetail": {
1222512229
"required": [
12230+
"initContainerImages",
1222612231
"objectMeta",
1222712232
"typeMeta",
1222812233
"podInfo",
1222912234
"containerImages",
12230-
"initContainerImages",
1223112235
"selector",
1223212236
"horizontalPodAutoscalerList",
1223312237
"errors"
@@ -12337,11 +12341,11 @@
1233712341
},
1233812342
"replicationcontroller.ReplicationControllerDetail": {
1233912343
"required": [
12340-
"initContainerImages",
1234112344
"objectMeta",
1234212345
"typeMeta",
1234312346
"podInfo",
1234412347
"containerImages",
12348+
"initContainerImages",
1234512349
"labelSelector",
1234612350
"errors"
1234712351
],
@@ -12544,8 +12548,8 @@
1254412548
},
1254512549
"role.RoleDetail": {
1254612550
"required": [
12547-
"typeMeta",
1254812551
"objectMeta",
12552+
"typeMeta",
1254912553
"rules",
1255012554
"errors"
1255112555
],
@@ -12717,9 +12721,9 @@
1271712721
},
1271812722
"secret.SecretDetail": {
1271912723
"required": [
12724+
"type",
1272012725
"objectMeta",
1272112726
"typeMeta",
12722-
"type",
1272312727
"data"
1272412728
],
1272512729
"properties": {
@@ -12806,13 +12810,13 @@
1280612810
},
1280712811
"service.ServiceDetail": {
1280812812
"required": [
12809-
"internalEndpoint",
12810-
"externalEndpoints",
1281112813
"selector",
1281212814
"type",
1281312815
"clusterIP",
1281412816
"objectMeta",
1281512817
"typeMeta",
12818+
"internalEndpoint",
12819+
"externalEndpoints",
1281612820
"endpointList",
1281712821
"sessionAffinity",
1281812822
"errors"
@@ -13132,12 +13136,12 @@
1313213136
},
1313313137
"types.CustomResourceDefinitionDetail": {
1313413138
"required": [
13135-
"objectMeta",
1313613139
"typeMeta",
1313713140
"group",
1313813141
"scope",
1313913142
"names",
1314013143
"established",
13144+
"objectMeta",
1314113145
"conditions",
1314213146
"objects",
1314313147
"subresources",
@@ -13284,8 +13288,8 @@
1328413288
},
1328513289
"types.CustomResourceObjectDetail": {
1328613290
"required": [
13287-
"objectMeta",
1328813291
"typeMeta",
13292+
"objectMeta",
1328913293
"errors"
1329013294
],
1329113295
"properties": {

modules/web/.meshrc.yml

+22
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,19 @@ sources:
2020
transforms:
2121
- replaceField:
2222
typeDefs: |
23+
enum ContainerState {
24+
Waiting
25+
Running
26+
Terminated
27+
Failed
28+
Unknown
29+
}
2330
type Map {
2431
map: ObjMap!
2532
}
33+
type StateWrapper {
34+
state: ContainerState!
35+
}
2636
replacements:
2737
- from:
2838
type: persistentvolume_PersistentVolume
@@ -84,3 +94,15 @@ sources:
8494
to:
8595
type: Map
8696
field: map
97+
- from:
98+
type: pod_ContainerStatus
99+
field: state
100+
to:
101+
type: StateWrapper
102+
field: state
103+
- from:
104+
type: pod_Container
105+
field: state
106+
to:
107+
type: StateWrapper
108+
field: state

0 commit comments

Comments
 (0)