Skip to content

Commit 63a89d8

Browse files
committed
fix secretRef and handle invalid target config
Signed-off-by: Frank Jogeleit <[email protected]>
1 parent 38e602a commit 63a89d8

File tree

6 files changed

+60
-28
lines changed

6 files changed

+60
-28
lines changed

cmd/run.go

+2
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,8 @@ func newRunCMD(version string) *cobra.Command {
178178

179179
if c.CRD.TargetConfig {
180180
g.Go(func() error {
181+
readinessProbe.Wait()
182+
181183
stop := make(chan struct{})
182184
client, err := resolver.TargetConfigClient()
183185
if err != nil {

pkg/helper/first.go

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
package helper
2+
3+
func First[T any](list []*T) *T {
4+
if len(list) == 0 {
5+
return nil
6+
}
7+
8+
return list[0]
9+
}

pkg/helper/first_test.go

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package helper_test
2+
3+
import (
4+
"testing"
5+
6+
"github.com/stretchr/testify/assert"
7+
8+
"github.com/kyverno/policy-reporter/pkg/helper"
9+
)
10+
11+
type item struct {
12+
val int
13+
}
14+
15+
func TestFirst(t *testing.T) {
16+
t.Run("return nil for empty list", func(t *testing.T) {
17+
assert.Nil(t, helper.First([]*item{}))
18+
})
19+
20+
t.Run("return first item", func(t *testing.T) {
21+
assert.Equal(t, 0, helper.First([]*item{{val: 0}, {val: 1}}).val)
22+
assert.Equal(t, 3, helper.First([]*item{{val: 3}, {val: 1}, {val: 2}}).val)
23+
})
24+
}

pkg/target/factory/factory.go

+16-24
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414

1515
"github.com/kyverno/policy-reporter/pkg/crd/api/targetconfig/v1alpha1"
1616
"github.com/kyverno/policy-reporter/pkg/filters"
17+
"github.com/kyverno/policy-reporter/pkg/helper"
1718
"github.com/kyverno/policy-reporter/pkg/kubernetes/secrets"
1819
"github.com/kyverno/policy-reporter/pkg/report"
1920
"github.com/kyverno/policy-reporter/pkg/target"
@@ -99,38 +100,26 @@ func (f *TargetFactory) CreateClients(config *target.Targets) *target.Collection
99100
}
100101

101102
func (f *TargetFactory) CreateSingleClient(tc *v1alpha1.TargetConfig) (*target.Target, error) {
102-
var t *target.Target
103-
104103
if tc.Spec.S3 != nil {
105-
t = createClients(tc.Name, createConfig(tc, tc.Spec.S3), f.CreateS3Target)[0]
106-
return t, nil
104+
return helper.First(createClients(tc.Name, createConfig(tc, tc.Spec.S3), f.CreateS3Target)), nil
107105
} else if tc.Spec.Webhook != nil {
108-
t = createClients(tc.Name, createConfig(tc, tc.Spec.Webhook), f.CreateWebhookTarget)[0]
109-
return t, nil
106+
return helper.First(createClients(tc.Name, createConfig(tc, tc.Spec.Webhook), f.CreateWebhookTarget)), nil
110107
} else if tc.Spec.GCS != nil {
111-
t = createClients(tc.Name, createConfig(tc, tc.Spec.GCS), f.CreateGCSTarget)[0]
112-
return t, nil
108+
return helper.First(createClients(tc.Name, createConfig(tc, tc.Spec.GCS), f.CreateGCSTarget)), nil
113109
} else if tc.Spec.ElasticSearch != nil {
114-
t = createClients(tc.Name, createConfig(tc, tc.Spec.ElasticSearch), f.CreateElasticsearchTarget)[0]
115-
return t, nil
110+
return helper.First(createClients(tc.Name, createConfig(tc, tc.Spec.ElasticSearch), f.CreateElasticsearchTarget)), nil
116111
} else if tc.Spec.Telegram != nil {
117-
t = createClients(tc.Name, createConfig(tc, tc.Spec.Telegram), f.CreateTelegramTarget)[0]
118-
return t, nil
112+
return helper.First(createClients(tc.Name, createConfig(tc, tc.Spec.Telegram), f.CreateTelegramTarget)), nil
119113
} else if tc.Spec.Kinesis != nil {
120-
t = createClients(tc.Name, createConfig(tc, tc.Spec.Kinesis), f.CreateKinesisTarget)[0]
121-
return t, nil
114+
return helper.First(createClients(tc.Name, createConfig(tc, tc.Spec.Kinesis), f.CreateKinesisTarget)), nil
122115
} else if tc.Spec.SecurityHub != nil {
123-
t = createClients(tc.Name, createConfig(tc, tc.Spec.SecurityHub), f.CreateSecurityHubTarget)[0]
124-
return t, nil
116+
return helper.First(createClients(tc.Name, createConfig(tc, tc.Spec.SecurityHub), f.CreateSecurityHubTarget)), nil
125117
} else if tc.Spec.Loki != nil {
126-
t = createClients(tc.Name, createConfig(tc, tc.Spec.Loki), f.CreateLokiTarget)[0]
127-
return t, nil
118+
return helper.First(createClients(tc.Name, createConfig(tc, tc.Spec.Loki), f.CreateLokiTarget)), nil
128119
} else if tc.Spec.Slack != nil {
129-
t = createClients(tc.Name, createConfig(tc, tc.Spec.Slack), f.CreateSlackTarget)[0]
130-
return t, nil
120+
return helper.First(createClients(tc.Name, createConfig(tc, tc.Spec.Slack), f.CreateSlackTarget)), nil
131121
} else if tc.Spec.Teams != nil {
132-
t = createClients(tc.Name, createConfig(tc, tc.Spec.Teams), f.CreateTeamsTarget)[0]
133-
return t, nil
122+
return helper.First(createClients(tc.Name, createConfig(tc, tc.Spec.Teams), f.CreateTeamsTarget)), nil
134123
}
135124
return nil, fmt.Errorf("invalid target type passed")
136125
}
@@ -831,15 +820,15 @@ func (f *TargetFactory) mapSecretValues(config any, ref, mountedSecret string) {
831820
}
832821

833822
case *v1alpha1.Config[v1alpha1.SlackOptions]:
834-
if values.Host != "" {
823+
if values.Webhook != "" {
835824
c.Config.Webhook = values.Webhook
836825
}
837826
if values.Channel != "" {
838827
c.Config.Channel = values.Channel
839828
}
840829

841830
case *v1alpha1.Config[v1alpha1.WebhookOptions]:
842-
if values.Host != "" {
831+
if values.Webhook != "" {
843832
c.Config.Webhook = values.Webhook
844833
}
845834
if values.Token != "" {
@@ -903,6 +892,9 @@ func (f *TargetFactory) mapSecretValues(config any, ref, mountedSecret string) {
903892
if values.Token != "" {
904893
c.Config.Token = values.Token
905894
}
895+
if values.Webhook != "" {
896+
c.Config.Webhook = values.Webhook
897+
}
906898
if values.Host != "" {
907899
c.Config.Webhook = values.Host
908900
}

pkg/target/telegram/telegram.go

-1
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,6 @@ func (e *client) Send(result v1alpha2.PolicyReportResult) {
133133
req, err := http.CreateJSONRequest("POST", e.host, payload)
134134
if err != nil {
135135
zap.L().Error(e.Name()+": PUSH FAILED", zap.Error(err))
136-
fmt.Println(err)
137136
return
138137
}
139138

pkg/targetconfig/client.go

+9-3
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,25 @@ func (c *Client) ConfigureInformer() {
2727

2828
t, err := c.targetFactory.CreateSingleClient(tc)
2929
if err != nil {
30-
c.logger.Error("unable to create target from TargetConfig: " + err.Error())
30+
c.logger.Error("unable to create target from TargetConfig", zap.String("name", tc.Name), zap.Error(err))
31+
return
32+
} else if t == nil {
33+
c.logger.Error("provided TargetConfig is invalid", zap.String("name", tc.Name))
3134
return
3235
}
3336

3437
c.collection.AddTarget(tc.Name, t)
3538
},
3639
UpdateFunc: func(oldObj, newObj interface{}) {
3740
tc := newObj.(*v1alpha1.TargetConfig)
38-
c.logger.Info(fmt.Sprintf("update target: %s", tc.Name))
41+
c.logger.Info("update target", zap.String("name", tc.Name))
3942

4043
t, err := c.targetFactory.CreateSingleClient(tc)
4144
if err != nil {
42-
c.logger.Error("unable to create target from TargetConfig: " + err.Error())
45+
c.logger.Error("unable to create target from TargetConfig", zap.String("name", tc.Name), zap.Error(err))
46+
return
47+
} else if t == nil {
48+
c.logger.Error("provided TargetConfig is invalid", zap.String("name", tc.Name))
4349
return
4450
}
4551

0 commit comments

Comments
 (0)