J'essaie d'intégrer la bibliothèque Anchore syft dans mon application Go pour générer des SBOM CycloneDX pour plusieurs conteneurs. La fonction ci-dessous s'exécute correctement la première fois qu'elle est appelée, mais lorsque Execute est appelé sur la commande cobra, les appels suivants échouent avec une erreur.
func generateCycloneDX(ociArchiveName string, jsonOutputName string) { syftId := clio.Identification{Name: "syft"} syftCommand := cli.Command(syftId) syftCommand.SetArgs([]string{ociArchiveName, "-o", jsonOutputName}) err := syftCommand.Execute() if err != nil { panic(err) } }
L'erreur est
panic: replace existing redaction store (probably unintentional) goroutine 1 [running]: github.com/anchore/syft/internal/redact.Set(...) go/pkg/mod/github.com/anchore/[email protected]/internal/redact/redact.go:11 github.com/anchore/syft/cmd/syft/cli.create.func2(0xc000490a90?) go/pkg/mod/github.com/anchore/[email protected]/cmd/syft/cli/cli.go:64 +0x1a5 github.com/anchore/clio.(*application).runInitializers(0xc0013bc1a0) go/pkg/mod/github.com/anchore/[email protected]/application.go:110 +0x66 github.com/anchore/clio.(*application).PostLoad(0xc0013bc1a0) go/pkg/mod/github.com/anchore/[email protected]/application.go:105 +0xbb github.com/anchore/fangs.postLoad({0x1f81f40?, 0xc0013bc1a0?, 0xc0013bc1a0?}) go/pkg/mod/github.com/anchore/[email protected]/load.go:201 +0x1e5 github.com/anchore/fangs.loadConfig({{0x26109f8, 0x349e4e0}, {0x1ff3df6, 0x4}, {0x2004cda, 0xc}, {0x0, 0x0}, {0xc002b25e30, 0x5, ...}}, ...) go/pkg/mod/github.com/anchore/[email protected]/load.go:80 +0x7d1 github.com/anchore/fangs.Load({{0x26109f8, 0x349e4e0}, {0x1ff3df6, 0x4}, {0x2004cda, 0xc}, {0x0, 0x0}, {0xc002b25e30, 0x5, ...}}, ...) go/pkg/mod/github.com/anchore/[email protected]/load.go:16 +0x74 github.com/anchore/clio.(*application).loadConfigs(0xc0013bc1a0, 0xc000033870?, {0xc0004909f0, 0x1, 0xc0013b2700?}) go/pkg/mod/github.com/anchore/[email protected]/application.go:95 +0x1a5 github.com/anchore/clio.(*application).setupCommand.func1.(*application).Setup.func1(0x4?, {0xd631f2?, 0xc0013b2700?, 0xc000033af0?}) go/pkg/mod/github.com/anchore/[email protected]/application.go:74 +0x45 github.com/anchore/clio.(*application).setupCommand.func1(0xc0013b2700?, {0xc002e20870, 0x1, 0x3}) go/pkg/mod/github.com/anchore/[email protected]/application.go:316 +0x82 github.com/spf13/cobra.(*Command).execute(0xc000845200, {0xc002e20660, 0x3, 0x3}) go/pkg/mod/github.com/spf13/[email protected]/command.go:925 +0x7f6 github.com/spf13/cobra.(*Command).ExecuteC(0xc000845200) go/pkg/mod/github.com/spf13/[email protected]/command.go:1068 +0x3a5 github.com/spf13/cobra.(*Command).Execute(...) go/pkg/mod/github.com/spf13/[email protected]/command.go:992
Je ne trouve pas de moyen de réinitialiser la commande cobra afin qu'elle puisse être appelée plusieurs fois. Est-il possible?
J'ai contacté la communauté Anchore et ils ont pu résoudre mon problème.
Je dois utiliser la bibliothèque Syft directement, pas via la commande cobra.
Pour des exemples, veuillez consulter https://www.php.cn/link/3b13b1eb44b05f57735764786fab9c2c
Merci beaucoup Christopher Phillips
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!