From 4c0e358afc5dafa351cbbe7cf7927f49d54b03ec Mon Sep 17 00:00:00 2001 From: dwertent Date: Sun, 6 Mar 2022 09:51:05 +0200 Subject: [PATCH] support submitting v2 --- clihandler/cmd/results.go | 16 ++++++++++++++-- clihandler/cmd/scan.go | 5 ++--- resultshandling/results.go | 2 ++ 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/clihandler/cmd/results.go b/clihandler/cmd/results.go index 73b090ac..ed3d1d02 100644 --- a/clihandler/cmd/results.go +++ b/clihandler/cmd/results.go @@ -11,12 +11,16 @@ import ( "github.com/armosec/kubescape/cautils/logger/helpers" "github.com/armosec/kubescape/clihandler" "github.com/armosec/kubescape/clihandler/cliinterfaces" + "github.com/armosec/kubescape/resultshandling/reporter" reporterv1 "github.com/armosec/kubescape/resultshandling/reporter/v1" + reporterv2 "github.com/armosec/kubescape/resultshandling/reporter/v2" "github.com/armosec/opa-utils/reporthandling" "github.com/google/uuid" "github.com/spf13/cobra" ) +var formatVersion string + type ResultsObject struct { filePath string customerGUID string @@ -51,7 +55,7 @@ func (resultsObject *ResultsObject) ListAllResources() (map[string]workloadinter } var resultsCmd = &cobra.Command{ - Use: "results \nExample:\n$ kubescape submit results path/to/results.json", + Use: "results \nExample:\n$ kubescape submit results path/to/results.json --format-version v2", Short: "Submit a pre scanned results file. The file must be in json format", Long: ``, RunE: func(cmd *cobra.Command, args []string) error { @@ -70,7 +74,14 @@ var resultsCmd = &cobra.Command{ resultsObjects := NewResultsObject(clusterConfig.GetAccountID(), clusterConfig.GetClusterName(), args[0]) // submit resources - r := reporterv1.NewReportEventReceiver(clusterConfig.GetConfigObj()) + var r reporter.IReport + switch formatVersion { + case "v2": + r = reporterv2.NewReportEventReceiver(clusterConfig.GetConfigObj()) + default: + logger.L().Warning("Deprecated results version. run with '--format-version' flag", helpers.String("your version", formatVersion), helpers.String("latest version", "v2")) + r = reporterv1.NewReportEventReceiver(clusterConfig.GetConfigObj()) + } submitInterfaces := cliinterfaces.SubmitInterfaces{ ClusterConfig: clusterConfig, @@ -87,6 +98,7 @@ var resultsCmd = &cobra.Command{ func init() { submitCmd.AddCommand(resultsCmd) + resultsCmd.PersistentFlags().StringVar(&formatVersion, "format-version", "v1", "Output object can be differnet between versions, this is for maintaining backward and forward compatibility. Supported:'v1'/'v2'") } func loadResultsFromFile(filePath string) ([]reporthandling.FrameworkReport, error) { diff --git a/clihandler/cmd/scan.go b/clihandler/cmd/scan.go index 6e39856e..5a0f66eb 100644 --- a/clihandler/cmd/scan.go +++ b/clihandler/cmd/scan.go @@ -55,7 +55,6 @@ var scanCmd = &cobra.Command{ func frameworkInitConfig() { k8sinterface.SetClusterContextName(scanInfo.KubeContext) } - func init() { cobra.OnInitialize(frameworkInitConfig) @@ -79,12 +78,12 @@ func init() { scanCmd.PersistentFlags().BoolVarP(&scanInfo.Silent, "silent", "s", false, "Silent progress messages") scanCmd.PersistentFlags().BoolVarP(&scanInfo.Submit, "submit", "", false, "Send the scan results to Armo management portal where you can see the results in a user-friendly UI, choose your preferred compliance framework, check risk results history and trends, manage exceptions, get remediation recommendations and much more. By default the results are not submitted") scanCmd.PersistentFlags().StringVar(&scanInfo.HostSensorYamlPath, "host-scan-yaml", "", "Override default host sensor DaemonSet. Use this flag cautiously") - scanCmd.PersistentFlags().StringVar(&scanInfo.FormatVersion, "format-version", "v1", "Output object can be differnet between versions, this is for testing and backward compatibility") + scanCmd.PersistentFlags().StringVar(&scanInfo.FormatVersion, "format-version", "v1", "Output object can be differnet between versions, this is for maintaining backward and forward compatibility. Supported:'v1'/'v2'") // hidden flags scanCmd.PersistentFlags().MarkHidden("host-scan-yaml") // this flag should be used very cautiously. We prefer users will not use it at all unless the DaemoSet can not run pods on the nodes scanCmd.PersistentFlags().MarkHidden("silent") // this flag should be deprecated since we added the --logger support - scanCmd.PersistentFlags().MarkHidden("format-version") // meant for testing different output approaches and not for common use + // scanCmd.PersistentFlags().MarkHidden("format-version") // meant for testing different output approaches and not for common use hostF := scanCmd.PersistentFlags().VarPF(&scanInfo.HostSensorEnabled, "enable-host-scan", "", "Deploy ARMO K8s host-sensor daemonset in the scanned cluster. Deleting it right after we collecting the data. Required to collect valueable data from cluster nodes for certain controls. Yaml file: https://raw.githubusercontent.com/armosec/kubescape/master/hostsensorutils/hostsensor.yaml") hostF.NoOptDefVal = "true" diff --git a/resultshandling/results.go b/resultshandling/results.go index b74f04d9..a93dd63d 100644 --- a/resultshandling/results.go +++ b/resultshandling/results.go @@ -3,6 +3,7 @@ package resultshandling import ( "github.com/armosec/kubescape/cautils" "github.com/armosec/kubescape/cautils/logger" + "github.com/armosec/kubescape/cautils/logger/helpers" "github.com/armosec/kubescape/resultshandling/printer" printerv1 "github.com/armosec/kubescape/resultshandling/printer/v1" printerv2 "github.com/armosec/kubescape/resultshandling/printer/v2" @@ -61,6 +62,7 @@ func NewPrinter(printFormat, formatVersion string, verboseMode bool) printer.IPr case "v2": return printerv2.NewJsonPrinter() default: + logger.L().Warning("Deprecated format version. run with '--format-version' flag", helpers.String("your version", formatVersion), helpers.String("latest version", "v2")) return printerv1.NewJsonPrinter() } case printer.JunitResultFormat: