mirror of
https://github.com/kubescape/kubescape.git
synced 2026-02-14 18:09:55 +00:00
add verbose option to scan-images
Signed-off-by: Matthias Bertschy <matthias.bertschy@gmail.com>
This commit is contained in:
@@ -55,13 +55,13 @@ func NewPrettyPrinter(verboseMode bool, formatVersion string, attackTree bool, v
|
|||||||
func (pp *PrettyPrinter) SetMainPrinter() {
|
func (pp *PrettyPrinter) SetMainPrinter() {
|
||||||
switch pp.scanType {
|
switch pp.scanType {
|
||||||
case cautils.ScanTypeCluster:
|
case cautils.ScanTypeCluster:
|
||||||
pp.mainPrinter = prettyprinter.NewClusterPrinter(pp.writer)
|
pp.mainPrinter = prettyprinter.NewClusterPrinter(pp.writer, pp.verboseMode)
|
||||||
case cautils.ScanTypeRepo:
|
case cautils.ScanTypeRepo:
|
||||||
pp.mainPrinter = prettyprinter.NewRepoPrinter(pp.writer, pp.inputPatterns)
|
pp.mainPrinter = prettyprinter.NewRepoPrinter(pp.writer, pp.inputPatterns, pp.verboseMode)
|
||||||
case cautils.ScanTypeImage:
|
case cautils.ScanTypeImage:
|
||||||
pp.mainPrinter = prettyprinter.NewImagePrinter(pp.writer, pp.verboseMode)
|
pp.mainPrinter = prettyprinter.NewImagePrinter(pp.writer, pp.verboseMode)
|
||||||
case cautils.ScanTypeWorkload:
|
case cautils.ScanTypeWorkload:
|
||||||
pp.mainPrinter = prettyprinter.NewWorkloadPrinter(pp.writer)
|
pp.mainPrinter = prettyprinter.NewWorkloadPrinter(pp.writer, pp.verboseMode)
|
||||||
default:
|
default:
|
||||||
pp.mainPrinter = prettyprinter.NewSummaryPrinter(pp.writer, pp.verboseMode)
|
pp.mainPrinter = prettyprinter.NewSummaryPrinter(pp.writer, pp.verboseMode)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,20 +14,30 @@ import (
|
|||||||
type ClusterPrinter struct {
|
type ClusterPrinter struct {
|
||||||
writer *os.File
|
writer *os.File
|
||||||
categoriesTablePrinter configurationprinter.TablePrinter
|
categoriesTablePrinter configurationprinter.TablePrinter
|
||||||
|
imageTablePrinter imageprinter.TablePrinter
|
||||||
|
verboseMode bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewClusterPrinter(writer *os.File) *ClusterPrinter {
|
func NewClusterPrinter(writer *os.File, verboseMode bool) *ClusterPrinter {
|
||||||
return &ClusterPrinter{
|
return &ClusterPrinter{
|
||||||
writer: writer,
|
writer: writer,
|
||||||
categoriesTablePrinter: configurationprinter.NewClusterPrinter(),
|
categoriesTablePrinter: configurationprinter.NewClusterPrinter(),
|
||||||
|
imageTablePrinter: imageprinter.NewTableWriter(),
|
||||||
|
verboseMode: verboseMode,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ MainPrinter = &ClusterPrinter{}
|
var _ MainPrinter = &ClusterPrinter{}
|
||||||
|
|
||||||
func (cp *ClusterPrinter) PrintImageScanning(summary *imageprinter.ImageScanSummary) {
|
func (cp *ClusterPrinter) PrintImageScanning(summary *imageprinter.ImageScanSummary) {
|
||||||
printImageScanningSummary(cp.writer, *summary, false)
|
if cp.verboseMode {
|
||||||
printImagesCommands(cp.writer, *summary)
|
cp.imageTablePrinter.PrintImageScanningTable(cp.writer, *summary)
|
||||||
|
cautils.SimpleDisplay(cp.writer, "\n")
|
||||||
|
}
|
||||||
|
printImageScanningSummary(cp.writer, *summary, cp.verboseMode)
|
||||||
|
if !cp.verboseMode {
|
||||||
|
printImagesCommands(cp.writer, *summary)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (cp *ClusterPrinter) PrintConfigurationsScanning(summaryDetails *reportsummary.SummaryDetails, sortedControlIDs [][]string, topWorkloadsByScore []reporthandling.IResource) {
|
func (cp *ClusterPrinter) PrintConfigurationsScanning(summaryDetails *reportsummary.SummaryDetails, sortedControlIDs [][]string, topWorkloadsByScore []reporthandling.IResource) {
|
||||||
|
|||||||
@@ -42,17 +42,21 @@ func TestClusterScan_getWorkloadScanCommand(t *testing.T) {
|
|||||||
|
|
||||||
func TestNewClusterPrinter(t *testing.T) {
|
func TestNewClusterPrinter(t *testing.T) {
|
||||||
// Test case 1: Valid writer
|
// Test case 1: Valid writer
|
||||||
cp := NewClusterPrinter(os.Stdout)
|
cp := NewClusterPrinter(os.Stdout, false)
|
||||||
assert.NotNil(t, cp)
|
assert.NotNil(t, cp)
|
||||||
assert.Equal(t, os.Stdout, cp.writer)
|
assert.Equal(t, os.Stdout, cp.writer)
|
||||||
assert.NotNil(t, cp.categoriesTablePrinter)
|
assert.NotNil(t, cp.categoriesTablePrinter)
|
||||||
|
assert.NotNil(t, cp.imageTablePrinter)
|
||||||
|
assert.False(t, cp.verboseMode)
|
||||||
|
|
||||||
// Test case 2: Nil writer
|
// Test case 2: Nil writer
|
||||||
var writer *os.File
|
var writer *os.File
|
||||||
cp = NewClusterPrinter(writer)
|
cp = NewClusterPrinter(writer, true)
|
||||||
assert.NotNil(t, cp)
|
assert.NotNil(t, cp)
|
||||||
assert.Nil(t, cp.writer)
|
assert.Nil(t, cp.writer)
|
||||||
assert.NotNil(t, cp.categoriesTablePrinter)
|
assert.NotNil(t, cp.categoriesTablePrinter)
|
||||||
|
assert.NotNil(t, cp.imageTablePrinter)
|
||||||
|
assert.True(t, cp.verboseMode)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestPrintNextSteps(t *testing.T) {
|
func TestPrintNextSteps(t *testing.T) {
|
||||||
@@ -63,7 +67,7 @@ func TestPrintNextSteps(t *testing.T) {
|
|||||||
}
|
}
|
||||||
defer f.Close()
|
defer f.Close()
|
||||||
|
|
||||||
cp := NewClusterPrinter(f)
|
cp := NewClusterPrinter(f, false)
|
||||||
|
|
||||||
// Redirect stderr to the temporary file
|
// Redirect stderr to the temporary file
|
||||||
oldStderr := os.Stderr
|
oldStderr := os.Stderr
|
||||||
@@ -88,7 +92,7 @@ func TestPrintNextSteps(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestGetWorkloadScanCommand(t *testing.T) {
|
func TestGetWorkloadScanCommand(t *testing.T) {
|
||||||
cp := NewClusterPrinter(os.Stdout)
|
cp := NewClusterPrinter(os.Stdout, false)
|
||||||
assert.NotNil(t, cp)
|
assert.NotNil(t, cp)
|
||||||
assert.Equal(t, os.Stdout, cp.writer)
|
assert.Equal(t, os.Stdout, cp.writer)
|
||||||
assert.NotNil(t, cp.categoriesTablePrinter)
|
assert.NotNil(t, cp.categoriesTablePrinter)
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package prettyprinter
|
|||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
|
"github.com/kubescape/kubescape/v3/core/cautils"
|
||||||
"github.com/kubescape/kubescape/v3/core/pkg/resultshandling/printer/v2/prettyprinter/tableprinter/configurationprinter"
|
"github.com/kubescape/kubescape/v3/core/pkg/resultshandling/printer/v2/prettyprinter/tableprinter/configurationprinter"
|
||||||
"github.com/kubescape/kubescape/v3/core/pkg/resultshandling/printer/v2/prettyprinter/tableprinter/imageprinter"
|
"github.com/kubescape/kubescape/v3/core/pkg/resultshandling/printer/v2/prettyprinter/tableprinter/imageprinter"
|
||||||
"github.com/kubescape/opa-utils/reporthandling"
|
"github.com/kubescape/opa-utils/reporthandling"
|
||||||
@@ -15,6 +16,7 @@ type SummaryPrinter struct {
|
|||||||
writer *os.File
|
writer *os.File
|
||||||
verboseMode bool
|
verboseMode bool
|
||||||
summaryTablePrinter configurationprinter.TablePrinter
|
summaryTablePrinter configurationprinter.TablePrinter
|
||||||
|
imageTablePrinter imageprinter.TablePrinter
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewSummaryPrinter(writer *os.File, verboseMode bool) *SummaryPrinter {
|
func NewSummaryPrinter(writer *os.File, verboseMode bool) *SummaryPrinter {
|
||||||
@@ -22,12 +24,21 @@ func NewSummaryPrinter(writer *os.File, verboseMode bool) *SummaryPrinter {
|
|||||||
writer: writer,
|
writer: writer,
|
||||||
verboseMode: verboseMode,
|
verboseMode: verboseMode,
|
||||||
summaryTablePrinter: configurationprinter.NewFrameworkPrinter(verboseMode),
|
summaryTablePrinter: configurationprinter.NewFrameworkPrinter(verboseMode),
|
||||||
|
imageTablePrinter: imageprinter.NewTableWriter(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ MainPrinter = &RepoPrinter{}
|
func (sp *SummaryPrinter) PrintImageScanning(summary *imageprinter.ImageScanSummary) {
|
||||||
|
if sp.verboseMode {
|
||||||
func (sp *SummaryPrinter) PrintImageScanning(*imageprinter.ImageScanSummary) {}
|
sp.imageTablePrinter.PrintImageScanningTable(sp.writer, *summary)
|
||||||
|
cautils.SimpleDisplay(sp.writer, "\n")
|
||||||
|
}
|
||||||
|
printImageScanningSummary(sp.writer, *summary, sp.verboseMode)
|
||||||
|
if !sp.verboseMode {
|
||||||
|
printImagesCommands(sp.writer, *summary)
|
||||||
|
}
|
||||||
|
printTopComponents(sp.writer, *summary)
|
||||||
|
}
|
||||||
|
|
||||||
func (sp *SummaryPrinter) PrintNextSteps() {}
|
func (sp *SummaryPrinter) PrintNextSteps() {}
|
||||||
|
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ func TestNewSummaryPrinter(t *testing.T) {
|
|||||||
assert.Equal(t, os.Stdout, printer.writer)
|
assert.Equal(t, os.Stdout, printer.writer)
|
||||||
assert.Equal(t, verbose, printer.verboseMode)
|
assert.Equal(t, verbose, printer.verboseMode)
|
||||||
assert.NotNil(t, printer.summaryTablePrinter)
|
assert.NotNil(t, printer.summaryTablePrinter)
|
||||||
|
assert.NotNil(t, printer.imageTablePrinter)
|
||||||
|
|
||||||
// Test case 2: Valid writer and non-verbose mode
|
// Test case 2: Valid writer and non-verbose mode
|
||||||
verbose = false
|
verbose = false
|
||||||
@@ -23,6 +24,7 @@ func TestNewSummaryPrinter(t *testing.T) {
|
|||||||
assert.Equal(t, os.Stdout, printer.writer)
|
assert.Equal(t, os.Stdout, printer.writer)
|
||||||
assert.Equal(t, verbose, printer.verboseMode)
|
assert.Equal(t, verbose, printer.verboseMode)
|
||||||
assert.NotNil(t, printer.summaryTablePrinter)
|
assert.NotNil(t, printer.summaryTablePrinter)
|
||||||
|
assert.NotNil(t, printer.imageTablePrinter)
|
||||||
|
|
||||||
// Test case 3: Nil writer and verbose mode
|
// Test case 3: Nil writer and verbose mode
|
||||||
var writer *os.File
|
var writer *os.File
|
||||||
@@ -32,6 +34,7 @@ func TestNewSummaryPrinter(t *testing.T) {
|
|||||||
assert.Nil(t, printer.writer)
|
assert.Nil(t, printer.writer)
|
||||||
assert.Equal(t, verbose, printer.verboseMode)
|
assert.Equal(t, verbose, printer.verboseMode)
|
||||||
assert.NotNil(t, printer.summaryTablePrinter)
|
assert.NotNil(t, printer.summaryTablePrinter)
|
||||||
|
assert.NotNil(t, printer.imageTablePrinter)
|
||||||
|
|
||||||
// Test case 4: Nil writer and non-verbose mode
|
// Test case 4: Nil writer and non-verbose mode
|
||||||
verbose = false
|
verbose = false
|
||||||
@@ -40,6 +43,7 @@ func TestNewSummaryPrinter(t *testing.T) {
|
|||||||
assert.Nil(t, printer.writer)
|
assert.Nil(t, printer.writer)
|
||||||
assert.Equal(t, verbose, printer.verboseMode)
|
assert.Equal(t, verbose, printer.verboseMode)
|
||||||
assert.NotNil(t, printer.summaryTablePrinter)
|
assert.NotNil(t, printer.summaryTablePrinter)
|
||||||
|
assert.NotNil(t, printer.imageTablePrinter)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestGetVerboseMode(t *testing.T) {
|
func TestGetVerboseMode(t *testing.T) {
|
||||||
|
|||||||
@@ -15,20 +15,30 @@ import (
|
|||||||
type RepoPrinter struct {
|
type RepoPrinter struct {
|
||||||
writer *os.File
|
writer *os.File
|
||||||
categoriesTablePrinter configurationprinter.TablePrinter
|
categoriesTablePrinter configurationprinter.TablePrinter
|
||||||
|
imageTablePrinter imageprinter.TablePrinter
|
||||||
|
verboseMode bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewRepoPrinter(writer *os.File, inputPatterns []string) *RepoPrinter {
|
func NewRepoPrinter(writer *os.File, inputPatterns []string, verboseMode bool) *RepoPrinter {
|
||||||
return &RepoPrinter{
|
return &RepoPrinter{
|
||||||
writer: writer,
|
writer: writer,
|
||||||
categoriesTablePrinter: configurationprinter.NewRepoPrinter(inputPatterns),
|
categoriesTablePrinter: configurationprinter.NewRepoPrinter(inputPatterns),
|
||||||
|
imageTablePrinter: imageprinter.NewTableWriter(),
|
||||||
|
verboseMode: verboseMode,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ MainPrinter = &RepoPrinter{}
|
var _ MainPrinter = &RepoPrinter{}
|
||||||
|
|
||||||
func (rp *RepoPrinter) PrintImageScanning(summary *imageprinter.ImageScanSummary) {
|
func (rp *RepoPrinter) PrintImageScanning(summary *imageprinter.ImageScanSummary) {
|
||||||
printImageScanningSummary(rp.writer, *summary, false)
|
if rp.verboseMode {
|
||||||
printImagesCommands(rp.writer, *summary)
|
rp.imageTablePrinter.PrintImageScanningTable(rp.writer, *summary)
|
||||||
|
cautils.SimpleDisplay(rp.writer, "\n")
|
||||||
|
}
|
||||||
|
printImageScanningSummary(rp.writer, *summary, rp.verboseMode)
|
||||||
|
if !rp.verboseMode {
|
||||||
|
printImagesCommands(rp.writer, *summary)
|
||||||
|
}
|
||||||
printTopComponents(rp.writer, *summary)
|
printTopComponents(rp.writer, *summary)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package prettyprinter
|
|||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
|
|
||||||
|
"github.com/kubescape/kubescape/v3/core/cautils"
|
||||||
"github.com/kubescape/kubescape/v3/core/pkg/resultshandling/printer/v2/prettyprinter/tableprinter/configurationprinter"
|
"github.com/kubescape/kubescape/v3/core/pkg/resultshandling/printer/v2/prettyprinter/tableprinter/configurationprinter"
|
||||||
"github.com/kubescape/kubescape/v3/core/pkg/resultshandling/printer/v2/prettyprinter/tableprinter/imageprinter"
|
"github.com/kubescape/kubescape/v3/core/pkg/resultshandling/printer/v2/prettyprinter/tableprinter/imageprinter"
|
||||||
"github.com/kubescape/opa-utils/reporthandling"
|
"github.com/kubescape/opa-utils/reporthandling"
|
||||||
@@ -12,20 +13,30 @@ import (
|
|||||||
type WorkloadPrinter struct {
|
type WorkloadPrinter struct {
|
||||||
writer *os.File
|
writer *os.File
|
||||||
categoriesTablePrinter configurationprinter.TablePrinter
|
categoriesTablePrinter configurationprinter.TablePrinter
|
||||||
|
imageTablePrinter imageprinter.TablePrinter
|
||||||
|
verboseMode bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewWorkloadPrinter(writer *os.File) *WorkloadPrinter {
|
func NewWorkloadPrinter(writer *os.File, verboseMode bool) *WorkloadPrinter {
|
||||||
return &WorkloadPrinter{
|
return &WorkloadPrinter{
|
||||||
writer: writer,
|
writer: writer,
|
||||||
categoriesTablePrinter: configurationprinter.NewWorkloadPrinter(),
|
categoriesTablePrinter: configurationprinter.NewWorkloadPrinter(),
|
||||||
|
imageTablePrinter: imageprinter.NewTableWriter(),
|
||||||
|
verboseMode: verboseMode,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var _ MainPrinter = &WorkloadPrinter{}
|
var _ MainPrinter = &WorkloadPrinter{}
|
||||||
|
|
||||||
func (wp *WorkloadPrinter) PrintImageScanning(summary *imageprinter.ImageScanSummary) {
|
func (wp *WorkloadPrinter) PrintImageScanning(summary *imageprinter.ImageScanSummary) {
|
||||||
printImageScanningSummary(wp.writer, *summary, false)
|
if wp.verboseMode {
|
||||||
printImagesCommands(wp.writer, *summary)
|
wp.imageTablePrinter.PrintImageScanningTable(wp.writer, *summary)
|
||||||
|
cautils.SimpleDisplay(wp.writer, "\n")
|
||||||
|
}
|
||||||
|
printImageScanningSummary(wp.writer, *summary, wp.verboseMode)
|
||||||
|
if !wp.verboseMode {
|
||||||
|
printImagesCommands(wp.writer, *summary)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (wp *WorkloadPrinter) PrintNextSteps() {
|
func (wp *WorkloadPrinter) PrintNextSteps() {
|
||||||
|
|||||||
Reference in New Issue
Block a user