From 701fddfe52000c280bb3bfc4dc77858acde3fa14 Mon Sep 17 00:00:00 2001 From: jdesouza Date: Fri, 6 Dec 2024 13:55:46 -0300 Subject: [PATCH] INSIGHTS-528 cli opa validation: Support multiple rules that return values in OPA (#221) * INSIGHTS-528 cli opa validation: Support multiple rules that return values in OPA * INSIGHTS-528 cli opa validation: Support multiple rules that return values in OPA --- pkg/opavalidation/opavalidation_test.go | 6 ++++++ pkg/opavalidation/test/multipleRules.rego | 15 +++++++++++++++ pkg/opavalidation/utils.go | 8 ++++++-- 3 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 pkg/opavalidation/test/multipleRules.rego diff --git a/pkg/opavalidation/opavalidation_test.go b/pkg/opavalidation/opavalidation_test.go index d4401a5..e4b2489 100644 --- a/pkg/opavalidation/opavalidation_test.go +++ b/pkg/opavalidation/opavalidation_test.go @@ -88,3 +88,9 @@ func TestRunWithLibs(t *testing.T) { assert.Len(t, ais, 1) assert.Equal(t, "Label is missing", ais[0].Title) } + +func TestMultipleRules(t *testing.T) { + ais, err := opavalidation.Run("test/multipleRules.rego", "testdata/pod1.yaml", opavalidation.ExpectActionItemOptions{}, fwrego.InsightsInfo{}, "", "") + assert.NoError(t, err) + assert.Len(t, ais, 0) +} diff --git a/pkg/opavalidation/test/multipleRules.rego b/pkg/opavalidation/test/multipleRules.rego new file mode 100644 index 0000000..f52b559 --- /dev/null +++ b/pkg/opavalidation/test/multipleRules.rego @@ -0,0 +1,15 @@ +package fairwinds +foo := {"s": "foo"} +envMaxReplicasDeployments[actionItem] { + print(foo.s) + input.kind == "Deployment" + env_suffix := array.reverse(split(input.metadata.namespace, "-"))[0] + replicas := input.spec.replicas + actionItem := { + "title": "Non-production environment replica count exceeds maximum", + "description": sprintf("The Deployment %v in the %v environment replicas exceed the maximum replica count for this environment.", [input.metadata.name, env_suffix]), + "severity": 0.5, + "remediation": "Reduce the number of replicas", + "category": "Reliability" + } +} diff --git a/pkg/opavalidation/utils.go b/pkg/opavalidation/utils.go index 593e7a0..0265f44 100644 --- a/pkg/opavalidation/utils.go +++ b/pkg/opavalidation/utils.go @@ -22,8 +22,12 @@ func arrayFromRegoOutput(results rego.ResultSet) []interface{} { for _, result := range results { for _, pack := range result.Bindings["results"].(map[string]interface{}) { - for _, outputArray := range pack.(map[string]interface{}) { - returnSet = append(returnSet, outputArray.([]interface{})...) + if _, ok := pack.(map[string]interface{}); ok { + for _, outputArray := range pack.(map[string]interface{}) { + if _, ok := outputArray.([]interface{}); ok { + returnSet = append(returnSet, outputArray.([]interface{})...) + } + } } } }