mirror of
https://github.com/anchore/syft.git
synced 2025-11-18 00:43:20 +01:00
not working
Signed-off-by: Alex Goodman <alex.goodman@anchore.com>
This commit is contained in:
parent
30bb7cf992
commit
c348d97fe0
@ -84,7 +84,7 @@ func setGlobalCliOptions() {
|
|||||||
rootCmd.Flags().CountVarP(&cliOpts.Verbosity, "verbose", "v", "increase verbosity (-v = info, -vv = debug)")
|
rootCmd.Flags().CountVarP(&cliOpts.Verbosity, "verbose", "v", "increase verbosity (-v = info, -vv = debug)")
|
||||||
|
|
||||||
// plugins
|
// plugins
|
||||||
defaultPluginDir := path.Join(xdg.ConfigHome, internal.ApplicationName, "plugins")
|
defaultPluginDir := path.Join(xdg.CacheHome, internal.ApplicationName, "plugins")
|
||||||
flag = "plugins.dir"
|
flag = "plugins.dir"
|
||||||
rootCmd.Flags().String(
|
rootCmd.Flags().String(
|
||||||
flag, defaultPluginDir,
|
flag, defaultPluginDir,
|
||||||
|
|||||||
2
go.mod
2
go.mod
@ -17,13 +17,13 @@ require (
|
|||||||
github.com/google/uuid v1.1.1
|
github.com/google/uuid v1.1.1
|
||||||
github.com/gookit/color v1.2.7
|
github.com/gookit/color v1.2.7
|
||||||
github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99 // indirect
|
github.com/gopherjs/gopherjs v0.0.0-20190910122728-9d188e94fb99 // indirect
|
||||||
|
github.com/hashicorp/go-hclog v0.9.2
|
||||||
github.com/hashicorp/go-multierror v1.1.0
|
github.com/hashicorp/go-multierror v1.1.0
|
||||||
github.com/hashicorp/go-plugin v1.3.0
|
github.com/hashicorp/go-plugin v1.3.0
|
||||||
github.com/hashicorp/go-version v1.2.0
|
github.com/hashicorp/go-version v1.2.0
|
||||||
github.com/mitchellh/go-homedir v1.1.0
|
github.com/mitchellh/go-homedir v1.1.0
|
||||||
github.com/mitchellh/mapstructure v1.3.1
|
github.com/mitchellh/mapstructure v1.3.1
|
||||||
github.com/olekukonko/tablewriter v0.0.4
|
github.com/olekukonko/tablewriter v0.0.4
|
||||||
github.com/opencontainers/runc v0.1.1 // indirect
|
|
||||||
github.com/package-url/packageurl-go v0.1.0
|
github.com/package-url/packageurl-go v0.1.0
|
||||||
github.com/pelletier/go-toml v1.8.0
|
github.com/pelletier/go-toml v1.8.0
|
||||||
github.com/rogpeppe/go-internal v1.5.2
|
github.com/rogpeppe/go-internal v1.5.2
|
||||||
|
|||||||
3
go.sum
3
go.sum
@ -131,8 +131,6 @@ github.com/anchore/go-testutils v0.0.0-20200624184116-66aa578126db/go.mod h1:D3r
|
|||||||
github.com/anchore/go-version v1.2.2-0.20200701162849-18adb9c92b9b h1:e1bmaoJfZVsCYMrIZBpFxwV26CbsuoEh5muXD5I1Ods=
|
github.com/anchore/go-version v1.2.2-0.20200701162849-18adb9c92b9b h1:e1bmaoJfZVsCYMrIZBpFxwV26CbsuoEh5muXD5I1Ods=
|
||||||
github.com/anchore/go-version v1.2.2-0.20200701162849-18adb9c92b9b/go.mod h1:Bkc+JYWjMCF8OyZ340IMSIi2Ebf3uwByOk6ho4wne1E=
|
github.com/anchore/go-version v1.2.2-0.20200701162849-18adb9c92b9b/go.mod h1:Bkc+JYWjMCF8OyZ340IMSIi2Ebf3uwByOk6ho4wne1E=
|
||||||
github.com/anchore/stereoscope v0.0.0-20200520221116-025e07f1c93e/go.mod h1:bkyLl5VITnrmgErv4S1vDfVz/TGAZ5il6161IQo7w2g=
|
github.com/anchore/stereoscope v0.0.0-20200520221116-025e07f1c93e/go.mod h1:bkyLl5VITnrmgErv4S1vDfVz/TGAZ5il6161IQo7w2g=
|
||||||
github.com/anchore/stereoscope v0.0.0-20200813152757-548b22c8a0b3 h1:pl+txuYlhK8Mmio4d+4zQI/1xg8X6BtNErTASrx23Wk=
|
|
||||||
github.com/anchore/stereoscope v0.0.0-20200813152757-548b22c8a0b3/go.mod h1:WntReQTI/I27FOQ87UgLVVzWgku6+ZsqfOTLxpIZFCs=
|
|
||||||
github.com/anchore/stereoscope v0.0.0-20200903223322-a3806f515470 h1:apXyPyfiaL/YQF7VeXRbDDB9TA7dA9rxdq8YbzPk9ko=
|
github.com/anchore/stereoscope v0.0.0-20200903223322-a3806f515470 h1:apXyPyfiaL/YQF7VeXRbDDB9TA7dA9rxdq8YbzPk9ko=
|
||||||
github.com/anchore/stereoscope v0.0.0-20200903223322-a3806f515470/go.mod h1:WntReQTI/I27FOQ87UgLVVzWgku6+ZsqfOTLxpIZFCs=
|
github.com/anchore/stereoscope v0.0.0-20200903223322-a3806f515470/go.mod h1:WntReQTI/I27FOQ87UgLVVzWgku6+ZsqfOTLxpIZFCs=
|
||||||
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
|
github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8=
|
||||||
@ -518,6 +516,7 @@ github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJ
|
|||||||
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
|
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
|
||||||
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
||||||
github.com/jarcoal/httpmock v1.0.5/go.mod h1:ATjnClrvW/3tijVmpL/va5Z3aAyGvqU3gCT8nX0Txik=
|
github.com/jarcoal/httpmock v1.0.5/go.mod h1:ATjnClrvW/3tijVmpL/va5Z3aAyGvqU3gCT8nX0Txik=
|
||||||
|
github.com/jhump/protoreflect v1.6.0 h1:h5jfMVslIg6l29nsMs0D8Wj17RDVdNYti0vDN/PZZoE=
|
||||||
github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74=
|
github.com/jhump/protoreflect v1.6.0/go.mod h1:eaTn3RZAmMBcV0fifFvlm6VHNz3wSkYyXYWUh7ymB74=
|
||||||
github.com/jingyugao/rowserrcheck v0.0.0-20191204022205-72ab7603b68a h1:GmsqmapfzSJkm28dhRoHz2tLRbJmqhU86IPgBtN3mmk=
|
github.com/jingyugao/rowserrcheck v0.0.0-20191204022205-72ab7603b68a h1:GmsqmapfzSJkm28dhRoHz2tLRbJmqhU86IPgBtN3mmk=
|
||||||
github.com/jingyugao/rowserrcheck v0.0.0-20191204022205-72ab7603b68a/go.mod h1:xRskid8CManxVta/ALEhJha/pweKBaVG6fWgc0yH25s=
|
github.com/jingyugao/rowserrcheck v0.0.0-20191204022205-72ab7603b68a/go.mod h1:xRskid8CManxVta/ALEhJha/pweKBaVG6fWgc0yH25s=
|
||||||
|
|||||||
@ -11,7 +11,6 @@ import (
|
|||||||
"github.com/anchore/stereoscope/pkg/file"
|
"github.com/anchore/stereoscope/pkg/file"
|
||||||
"github.com/anchore/syft/syft/cataloger/apkdb"
|
"github.com/anchore/syft/syft/cataloger/apkdb"
|
||||||
"github.com/anchore/syft/syft/cataloger/bundler"
|
"github.com/anchore/syft/syft/cataloger/bundler"
|
||||||
"github.com/anchore/syft/syft/cataloger/dpkg"
|
|
||||||
"github.com/anchore/syft/syft/cataloger/golang"
|
"github.com/anchore/syft/syft/cataloger/golang"
|
||||||
"github.com/anchore/syft/syft/cataloger/java"
|
"github.com/anchore/syft/syft/cataloger/java"
|
||||||
"github.com/anchore/syft/syft/cataloger/javascript"
|
"github.com/anchore/syft/syft/cataloger/javascript"
|
||||||
@ -37,7 +36,7 @@ type Cataloger interface {
|
|||||||
// All returns a slice of all locally defined catalogers (defined in child packages).
|
// All returns a slice of all locally defined catalogers (defined in child packages).
|
||||||
func BuiltIn() []Cataloger {
|
func BuiltIn() []Cataloger {
|
||||||
return []Cataloger{
|
return []Cataloger{
|
||||||
dpkg.New(),
|
//dpkg.New(),
|
||||||
bundler.New(),
|
bundler.New(),
|
||||||
python.New(),
|
python.New(),
|
||||||
rpmdb.New(),
|
rpmdb.New(),
|
||||||
|
|||||||
@ -13,13 +13,10 @@ import (
|
|||||||
// integrity check
|
// integrity check
|
||||||
var _ plugin.GRPCPlugin = &CatalogerPlugin{}
|
var _ plugin.GRPCPlugin = &CatalogerPlugin{}
|
||||||
|
|
||||||
// Cataloger is the interface exposed as a plugin.
|
|
||||||
type Cataloger cataloger.Cataloger
|
|
||||||
|
|
||||||
// CatalogerPlugin is the implementation of plugin.Plugin that is served/consumed.
|
// CatalogerPlugin is the implementation of plugin.Plugin that is served/consumed.
|
||||||
type CatalogerPlugin struct {
|
type CatalogerPlugin struct {
|
||||||
plugin.NetRPCUnsupportedPlugin
|
plugin.NetRPCUnsupportedPlugin
|
||||||
Impl Cataloger
|
Impl cataloger.Cataloger
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *CatalogerPlugin) GRPCServer(broker *plugin.GRPCBroker, s *grpc.Server) error {
|
func (p *CatalogerPlugin) GRPCServer(broker *plugin.GRPCBroker, s *grpc.Server) error {
|
||||||
|
|||||||
@ -3,6 +3,8 @@ package grpc
|
|||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/anchore/syft/internal/log"
|
||||||
|
"github.com/anchore/syft/syft/cataloger"
|
||||||
"io"
|
"io"
|
||||||
"io/ioutil"
|
"io/ioutil"
|
||||||
|
|
||||||
@ -14,6 +16,8 @@ import (
|
|||||||
"google.golang.org/grpc"
|
"google.golang.org/grpc"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var _ cataloger.Cataloger = &CatalogerClient{}
|
||||||
|
|
||||||
type CatalogerClient struct {
|
type CatalogerClient struct {
|
||||||
broker *plugin.GRPCBroker
|
broker *plugin.GRPCBroker
|
||||||
client proto.CatalogerClient
|
client proto.CatalogerClient
|
||||||
@ -35,7 +39,7 @@ func (c *CatalogerClient) Name() string {
|
|||||||
return resp.Name
|
return resp.Name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *CatalogerClient) SelectFiles(resolver scope.FileResolver) error {
|
func (c *CatalogerClient) SelectFiles(resolver scope.FileResolver) []file.Reference {
|
||||||
fileResolverServer := &FileResolverServer{Impl: resolver}
|
fileResolverServer := &FileResolverServer{Impl: resolver}
|
||||||
|
|
||||||
var s *grpc.Server
|
var s *grpc.Server
|
||||||
@ -49,12 +53,25 @@ func (c *CatalogerClient) SelectFiles(resolver scope.FileResolver) error {
|
|||||||
brokerID := c.broker.NextId()
|
brokerID := c.broker.NextId()
|
||||||
go c.broker.AcceptAndServe(brokerID, serverFunc)
|
go c.broker.AcceptAndServe(brokerID, serverFunc)
|
||||||
|
|
||||||
_, err := c.client.SelectFiles(context.Background(), &proto.SelectFilesRequest{
|
resp, err := c.client.SelectFiles(context.Background(), &proto.SelectFilesRequest{
|
||||||
FileResolverBrokerId: brokerID,
|
FileResolverBrokerId: brokerID,
|
||||||
})
|
})
|
||||||
|
|
||||||
|
log.Debugf("Select Files Response: %+v", resp)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
// TODO: nope
|
||||||
|
panic(err)
|
||||||
|
}
|
||||||
|
|
||||||
s.Stop()
|
s.Stop()
|
||||||
return err
|
|
||||||
|
var result []file.Reference
|
||||||
|
for _, f := range resp.Files {
|
||||||
|
result = append(result, file.NewFileReferenceWithID(file.Path(f.Path), uint64(f.Id)))
|
||||||
|
}
|
||||||
|
|
||||||
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *CatalogerClient) Catalog(contents map[file.Reference]io.Reader) ([]pkg.Package, error) {
|
func (c *CatalogerClient) Catalog(contents map[file.Reference]io.Reader) ([]pkg.Package, error) {
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package grpc
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"github.com/anchore/syft/internal/log"
|
||||||
|
|
||||||
"github.com/anchore/stereoscope/pkg/file"
|
"github.com/anchore/stereoscope/pkg/file"
|
||||||
"github.com/anchore/syft/syft/plugin/proto"
|
"github.com/anchore/syft/syft/plugin/proto"
|
||||||
@ -37,6 +38,8 @@ func (m *FileResolverClient) FilesByGlob(patterns ...string) ([]file.Reference,
|
|||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.Debugf("FilesByGlob Response: %+v", resp)
|
||||||
|
|
||||||
var result []file.Reference
|
var result []file.Reference
|
||||||
for _, ref := range resp.Files {
|
for _, ref := range resp.Files {
|
||||||
result = append(result, file.NewFileReferenceWithID(file.Path(ref.Path), uint64(ref.Id)))
|
result = append(result, file.NewFileReferenceWithID(file.Path(ref.Path), uint64(ref.Id)))
|
||||||
|
|||||||
@ -2,6 +2,7 @@ package grpc
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
|
"github.com/anchore/syft/internal/log"
|
||||||
|
|
||||||
"github.com/anchore/stereoscope/pkg/file"
|
"github.com/anchore/stereoscope/pkg/file"
|
||||||
"github.com/anchore/syft/syft/plugin/proto"
|
"github.com/anchore/syft/syft/plugin/proto"
|
||||||
@ -36,11 +37,15 @@ func (m *FileResolverServer) FilesByPath(ctx context.Context, req *proto.FileRes
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (m *FileResolverServer) FilesByGlob(ctx context.Context, req *proto.FileResolverRequest) (resp *proto.FileResolverResponse, err error) {
|
func (m *FileResolverServer) FilesByGlob(ctx context.Context, req *proto.FileResolverRequest) (resp *proto.FileResolverResponse, err error) {
|
||||||
|
log.Debugf("FilesByGlob Request: %+v", req)
|
||||||
|
|
||||||
r, err := m.Impl.FilesByGlob(req.Paths...)
|
r, err := m.Impl.FilesByGlob(req.Paths...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
log.Debugf("FilesByGlob Result: %+v", r)
|
||||||
|
|
||||||
var refs []*proto.FileReference
|
var refs []*proto.FileReference
|
||||||
for _, ref := range r {
|
for _, ref := range r {
|
||||||
refs = append(refs, &proto.FileReference{
|
refs = append(refs, &proto.FileReference{
|
||||||
|
|||||||
@ -2,12 +2,14 @@ package plugin
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/hashicorp/go-hclog"
|
||||||
|
"os"
|
||||||
"os/exec"
|
"os/exec"
|
||||||
|
|
||||||
"github.com/hashicorp/go-plugin"
|
"github.com/hashicorp/go-plugin"
|
||||||
)
|
)
|
||||||
|
|
||||||
var plugins = map[int]plugin.PluginSet{
|
var versionedPlugins = map[int]plugin.PluginSet{
|
||||||
1: {
|
1: {
|
||||||
TypeCataloger.String(): &CatalogerPlugin{},
|
TypeCataloger.String(): &CatalogerPlugin{},
|
||||||
},
|
},
|
||||||
@ -19,8 +21,10 @@ type Plugin struct {
|
|||||||
client *plugin.Client
|
client *plugin.Client
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO: type should be in the name like with terraform "terraform-<TYPE>-<NAME>"
|
||||||
|
|
||||||
func NewPlugin(config Config) Plugin {
|
func NewPlugin(config Config) Plugin {
|
||||||
cmd := exec.Command(config.Command, config.Args...)
|
cmd := exec.Command("sh", "-c", config.Command) //, config.Args...)
|
||||||
cmd.Env = append(cmd.Env, config.Env...)
|
cmd.Env = append(cmd.Env, config.Env...)
|
||||||
|
|
||||||
//secureConfig := &plugin.SecureConfig{
|
//secureConfig := &plugin.SecureConfig{
|
||||||
@ -28,11 +32,19 @@ func NewPlugin(config Config) Plugin {
|
|||||||
// Hash: sha256.New(),
|
// Hash: sha256.New(),
|
||||||
//}
|
//}
|
||||||
|
|
||||||
|
// TODO: temp?
|
||||||
|
logger := hclog.New(&hclog.LoggerOptions{
|
||||||
|
Name: config.Name,
|
||||||
|
Level: hclog.Trace,
|
||||||
|
Output: os.Stderr,
|
||||||
|
})
|
||||||
|
|
||||||
clientConfig := plugin.ClientConfig{
|
clientConfig := plugin.ClientConfig{
|
||||||
HandshakeConfig: config.Type.HandshakeConfig(),
|
HandshakeConfig: config.Type.HandshakeConfig(),
|
||||||
VersionedPlugins: plugins,
|
VersionedPlugins: versionedPlugins,
|
||||||
//SecureConfig: secureConfig,
|
//SecureConfig: secureConfig,
|
||||||
Cmd: cmd,
|
Cmd: cmd,
|
||||||
|
Logger: logger,
|
||||||
AllowedProtocols: []plugin.Protocol{
|
AllowedProtocols: []plugin.Protocol{
|
||||||
plugin.ProtocolGRPC,
|
plugin.ProtocolGRPC,
|
||||||
},
|
},
|
||||||
|
|||||||
@ -63,7 +63,7 @@ func (c *Repository) ActivateCatalogers() ([]cataloger.Cataloger, func(), error)
|
|||||||
|
|
||||||
theCataloger, ok := raw.(cataloger.Cataloger)
|
theCataloger, ok := raw.(cataloger.Cataloger)
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, deactivateFn, fmt.Errorf("activation of cataloger did not return a cataloger object (name=%s)", plugin.Config.Name)
|
return nil, deactivateFn, fmt.Errorf("activation of cataloger did not return a cataloger object (name=%s type=%T)", plugin.Config.Name, theCataloger)
|
||||||
}
|
}
|
||||||
|
|
||||||
result = append(result, theCataloger)
|
result = append(result, theCataloger)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user