Use clone in remote git repositories

This commit is contained in:
shm12
2022-06-09 14:53:48 +03:00
parent d7b5dd416d
commit 1eef32dd8e
4 changed files with 61 additions and 9 deletions
+22 -6
View File
@@ -2,8 +2,11 @@ package resourcehandler
import (
"fmt"
"os"
"path/filepath"
"github.com/armosec/armoapi-go/armotypes"
giturl "github.com/armosec/go-git-url"
"github.com/armosec/k8s-interface/workloadinterface"
"github.com/armosec/opa-utils/reporthandling"
"k8s.io/apimachinery/pkg/version"
@@ -30,9 +33,6 @@ func NewFileResourceHandler(inputPatterns []string, registryAdaptors *RegistryAd
func (fileHandler *FileResourceHandler) GetResources(sessionObj *cautils.OPASessionObj, designator *armotypes.PortalDesignator) (*cautils.K8SResources, map[string]workloadinterface.IMetadata, *cautils.ArmoResources, error) {
logger.L().Info("Accessing local objects")
cautils.StartSpinner()
// build resources map
// map resources based on framework required resources: map["/group/version/kind"][]<k8s workloads ids>
k8sResources := setK8sResourceMap(sessionObj.Policies)
@@ -42,8 +42,26 @@ func (fileHandler *FileResourceHandler) GetResources(sessionObj *cautils.OPASess
workloads := []workloadinterface.IMetadata{}
path := fileHandler.inputPatterns[0]
// Clone git repository if needed
gitURL, err := giturl.NewGitURL(path)
if err == nil {
logger.L().Info("cloning git repository")
cautils.StartSpinner()
cloneDir, err := cloneRepo(gitURL)
cautils.StopSpinner()
if err != nil {
return nil, allResources, nil, fmt.Errorf("could not clone repository. %w", err)
}
defer os.RemoveAll(cloneDir)
path = filepath.Join(cloneDir, gitURL.GetPath())
}
// load resource from local file system
sourceToWorkloads, err := cautils.LoadResourcesFromFiles(fileHandler.inputPatterns[0])
logger.L().Info("Accessing local objects")
sourceToWorkloads, err := cautils.LoadResourcesFromFiles(path)
if err != nil {
return nil, allResources, nil, err
}
@@ -83,11 +101,9 @@ func (fileHandler *FileResourceHandler) GetResources(sessionObj *cautils.OPASess
logger.L().Warning("failed to collect images vulnerabilities", helpers.Error(err))
}
cautils.StopSpinner()
logger.L().Success("Accessed to local objects")
return k8sResources, allResources, armoResources, nil
}
func (fileHandler *FileResourceHandler) GetClusterAPIServerInfo() *version.Info {
@@ -0,0 +1,36 @@
package resourcehandler
import (
"fmt"
"os"
giturl "github.com/armosec/go-git-url"
"github.com/go-git/go-git/v5"
"github.com/go-git/go-git/v5/plumbing"
)
// cloneRepo clones a repository to a local temporary directory and returns the directory
func cloneRepo(gitURL giturl.IGitURL) (string, error) {
// Create temp directory
tmpDir, err := os.MkdirTemp("", "")
if err != nil {
return "", fmt.Errorf("failed to create temporary directory: %w", err)
}
// Clone option
cloneURL := gitURL.GetHttpCloneURL()
cloneOpts := git.CloneOptions{URL: cloneURL}
if gitURL.GetBranchName() != "" {
cloneOpts.ReferenceName = plumbing.NewBranchReferenceName(gitURL.GetBranchName())
cloneOpts.SingleBranch = true
}
// Actual clone
_, err = git.PlainClone(tmpDir, false, &cloneOpts)
if err != nil {
return "", fmt.Errorf("failed to clone %s. %w", gitURL.GetRepoName(), err)
}
return tmpDir, nil
}
+1 -1
View File
@@ -4,7 +4,7 @@ go 1.17
require (
github.com/armosec/armoapi-go v0.0.73
github.com/armosec/go-git-url v0.0.9
github.com/armosec/go-git-url v0.0.13
github.com/armosec/k8s-interface v0.0.76
github.com/armosec/opa-utils v0.0.144
github.com/armosec/rbac-utils v0.0.14
+2 -2
View File
@@ -125,8 +125,8 @@ github.com/armosec/armoapi-go v0.0.2/go.mod h1:vIK17yoKbJRQyZXWWLe3AqfqCRITxW8qm
github.com/armosec/armoapi-go v0.0.23/go.mod h1:iaVVGyc23QGGzAdv4n+szGQg3Rbpixn9yQTU3qWRpaw=
github.com/armosec/armoapi-go v0.0.73 h1:LMf+eCkkf+W9NVvOzHKFgVUEpBMvh27M7//UQP3aiO8=
github.com/armosec/armoapi-go v0.0.73/go.mod h1:/9SQAgtLbYkfFneRRm/zkIn3zz+4Y2xv6N3vtFcyF8s=
github.com/armosec/go-git-url v0.0.9 h1:AnoG0NOrcAE8ptTy6iFG/0jlar3hly++DWAqhlvf/n4=
github.com/armosec/go-git-url v0.0.9/go.mod h1:GzfssG3IW9KiURSpK7c/bySBRTlghpObQ7NQ1O4hcMI=
github.com/armosec/go-git-url v0.0.13 h1:kwzHBL7oFqf2UsR0h4Sx+HMYqO9xHHuBFXGIyuMqHAg=
github.com/armosec/go-git-url v0.0.13/go.mod h1:GzfssG3IW9KiURSpK7c/bySBRTlghpObQ7NQ1O4hcMI=
github.com/armosec/k8s-interface v0.0.8/go.mod h1:xxS+V5QT3gVQTwZyAMMDrYLWGrfKOpiJ7Jfhfa0w9sM=
github.com/armosec/k8s-interface v0.0.37/go.mod h1:vHxGWqD/uh6+GQb9Sqv7OGMs+Rvc2dsFVc0XtgRh1ZU=
github.com/armosec/k8s-interface v0.0.76 h1:pQaF+8BcNMm6GTYTjdG7vCM1l4BIk7oALXoT6v5gCAk=