From f5ca2e675140d8d9caa1bd2129083c28b23b5d27 Mon Sep 17 00:00:00 2001 From: Zhiwei Yin Date: Sat, 29 Jan 2022 15:30:25 +0800 Subject: [PATCH] add job and pod wellknownStatusRules (#113) Signed-off-by: Zhiwei Yin --- pkg/spoke/statusfeedback/reader_test.go | 81 +++++++++++++++++++++++++ pkg/spoke/statusfeedback/rules/rule.go | 24 ++++++++ 2 files changed, 105 insertions(+) diff --git a/pkg/spoke/statusfeedback/reader_test.go b/pkg/spoke/statusfeedback/reader_test.go index 07a32b543..5391552c5 100644 --- a/pkg/spoke/statusfeedback/reader_test.go +++ b/pkg/spoke/statusfeedback/reader_test.go @@ -48,6 +48,43 @@ const ( } } ` + jobJson = ` + { + "apiVersion": "batch/v1", + "kind": "Job", + "metadata": { + "name": "test" + }, + "status": { + "conditions": [ + { + "status": "True", + "type": "Complete" + } + ], + "succeeded": 1 + } + } + ` + podJson = ` + { + "apiVersion": "v1", + "kind": "Pod", + "metadata": { + "name": "test" + }, + "status": { + "conditions": [ + { + "status": "False", + "type": "Ready" + } + ], + + "phase": "Succeeded" + } + } +` ) func unstrctureObject(data string) *unstructured.Unstructured { @@ -171,6 +208,50 @@ func TestStatusReader(t *testing.T) { }, }, }, + { + name: "Job values", + object: unstrctureObject(jobJson), + rule: workapiv1.FeedbackRule{Type: workapiv1.WellKnownStatusType}, + expectError: false, + expectedValue: []workapiv1.FeedbackValue{ + { + Name: "JobComplete", + Value: workapiv1.FieldValue{ + Type: workapiv1.String, + String: util.StringPtr("True"), + }, + }, + { + Name: "JobSucceeded", + Value: workapiv1.FieldValue{ + Type: workapiv1.Integer, + Integer: util.Int64Ptr(1), + }, + }, + }, + }, + { + name: "Pod values", + object: unstrctureObject(podJson), + rule: workapiv1.FeedbackRule{Type: workapiv1.WellKnownStatusType}, + expectError: false, + expectedValue: []workapiv1.FeedbackValue{ + { + Name: "PodReady", + Value: workapiv1.FieldValue{ + Type: workapiv1.String, + String: util.StringPtr("False"), + }, + }, + { + Name: "PodPhase", + Value: workapiv1.FieldValue{ + Type: workapiv1.String, + String: util.StringPtr("Succeeded"), + }, + }, + }, + }, } reader := NewStatusReader() diff --git a/pkg/spoke/statusfeedback/rules/rule.go b/pkg/spoke/statusfeedback/rules/rule.go index 6e20cf3cd..1e0ea5131 100644 --- a/pkg/spoke/statusfeedback/rules/rule.go +++ b/pkg/spoke/statusfeedback/rules/rule.go @@ -28,10 +28,34 @@ var deploymentRule = []workapiv1.JsonPath{ }, } +var jobRule = []workapiv1.JsonPath{ + { + Name: "JobComplete", + Path: `.status.conditions[?(@.type=="Complete")].status`, + }, + { + Name: "JobSucceeded", + Path: `.status.succeeded`, + }, +} + +var podRule = []workapiv1.JsonPath{ + { + Name: "PodReady", + Path: `.status.conditions[?(@.type=="Ready")].status`, + }, + { + Name: "PodPhase", + Path: `.status.phase`, + }, +} + func DefaultWellKnownStatusRule() WellKnownStatusRuleResolver { return &DefaultWellKnownStatusResolver{ rules: map[schema.GroupVersionKind][]workapiv1.JsonPath{ {Group: "apps", Version: "v1", Kind: "Deployment"}: deploymentRule, + {Group: "batch", Version: "v1", Kind: "Job"}: jobRule, + {Group: "", Version: "v1", Kind: "Pod"}: podRule, }, } }