diff --git a/policyhandler/filesloader.go b/policyhandler/filesloader.go index e65a608e..186fbe04 100644 --- a/policyhandler/filesloader.go +++ b/policyhandler/filesloader.go @@ -8,6 +8,7 @@ import ( "kubescape/cautils" "kubescape/cautils/k8sinterface" "kubescape/cautils/opapolicy" + "os" "path/filepath" "strings" @@ -38,7 +39,7 @@ func (policyHandler *PolicyHandler) loadResources(frameworks []opapolicy.Framewo workloads = append(workloads, w...) } - // load resource from url + // load resources from url w, err = loadResourcesFromUrl(scanInfo.InputPatterns) if err != nil { return nil, err @@ -47,11 +48,15 @@ func (policyHandler *PolicyHandler) loadResources(frameworks []opapolicy.Framewo workloads = append(workloads, w...) } + if len(workloads) == 0 { + return nil, fmt.Errorf("empty list of workloads - no workloads found") + } + // map all resources: map["/group/version/kind"][] allResources := mapResources(workloads) // build resources map - // map resources based on framework requrid resources: map["/group/version/kind"][] + // map resources based on framework required resources: map["/group/version/kind"][] k8sResources := setResourceMap(frameworks) // save only relevant resources @@ -78,9 +83,6 @@ func loadResourcesFromFiles(inputPatterns []string) ([]k8sinterface.IWorkload, e if len(errs) > 0 { cautils.ErrorDisplay(fmt.Sprintf("%v", errs)) // TODO - print error } - if len(workloads) == 0 { - return workloads, fmt.Errorf("empty list of workloads - no workloads found") - } return workloads, nil } @@ -138,10 +140,11 @@ func readFile(fileContent []byte, fileFromat FileFormat) ([]k8sinterface.IWorklo case JSON_FILE_FORMAT: return readJsonFile(fileContent) default: - return nil, []error{fmt.Errorf("file extension %s not supported", fileFromat)} + return nil, nil // []error{fmt.Errorf("file extension %s not supported", fileFromat)} } } + func listFiles(patterns []string) ([]string, []error) { files := []string{} errs := []error{} @@ -149,7 +152,7 @@ func listFiles(patterns []string) ([]string, []error) { if strings.HasPrefix(patterns[i], "http") { continue } - f, err := filepath.Glob(patterns[i]) + f, err := glob(filepath.Split(patterns[i])) //filepath.Glob(patterns[i]) if err != nil { errs = append(errs, err) } else { @@ -220,6 +223,27 @@ func convertYamlToJson(i interface{}) interface{} { return i } +func glob(root, pattern string) ([]string, error) { + var matches []string + err := filepath.Walk(root, func(path string, info os.FileInfo, err error) error { + if err != nil { + return err + } + if info.IsDir() { + return nil + } + if matched, err := filepath.Match(pattern, filepath.Base(path)); err != nil { + return err + } else if matched { + matches = append(matches, path) + } + return nil + }) + if err != nil { + return nil, err + } + return matches, nil +} func isYaml(filePath string) bool { return cautils.StringInSlice(YAML_PREFIX, filepath.Ext(filePath)) != cautils.ValueNotFound } diff --git a/policyhandler/urlloader.go b/policyhandler/urlloader.go index d1de20db..9d2e14bf 100644 --- a/policyhandler/urlloader.go +++ b/policyhandler/urlloader.go @@ -20,9 +20,6 @@ func loadResourcesFromUrl(inputPatterns []string) ([]k8sinterface.IWorkload, err if len(errs) > 0 { cautils.ErrorDisplay(fmt.Sprintf("%v", errs)) // TODO - print error } - if len(workloads) == 0 { - return workloads, fmt.Errorf("empty list of workloads - no workloads valid workloads found") - } return workloads, nil }