Skip to content

Commit f8691fa

Browse files
authored
Merge pull request #282 from intelops/pvc
Pvc
2 parents 220a3d2 + 318eadb commit f8691fa

File tree

6 files changed

+67
-79
lines changed

6 files changed

+67
-79
lines changed

agent/kubviz/kubePreUpgrade.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -79,19 +79,20 @@ func publishK8sDepricated_Deleted_Api(result *model.Result, js nats.JetStreamCon
7979
}
8080

8181
func KubePreUpgradeDetector(config *rest.Config, js nats.JetStreamContext) error {
82-
swaggerdir, err := os.MkdirTemp("", "kubepug")
82+
pvcMountPath := "/mnt/agent/kbz"
83+
uniqueDir := fmt.Sprintf("%s/kubepug", pvcMountPath)
84+
err := os.MkdirAll(uniqueDir, 0755)
8385
if err != nil {
8486
return err
8587
}
86-
filename := fmt.Sprintf("%s/swagger-%s.json", swaggerdir, k8sVersion)
88+
filename := fmt.Sprintf("%s/swagger-%s.json", uniqueDir, k8sVersion)
8789
url := fmt.Sprintf("%s/%s/%s", baseURL, k8sVersion, fileURL)
8890
err = downloadFile(filename, url)
8991
if err != nil {
9092
return err
9193
}
92-
defer os.RemoveAll(swaggerdir)
93-
swaggerfile := filename
94-
kubernetesAPIs, err := PopulateKubeAPIMap(swaggerfile)
94+
defer os.RemoveAll(filename)
95+
kubernetesAPIs, err := PopulateKubeAPIMap(filename)
9596
if err != nil {
9697
return err
9798
}

agent/kubviz/trivy.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ package main
33
import (
44
"bytes"
55
"encoding/json"
6+
"fmt"
67
"log"
8+
"os"
79
exec "os/exec"
810
"strings"
911

@@ -29,8 +31,15 @@ func executeCommandTrivy(command string) ([]byte, error) {
2931
return outc.Bytes(), err
3032
}
3133
func RunTrivyK8sClusterScan(js nats.JetStreamContext) error {
34+
pvcMountPath := "/mnt/agent/kbz"
35+
trivyCacheDir := fmt.Sprintf("%s/trivy-cache", pvcMountPath)
36+
err := os.MkdirAll(trivyCacheDir, 0755)
37+
if err != nil {
38+
log.Printf("Error creating Trivy cache directory: %v\n", err)
39+
return err
40+
}
3241
var report report.ConsolidatedReport
33-
cmdString := "trivy k8s --report summary cluster --exclude-nodes kubernetes.io/arch:amd64 --timeout 60m -f json --cache-dir /tmp/.cache --debug"
42+
cmdString := fmt.Sprintf("trivy k8s --report summary cluster --exclude-nodes kubernetes.io/arch:amd64 --timeout 60m -f json --cache-dir %s --debug", trivyCacheDir)
3443
clearCacheCmd := "trivy k8s --clear-cache"
3544
out, err := executeCommandTrivy(cmdString)
3645
if err != nil {

agent/kubviz/trivy_image.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package main
22

33
import (
44
"encoding/json"
5+
"fmt"
56
"log"
67
"os"
78
"strings"
@@ -15,6 +16,13 @@ import (
1516
)
1617

1718
func RunTrivyImageScans(config *rest.Config, js nats.JetStreamContext) error {
19+
pvcMountPath := "/mnt/agent/kbz"
20+
trivyImageCacheDir := fmt.Sprintf("%s/trivy-imagecache", pvcMountPath)
21+
err := os.MkdirAll(trivyImageCacheDir, 0755)
22+
if err != nil {
23+
log.Printf("Error creating Trivy Image cache directory: %v\n", err)
24+
return err
25+
}
1826
clearCacheCmd := "trivy image --clear-cache"
1927

2028
images, err := ListImages(config)
@@ -25,7 +33,8 @@ func RunTrivyImageScans(config *rest.Config, js nats.JetStreamContext) error {
2533

2634
for _, image := range images {
2735
var report types.Report
28-
out, err := executeCommand("trivy image " + image.PullableImage + " --timeout 60m -f json -q --cache-dir /tmp/.cache")
36+
scanCmd := fmt.Sprintf("trivy image %s --timeout 60m -f json -q --cache-dir %s", image.PullableImage, trivyImageCacheDir)
37+
out, err := executeCommand(scanCmd)
2938
if err != nil {
3039
log.Printf("Error scanning image %s: %v", image.PullableImage, err)
3140
continue // Move on to the next image in case of an error
@@ -74,12 +83,3 @@ func publishImageScanReports(report types.Report, js nats.JetStreamContext) erro
7483
log.Printf("Trivy image report with ID:%s has been published\n", metrics.ID)
7584
return nil
7685
}
77-
78-
func cleanupCache(cacheDir string) {
79-
err := os.RemoveAll(cacheDir)
80-
if err != nil {
81-
log.Printf("Failed to clean up cache directory %s: %v", cacheDir, err)
82-
} else {
83-
log.Printf("Cache directory %s cleaned up successfully", cacheDir)
84-
}
85-
}

agent/kubviz/trivy_sbom.go

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import (
55
"encoding/json"
66
"fmt"
77
"log"
8+
"os"
89
"os/exec"
910

1011
"github.com/aquasecurity/trivy/pkg/sbom/cyclonedx"
@@ -46,6 +47,13 @@ func executeCommandSbom(command string) ([]byte, error) {
4647
}
4748

4849
func RunTrivySbomScan(config *rest.Config, js nats.JetStreamContext) error {
50+
pvcMountPath := "/mnt/agent/kbz"
51+
trivySbomCacheDir := fmt.Sprintf("%s/trivy-sbomcache", pvcMountPath)
52+
err := os.MkdirAll(trivySbomCacheDir, 0755)
53+
if err != nil {
54+
log.Printf("Error creating Trivy cache directory: %v\n", err)
55+
return err
56+
}
4957
clearCacheCmd := "trivy image --clear-cache"
5058

5159
log.Println("trivy sbom run started")
@@ -56,8 +64,8 @@ func RunTrivySbomScan(config *rest.Config, js nats.JetStreamContext) error {
5664
}
5765
for _, image := range images {
5866

59-
command := fmt.Sprintf("trivy image --format cyclonedx %s %s", image.PullableImage, "--cache-dir /tmp/.cache")
60-
out, err := executeCommandSbom(command)
67+
sbomcmd := fmt.Sprintf("trivy image --format cyclonedx %s --cache-dir %s", image.PullableImage, trivySbomCacheDir)
68+
out, err := executeCommandSbom(sbomcmd)
6169

6270
if err != nil {
6371
log.Printf("Error executing Trivy for image sbom %s: %v", image.PullableImage, err)

client/pkg/clickhouse/db_client.go

Lines changed: 30 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -136,14 +136,12 @@ func (c *DBClient) InsertContainerEventAzure(pushEvent model.AzureContainerPushE
136136

137137
tx, err := c.conn.Begin()
138138
if err != nil {
139-
log.Printf("error beginning transaction: %v", err)
140-
return
139+
log.Fatalf("error beginning transaction, clickhouse connection not available: %v", err)
141140
}
142141

143142
stmt, err := tx.Prepare(string(InsertAzureContainerPushEvent))
144143
if err != nil {
145-
log.Printf("error preparing statement: %v", err)
146-
return
144+
log.Fatalf("error preparing statement: %v", err)
147145
}
148146

149147
defer stmt.Close()
@@ -187,14 +185,12 @@ func (c *DBClient) InsertContainerEventAzure(pushEvent model.AzureContainerPushE
187185
func (c *DBClient) InsertContainerEventQuay(pushEvent model.QuayImagePushPayload) {
188186
tx, err := c.conn.Begin()
189187
if err != nil {
190-
log.Printf("error beginning transaction: %v", err)
191-
return
188+
log.Fatalf("error beginning transaction, clickhouse connection not available: %v", err)
192189
}
193190

194191
stmt, err := tx.Prepare(string(InsertQuayContainerPushEvent))
195192
if err != nil {
196-
log.Printf("error preparing statement: %v", err)
197-
return
193+
log.Fatalf("error preparing statement: %v", err)
198194
}
199195

200196
defer stmt.Close()
@@ -240,14 +236,12 @@ func (c *DBClient) InsertContainerEventQuay(pushEvent model.QuayImagePushPayload
240236
func (c *DBClient) InsertContainerEventJfrog(pushEvent model.JfrogContainerPushEventPayload) {
241237
tx, err := c.conn.Begin()
242238
if err != nil {
243-
log.Printf("error beginning transaction: %v", err)
244-
return
239+
log.Fatalf("error beginning transaction, clickhouse connection not available: %v", err)
245240
}
246241

247242
stmt, err := tx.Prepare(string(InsertJfrogContainerPushEvent))
248243
if err != nil {
249-
log.Printf("error preparing statement: %v", err)
250-
return
244+
log.Fatalf("error preparing statement: %v", err)
251245
}
252246

253247
defer stmt.Close()
@@ -293,13 +287,11 @@ func (c *DBClient) InsertContainerEventJfrog(pushEvent model.JfrogContainerPushE
293287
func (c *DBClient) InsertRakeesMetrics(metrics model.RakeesMetrics) {
294288
tx, err := c.conn.Begin()
295289
if err != nil {
296-
log.Printf("error beginning transaction: %v", err)
297-
return
290+
log.Fatalf("error beginning transaction, clickhouse connection not available: %v", err)
298291
}
299292
stmt, err := tx.Prepare(string(InsertRakees))
300293
if err != nil {
301-
log.Printf("error preparing statement: %v", err)
302-
return
294+
log.Fatalf("error preparing statement: %v", err)
303295
}
304296

305297
defer stmt.Close()
@@ -325,13 +317,11 @@ func (c *DBClient) InsertRakeesMetrics(metrics model.RakeesMetrics) {
325317
func (c *DBClient) InsertKetallEvent(metrics model.Resource) {
326318
tx, err := c.conn.Begin()
327319
if err != nil {
328-
log.Printf("error beginning transaction: %v", err)
329-
return
320+
log.Fatalf("error beginning transaction, clickhouse connection not available: %v", err)
330321
}
331322
stmt, err := tx.Prepare(string(InsertKetall))
332323
if err != nil {
333-
log.Printf("error preparing statement: %v", err)
334-
return
324+
log.Fatalf("error preparing statement: %v", err)
335325
}
336326

337327
defer stmt.Close()
@@ -356,13 +346,11 @@ func (c *DBClient) InsertKetallEvent(metrics model.Resource) {
356346
func (c *DBClient) InsertOutdatedEvent(metrics model.CheckResultfinal) {
357347
tx, err := c.conn.Begin()
358348
if err != nil {
359-
log.Printf("error beginning transaction: %v", err)
360-
return
349+
log.Fatalf("error beginning transaction, clickhouse connection not available: %v", err)
361350
}
362351
stmt, err := tx.Prepare(string(InsertOutdated))
363352
if err != nil {
364-
log.Printf("error preparing statement: %v", err)
365-
return
353+
log.Fatalf("error preparing statement: %v", err)
366354
}
367355

368356
defer stmt.Close()
@@ -389,13 +377,11 @@ func (c *DBClient) InsertOutdatedEvent(metrics model.CheckResultfinal) {
389377
func (c *DBClient) InsertDeprecatedAPI(deprecatedAPI model.DeprecatedAPI) {
390378
tx, err := c.conn.Begin()
391379
if err != nil {
392-
log.Printf("error beginning transaction: %v", err)
393-
return
380+
log.Fatalf("error beginning transaction, clickhouse connection not available: %v", err)
394381
}
395382
stmt, err := tx.Prepare(string(InsertDepricatedApi))
396383
if err != nil {
397-
log.Printf("error preparing statement: %v", err)
398-
return
384+
log.Fatalf("error preparing statement: %v", err)
399385
}
400386

401387
defer stmt.Close()
@@ -429,13 +415,11 @@ func (c *DBClient) InsertDeprecatedAPI(deprecatedAPI model.DeprecatedAPI) {
429415
func (c *DBClient) InsertDeletedAPI(deletedAPI model.DeletedAPI) {
430416
tx, err := c.conn.Begin()
431417
if err != nil {
432-
log.Printf("error beginning transaction: %v", err)
433-
return
418+
log.Fatalf("error beginning transaction, clickhouse connection not available: %v", err)
434419
}
435420
stmt, err := tx.Prepare(string(InsertDeletedApi))
436421
if err != nil {
437-
log.Printf("error preparing statement: %v", err)
438-
return
422+
log.Fatalf("error preparing statement: %v", err)
439423
}
440424

441425
defer stmt.Close()
@@ -470,13 +454,11 @@ func (c *DBClient) InsertDeletedAPI(deletedAPI model.DeletedAPI) {
470454
func (c *DBClient) InsertKubvizEvent(metrics model.Metrics) {
471455
tx, err := c.conn.Begin()
472456
if err != nil {
473-
log.Printf("error beginning transaction: %v", err)
474-
return
457+
log.Fatalf("error beginning transaction, clickhouse connection not available: %v", err)
475458
}
476459
stmt, err := tx.Prepare(string(InsertKubvizEvent))
477460
if err != nil {
478-
log.Printf("error preparing statement: %v", err)
479-
return
461+
log.Fatalf("error preparing statement: %v", err)
480462
}
481463

482464
defer stmt.Close()
@@ -539,13 +521,11 @@ func (c *DBClient) InsertContainerEvent(event string) {
539521
func (c *DBClient) InsertKubeScoreMetrics(metrics model.KubeScoreRecommendations) {
540522
tx, err := c.conn.Begin()
541523
if err != nil {
542-
log.Printf("error beginning transaction: %v", err)
543-
return
524+
log.Fatalf("error beginning transaction, clickhouse connection not available: %v", err)
544525
}
545526
stmt, err := tx.Prepare(InsertKubeScore)
546527
if err != nil {
547-
log.Printf("error preparing statement: %v", err)
548-
return
528+
log.Fatalf("error preparing statement: %v", err)
549529
}
550530
defer stmt.Close()
551531

@@ -571,13 +551,11 @@ func (c *DBClient) InsertTrivyMetrics(metrics model.Trivy) {
571551
for _, vulnerability := range result.Vulnerabilities {
572552
tx, err := c.conn.Begin()
573553
if err != nil {
574-
log.Printf("error beginning transaction: %v", err)
575-
return
554+
log.Fatalf("error beginning transaction, clickhouse connection not available: %v", err)
576555
}
577556
stmt, err := tx.Prepare(InsertTrivyVul)
578557
if err != nil {
579-
log.Printf("error preparing statement: %v", err)
580-
return
558+
log.Fatalf("error preparing statement: %v", err)
581559
}
582560
if _, err := stmt.Exec(
583561
metrics.ID,
@@ -608,13 +586,11 @@ func (c *DBClient) InsertTrivyMetrics(metrics model.Trivy) {
608586
for _, misconfiguration := range result.Misconfigurations {
609587
tx, err := c.conn.Begin()
610588
if err != nil {
611-
log.Printf("error beginning transaction: %v", err)
612-
return
589+
log.Fatalf("error beginning transaction, clickhouse connection not available: %v", err)
613590
}
614591
stmt, err := tx.Prepare(InsertTrivyMisconfig)
615592
if err != nil {
616-
log.Printf("error preparing statement: %v", err)
617-
return
593+
log.Fatalf("error preparing statement: %v", err)
618594
}
619595

620596
defer stmt.Close()
@@ -654,13 +630,11 @@ func (c *DBClient) InsertTrivyImageMetrics(metrics model.TrivyImage) {
654630
for _, vulnerability := range result.Vulnerabilities {
655631
tx, err := c.conn.Begin()
656632
if err != nil {
657-
log.Printf("error beginning transaction: %v", err)
658-
return
633+
log.Fatalf("error beginning transaction, clickhouse connection not available: %v", err)
659634
}
660635
stmt, err := tx.Prepare(InsertTrivyImage)
661636
if err != nil {
662-
log.Printf("error preparing statement: %v", err)
663-
return
637+
log.Fatalf("error preparing statement: %v", err)
664638
}
665639

666640
if _, err := stmt.Exec(
@@ -700,13 +674,11 @@ func (c *DBClient) InsertTrivySbomMetrics(metrics model.Sbom) {
700674
if result.CycloneDX != nil {
701675
tx, err := c.conn.Begin()
702676
if err != nil {
703-
log.Printf("error beginning transaction: %v", err)
704-
return
677+
log.Fatalf("error beginning transaction, clickhouse connection not available: %v", err)
705678
}
706679
stmt, err := tx.Prepare(InsertTrivySbom)
707680
if err != nil {
708-
log.Printf("error preparing statement: %v", err)
709-
return
681+
log.Fatalf("error preparing statement: %v", err)
710682
}
711683

712684
if _, err := stmt.Exec(
@@ -834,14 +806,12 @@ func (c *DBClient) RetrieveKubvizEvent() ([]model.DbEvent, error) {
834806
func (c *DBClient) InsertContainerEventDockerHub(build model.DockerHubBuild) {
835807
tx, err := c.conn.Begin()
836808
if err != nil {
837-
log.Printf("error beginning transaction: %v", err)
838-
return
809+
log.Fatalf("error beginning transaction, clickhouse connection not available: %v", err)
839810
}
840811
stmt, err := tx.Prepare(string(InsertDockerHubBuild))
841812

842813
if err != nil {
843-
log.Printf("error preparing statement: %v", err)
844-
return
814+
log.Fatalf("error preparing statement: %v", err)
845815
}
846816
defer stmt.Close()
847817

dockerfiles/client/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 GO111MODULE=on go build -a -o k8smetri
1111

1212
# Use distroless as minimal base image to package the manager binary
1313
# Refer to https://github.com/GoogleContainerTools/distroless for more details
14-
FROM gcr.io/distroless/static:nonroot
14+
FROM golang:alpine
1515
WORKDIR /
1616
COPY --from=builder /workspace/k8smetrics_client .
1717
USER 65532:65532

0 commit comments

Comments
 (0)