recursive glob

This commit is contained in:
dwertent
2021-08-29 13:15:34 +03:00
parent 41457ff551
commit 9943119033
2 changed files with 31 additions and 10 deletions

View File

@@ -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"][]<k8s workloads>
allResources := mapResources(workloads)
// build resources map
// map resources based on framework requrid resources: map["/group/version/kind"][]<k8s workloads>
// map resources based on framework required resources: map["/group/version/kind"][]<k8s workloads>
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
}

View File

@@ -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
}