Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings
This repository was archived by the owner on Sep 3, 2025. It is now read-only.
/coder-xrayPublic archive

Commit0a39e93

Browse files
committed
more stuff
1 parent5d111f2 commit0a39e93

File tree

7 files changed

+124
-18
lines changed

7 files changed

+124
-18
lines changed

‎go.mod‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ require (
1212
github.com/google/go-containerregistryv0.14.0
1313
github.com/jfrog/jfrog-client-gov1.31.6
1414
github.com/spf13/cobrav1.8.0
15+
github.com/stretchr/testifyv1.8.4
1516
golang.org/x/xerrorsv0.0.0-20220907171357-04be3eba64a2
1617
k8s.io/apiv0.29.1
1718
k8s.io/apimachineryv0.29.1
@@ -71,6 +72,7 @@ require (
7172
github.com/ebitengine/puregov0.5.0-alpha.1// indirect
7273
github.com/emicklei/go-restful/v3v3.11.0// indirect
7374
github.com/emirpasic/godsv1.18.1// indirect
75+
github.com/evanphx/json-patchv5.6.0+incompatible// indirect
7476
github.com/fatih/colorv1.16.0// indirect
7577
github.com/forPelevin/gomojiv1.1.8// indirect
7678
github.com/fxamacker/cbor/v2v2.4.0// indirect
@@ -162,6 +164,7 @@ require (
162164
github.com/pion/udpv0.1.2// indirect
163165
github.com/pjbgf/sha1cdv0.3.0// indirect
164166
github.com/pkg/errorsv0.9.1// indirect
167+
github.com/pmezard/go-difflibv1.0.1-0.20181226105442-5d4384ee4fb2// indirect
165168
github.com/prometheus/client_golangv1.18.0// indirect
166169
github.com/prometheus/client_modelv0.5.0// indirect
167170
github.com/prometheus/commonv0.46.0// indirect

‎go.sum‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,8 @@ github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxER
201201
github.com/emicklei/go-restful/v3v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
202202
github.com/emirpasic/godsv1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
203203
github.com/emirpasic/godsv1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
204+
github.com/evanphx/json-patchv5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U=
205+
github.com/evanphx/json-patchv5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
204206
github.com/fatih/colorv1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
205207
github.com/fatih/colorv1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM=
206208
github.com/fatih/colorv1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE=

‎reporter/coder.go‎

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package reporter
2+
3+
import (
4+
"context"
5+
"net/url"
6+
7+
"github.com/coder/coder/v2/codersdk"
8+
"github.com/coder/coder/v2/codersdk/agentsdk"
9+
)
10+
11+
typeCoderClientinterface {
12+
AgentManifest(ctx context.Context,tokenstring) (agentsdk.Manifest,error)
13+
PostJFrogXrayScan(ctx context.Context,req codersdk.JFrogXrayScan)error
14+
}
15+
16+
funcNewClient(coderURL*url.URL,tokenstring)CoderClient {
17+
c:=codersdk.New(coderURL)
18+
c.SetSessionToken(token)
19+
return&client{
20+
coder:c,
21+
}
22+
}
23+
24+
typeclientstruct {
25+
coder*codersdk.Client
26+
}
27+
28+
func (c*client)AgentManifest(ctx context.Context,tokenstring) (agentsdk.Manifest,error) {
29+
agent:=agentsdk.New(c.coder.URL)
30+
agent.SetSessionToken(token)
31+
returnagent.Manifest(ctx)
32+
}
33+
34+
func (c*client)PostJFrogXrayScan(ctx context.Context,req codersdk.JFrogXrayScan)error {
35+
returnc.coder.PostJFrogXrayScan(ctx,req)
36+
}

‎reporter/doc.go‎

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
// package reporter contains an abstraction for scanning Coder Kubernetes workspaces using JFrog JFrog
2+
// and uploading results to a Coder deployment.
3+
package reporter
4+
5+
//go:generate mockgen -destination ./codermock.go -package reporter github.com/coder/xray/reporter CoderClient

‎reporter/reporter.go‎

Lines changed: 4 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,8 @@ package reporter
33
import (
44
"context"
55
"fmt"
6-
"net/url"
76

87
"github.com/coder/coder/v2/codersdk"
9-
"github.com/coder/coder/v2/codersdk/agentsdk"
108
"github.com/coder/xray/jfrog"
119

1210
corev1"k8s.io/api/core/v1"
@@ -23,14 +21,12 @@ type K8sReporter struct {
2321
LabelSelectorstring
2422
FieldSelectorstring
2523
Namespacestring
26-
CoderURL*url.URL
24+
CoderClientCoderClient
2725
Logger slog.Logger
28-
CoderTokenstring
2926
JFrogClient*jfrog.Client
3027

31-
ctx context.Context
28+
// Unexported fields are initialized on calls to Init.
3229
podInformer cache.SharedIndexInformer
33-
errChanchanerror
3430
}
3531

3632
typeWorkspaceAgentstruct {
@@ -39,9 +35,6 @@ type WorkspaceAgent struct {
3935
}
4036

4137
func (k*K8sReporter)Init(ctx context.Context)error {
42-
k.ctx=ctx
43-
k.errChan=make(chanerror)
44-
4538
podFactory:=informers.NewSharedInformerFactoryWithOptions(k.Client,0,informers.WithNamespace(k.Namespace),informers.WithTweakListOptions(func(lo*v1.ListOptions) {
4639
lo.FieldSelector=k.FieldSelector
4740
lo.LabelSelector=k.LabelSelector
@@ -92,9 +85,7 @@ func (k *K8sReporter) Init(ctx context.Context) error {
9285
return
9386
}
9487

95-
agentClient:=agentsdk.New(k.CoderURL)
96-
agentClient.SetSessionToken(agentToken)
97-
manifest,err:=agentClient.Manifest(ctx)
88+
manifest,err:=k.CoderClient.AgentManifest(ctx,agentToken)
9889
iferr!=nil {
9990
log.Error(ctx,"Get agent manifest",slog.Error(err))
10091
return
@@ -106,9 +97,7 @@ func (k *K8sReporter) Init(ctx context.Context) error {
10697
slog.F("workspace_name",manifest.WorkspaceName),
10798
)
10899

109-
cclient:=codersdk.New(k.CoderURL)
110-
cclient.SetSessionToken(k.CoderToken)
111-
err=cclient.PostJFrogXrayScan(ctx, codersdk.JFrogXrayScan{
100+
err=k.CoderClient.PostJFrogXrayScan(ctx, codersdk.JFrogXrayScan{
112101
WorkspaceID:manifest.WorkspaceID,
113102
AgentID:manifest.AgentID,
114103
Critical:scan.SecurityIssues.Critical,

‎reporter/reporter_test.go‎

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
package reporter_test
2+
3+
import (
4+
"context"
5+
"net/url"
6+
"testing"
7+
"time"
8+
9+
"github.com/stretchr/testify/require"
10+
corev1"k8s.io/api/core/v1"
11+
v1"k8s.io/apimachinery/pkg/apis/meta/v1"
12+
"k8s.io/client-go/kubernetes/fake"
13+
14+
"cdr.dev/slog/sloggers/slogtest"
15+
16+
"github.com/coder/xray/reporter"
17+
)
18+
19+
funcTestK8SReporter(t*testing.T) {
20+
t.Parallel()
21+
22+
const (
23+
expectedCrit=12
24+
expectedHigh=10
25+
expectedMedium=5
26+
expectedImage="docker.io/ubuntu/22.04"
27+
expectedNamespace="test-namespace"
28+
expectedCoderToken="abc123"
29+
expectedAgentToken="test-token"
30+
)
31+
32+
k8sClient:=fake.NewSimpleClientset()
33+
34+
ctx:=context.Background()
35+
rep:= reporter.K8sReporter{
36+
Client:k8sClient,
37+
Namespace:expectedNamespace,
38+
CoderURL:&url.URL{},
39+
Logger:slogtest.Make(t,nil),
40+
CoderToken:expectedCoderToken,
41+
JFrogClient:jfrogClient,
42+
}
43+
44+
err=rep.Init(ctx)
45+
require.NoError(t,err)
46+
47+
pod:=&corev1.Pod{
48+
ObjectMeta: v1.ObjectMeta{
49+
Name:"test-pod",
50+
CreationTimestamp: v1.Time{
51+
Time:time.Now().Add(time.Hour),
52+
},
53+
},
54+
Spec: corev1.PodSpec{
55+
Containers: []corev1.Container{
56+
{
57+
Env: []corev1.EnvVar{
58+
{
59+
Name:"CODER_AGENT_TOKEN",
60+
Value:expectedAgentToken,
61+
},
62+
},
63+
Image:expectedImage,
64+
},
65+
},
66+
},
67+
}
68+
_,err=k8sClient.CoreV1().Pods(expectedNamespace).Create(ctx,pod, v1.CreateOptions{})
69+
require.NoError(t,err)
70+
}

‎root.go‎

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ import (
1414
"cdr.dev/slog/sloggers/sloghuman"
1515

1616
"github.com/coder/xray/jfrog"
17-
reporter"github.com/coder/xray/k8s"
17+
"github.com/coder/xray/reporter"
1818
)
1919

2020
funcroot()*cobra.Command {
@@ -74,13 +74,14 @@ func root() *cobra.Command {
7474
returnxerrors.Errorf("create artifactory client: %w",err)
7575
}
7676

77+
coderClient:=reporter.NewClient(coderParsed,coderToken)
78+
7779
kr:= reporter.K8sReporter{
7880
Client:kclient,
7981
JFrogClient:jclient,
82+
CoderClient:coderClient,
8083
Namespace:namespace,
81-
CoderURL:coderParsed,
8284
Logger:slog.Make(sloghuman.Sink(cmd.ErrOrStderr())),
83-
CoderToken:coderToken,
8485
}
8586

8687
err=kr.Init(cmd.Context())

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp