diff --git a/pkg/describe/describe.go b/pkg/describe/describe.go index 81dba2cf7..f9f02a47c 100644 --- a/pkg/describe/describe.go +++ b/pkg/describe/describe.go @@ -880,6 +880,9 @@ func describePod(pod *corev1.Pod, events *corev1.EventList) (string, error) { printLabelsMultiline(w, "Node-Selectors", pod.Spec.NodeSelector) printPodTolerationsMultiline(w, "Tolerations", pod.Spec.Tolerations) describeTopologySpreadConstraints(pod.Spec.TopologySpreadConstraints, w, "") + if pod.Spec.WorkloadRef != nil { + describeWorkloadReference(pod.Spec.WorkloadRef, w, "") + } if events != nil { DescribeEvents(events, w) } @@ -1011,6 +1014,15 @@ func describeVolumes(volumes []corev1.Volume, w PrefixWriter, space string) { } } +func describeWorkloadReference(workloadRef *corev1.WorkloadReference, w PrefixWriter, space string) { + w.Write(LEVEL_0, "%sWorkloadRef:\n", space) + w.Write(LEVEL_1, "Name:\t%s\n", workloadRef.Name) + w.Write(LEVEL_1, "PodGroup:\t%s\n", workloadRef.PodGroup) + if workloadRef.PodGroupReplicaKey != "" { + w.Write(LEVEL_1, "PodGroupReplicaKey:\t%s\n", workloadRef.PodGroupReplicaKey) + } +} + func printHostPathVolumeSource(hostPath *corev1.HostPathVolumeSource, w PrefixWriter) { hostPathType := "" if hostPath.Type != nil { @@ -2241,6 +2253,9 @@ func DescribePodTemplate(template *corev1.PodTemplateSpec, w PrefixWriter) { } printLabelsMultiline(w, " Node-Selectors", template.Spec.NodeSelector) printPodTolerationsMultiline(w, " Tolerations", template.Spec.Tolerations) + if template.Spec.WorkloadRef != nil { + describeWorkloadReference(template.Spec.WorkloadRef, w, " ") + } } // ReplicaSetDescriber generates information about a ReplicaSet and the pods it has created. diff --git a/pkg/describe/describe_test.go b/pkg/describe/describe_test.go index f69b94b0f..10cb64afc 100644 --- a/pkg/describe/describe_test.go +++ b/pkg/describe/describe_test.go @@ -612,6 +612,65 @@ func TestDescribePodRuntimeClass(t *testing.T) { } } +func TestDescribePodWorkloadReference(t *testing.T) { + testCases := []struct { + name string + pod *corev1.Pod + expected string + }{ + { + name: "test1", + pod: &corev1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + }, + Spec: corev1.PodSpec{ + WorkloadRef: &corev1.WorkloadReference{ + Name: "workload", + PodGroup: "pg", + }, + }, + }, + expected: `WorkloadRef: + Name: workload + PodGroup: pg`, + }, + { + name: "test2", + pod: &corev1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: "bar", + }, + Spec: corev1.PodSpec{ + WorkloadRef: &corev1.WorkloadReference{ + Name: "workload", + PodGroup: "pg", + PodGroupReplicaKey: "pg1", + }, + }, + }, + expected: `WorkloadRef: + Name: workload + PodGroup: pg + PodGroupReplicaKey: pg1`, + }, + } + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + fake := fake.NewClientset(tc.pod) + c := &describeClient{T: t, Interface: fake} + d := PodDescriber{c} + out, err := d.Describe("", "bar", DescriberSettings{ShowEvents: true}) + if err != nil { + t.Errorf("Unexpected error: %v", err) + } + if !strings.Contains(out, tc.expected) { + t.Errorf("Expected to find %q in output: %q", tc.expected, out) + } + }) + } +} + func TestDescribePriorityClass(t *testing.T) { preemptLowerPriority := corev1.PreemptLowerPriority preemptNever := corev1.PreemptNever