Skip to content

Commit

Permalink
unified priority mapping (#427)
Browse files Browse the repository at this point in the history
* unified priority mapping

Signed-off-by: Frank Jogeleit <frank.jogeleit@lovoo.com>
  • Loading branch information
fjogeleit committed Apr 24, 2024
1 parent 62572d1 commit 38c665a
Show file tree
Hide file tree
Showing 10 changed files with 6 additions and 121 deletions.
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ build
**/test.db
sqlite-database*.db
values*.yaml
coverage.out
coverage.out*
heap*
/.env*
.tools
Expand Down
5 changes: 0 additions & 5 deletions charts/policy-reporter/config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -347,11 +347,6 @@ gcs:
{{- toYaml . | nindent 4 }}
{{- end }}

{{- with .Values.policyPriorities }}
priorityMap:
{{- toYaml . | nindent 2 }}
{{- end }}

worker: {{ .Values.worker }}

metrics:
Expand Down
7 changes: 0 additions & 7 deletions charts/policy-reporter/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -215,13 +215,6 @@ global:
# read credentials from secret
secretRef: ""

# configure mappings from policy to priority
# you can use default to configure a default priority for fail results
# example mapping
# default: warning
# require-ns-labels: error
policyPriorities: {}

emailReports:
clusterName: "" # (optional) - displayed in the email report if configured
titlePrefix: "Report" # title prefix in the email subject
Expand Down
4 changes: 0 additions & 4 deletions pkg/config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -289,9 +289,6 @@ type Profiling struct {
Enabled bool `mapstructure:"enabled"`
}

// PriorityMap configuration
type PriorityMap = map[string]string

// ClusterReportFilter configuration
type ClusterReportFilter struct {
Disabled bool `mapstructure:"disabled"`
Expand Down Expand Up @@ -372,7 +369,6 @@ type Config struct {
DBFile string `mapstructure:"dbfile"`
Metrics Metrics `mapstructure:"metrics"`
REST REST `mapstructure:"rest"`
PriorityMap PriorityMap `mapstructure:"priorityMap"`
ReportFilter ReportFilter `mapstructure:"reportFilter"`
Redis Redis `mapstructure:"redis"`
Profiling Profiling `mapstructure:"profiling"`
Expand Down
16 changes: 1 addition & 15 deletions pkg/config/resolver.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ import (
type Resolver struct {
config *Config
k8sConfig *rest.Config
mapper report.Mapper
publisher report.EventPublisher
policyStore *database.Store
database *bun.DB
Expand Down Expand Up @@ -214,7 +213,7 @@ func (r *Resolver) RegisterSendResultListener() {
r.RegisterNewResultsListener()
}

r.resultListener.RegisterListener(listener.NewSendResultListener(targets, r.Mapper()))
r.resultListener.RegisterListener(listener.NewSendResultListener(targets))
}

// RegisterSendResultListener resolver method
Expand Down Expand Up @@ -254,19 +253,6 @@ func (r *Resolver) RegisterMetricsListener() {
))
}

// Mapper resolver method
func (r *Resolver) Mapper() report.Mapper {
if r.mapper != nil {
return r.mapper
}

mapper := report.NewMapper(r.config.PriorityMap)

r.mapper = mapper

return mapper
}

// SecretClient resolver method
func (r *Resolver) SecretClient() secrets.Client {
clientset, err := k8s.NewForConfig(r.k8sConfig)
Expand Down
14 changes: 0 additions & 14 deletions pkg/config/resolver_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -332,20 +332,6 @@ func Test_ResolveCache(t *testing.T) {
})
}

func Test_ResolveMapper(t *testing.T) {
resolver := config.NewResolver(testConfig, &rest.Config{})

mapper1 := resolver.Mapper()
if mapper1 == nil {
t.Error("Error: Should return Mapper")
}

mapper2 := resolver.Mapper()
if mapper1 != mapper2 {
t.Error("A second call resolver.Mapper() should return the cached first cache")
}
}

func Test_ResolveReportFilter(t *testing.T) {
resolver := config.NewResolver(testConfig, &rest.Config{})

Expand Down
6 changes: 1 addition & 5 deletions pkg/listener/send_result.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import (

const SendResults = "send_results_listener"

func NewSendResultListener(clients []target.Client, mapper report.Mapper) report.PolicyReportResultListener {
func NewSendResultListener(clients []target.Client) report.PolicyReportResultListener {
return func(rep v1alpha2.ReportInterface, r v1alpha2.PolicyReportResult, e bool) {
wg := &sync.WaitGroup{}
wg.Add(len(clients))
Expand All @@ -21,10 +21,6 @@ func NewSendResultListener(clients []target.Client, mapper report.Mapper) report
go func(target target.Client, re v1alpha2.ReportInterface, result v1alpha2.PolicyReportResult, preExisted bool) {
defer wg.Done()

if result.Result == v1alpha2.StatusFail {
result.Priority = mapper.ResolvePriority(result.Policy, result.Severity)
}

if !result.HasResource() && re.GetScope() != nil {
result.Resources = []corev1.ObjectReference{*re.GetScope()}
}
Expand Down
7 changes: 3 additions & 4 deletions pkg/listener/send_result_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (
"github.com/kyverno/policy-reporter/pkg/crd/api/policyreport/v1alpha2"
"github.com/kyverno/policy-reporter/pkg/fixtures"
"github.com/kyverno/policy-reporter/pkg/listener"
"github.com/kyverno/policy-reporter/pkg/report"
"github.com/kyverno/policy-reporter/pkg/target"
)

Expand Down Expand Up @@ -49,7 +48,7 @@ func (c *client) CleanUp(_ context.Context, _ v1alpha2.ReportInterface) {
func Test_SendResultListener(t *testing.T) {
t.Run("Send Result", func(t *testing.T) {
c := &client{validated: true}
slistener := listener.NewSendResultListener([]target.Client{c}, report.NewMapper(make(map[string]string)))
slistener := listener.NewSendResultListener([]target.Client{c})
slistener(preport1, fixtures.FailResult, false)

if !c.Called {
Expand All @@ -58,7 +57,7 @@ func Test_SendResultListener(t *testing.T) {
})
t.Run("Don't Send Result when validation fails", func(t *testing.T) {
c := &client{validated: false}
slistener := listener.NewSendResultListener([]target.Client{c}, report.NewMapper(make(map[string]string)))
slistener := listener.NewSendResultListener([]target.Client{c})
slistener(preport1, fixtures.FailResult, false)

if c.Called {
Expand All @@ -67,7 +66,7 @@ func Test_SendResultListener(t *testing.T) {
})
t.Run("Don't Send pre existing Result when skipExistingOnStartup is true", func(t *testing.T) {
c := &client{skipExistingOnStartup: true}
slistener := listener.NewSendResultListener([]target.Client{c}, report.NewMapper(make(map[string]string)))
slistener := listener.NewSendResultListener([]target.Client{c})
slistener(preport1, fixtures.FailResult, true)

if c.Called {
Expand Down
29 changes: 0 additions & 29 deletions pkg/report/mapper.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,35 +4,6 @@ import (
"github.com/kyverno/policy-reporter/pkg/crd/api/policyreport/v1alpha2"
)

type Mapper interface {
ResolvePriority(policy string, severity v1alpha2.PolicySeverity) v1alpha2.Priority
}

type mapper struct {
priorityMap map[string]string
}

func (m *mapper) ResolvePriority(policy string, severity v1alpha2.PolicySeverity) v1alpha2.Priority {
if priority, ok := m.priorityMap[policy]; ok {
return v1alpha2.NewPriority(priority)
}

if severity != "" {
return v1alpha2.PriorityFromSeverity(severity)
}

if priority, ok := m.priorityMap["default"]; ok {
return v1alpha2.NewPriority(priority)
}

return v1alpha2.WarningPriority
}

// NewMapper creates an new Mapper instance
func NewMapper(priorities map[string]string) Mapper {
return &mapper{priorityMap: priorities}
}

func ResolvePriority(result v1alpha2.PolicyReportResult) v1alpha2.Priority {
if result.Result == v1alpha2.StatusSkip {
return v1alpha2.DebugPriority
Expand Down
37 changes: 0 additions & 37 deletions pkg/report/mapper_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,43 +7,6 @@ import (
"github.com/kyverno/policy-reporter/pkg/report"
)

var priorityMap = map[string]string{
"priority-test": "warning",
}

var mapper = report.NewMapper(priorityMap)

func Test_MapperResolvePriority(t *testing.T) {
t.Run("priority from map", func(t *testing.T) {
priority := mapper.ResolvePriority("priority-test", v1alpha2.SeverityHigh)
if priority != v1alpha2.WarningPriority {
t.Error("expected priority warning, mapped from priority map")
}
})

t.Run("priority from severity", func(t *testing.T) {
priority := mapper.ResolvePriority("test", v1alpha2.SeverityCritical)
if priority != v1alpha2.CriticalPriority {
t.Error("expected priority critical, mapped from severity")
}
})

t.Run("priority from fallback", func(t *testing.T) {
priority := mapper.ResolvePriority("test", "")
if priority != v1alpha2.WarningPriority {
t.Error("expected priority warning, mapped from fallback")
}
})

t.Run("priority from default", func(t *testing.T) {
mapper := report.NewMapper(map[string]string{"default": "info"})
priority := mapper.ResolvePriority("test", "")
if priority != v1alpha2.InfoPriority {
t.Error("expected priority info, mapped from default")
}
})
}

func Test_ResolvePriority(t *testing.T) {
t.Run("Status Skip", func(t *testing.T) {
priority := report.ResolvePriority(v1alpha2.PolicyReportResult{
Expand Down

0 comments on commit 38c665a

Please sign in to comment.