diff --git a/README.md b/README.md index e7997f2..067db1b 100644 --- a/README.md +++ b/README.md @@ -84,6 +84,7 @@ All parameters are cli-flags. | `github-app-id` | `false` | `""` | GitHub App-ID. | | `github-app-installation-id` | `false` | `""` | GitHub App-Installation-ID. | | `reports-dir` | `false` | `/reports` | Directory to place the reports. | +| `provider` | `false` | `kubernetes` | Orchestrator that run the app. | The flags can be configured as args or as environment-variables prefixed with `VULN_` to inject sensitive configs as secret values. diff --git a/internal/vuln/config.go b/internal/vuln/config.go index 3bcc555..1f84311 100644 --- a/internal/vuln/config.go +++ b/internal/vuln/config.go @@ -21,6 +21,7 @@ type Config struct { ReportsDir string `yaml:"reportsDir" env:"VULN_REPORTS_DIR" flag:"reports-dir"` PodLabelSelector string `yaml:"podLabelSelector" env:"VULN_POD_LABEL_SELECTOR" flag:"pod-label-selector"` NamespaceLabelSelector string `yaml:"namespaceLabelSelector" env:"VULN_NAMESPACE_LABEL_SELECTOR" flag:"namespace-label-selector"` + Provider string `yaml:"provider" env:"VULN_PROVIDER" flag:"provider"` Verbosity string `env:"VULN_VERBOSITY" flag:"verbosity"` } @@ -44,6 +45,7 @@ var ( ConfigKeyReportsDir = "reports-dir" ConfigKeyPodLabelSelector = "pod-label-selector" ConfigKeyNamespaceLabelSelector = "namespace-label-selector" + ConfigKeyProvider = "provider" OperatorConfig *Config ) diff --git a/internal/vuln/daemon/daemon.go b/internal/vuln/daemon/daemon.go index 2e7b002..5cd9c74 100644 --- a/internal/vuln/daemon/daemon.go +++ b/internal/vuln/daemon/daemon.go @@ -6,6 +6,7 @@ import ( "github.com/ckotzbauer/libstandard" "github.com/ckotzbauer/vulnerability-operator/internal/vuln" "github.com/ckotzbauer/vulnerability-operator/internal/vuln/grype" + "github.com/ckotzbauer/vulnerability-operator/internal/vuln/kubernetes" "github.com/ckotzbauer/vulnerability-operator/internal/vuln/source" "github.com/ckotzbauer/vulnerability-operator/internal/vuln/source/git" "github.com/ckotzbauer/vulnerability-operator/internal/vuln/source/kubernetes" @@ -76,13 +77,14 @@ func (c *CronService) runBackgroundService() { scanItems = append(scanItems, s.LoadScanItems()...) } + isKube := vuln.OperatorConfig.Provider == "kubernetes" gr, err := grype.New( vuln.OperatorConfig.GrypeConfigFile, vuln.OperatorConfig.FilterConfigFile, vuln.OperatorConfig.MinSeverity, vuln.OperatorConfig.OnlyFixed, - false) + !isKube) if err != nil { c.printNextExecution() @@ -92,6 +94,10 @@ func (c *CronService) runBackgroundService() { defer gr.Close() + if !isKube { + gr = *gr.WithTestContainer(&libk8s.ContainerInfo{}) + } + scanResult := vuln.ScanResult{FoundVulnerabilities: []vuln.Vulnerability{}, AuditedVulnerabilities: []vuln.Vulnerability{}} for _, scanItem := range scanItems { diff --git a/main.go b/main.go index 9bfa4b7..2d9f06f 100644 --- a/main.go +++ b/main.go @@ -73,6 +73,7 @@ func newRootCmd() *cobra.Command { rootCmd.PersistentFlags().String(vuln.ConfigKeyReportsDir, "/reports", "Directory to place the reports.") rootCmd.PersistentFlags().String(vuln.ConfigKeyPodLabelSelector, "", "Kubernetes Label-Selector for pods.") rootCmd.PersistentFlags().String(vuln.ConfigKeyNamespaceLabelSelector, "", "Kubernetes Label-Selector for namespaces.") + rootCmd.PersistentFlags().String(vuln.ConfigKeyProvider, "kubernetes", "Orchestrator which run the app (kubernetes).") return rootCmd }