From 0e90409dd096f951d5b5bb41431f76cfce0b03d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zsolt=20Kacs=C3=A1ndi?= Date: Mon, 8 Jul 2024 13:06:09 +0200 Subject: [PATCH] feat(plugin): enable binary plugin support (#1794) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * refactor(plugin): rename containermanager to pluginruntimehandler * refactor(plugin): rename containerManager to containerRuntimeHandler * refactor(plugin): rename pluginruntimehandler to runtimehandler * feat(plugin): add binary runtime handler * feat(plugin): add `binary_mode` config `binary_mode` can be set differently for individual scanners, however, if the top level `binary_mode` is set, it will overwrite all the setting for all scanners. Signed-off-by: András Jáky * refactor(plugins): binary mode only in linux build Signed-off-by: András Jáky * docs(plugin): add warning * chore(plugin): go mod tidy Signed-off-by: András Jáky * fix(plugin): fix linter warnings * fix(plugin): add mutex to prevent possible race condition during starting the plugin * fix(plugin): fix log streaming * fix(plugin): move plugins into the user's home directory * fix(plugin): unmount on panic * fix(plugin): cleanup image after unmount Also make cleanup error log more informative. Signed-off-by: András Jáky * fix(plugin): stopping gracefully if the context is cancelled * Update plugins/runner/internal/runtimehandler/binary/handler.go Co-authored-by: András Jáky * refactor(plugin): move deferred unmount * refactor(plugin): move deferred unmount * fix(plugin): fix input dir permission * refactor: scanner/utils/containerrootfs->utils/fsutils/ Signed-off-by: András Jáky * chore: make gen Signed-off-by: András Jáky * fix(plugin): linter issues Signed-off-by: András Jáky * fix(utils): use replace in go.mod for core package Signed-off-by: András Jáky --------- Signed-off-by: András Jáky Co-authored-by: András Jáky --- .families.yaml | 3 +- api/openapi.yaml | 2 + api/server/internal/server/server.gen.go | 344 +++++++++--------- api/types/types.gen.go | 1 + cli/state/testdata/effective-config.json | 3 +- orchestrator/go.mod | 1 + orchestrator/watcher/assetscan/families.go | 1 + plugins/runner/go.mod | 80 +++- plugins/runner/go.sum | 260 +++++++++++-- .../internal/runtimehandler/binary/README.md | 3 + .../internal/runtimehandler/binary/handler.go | 241 ++++++++++++ .../docker/client.go | 0 .../docker/handler.go} | 96 ++--- .../types.go | 8 +- plugins/runner/runner.go | 37 +- plugins/runner/runtimehandler.go | 41 +++ plugins/runner/runtimehandler_linux.go | 46 +++ plugins/runner/types/types.go | 2 + plugins/sdk-python/example/Dockerfile | 2 +- plugins/sdk-python/example/Dockerfile.test | 2 +- provider/go.mod | 1 + scanner/families/config.go | 1 + scanner/families/manager.go | 2 +- scanner/families/plugins/config.go | 1 + scanner/families/plugins/family.go | 10 + .../families/plugins/runner/config/config.go | 2 + scanner/families/plugins/runner/runner.go | 1 + scanner/families/utils/utils.go | 2 +- scanner/go.mod | 2 + .../fsutils}/containerrootfs/example/main.go | 2 +- .../fsutils}/containerrootfs/todirectory.go | 2 +- .../containerrootfs/totempdirectory.go | 0 utils/go.mod | 76 ++++ utils/go.sum | 335 ++++++++++++++++- 34 files changed, 1317 insertions(+), 293 deletions(-) create mode 100644 plugins/runner/internal/runtimehandler/binary/README.md create mode 100644 plugins/runner/internal/runtimehandler/binary/handler.go rename plugins/runner/internal/{containermanager => runtimehandler}/docker/client.go (100%) rename plugins/runner/internal/{containermanager/docker/manager.go => runtimehandler/docker/handler.go} (71%) rename plugins/runner/internal/{containermanager => runtimehandler}/types.go (88%) create mode 100644 plugins/runner/runtimehandler.go create mode 100644 plugins/runner/runtimehandler_linux.go rename {scanner/utils => utils/fsutils}/containerrootfs/example/main.go (93%) rename {scanner/utils => utils/fsutils}/containerrootfs/todirectory.go (97%) rename {scanner/utils => utils/fsutils}/containerrootfs/totempdirectory.go (100%) diff --git a/.families.yaml b/.families.yaml index de63d85ec..a3f4d2189 100644 --- a/.families.yaml +++ b/.families.yaml @@ -131,9 +131,10 @@ rootkits: plugins: enabled: false + binary_mode: false scanners_list: - "kics" - inputs: + inputs: - input: "/tmp" input_type: "rootfs" scanners_config: diff --git a/api/openapi.yaml b/api/openapi.yaml index bd2525993..1e8f3f629 100644 --- a/api/openapi.yaml +++ b/api/openapi.yaml @@ -2087,6 +2087,8 @@ components: properties: enabled: type: boolean + binary_mode: + type: boolean scanners_list: type: array items: diff --git a/api/server/internal/server/server.gen.go b/api/server/internal/server/server.gen.go index 356ed494a..ca1e0ade4 100644 --- a/api/server/internal/server/server.gen.go +++ b/api/server/internal/server/server.gen.go @@ -1932,178 +1932,178 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/api/types/types.gen.go b/api/types/types.gen.go index cfbaf323e..8858a36b0 100644 --- a/api/types/types.gen.go +++ b/api/types/types.gen.go @@ -977,6 +977,7 @@ type PluginScannerConfig struct { // PluginsConfig defines model for PluginsConfig. type PluginsConfig struct { + BinaryMode *bool `json:"binary_mode,omitempty"` Enabled *bool `json:"enabled,omitempty"` ScannersConfig *map[string]PluginScannerConfig `json:"scanners_config,omitempty"` ScannersList *[]string `json:"scanners_list,omitempty"` diff --git a/cli/state/testdata/effective-config.json b/cli/state/testdata/effective-config.json index dbb25f685..d3058c1ea 100644 --- a/cli/state/testdata/effective-config.json +++ b/cli/state/testdata/effective-config.json @@ -93,6 +93,7 @@ "Enabled": false, "ScannersList": null, "Inputs": null, - "ScannersConfig": null + "ScannersConfig": null, + "BinaryMode": null } } diff --git a/orchestrator/go.mod b/orchestrator/go.mod index 349c5d460..79f3f05d5 100644 --- a/orchestrator/go.mod +++ b/orchestrator/go.mod @@ -332,6 +332,7 @@ require ( github.com/openclarity/vmclarity/containerruntimediscovery/types v0.7.1 // indirect github.com/openclarity/vmclarity/plugins/runner v0.7.1 // indirect github.com/openclarity/vmclarity/plugins/sdk-go v0.7.1 // indirect + github.com/openclarity/vmclarity/utils v0.7.1 // indirect github.com/openclarity/yara-rule-server v0.3.0 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.0 // indirect diff --git a/orchestrator/watcher/assetscan/families.go b/orchestrator/watcher/assetscan/families.go index 67caa6d7a..4c8edc9f1 100644 --- a/orchestrator/watcher/assetscan/families.go +++ b/orchestrator/watcher/assetscan/families.go @@ -264,6 +264,7 @@ func withPluginsConfig(config *apitypes.PluginsConfig, _ *ScannerConfig) Familie ScannersList: *config.ScannersList, Inputs: nil, // rootfs directory will be determined by the CLI after mount. ScannersConfig: &scannersConfig, + BinaryMode: config.BinaryMode, } } } diff --git a/plugins/runner/go.mod b/plugins/runner/go.mod index 1115d5cd3..017e7d13d 100644 --- a/plugins/runner/go.mod +++ b/plugins/runner/go.mod @@ -6,62 +6,116 @@ require ( github.com/deepmap/oapi-codegen/v2 v2.2.0 github.com/docker/docker v26.1.4+incompatible github.com/docker/go-connections v0.5.0 + github.com/hashicorp/go-multierror v1.1.1 github.com/openclarity/vmclarity/core v0.7.1 github.com/openclarity/vmclarity/plugins/sdk-go v0.7.1 + github.com/openclarity/vmclarity/utils v0.7.1 ) require ( + github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect + github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20230306123547-8075edf89bb0 // indirect github.com/Microsoft/go-winio v0.6.2 // indirect + github.com/Microsoft/hcsshim v0.12.3 // indirect + github.com/adrg/xdg v0.4.0 // indirect + github.com/anchore/go-collections v0.0.0-20240216171411-9321230ce537 // indirect + github.com/anchore/go-logger v0.0.0-20230725134548-c21dafa1ec5a // indirect + github.com/anchore/stereoscope v0.0.3-0.20240501181043-2e9894674185 // indirect + github.com/becheran/wildmatch-go v1.0.0 // indirect + github.com/bmatcuk/doublestar/v4 v4.6.1 // indirect + github.com/containerd/cgroups/v3 v3.0.3 // indirect + github.com/containerd/containerd v1.7.17 // indirect + github.com/containerd/continuity v0.4.3 // indirect + github.com/containerd/errdefs v0.1.0 // indirect + github.com/containerd/fifo v1.1.0 // indirect github.com/containerd/log v0.1.0 // indirect + github.com/containerd/stargz-snapshotter/estargz v0.15.1 // indirect + github.com/containerd/ttrpc v1.2.4 // indirect + github.com/containerd/typeurl/v2 v2.1.1 // indirect github.com/distribution/reference v0.6.0 // indirect + github.com/docker/cli v26.1.3+incompatible // indirect + github.com/docker/distribution v2.8.3+incompatible // indirect + github.com/docker/docker-credential-helpers v0.8.1 // indirect + github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect github.com/docker/go-units v0.5.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/gabriel-vasile/mimetype v1.4.3 // indirect + github.com/gabriel-vasile/mimetype v1.4.4 // indirect github.com/getkin/kin-openapi v0.124.0 // indirect github.com/go-logr/logr v1.4.1 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/go-openapi/jsonpointer v0.20.2 // indirect - github.com/go-openapi/swag v0.22.8 // indirect + github.com/go-openapi/jsonpointer v0.21.0 // indirect + github.com/go-openapi/swag v0.23.0 // indirect github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-playground/validator/v10 v10.20.0 // indirect + github.com/go-test/deep v1.1.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-jwt/jwt v3.2.2+incompatible // indirect - github.com/golang/protobuf v1.5.4 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/google/go-cmp v0.6.0 // indirect + github.com/google/go-containerregistry v0.19.2 // indirect + github.com/google/uuid v1.6.0 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect github.com/invopop/yaml v0.2.0 // indirect github.com/josharian/intern v1.0.0 // indirect + github.com/klauspost/compress v1.17.8 // indirect github.com/labstack/echo/v4 v4.12.0 // indirect github.com/labstack/gommon v0.4.2 // indirect github.com/leodido/go-urn v1.4.0 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.20 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/moby/docker-image-spec v1.3.1 // indirect + github.com/moby/locker v1.0.1 // indirect + github.com/moby/sys/mountinfo v0.7.1 // indirect + github.com/moby/sys/sequential v0.5.0 // indirect + github.com/moby/sys/signal v0.7.0 // indirect + github.com/moby/sys/user v0.1.0 // indirect github.com/moby/term v0.5.0 // indirect github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect - github.com/morikuni/aec v1.0.0 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.0 // indirect + github.com/opencontainers/runtime-spec v1.2.0 // indirect + github.com/opencontainers/selinux v1.11.0 // indirect + github.com/pelletier/go-toml v1.9.5 // indirect github.com/perimeterx/marshmallow v1.1.5 // indirect + github.com/pierrec/lz4/v4 v4.1.15 // indirect github.com/pkg/errors v0.9.1 // indirect + github.com/prometheus/procfs v0.12.0 // indirect + github.com/scylladb/go-set v1.0.3-0.20200225121959-cc7b2070d91e // indirect + github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect github.com/sirupsen/logrus v1.9.3 // indirect + github.com/spf13/afero v1.11.0 // indirect + github.com/sylabs/sif/v2 v2.16.0 // indirect + github.com/sylabs/squashfs v0.6.1 // indirect + github.com/therootcompany/xz v1.0.1 // indirect + github.com/ulikunitz/xz v0.5.12 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/fasttemplate v1.2.2 // indirect + github.com/vbatts/tar-split v0.11.5 // indirect + github.com/wagoodman/go-partybus v0.0.0-20230516145632-8ccac152c651 // indirect + github.com/wagoodman/go-progress v0.0.0-20230925121702-07e42b3cdba0 // indirect + go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 // indirect go.opentelemetry.io/otel v1.24.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.24.0 // indirect go.opentelemetry.io/otel/metric v1.24.0 // indirect go.opentelemetry.io/otel/sdk v1.24.0 // indirect go.opentelemetry.io/otel/trace v1.24.0 // indirect - golang.org/x/crypto v0.23.0 // indirect + golang.org/x/crypto v0.24.0 // indirect golang.org/x/mod v0.17.0 // indirect - golang.org/x/net v0.25.0 // indirect - golang.org/x/sys v0.20.0 // indirect - golang.org/x/text v0.15.0 // indirect + golang.org/x/net v0.26.0 // indirect + golang.org/x/sync v0.7.0 // indirect + golang.org/x/sys v0.21.0 // indirect + golang.org/x/text v0.16.0 // indirect golang.org/x/time v0.5.0 // indirect - golang.org/x/tools v0.21.0 // indirect - google.golang.org/grpc v1.62.0 // indirect - google.golang.org/protobuf v1.33.0 // indirect + golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect + google.golang.org/genproto v0.0.0-20240311173647-c811ad7063a7 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240311173647-c811ad7063a7 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 // indirect + google.golang.org/grpc v1.63.2 // indirect + google.golang.org/protobuf v1.34.1 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect gotest.tools/v3 v3.5.1 // indirect @@ -70,4 +124,6 @@ require ( replace ( github.com/openclarity/vmclarity/core => ../../core github.com/openclarity/vmclarity/plugins/sdk-go => ../sdk-go + github.com/openclarity/vmclarity/scanner => ../../scanner + github.com/openclarity/vmclarity/utils => ../../utils ) diff --git a/plugins/runner/go.sum b/plugins/runner/go.sum index beba26e4d..45aad0920 100644 --- a/plugins/runner/go.sum +++ b/plugins/runner/go.sum @@ -1,11 +1,53 @@ -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= +github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20230306123547-8075edf89bb0 h1:59MxjQVfjXsBpLy+dbd2/ELV5ofnUkUZBvWSC85sheA= +github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20230306123547-8075edf89bb0/go.mod h1:OahwfttHWG6eJ0clwcfBAHoDI6X/LV/15hx/wlMZSrU= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY= github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= +github.com/Microsoft/hcsshim v0.12.3 h1:LS9NXqXhMoqNCplK1ApmVSfB4UnVLRDWRapB6EIlxE0= +github.com/Microsoft/hcsshim v0.12.3/go.mod h1:Iyl1WVpZzr+UkzjekHZbV8o5Z9ZkxNGx6CtY2Qg/JVQ= +github.com/adrg/xdg v0.4.0 h1:RzRqFcjH4nE5C6oTAxhBtoE2IRyjBSa62SCbyPidvls= +github.com/adrg/xdg v0.4.0/go.mod h1:N6ag73EX4wyxeaoeHctc1mas01KZgsj5tYiAIwqJE/E= +github.com/anchore/go-collections v0.0.0-20240216171411-9321230ce537 h1:GjNGuwK5jWjJMyVppBjYS54eOiiSNv4Ba869k4wh72Q= +github.com/anchore/go-collections v0.0.0-20240216171411-9321230ce537/go.mod h1:1aiktV46ATCkuVg0O573ZrH56BUawTECPETbZyBcqT8= +github.com/anchore/go-logger v0.0.0-20230725134548-c21dafa1ec5a h1:nJ2G8zWKASyVClGVgG7sfM5mwoZlZ2zYpIzN2OhjWkw= +github.com/anchore/go-logger v0.0.0-20230725134548-c21dafa1ec5a/go.mod h1:ubLFmlsv8/DFUQrZwY5syT5/8Er3ugSr4rDFwHsE3hg= +github.com/anchore/go-testutils v0.0.0-20200925183923-d5f45b0d3c04 h1:VzprUTpc0vW0nnNKJfJieyH/TZ9UYAnTZs5/gHTdAe8= +github.com/anchore/go-testutils v0.0.0-20200925183923-d5f45b0d3c04/go.mod h1:6dK64g27Qi1qGQZ67gFmBFvEHScy0/C8qhQhNe5B5pQ= +github.com/anchore/stereoscope v0.0.3-0.20240501181043-2e9894674185 h1:SuViDJ27nZ+joGdKbAkxAlm7tYMt9NTxTZZ05po4hls= +github.com/anchore/stereoscope v0.0.3-0.20240501181043-2e9894674185/go.mod h1:ckIamHiRMp8iBwWoTtE5Xkt9VQ5QC+6+O4VzwqyZr5Q= +github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= +github.com/becheran/wildmatch-go v1.0.0 h1:mE3dGGkTmpKtT4Z+88t8RStG40yN9T+kFEGj2PZFSzA= +github.com/becheran/wildmatch-go v1.0.0/go.mod h1:gbMvj0NtVdJ15Mg/mH9uxk2R1QCistMyU7d9KFzroX4= +github.com/bmatcuk/doublestar/v4 v4.6.1 h1:FH9SifrbvJhnlQpztAx++wlkk70QBf0iBWDwNy7PA4I= +github.com/bmatcuk/doublestar/v4 v4.6.1/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc= github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/containerd/cgroups/v3 v3.0.3 h1:S5ByHZ/h9PMe5IOQoN7E+nMc2UcLEM/V48DGDJ9kip0= +github.com/containerd/cgroups/v3 v3.0.3/go.mod h1:8HBe7V3aWGLFPd/k03swSIsGjZhHI2WzJmticMgVuz0= +github.com/containerd/containerd v1.7.17 h1:KjNnn0+tAVQHAoaWRjmdak9WlvnFR/8rU1CHHy8Rm2A= +github.com/containerd/containerd v1.7.17/go.mod h1:vK+hhT4TIv2uejlcDlbVIc8+h/BqtKLIyNrtCZol8lI= +github.com/containerd/continuity v0.4.3 h1:6HVkalIp+2u1ZLH1J/pYX2oBVXlJZvh1X1A7bEZ9Su8= +github.com/containerd/continuity v0.4.3/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ= +github.com/containerd/errdefs v0.1.0 h1:m0wCRBiu1WJT/Fr+iOoQHMQS/eP5myQ8lCv4Dz5ZURM= +github.com/containerd/errdefs v0.1.0/go.mod h1:YgWiiHtLmSeBrvpw+UfPijzbLaB77mEG1WwJTDETIV0= +github.com/containerd/fifo v1.1.0 h1:4I2mbh5stb1u6ycIABlBw9zgtlK8viPI9QkQNRQEEmY= +github.com/containerd/fifo v1.1.0/go.mod h1:bmC4NWMbXlt2EZ0Hc7Fx7QzTFxgPID13eH0Qu+MAb2o= github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= +github.com/containerd/stargz-snapshotter/estargz v0.15.1 h1:eXJjw9RbkLFgioVaTG+G/ZW/0kEe2oEKCdS/ZxIyoCU= +github.com/containerd/stargz-snapshotter/estargz v0.15.1/go.mod h1:gr2RNwukQ/S9Nv33Lt6UC7xEx58C+LHRdoqbEKjz1Kk= +github.com/containerd/ttrpc v1.2.4 h1:eQCQK4h9dxDmpOb9QOOMh2NHTfzroH1IkmHiKZi05Oo= +github.com/containerd/ttrpc v1.2.4/go.mod h1:ojvb8SJBSch0XkqNO0L0YX/5NxR3UnVk2LzFKBK0upc= +github.com/containerd/typeurl/v2 v2.1.1 h1:3Q4Pt7i8nYwy2KmQWIw2+1hTvwTE/6w9FqcttATPO/4= +github.com/containerd/typeurl/v2 v2.1.1/go.mod h1:IDp2JFvbwZ31H8dQbEIY7sDl2L3o3HZj1hsSQlywkQ0= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= @@ -14,16 +56,30 @@ github.com/deepmap/oapi-codegen/v2 v2.2.0 h1:FW4f7C0Xb6EaezBSB3GYw2QGwHD5ChDflG+ github.com/deepmap/oapi-codegen/v2 v2.2.0/go.mod h1:L4zUv7ULYDtYSb/aYk/xO3OYcQU6BoU/0viULkbi2DE= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= +github.com/docker/cli v26.1.3+incompatible h1:bUpXT/N0kDE3VUHI2r5VMsYQgi38kYuoC0oL9yt3lqc= +github.com/docker/cli v26.1.3+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= +github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/docker v26.1.4+incompatible h1:vuTpXDuoga+Z38m1OZHzl7NKisKWaWlhjQk7IDPSLsU= github.com/docker/docker v26.1.4+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker-credential-helpers v0.8.1 h1:j/eKUktUltBtMzKqmfLB0PAgqYyMHOp5vfsD1807oKo= +github.com/docker/docker-credential-helpers v0.8.1/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M= github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c= github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc= +github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= +github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/set v0.2.1 h1:nn2CaJyknWE/6txyUDGwysr3G5QC6xWB/PtVjPBbeaA= +github.com/fatih/set v0.2.1/go.mod h1:+RKtMCH+favT2+3YecHGxcc0b4KyVWA1QWWJUs4E0CI= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/gabriel-vasile/mimetype v1.4.3 h1:in2uUcidCuFcDKtdcBxlR0rJ1+fsokWf+uqxgUFjbI0= -github.com/gabriel-vasile/mimetype v1.4.3/go.mod h1:d8uq/6HKRL6CGdk+aubisF/M5GcPfT7nKyLpA0lbSSk= +github.com/gabriel-vasile/mimetype v1.4.4 h1:QjV6pZ7/XZ7ryI2KuyeEDE8wnh7fHP9YnQy+R0LnH8I= +github.com/gabriel-vasile/mimetype v1.4.4/go.mod h1:JwLei5XPtWdGiMFB5Pjle1oEeoSeEuJfJE+TtfvdB/s= github.com/getkin/kin-openapi v0.124.0 h1:VSFNMB9C9rTKBnQ/fpyDU8ytMTr4dWI9QovSKj9kz/M= github.com/getkin/kin-openapi v0.124.0/go.mod h1:wb1aSZA/iWmorQP9KTAS/phLj/t17B5jT7+fS8ed9NM= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= @@ -31,10 +87,10 @@ github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-openapi/jsonpointer v0.20.2 h1:mQc3nmndL8ZBzStEo3JYF8wzmeWffDH4VbXz58sAx6Q= -github.com/go-openapi/jsonpointer v0.20.2/go.mod h1:bHen+N0u1KEO3YlmqOjTT9Adn1RfD91Ar825/PuiRVs= -github.com/go-openapi/swag v0.22.8 h1:/9RjDSQ0vbFR+NyjGMkFTsA1IA0fmhKSThmfGZjicbw= -github.com/go-openapi/swag v0.22.8/go.mod h1:6QT22icPLEqAM/z/TChgb4WAveCHF92+2gF0CNjHpPI= +github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= +github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= +github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= +github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= @@ -43,26 +99,63 @@ github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJn github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/validator/v10 v10.20.0 h1:K9ISHbSaI0lyB2eWMPJo+kOS/FBExVwjEviJTixqxL8= github.com/go-playground/validator/v10 v10.20.0/go.mod h1:dbuPbCMFw/DrkbEynArYaCwl3amGuJotoKCe95atGMM= -github.com/go-test/deep v1.0.8 h1:TDsG77qcSprGbC6vTN8OuXp5g+J+b5Pcguhf7Zt61VM= -github.com/go-test/deep v1.0.8/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= +github.com/go-test/deep v1.1.0 h1:WOcxcdHcvdgThNXjw0t76K42FXTU7HpNQWHpA2HHNlg= +github.com/go-test/deep v1.1.0/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I= -github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= -github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-containerregistry v0.19.2 h1:TannFKE1QSajsP6hPWb5oJNgKe1IKjHukIKDUmvsV6w= +github.com/google/go-containerregistry v0.19.2/go.mod h1:YCMFNQeeXeLF+dnhhWkqDItx/JSkH01j1Kis4PsjzFI= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gookit/color v1.2.5/go.mod h1:AhIE+pS6D4Ql0SQWbBeXPHw7gY0/sjHoA4s/n1KB7xg= github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0 h1:Wqo399gCIufwto+VfwCSvsnfGpF/w5E9CNxSwbpD6No= github.com/grpc-ecosystem/grpc-gateway/v2 v2.19.0/go.mod h1:qmOFXW2epJhM0qSnUUYpldc7gVz2KMQwJ/QYCDIa7XU= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/invopop/yaml v0.2.0 h1:7zky/qH+O0DwAyoobXUqvVBwgBFRxKoQ/3FjcVpjTMY= github.com/invopop/yaml v0.2.0/go.mod h1:2XuRLgs/ouIrW3XNzuNj7J3Nvu/Dig5MXvbCEdiBN3Q= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.17.8 h1:YcnTYrq7MikUT7k0Yb5eceMmALQPYBW/Xltxn0NAMnU= +github.com/klauspost/compress v1.17.8/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/labstack/echo/v4 v4.12.0 h1:IKpw49IMryVB2p1a4dzwlhP1O2Tf2E0Ir/450lH+kI0= @@ -71,6 +164,8 @@ github.com/labstack/gommon v0.4.2 h1:F8qTUNXgG1+6WQmqoUWnz8WiEU60mXVVw0P4ht1WRA0 github.com/labstack/gommon v0.4.2/go.mod h1:QlUFxVM+SNXhDL/Z7YhocGIBYOiwB0mXm1+1bAPHPyU= github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= +github.com/logrusorgru/aurora v0.0.0-20200102142835-e9ef32dff381 h1:bqDmpDG49ZRnB5PcgP0RXtQvnMSgIF14M7CBd2shtXs= +github.com/logrusorgru/aurora v0.0.0-20200102142835-e9ef32dff381/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= @@ -78,8 +173,20 @@ github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovk github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0= github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo= +github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= +github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= +github.com/moby/sys/mountinfo v0.7.1 h1:/tTvQaSJRr2FshkhXiIpux6fQ2Zvc4j7tAhMTStAG2g= +github.com/moby/sys/mountinfo v0.7.1/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI= +github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc= +github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo= +github.com/moby/sys/signal v0.7.0 h1:25RW3d5TnQEoKvRbEKUGay6DCQ46IxAVTT9CUMgmsSI= +github.com/moby/sys/signal v0.7.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg= +github.com/moby/sys/user v0.1.0 h1:WmZ93f5Ux6het5iituh9x2zAG7NFY9Aqi49jjE1PaQg= +github.com/moby/sys/user v0.1.0/go.mod h1:fKJhFOnsCN6xZ5gSfbM6zaHGgDJMrqt9/reuj4T7MmU= github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw= @@ -90,29 +197,72 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8 github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= +github.com/opencontainers/runtime-spec v1.2.0 h1:z97+pHb3uELt/yiAWD691HNHQIF07bE7dzrbT927iTk= +github.com/opencontainers/runtime-spec v1.2.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/selinux v1.11.0 h1:+5Zbo97w3Lbmb3PeqQtpmTkMwsW5nRI3YaLpt7tQ7oU= +github.com/opencontainers/selinux v1.11.0/go.mod h1:E5dMC3VPuVvVHDYmi78qvhJp8+M586T4DlDRYpFkyec= +github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= +github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/perimeterx/marshmallow v1.1.5 h1:a2LALqQ1BlHM8PZblsDdidgv1mWi1DgC2UmX50IvK2s= github.com/perimeterx/marshmallow v1.1.5/go.mod h1:dsXbUu8CRzfYP5a87xpp0xq9S3u0Vchtcl8we9tYaXw= +github.com/pierrec/lz4/v4 v4.1.15 h1:MO0/ucJhngq7299dKLwIMtgTfbkoSPF6AoMYDd8Q4q0= +github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/procfs v0.12.0 h1:jluTpSng7V9hY0O2R9DzzJHYb2xULk9VTR1V1R/k6Bo= +github.com/prometheus/procfs v0.12.0/go.mod h1:pcuDEFsWDnvcgNzo4EEweacyhjeA9Zk3cnaOZAZEfOo= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/scylladb/go-set v1.0.3-0.20200225121959-cc7b2070d91e h1:7q6NSFZDeGfvvtIRwBrU/aegEYJYmvev0cHAwo17zZQ= +github.com/scylladb/go-set v1.0.3-0.20200225121959-cc7b2070d91e/go.mod h1:DkpGd78rljTxKAnTDPFqXSGxvETQnJyuSOQwsHycqfs= +github.com/sebdah/goldie/v2 v2.5.3 h1:9ES/mNN+HNUbNWpVAlrzuZ7jE+Nrczbj8uFRjM7624Y= +github.com/sebdah/goldie/v2 v2.5.3/go.mod h1:oZ9fp0+se1eapSRjfYbsV/0Hqhbuu3bJVvKI/NNtssI= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= +github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= +github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/sylabs/sif/v2 v2.16.0 h1:2eqaBaQQsn5DZTzm3QZm0HupZQEjNXfxRnCmtyCihEU= +github.com/sylabs/sif/v2 v2.16.0/go.mod h1:d5TxgD/mhMUU3kWLmZmWJQ99Wg0asaTP0bq3ezR1xpg= +github.com/sylabs/squashfs v0.6.1 h1:4hgvHnD9JGlYWwT0bPYNt9zaz23mAV3Js+VEgQoRGYQ= +github.com/sylabs/squashfs v0.6.1/go.mod h1:ZwpbPCj0ocIvMy2br6KZmix6Gzh6fsGQcCnydMF+Kx8= +github.com/therootcompany/xz v1.0.1 h1:CmOtsn1CbtmyYiusbfmhmkpAAETj0wBIH6kCYaX+xzw= +github.com/therootcompany/xz v1.0.1/go.mod h1:3K3UH1yCKgBneZYhuQUvJ9HPD19UEXEI0BWbMn8qNMY= github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +github.com/ulikunitz/xz v0.5.12 h1:37Nm15o69RwBkXM0J6A5OlE67RZTfzUxTj8fB3dfcsc= +github.com/ulikunitz/xz v0.5.12/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/vbatts/tar-split v0.11.5 h1:3bHCTIheBm1qFTcgh9oPu+nNBtX+XJIupG/vacinCts= +github.com/vbatts/tar-split v0.11.5/go.mod h1:yZbwRsSeGjusneWgA781EKej9HF8vme8okylkAeNKLk= +github.com/wagoodman/go-partybus v0.0.0-20230516145632-8ccac152c651 h1:jIVmlAFIqV3d+DOxazTR9v+zgj8+VYuQBzPgBZvWBHA= +github.com/wagoodman/go-partybus v0.0.0-20230516145632-8ccac152c651/go.mod h1:b26F2tHLqaoRQf8DywqzVaV1MQ9yvjb0OMcNl7Nxu20= +github.com/wagoodman/go-progress v0.0.0-20230925121702-07e42b3cdba0 h1:0KGbf+0SMg+UFy4e1A/CPVvXn21f1qtWdeJwxZFoQG8= +github.com/wagoodman/go-progress v0.0.0-20230925121702-07e42b3cdba0/go.mod h1:jLXFoL31zFaHKAAyZUh+sxiTDFe1L1ZHrcK2T1itVKA= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0 h1:jq9TW8u3so/bN+JPT166wjOI6/vQPF6Xe7nMNIltagk= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.49.0/go.mod h1:p8pYQP+m5XfbZm9fxtSKAbM6oIllS7s2AfxrChvc7iw= go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo= @@ -132,59 +282,105 @@ go.opentelemetry.io/proto/otlp v1.1.0/go.mod h1:GpBHCBWiqvVLDqmHZsoMM3C5ySeKTC7e golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.23.0 h1:dIJU/v2J8Mdglj/8rJ6UUOM3Zc9zLZxVZwwxMooUSAI= -golang.org/x/crypto v0.23.0/go.mod h1:CKFgDieR+mRhux2Lsu27y0fO304Db0wZe70UKqHu0v8= +golang.org/x/crypto v0.24.0 h1:mnl8DM0o513X8fdIkmyFE/5hTYxbwYOjDS/+rK6qpRI= +golang.org/x/crypto v0.24.0/go.mod h1:Z1PMYSOR5nyMcyAVAIQSKCDwalqy85Aqn1x3Ws4L5DM= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= -golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= +golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= -golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.21.0 h1:rF+pYz3DAGSQAxAu1CbC7catZg4ebC4UIeIhKxBZvws= +golang.org/x/sys v0.21.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.21.0 h1:WVXCp+/EBEHOj53Rvu+7KiT/iElMrO8ACK16SMZ3jaA= +golang.org/x/term v0.21.0/go.mod h1:ooXLefLobQVslOqselCNF4SxFAaoS6KujMbsGzSDmX0= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.15.0 h1:h1V/4gjBv8v9cjcR6+AR5+/cIYK5N/WAgiv4xlsEtAk= -golang.org/x/text v0.15.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= +golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.21.0 h1:qc0xYgIbsSDt9EyWz05J5wfa7LOVW0YTLOXrqdLAWIw= -golang.org/x/tools v0.21.0/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/genproto v0.0.0-20240123012728-ef4313101c80 h1:KAeGQVN3M9nD0/bQXnr/ClcEMJ968gUXJQ9pwfSynuQ= -google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80 h1:Lj5rbfG876hIAYFjqiJnPHfhXbv+nzTWfm04Fg/XSVU= -google.golang.org/genproto/googleapis/api v0.0.0-20240123012728-ef4313101c80/go.mod h1:4jWUdICTdgc3Ibxmr8nAJiiLHwQBY0UI0XZcEMaFKaA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80 h1:AjyfHzEPEFp/NpvfN5g+KDla3EMojjhRVZc1i7cj+oM= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240123012728-ef4313101c80/go.mod h1:PAREbraiVEVGVdTZsVWjSbbTtSyGbAgIIvni8a8CD5s= -google.golang.org/grpc v1.62.0 h1:HQKZ/fa1bXkX1oFOvSjmZEUL8wLSaZTjCcLAlmZRtdk= -google.golang.org/grpc v1.62.0/go.mod h1:IWTG0VlJLCh1SkC58F7np9ka9mx/WNkjl4PGJaiq+QE= -google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20240311173647-c811ad7063a7 h1:ImUcDPHjTrAqNhlOkSocDLfG9rrNHH7w7uoKWPaWZ8s= +google.golang.org/genproto v0.0.0-20240311173647-c811ad7063a7/go.mod h1:/3XmxOjePkvmKrHuBy4zNFw7IzxJXtAgdpXi8Ll990U= +google.golang.org/genproto/googleapis/api v0.0.0-20240311173647-c811ad7063a7 h1:oqta3O3AnlWbmIE3bFnWbu4bRxZjfbWCp0cKSuZh01E= +google.golang.org/genproto/googleapis/api v0.0.0-20240311173647-c811ad7063a7/go.mod h1:VQW3tUculP/D4B+xVCo+VgSq8As6wA9ZjHl//pmk+6s= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237 h1:NnYq6UN9ReLM9/Y01KWNOWyI5xQ9kbIms5GGJVwS/Yc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20240318140521-94a12d6c2237/go.mod h1:WtryC6hu0hhx87FDGxWCDptyssuo68sk10vYjF+T9fY= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.63.2 h1:MUeiw1B2maTVZthpU5xvASfTh3LDbxHd6IJ6QQVU+xM= +google.golang.org/grpc v1.63.2/go.mod h1:WAX/8DgncnokcFUldAxq7GeB5DXHDbMF+lLvDomNkRA= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.34.1 h1:9ddQBjfCyZPOHPUiPxpYESBLc+T8P3E+Vo4IbKZgFWg= +google.golang.org/protobuf v1.34.1/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= @@ -193,3 +389,5 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/plugins/runner/internal/runtimehandler/binary/README.md b/plugins/runner/internal/runtimehandler/binary/README.md new file mode 100644 index 000000000..22d42201e --- /dev/null +++ b/plugins/runner/internal/runtimehandler/binary/README.md @@ -0,0 +1,3 @@ +This is a highly experimental feature, for internal use only. + +You should only enable it if you understand the potential impact on your system. \ No newline at end of file diff --git a/plugins/runner/internal/runtimehandler/binary/handler.go b/plugins/runner/internal/runtimehandler/binary/handler.go new file mode 100644 index 000000000..fe3e3d132 --- /dev/null +++ b/plugins/runner/internal/runtimehandler/binary/handler.go @@ -0,0 +1,241 @@ +// Copyright © 2024 Cisco Systems, Inc. and its affiliates. +// All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build linux + +package binary + +import ( + "bytes" + "context" + "errors" + "fmt" + "io" + "net" + "os" + "os/exec" + "path/filepath" + "sync" + "syscall" + + multierror "github.com/hashicorp/go-multierror" + + "github.com/openclarity/vmclarity/plugins/runner/internal/runtimehandler" + "github.com/openclarity/vmclarity/plugins/runner/types" + "github.com/openclarity/vmclarity/plugins/sdk-go/plugin" + "github.com/openclarity/vmclarity/utils/fsutils/containerrootfs" +) + +type binaryRuntimeHandler struct { + config types.PluginConfig + + cmd *exec.Cmd + stdoutPipe io.ReadCloser + stderrPipe io.ReadCloser + + pluginDir string + inputDirMountPoint string + pluginServerEndpoint string + ready bool + imageCleanup func() + + mu sync.Mutex +} + +func New(ctx context.Context, config types.PluginConfig) (runtimehandler.PluginRuntimeHandler, error) { + return &binaryRuntimeHandler{ + config: config, + }, nil +} + +//nolint:cyclop +func (h *binaryRuntimeHandler) Start(ctx context.Context) error { + h.mu.Lock() + defer h.mu.Unlock() + + image, cleanup, err := containerrootfs.GetImageWithCleanup(ctx, h.config.ImageName) + if err != nil { + return fmt.Errorf("unable to get image(%s): %w", h.config.ImageName, err) + } + h.imageCleanup = cleanup + + home, err := os.UserHomeDir() + if err != nil { + return fmt.Errorf("unable to determine user's home directory: %w", err) + } + + h.pluginDir = filepath.Join(home, ".vmclarity/plugins", h.config.Name, image.Metadata.ID) + + if _, err := os.Stat(h.pluginDir); os.IsNotExist(err) { + err = containerrootfs.ToDirectory(ctx, image, h.pluginDir) + if err != nil { + return fmt.Errorf("unable to extract image(%s): %w", h.config.ImageName, err) + } + } + + // Mount input from host + // /home/ubuntu/.vmclarity/plugins/kics/ + /input + /host-dir-to-scan + h.inputDirMountPoint = filepath.Join(h.pluginDir, runtimehandler.RemoteScanInputDirOverride, h.config.InputDir) + err = os.MkdirAll(h.inputDirMountPoint, 0o550) //nolint:mnd + if err != nil { + return fmt.Errorf("unable to create directory for mount point: %w", err) + } + + err = syscall.Mount(h.config.InputDir, h.inputDirMountPoint, "", syscall.MS_BIND, "") + if err != nil { + return fmt.Errorf("unable to mount input directory (%s - %s): %w", h.config.InputDir, h.inputDirMountPoint, err) + } + + defer func() { + if r := recover(); r != nil { + syscall.Unmount(h.inputDirMountPoint, 0) //nolint:errcheck + } + }() + + // https://lwn.net/Articles/281157/ + // "the read-only attribute can only be added with a remount operation afterward" + err = syscall.Mount(h.config.InputDir, h.inputDirMountPoint, "", syscall.MS_BIND|syscall.MS_REMOUNT|syscall.MS_RDONLY, "") + if err != nil { + return fmt.Errorf("unable to remount input directory as read-only (%s - %s): %w", h.config.InputDir, h.inputDirMountPoint, err) + } + + // Determine entrypoint or command to execute + var args []string + if len(image.Metadata.Config.Config.Entrypoint) > 0 { + args = append(image.Metadata.Config.Config.Entrypoint[0:], image.Metadata.Config.Config.Cmd...) + } else if len(image.Metadata.Config.Config.Cmd) > 0 { + args = image.Metadata.Config.Config.Cmd[0:] + } else { + return errors.New("no entrypoint or command found in the config") + } + + // Find a port + openPortListener, err := net.Listen("tcp", ":0") //nolint:gosec + if err != nil { + return errors.New("unable to find port") + } + port := openPortListener.Addr().(*net.TCPAddr).Port //nolint:forcetypeassert + + h.pluginServerEndpoint = fmt.Sprintf("http://127.0.0.1:%d", port) + + // Set environment variables + env := image.Metadata.Config.Config.Env + env = append(env, fmt.Sprintf("%s=%s", plugin.EnvListenAddress, h.pluginServerEndpoint)) + + // Set workdir + workDir := image.Metadata.Config.Config.WorkingDir + if workDir == "" { + workDir = "/" + } + + // Initialize command + h.cmd = exec.CommandContext(ctx, args[0], args[1:]...) //nolint:gosec + h.cmd.Env = env + h.cmd.Dir = workDir + + h.cmd.SysProcAttr = &syscall.SysProcAttr{ + Chroot: h.pluginDir, + } + + h.cmd.Stdin = &bytes.Buffer{} + h.stdoutPipe, err = h.cmd.StdoutPipe() + if err != nil { + return fmt.Errorf("unable to open pipe for command stdout: %w", err) + } + + h.stderrPipe, err = h.cmd.StderrPipe() + if err != nil { + return fmt.Errorf("unable to open pipe for command stderr: %w", err) + } + + // Start command + openPortListener.Close() + err = h.cmd.Start() + if err != nil { + return fmt.Errorf("unable to start process: %w", err) + } + + // Waiting for command to be finished in the background + go func() { + h.cmd.Wait() //nolint:errcheck + }() + + h.ready = true + + return nil +} + +func (h *binaryRuntimeHandler) Ready() (bool, error) { + if h.cmd == nil { + return false, errors.New("plugin process is not running") + } + + return h.ready, nil +} + +func (h *binaryRuntimeHandler) GetPluginServerEndpoint(ctx context.Context) (string, error) { + return h.pluginServerEndpoint, nil +} + +func (h *binaryRuntimeHandler) Logs(ctx context.Context) (io.ReadCloser, error) { + if h.cmd == nil { + return nil, errors.New("plugin process is not running") + } + + stdoutPipeReader, stdoutPipeWriter := io.Pipe() + stderrPipeReader, stderrPipeWriter := io.Pipe() + + go func() { + io.Copy(stdoutPipeWriter, h.stdoutPipe) //nolint:errcheck + }() + + go func() { + io.Copy(stderrPipeWriter, h.stderrPipe) //nolint:errcheck + }() + + return io.NopCloser(io.MultiReader(stdoutPipeReader, stderrPipeReader)), nil +} + +func (h *binaryRuntimeHandler) Result(ctx context.Context) (io.ReadCloser, error) { + f, err := os.Open(filepath.Join(h.pluginDir, runtimehandler.RemoteScanResultFileOverride)) + if err != nil { + return nil, fmt.Errorf("unable to open result file: %w", err) + } + + return f, nil +} + +func (h *binaryRuntimeHandler) Remove(ctx context.Context) error { + var removeErr error + + if h.cmd.ProcessState != nil { + if !h.cmd.ProcessState.Exited() { + if err := h.cmd.Process.Kill(); err != nil { + removeErr = multierror.Append(removeErr, fmt.Errorf("failed to kill plugin process: %w", err)) + } + } + } + + // Unmount input directory + if err := syscall.Unmount(h.inputDirMountPoint, 0); err != nil { + removeErr = multierror.Append(removeErr, fmt.Errorf("failed to kill plugin process: %w", err)) + } else { + // Call the cleanup function for the image only after the input directory is unmounted, or else it will also remove + // the root filesystem mounted under input + h.imageCleanup() + } + + return removeErr //nolint:wrapcheck +} diff --git a/plugins/runner/internal/containermanager/docker/client.go b/plugins/runner/internal/runtimehandler/docker/client.go similarity index 100% rename from plugins/runner/internal/containermanager/docker/client.go rename to plugins/runner/internal/runtimehandler/docker/client.go diff --git a/plugins/runner/internal/containermanager/docker/manager.go b/plugins/runner/internal/runtimehandler/docker/handler.go similarity index 71% rename from plugins/runner/internal/containermanager/docker/manager.go rename to plugins/runner/internal/runtimehandler/docker/handler.go index fb048ba71..5cf9b6e40 100644 --- a/plugins/runner/internal/containermanager/docker/manager.go +++ b/plugins/runner/internal/runtimehandler/docker/handler.go @@ -29,7 +29,7 @@ import ( "sync/atomic" "time" - "github.com/openclarity/vmclarity/plugins/runner/internal/containermanager" + "github.com/openclarity/vmclarity/plugins/runner/internal/runtimehandler" "github.com/openclarity/vmclarity/plugins/runner/types" dockertypes "github.com/docker/docker/api/types" @@ -49,7 +49,7 @@ const ( defaultPluginNetwork = "vmclarity-plugins-network" ) -type containerManager struct { +type containerRuntimeHandler struct { client *dockerClient config types.PluginConfig @@ -61,37 +61,37 @@ type containerManager struct { runningErr atomic.Pointer[error] } -func New(ctx context.Context, config types.PluginConfig) (containermanager.PluginContainerManager, error) { +func New(ctx context.Context, config types.PluginConfig) (runtimehandler.PluginRuntimeHandler, error) { // Load docker client client, err := newDockerClient() if err != nil { return nil, err } - return &containerManager{ + return &containerRuntimeHandler{ client: client, config: config, }, nil } -func (cm *containerManager) Start(ctx context.Context) error { +func (h *containerRuntimeHandler) Start(ctx context.Context) error { // Pull scanner image if required - err := cm.pullPluginImage(ctx) + err := h.pullPluginImage(ctx) if err != nil { return fmt.Errorf("failed to pull image: %w", err) } // Get scanner container mounts - scanDirMount, err := cm.getScanInputDirMount(ctx) + scanDirMount, err := h.getScanInputDirMount(ctx) if err != nil { return fmt.Errorf("failed to get mounts: %w", err) } // Create scanner container - container, err := cm.client.ContainerCreate( + container, err := h.client.ContainerCreate( ctx, &containertypes.Config{ - Image: cm.config.ImageName, + Image: h.config.ImageName, Env: []string{ fmt.Sprintf("%s=http://0.0.0.0:%s", plugin.EnvListenAddress, defaultInternalServerPort.Port()), }, @@ -116,25 +116,25 @@ func (cm *containerManager) Start(ctx context.Context) error { return fmt.Errorf("failed to create container: %w", err) } - cm.containerID = container.ID + h.containerID = container.ID // Connect plugin container to plugin network - networkID, err := cm.client.GetOrCreateBridgeNetwork(ctx, defaultPluginNetwork) + networkID, err := h.client.GetOrCreateBridgeNetwork(ctx, defaultPluginNetwork) if err != nil { return fmt.Errorf("failed to get network ID: %w", err) } - if err := cm.client.NetworkConnect(ctx, networkID, cm.containerID, nil); err != nil { + if err := h.client.NetworkConnect(ctx, networkID, h.containerID, nil); err != nil { return fmt.Errorf("failed to connect plugin to network: %w", err) } // Connect host container to plugin network - if err := cm.connectHostContainer(ctx, networkID); err != nil { + if err := h.connectHostContainer(ctx, networkID); err != nil { return fmt.Errorf("failed to connect host to network: %w", err) } // Start container - err = cm.client.ContainerStart(ctx, cm.containerID, containertypes.StartOptions{}) + err = h.client.ContainerStart(ctx, h.containerID, containertypes.StartOptions{}) if err != nil { return fmt.Errorf("failed to start container: %w", err) } @@ -142,30 +142,30 @@ func (cm *containerManager) Start(ctx context.Context) error { // Set container running data when ready // nolint:contextcheck go func() { - rContainer, rErr := cm.waitContainerRunning(context.Background()) + rContainer, rErr := h.waitContainerRunning(context.Background()) if err != nil { - cm.runningErr.Store(&rErr) + h.runningErr.Store(&rErr) } - cm.runningContainer.Store(rContainer) + h.runningContainer.Store(rContainer) }() return nil } -func (cm *containerManager) Ready() (bool, error) { - rErrPtr := cm.runningErr.Load() +func (h *containerRuntimeHandler) Ready() (bool, error) { + rErrPtr := h.runningErr.Load() if rErrPtr != nil && *rErrPtr != nil { return false, fmt.Errorf("failed waiting for running state: %w", *rErrPtr) } // container is ready when the running data is set - rContainerPtr := cm.runningContainer.Load() + rContainerPtr := h.runningContainer.Load() ready := rContainerPtr != nil return ready, nil } -func (cm *containerManager) Logs(ctx context.Context) (io.ReadCloser, error) { +func (h *containerRuntimeHandler) Logs(ctx context.Context) (io.ReadCloser, error) { reader, writer, err := os.Pipe() if err != nil { return nil, errors.New("failed to create log pipe") @@ -173,7 +173,7 @@ func (cm *containerManager) Logs(ctx context.Context) (io.ReadCloser, error) { go func() { // Get docker log stream - out, err := cm.client.ContainerLogs(ctx, cm.containerID, containertypes.LogsOptions{ + out, err := h.client.ContainerLogs(ctx, h.containerID, containertypes.LogsOptions{ ShowStdout: true, ShowStderr: true, Follow: true, @@ -201,16 +201,16 @@ func (cm *containerManager) Logs(ctx context.Context) (io.ReadCloser, error) { return reader, nil } -func (cm *containerManager) GetPluginServerEndpoint(ctx context.Context) (string, error) { +func (h *containerRuntimeHandler) GetPluginServerEndpoint(ctx context.Context) (string, error) { // Get running container data - container := cm.runningContainer.Load() + container := h.runningContainer.Load() if container == nil { return "", errors.New("scanner container not in ready state") } // If the host is running in a container, use the plugin container hostname to // communicate from host since they are on the same docker network. - if hostContainer, _ := cm.client.GetHostContainer(ctx); hostContainer != nil { + if hostContainer, _ := h.client.GetHostContainer(ctx); hostContainer != nil { return "http://" + net.JoinHostPort(container.Config.Hostname, defaultInternalServerPort.Port()), nil } @@ -227,9 +227,9 @@ func (cm *containerManager) GetPluginServerEndpoint(ctx context.Context) (string return "http://" + net.JoinHostPort("127.0.0.1", hostPorts[0].HostPort), nil } -func (cm *containerManager) Result(ctx context.Context) (io.ReadCloser, error) { +func (h *containerRuntimeHandler) Result(ctx context.Context) (io.ReadCloser, error) { // Copy result file from container - reader, _, err := cm.client.CopyFromContainer(ctx, cm.containerID, containermanager.RemoteScanResultFileOverride) + reader, _, err := h.client.CopyFromContainer(ctx, h.containerID, runtimehandler.RemoteScanResultFileOverride) if err != nil { return nil, fmt.Errorf("failed to copy scanner result file: %w", err) } @@ -256,10 +256,10 @@ func (cm *containerManager) Result(ctx context.Context) (io.ReadCloser, error) { return io.NopCloser(buf), nil } -func (cm *containerManager) Remove(ctx context.Context) error { - if cm.containerID != "" { - serr := cm.client.ContainerStop(ctx, cm.containerID, containertypes.StopOptions{}) // soft fail to allow removal - rerr := cm.client.ContainerRemove(ctx, cm.containerID, containertypes.RemoveOptions{}) +func (h *containerRuntimeHandler) Remove(ctx context.Context) error { + if h.containerID != "" { + serr := h.client.ContainerStop(ctx, h.containerID, containertypes.StopOptions{}) // soft fail to allow removal + rerr := h.client.ContainerRemove(ctx, h.containerID, containertypes.RemoveOptions{}) if rerr != nil && !dockerclient.IsErrNotFound(rerr) { return fmt.Errorf("failed to remove scanner container: %w", errors.Join(serr, rerr)) } @@ -268,16 +268,16 @@ func (cm *containerManager) Remove(ctx context.Context) error { return nil } -func (cm *containerManager) pullPluginImage(ctx context.Context) error { - images, err := cm.client.ImageList(ctx, imagetypes.ListOptions{ - Filters: filters.NewArgs(filters.Arg("reference", cm.config.ImageName)), +func (h *containerRuntimeHandler) pullPluginImage(ctx context.Context) error { + images, err := h.client.ImageList(ctx, imagetypes.ListOptions{ + Filters: filters.NewArgs(filters.Arg("reference", h.config.ImageName)), }) if err != nil { return fmt.Errorf("failed to get images: %w", err) } if len(images) == 0 { - resp, err := cm.client.ImagePull(ctx, cm.config.ImageName, imagetypes.PullOptions{}) + resp, err := h.client.ImagePull(ctx, h.config.ImageName, imagetypes.PullOptions{}) if err != nil { return fmt.Errorf("failed to pull image: %w", err) } @@ -290,7 +290,7 @@ func (cm *containerManager) pullPluginImage(ctx context.Context) error { return nil } -func (cm *containerManager) waitContainerRunning(ctx context.Context) (*dockertypes.ContainerJSON, error) { +func (h *containerRuntimeHandler) waitContainerRunning(ctx context.Context) (*dockertypes.ContainerJSON, error) { ctx, cancel := context.WithTimeout(ctx, types.WaitReadyTimeout) defer cancel() @@ -300,11 +300,11 @@ func (cm *containerManager) waitContainerRunning(ctx context.Context) (*dockerty for { select { case <-ctx.Done(): - return nil, fmt.Errorf("timed out waiting for container %s to become ready", cm.containerID) + return nil, fmt.Errorf("timed out waiting for container %s to become ready", h.containerID) case <-ticker.C: // Get state data needed to check the container - container, err := cm.client.ContainerInspect(ctx, cm.containerID) + container, err := h.client.ContainerInspect(ctx, h.containerID) if err != nil { return nil, fmt.Errorf("failed to inspect scanner container: %w", err) } @@ -317,9 +317,9 @@ func (cm *containerManager) waitContainerRunning(ctx context.Context) (*dockerty } } -func (cm *containerManager) getScanInputDirMount(ctx context.Context) (*mount.Mount, error) { +func (h *containerRuntimeHandler) getScanInputDirMount(ctx context.Context) (*mount.Mount, error) { // Create set with all parent directories of the input dir - dir := cm.config.InputDir + dir := h.config.InputDir dirSet := make(map[string]struct{}) for len(dir) > 1 { dirSet[dir] = struct{}{} @@ -330,7 +330,7 @@ func (cm *containerManager) getScanInputDirMount(ctx context.Context) (*mount.Mo // to mount on the plugin container. // This is required to allow the plugin container to access the input dir from the host. // TODO: add docs about flow - if hostContainer, _ := cm.client.GetHostContainer(ctx); hostContainer != nil { + if hostContainer, _ := h.client.GetHostContainer(ctx); hostContainer != nil { for _, p := range hostContainer.Mounts { if _, ok := dirSet[p.Destination]; !ok { continue @@ -338,8 +338,8 @@ func (cm *containerManager) getScanInputDirMount(ctx context.Context) (*mount.Mo return &mount.Mount{ Type: p.Type, - Source: p.Source, // actual source on the host - Target: containermanager.RemoteScanInputDirOverride, // override remote path + Source: p.Source, // actual source on the host + Target: runtimehandler.RemoteScanInputDirOverride, // override remote path }, nil } @@ -349,15 +349,15 @@ func (cm *containerManager) getScanInputDirMount(ctx context.Context) (*mount.Mo // Use default mount return &mount.Mount{ Type: mount.TypeBind, - Source: cm.config.InputDir, - Target: containermanager.RemoteScanInputDirOverride, // override remote path + Source: h.config.InputDir, + Target: runtimehandler.RemoteScanInputDirOverride, // override remote path }, nil } // connectHostContainer connects host (container) to plugin network if in container mode // to enable container name discovery. -func (cm *containerManager) connectHostContainer(ctx context.Context, pluginNetworkID string) error { - hostContainer, _ := cm.client.GetHostContainer(ctx) +func (h *containerRuntimeHandler) connectHostContainer(ctx context.Context, pluginNetworkID string) error { + hostContainer, _ := h.client.GetHostContainer(ctx) if hostContainer == nil { return nil } @@ -370,7 +370,7 @@ func (cm *containerManager) connectHostContainer(ctx context.Context, pluginNetw return nil } - err := cm.client.NetworkConnect(ctx, pluginNetworkID, hostContainer.ID, nil) + err := h.client.NetworkConnect(ctx, pluginNetworkID, hostContainer.ID, nil) if err != nil { return fmt.Errorf("failed to connect host to plugin network: %w", err) } diff --git a/plugins/runner/internal/containermanager/types.go b/plugins/runner/internal/runtimehandler/types.go similarity index 88% rename from plugins/runner/internal/containermanager/types.go rename to plugins/runner/internal/runtimehandler/types.go index bad244e6b..7ebc431b7 100644 --- a/plugins/runner/internal/containermanager/types.go +++ b/plugins/runner/internal/runtimehandler/types.go @@ -13,7 +13,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package containermanager +package runtimehandler import ( "context" @@ -27,9 +27,9 @@ const ( RemoteScanResultFileOverride = "/tmp/result.json" // path in container where the output result file should be saved by scanner ) -// PluginContainerManager provides low-level container operations that hosts -// plugin server. Use to ensure lifecycle and execution consistency. -type PluginContainerManager interface { +// PluginRuntimeHandler ensures lifecycle and execution consistency +// across plugin runtime implementations. +type PluginRuntimeHandler interface { Start(ctx context.Context) error Ready() (bool, error) GetPluginServerEndpoint(ctx context.Context) (string, error) diff --git a/plugins/runner/runner.go b/plugins/runner/runner.go index f7a7e34f4..32b8ac89f 100644 --- a/plugins/runner/runner.go +++ b/plugins/runner/runner.go @@ -22,8 +22,7 @@ import ( "io" "time" - "github.com/openclarity/vmclarity/plugins/runner/internal/containermanager" - "github.com/openclarity/vmclarity/plugins/runner/internal/containermanager/docker" + "github.com/openclarity/vmclarity/plugins/runner/internal/runtimehandler" "github.com/openclarity/vmclarity/plugins/runner/types" "github.com/openclarity/vmclarity/core/log" @@ -35,27 +34,31 @@ import ( const defaultPollInterval = 2 * time.Second type pluginRunner struct { - config types.PluginConfig - containerManager containermanager.PluginContainerManager - client runnerclient.ClientWithResponsesInterface + config types.PluginConfig + runtimeHandler runtimehandler.PluginRuntimeHandler + client runnerclient.ClientWithResponsesInterface } func New(ctx context.Context, config types.PluginConfig) (types.PluginRunner, error) { // Create docker container - // TODO: switch to factory once the support for more container engines is added - manager, err := docker.New(ctx, config) + handler, err := getPluginRuntimeHandler(ctx, config) if err != nil { - return nil, fmt.Errorf("failed to create plugin manager: %w", err) + return nil, fmt.Errorf("failed to create plugin runtime handler: %w", err) } return &pluginRunner{ - config: config, - containerManager: manager, + config: config, + runtimeHandler: handler, }, nil } func (r *pluginRunner) Start(ctx context.Context) error { - if err := r.containerManager.Start(ctx); err != nil { + go func(ctx context.Context) { + <-ctx.Done() + r.Remove(ctx) //nolint:errcheck + }(ctx) + + if err := r.runtimeHandler.Start(ctx); err != nil { return fmt.Errorf("failed to create plugin container: %w", err) } @@ -63,7 +66,7 @@ func (r *pluginRunner) Start(ctx context.Context) error { } func (r *pluginRunner) Logs(ctx context.Context) (io.ReadCloser, error) { - logs, err := r.containerManager.Logs(ctx) + logs, err := r.runtimeHandler.Logs(ctx) if err != nil { return nil, fmt.Errorf("failed to load logs from container: %w", err) } @@ -87,7 +90,7 @@ func (r *pluginRunner) WaitReady(ctx context.Context) error { case <-ticker.C: // Check if plugin container is ready - ready, err := r.containerManager.Ready() + ready, err := r.runtimeHandler.Ready() if err != nil { return fmt.Errorf("failed to check plugin container state: %w", err) } @@ -97,7 +100,7 @@ func (r *pluginRunner) WaitReady(ctx context.Context) error { // Set plugin server endpoint and client if not already set if r.client == nil { - serverEndpoint, err := r.containerManager.GetPluginServerEndpoint(ctx) + serverEndpoint, err := r.runtimeHandler.GetPluginServerEndpoint(ctx) if err != nil { return fmt.Errorf("failed to get plugin server endpoint: %w", err) } @@ -142,7 +145,7 @@ func (r *pluginRunner) Run(ctx context.Context) error { _, err := r.client.PostConfigWithResponse( ctx, - containermanager.WithOverrides(plugintypes.Config{ + runtimehandler.WithOverrides(plugintypes.Config{ ScannerConfig: to.Ptr(r.config.ScannerConfig), TimeoutSeconds: int(types.ScanTimeout.Seconds()), }), @@ -209,7 +212,7 @@ func (r *pluginRunner) WaitDone(ctx context.Context) error { } func (r *pluginRunner) Result(ctx context.Context) (io.ReadCloser, error) { - result, err := r.containerManager.Result(ctx) + result, err := r.runtimeHandler.Result(ctx) if err != nil { return nil, fmt.Errorf("failed to get result from container: %w", err) } @@ -218,7 +221,7 @@ func (r *pluginRunner) Result(ctx context.Context) (io.ReadCloser, error) { } func (r *pluginRunner) Remove(ctx context.Context) error { - err := r.containerManager.Remove(ctx) + err := r.runtimeHandler.Remove(ctx) if err != nil { return fmt.Errorf("failed to remove container: %w", err) } diff --git a/plugins/runner/runtimehandler.go b/plugins/runner/runtimehandler.go new file mode 100644 index 000000000..002b2ec5d --- /dev/null +++ b/plugins/runner/runtimehandler.go @@ -0,0 +1,41 @@ +// Copyright © 2024 Cisco Systems, Inc. and its affiliates. +// All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build !linux + +package runner + +import ( + "context" + "errors" + "fmt" + + "github.com/openclarity/vmclarity/plugins/runner/internal/runtimehandler" + "github.com/openclarity/vmclarity/plugins/runner/internal/runtimehandler/docker" + "github.com/openclarity/vmclarity/plugins/runner/types" +) + +func getPluginRuntimeHandler(ctx context.Context, config types.PluginConfig) (runtimehandler.PluginRuntimeHandler, error) { + if config.BinaryMode { + return nil, errors.New("binary mode not supported on this platform") + } + + handler, err := docker.New(ctx, config) + if err != nil { + return nil, fmt.Errorf("unable to initialize docker runtime handler: %w", err) + } + + return handler, nil +} diff --git a/plugins/runner/runtimehandler_linux.go b/plugins/runner/runtimehandler_linux.go new file mode 100644 index 000000000..f7550190b --- /dev/null +++ b/plugins/runner/runtimehandler_linux.go @@ -0,0 +1,46 @@ +// Copyright © 2024 Cisco Systems, Inc. and its affiliates. +// All rights reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +//go:build linux + +package runner + +import ( + "context" + "fmt" + + "github.com/openclarity/vmclarity/plugins/runner/internal/runtimehandler" + "github.com/openclarity/vmclarity/plugins/runner/internal/runtimehandler/binary" + "github.com/openclarity/vmclarity/plugins/runner/internal/runtimehandler/docker" + "github.com/openclarity/vmclarity/plugins/runner/types" +) + +func getPluginRuntimeHandler(ctx context.Context, config types.PluginConfig) (runtimehandler.PluginRuntimeHandler, error) { + if config.BinaryMode { + handler, err := binary.New(ctx, config) + if err != nil { + return nil, fmt.Errorf("unable to initialize binary runtime handler: %w", err) + } + + return handler, nil + } + + handler, err := docker.New(ctx, config) + if err != nil { + return nil, fmt.Errorf("unable to initialize docker runtime handler: %w", err) + } + + return handler, nil +} diff --git a/plugins/runner/types/types.go b/plugins/runner/types/types.go index f4f06828b..f2ef9e9de 100644 --- a/plugins/runner/types/types.go +++ b/plugins/runner/types/types.go @@ -40,6 +40,8 @@ type PluginConfig struct { ScannerConfig string `yaml:"scanner_config" mapstructure:"scanner_config"` // TimeoutSeconds defines the number of seconds before the scan is marked failed due to timeout TimeoutSeconds int `yaml:"timeout_seconds" mapstructure:"timeout_seconds"` + // BinaryMode is a flag to indicate that the plugin should be run as a binary + BinaryMode bool `yaml:"binary_mode" mapstructure:"binary_mode"` } type PluginRunner interface { diff --git a/plugins/sdk-python/example/Dockerfile b/plugins/sdk-python/example/Dockerfile index 10f70d9a9..1e08e40d4 100644 --- a/plugins/sdk-python/example/Dockerfile +++ b/plugins/sdk-python/example/Dockerfile @@ -18,4 +18,4 @@ ENV PYTHONUNBUFFERED=1 USER 65534 # Run scanner when the container launches -CMD ["python3", "/app/scanner.py"] +CMD ["/usr/local/bin/python3", "/app/scanner.py"] diff --git a/plugins/sdk-python/example/Dockerfile.test b/plugins/sdk-python/example/Dockerfile.test index e5cc85f10..05eea89a2 100644 --- a/plugins/sdk-python/example/Dockerfile.test +++ b/plugins/sdk-python/example/Dockerfile.test @@ -40,4 +40,4 @@ COPY ./plugins/sdk-python/example ./src USER 65534 # Run example scanner -CMD ["python3", "/src/scanner.py"] +CMD ["/usr/local/bin/python3", "/src/scanner.py"] diff --git a/provider/go.mod b/provider/go.mod index f2a5a8260..bea27362e 100644 --- a/provider/go.mod +++ b/provider/go.mod @@ -334,6 +334,7 @@ require ( github.com/openclarity/grype-server/api v0.0.0-20240619144520-b9ba72524a9c // indirect github.com/openclarity/vmclarity/plugins/runner v0.7.1 // indirect github.com/openclarity/vmclarity/plugins/sdk-go v0.7.1 // indirect + github.com/openclarity/vmclarity/utils v0.7.1 // indirect github.com/openclarity/yara-rule-server v0.3.0 // indirect github.com/opencontainers/go-digest v1.0.0 // indirect github.com/opencontainers/image-spec v1.1.0 // indirect diff --git a/scanner/families/config.go b/scanner/families/config.go index 3f9b8a398..d26889abc 100644 --- a/scanner/families/config.go +++ b/scanner/families/config.go @@ -58,6 +58,7 @@ func NewConfig() *Config { Malware: malware.Config{}, Misconfiguration: misconfigurationTypes.Config{}, Exploits: exploits.Config{}, + Plugins: plugins.Config{}, } } diff --git a/scanner/families/manager.go b/scanner/families/manager.go index 85274a5c4..a9d64d8f1 100644 --- a/scanner/families/manager.go +++ b/scanner/families/manager.go @@ -34,7 +34,7 @@ import ( "github.com/openclarity/vmclarity/scanner/families/types" "github.com/openclarity/vmclarity/scanner/families/utils" "github.com/openclarity/vmclarity/scanner/families/vulnerabilities" - "github.com/openclarity/vmclarity/scanner/utils/containerrootfs" + "github.com/openclarity/vmclarity/utils/fsutils/containerrootfs" ) type Manager struct { diff --git a/scanner/families/plugins/config.go b/scanner/families/plugins/config.go index a286088eb..cf76fa670 100644 --- a/scanner/families/plugins/config.go +++ b/scanner/families/plugins/config.go @@ -25,4 +25,5 @@ type Config struct { ScannersList []string `yaml:"scanners_list" mapstructure:"scanners_list"` Inputs []types.Input `yaml:"inputs" mapstructure:"inputs"` ScannersConfig *common.ScannersConfig `yaml:"scanners_config" mapstructure:"scanners_config"` + BinaryMode *bool `yaml:"binary_mode,omitempty" mapstructure:"binary_mode,omitempty"` } diff --git a/scanner/families/plugins/family.go b/scanner/families/plugins/family.go index d2ed85da4..654b912e5 100644 --- a/scanner/families/plugins/family.go +++ b/scanner/families/plugins/family.go @@ -48,6 +48,16 @@ func (p *Plugins) Run(ctx context.Context, res *results.Results) (interfaces.IsR factory.Register(n, runner.New) } + // Top level BinaryMode overrides the individual scanner BinaryMode if set + if p.conf.BinaryMode != nil { + for name := range *p.conf.ScannersConfig { + // for _, config := range *p.conf.ScannersConfig { + config := (*p.conf.ScannersConfig)[name] + config.BinaryMode = *p.conf.BinaryMode + (*p.conf.ScannersConfig)[name] = config + } + } + manager := job_manager.New(p.conf.ScannersList, p.conf.ScannersConfig, logger, factory) var pluginsResults Results diff --git a/scanner/families/plugins/runner/config/config.go b/scanner/families/plugins/runner/config/config.go index accc1b865..cfd153d1a 100644 --- a/scanner/families/plugins/runner/config/config.go +++ b/scanner/families/plugins/runner/config/config.go @@ -24,4 +24,6 @@ type Config struct { InputDir string `yaml:"input_dir" mapstructure:"input_dir"` // ScannerConfig is a json string that will be passed to the scanner in the plugin ScannerConfig string `yaml:"scanner_config" mapstructure:"scanner_config"` + // BinaryMode is a flag to indicate that the plugin should be run as a binary + BinaryMode bool `json:"binary_mode,omitempty" mapstructure:"binary_mode,omitempty"` } diff --git a/scanner/families/plugins/runner/runner.go b/scanner/families/plugins/runner/runner.go index c602f4ed9..7465159f9 100644 --- a/scanner/families/plugins/runner/runner.go +++ b/scanner/families/plugins/runner/runner.go @@ -73,6 +73,7 @@ func (s *Scanner) Run(ctx context.Context, sourceType utils.SourceType, userInpu ImageName: s.config.ImageName, InputDir: userInput, ScannerConfig: s.config.ScannerConfig, + BinaryMode: s.config.BinaryMode, }) if err != nil { s.sendResults(retResults, fmt.Errorf("failed to create plugin runner: %w", err)) diff --git a/scanner/families/utils/utils.go b/scanner/families/utils/utils.go index e1dc36f44..910a95b93 100644 --- a/scanner/families/utils/utils.go +++ b/scanner/families/utils/utils.go @@ -25,7 +25,7 @@ import ( "github.com/openclarity/vmclarity/core/log" "github.com/openclarity/vmclarity/scanner/families/types" "github.com/openclarity/vmclarity/scanner/utils" - "github.com/openclarity/vmclarity/scanner/utils/containerrootfs" + "github.com/openclarity/vmclarity/utils/fsutils/containerrootfs" ) // InputSizesCache global cache of already calculated input sizes. If input type is a DIR/ROOTFS/FILE than the key is the input path. diff --git a/scanner/go.mod b/scanner/go.mod index 5146b7dc2..f9de86a6d 100644 --- a/scanner/go.mod +++ b/scanner/go.mod @@ -26,6 +26,7 @@ require ( github.com/openclarity/vmclarity/core v0.7.1 github.com/openclarity/vmclarity/plugins/runner v0.7.1 github.com/openclarity/vmclarity/plugins/sdk-go v0.7.1 + github.com/openclarity/vmclarity/utils v0.7.1 github.com/openclarity/yara-rule-server v0.3.0 github.com/package-url/packageurl-go v0.1.3 github.com/samber/slog-logrus/v2 v2.3.0 @@ -481,4 +482,5 @@ replace ( github.com/openclarity/vmclarity/core => ../core github.com/openclarity/vmclarity/plugins/runner => ../plugins/runner github.com/openclarity/vmclarity/plugins/sdk-go => ../plugins/sdk-go + github.com/openclarity/vmclarity/utils => ../utils ) diff --git a/scanner/utils/containerrootfs/example/main.go b/utils/fsutils/containerrootfs/example/main.go similarity index 93% rename from scanner/utils/containerrootfs/example/main.go rename to utils/fsutils/containerrootfs/example/main.go index 8c051a1c8..520e3f65d 100644 --- a/scanner/utils/containerrootfs/example/main.go +++ b/utils/fsutils/containerrootfs/example/main.go @@ -19,7 +19,7 @@ import ( "context" "log" - "github.com/openclarity/vmclarity/scanner/utils/containerrootfs" + "github.com/openclarity/vmclarity/utils/fsutils/containerrootfs" ) func main() { diff --git a/scanner/utils/containerrootfs/todirectory.go b/utils/fsutils/containerrootfs/todirectory.go similarity index 97% rename from scanner/utils/containerrootfs/todirectory.go rename to utils/fsutils/containerrootfs/todirectory.go index bc6081894..00f061852 100644 --- a/scanner/utils/containerrootfs/todirectory.go +++ b/utils/fsutils/containerrootfs/todirectory.go @@ -44,7 +44,7 @@ func GetImageWithCleanup(ctx context.Context, src string) (*image.Image, func(), cleanup := func() { err := image.Cleanup() if err != nil { - logger.WithError(err).Error("unable to clean up image") + logger.WithError(err).Error("unable to clean up extracted image ", src) } } diff --git a/scanner/utils/containerrootfs/totempdirectory.go b/utils/fsutils/containerrootfs/totempdirectory.go similarity index 100% rename from scanner/utils/containerrootfs/totempdirectory.go rename to utils/fsutils/containerrootfs/totempdirectory.go diff --git a/utils/go.mod b/utils/go.mod index 898683abb..05d05a204 100644 --- a/utils/go.mod +++ b/utils/go.mod @@ -3,15 +3,91 @@ module github.com/openclarity/vmclarity/utils go 1.22.4 require ( + github.com/anchore/stereoscope v0.0.2 github.com/go-viper/mapstructure/v2 v2.0.0 github.com/moby/sys/mountinfo v0.7.1 github.com/onsi/gomega v1.33.1 + github.com/openclarity/vmclarity/core v0.7.1 ) require ( + github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 // indirect + github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20230306123547-8075edf89bb0 // indirect + github.com/Microsoft/go-winio v0.6.1 // indirect + github.com/Microsoft/hcsshim v0.11.4 // indirect + github.com/adrg/xdg v0.4.0 // indirect + github.com/anchore/go-collections v0.0.0-20240216171411-9321230ce537 // indirect + github.com/anchore/go-logger v0.0.0-20220728155337-03b66a5207d8 // indirect + github.com/becheran/wildmatch-go v1.0.0 // indirect + github.com/bmatcuk/doublestar/v4 v4.0.2 // indirect + github.com/containerd/cgroups v1.1.0 // indirect + github.com/containerd/containerd v1.7.11 // indirect + github.com/containerd/continuity v0.4.2 // indirect + github.com/containerd/fifo v1.1.0 // indirect + github.com/containerd/log v0.1.0 // indirect + github.com/containerd/stargz-snapshotter/estargz v0.14.3 // indirect + github.com/containerd/ttrpc v1.2.2 // indirect + github.com/containerd/typeurl/v2 v2.1.1 // indirect + github.com/docker/cli v24.0.0+incompatible // indirect + github.com/docker/distribution v2.8.2+incompatible // indirect + github.com/docker/docker v24.0.9+incompatible // indirect + github.com/docker/docker-credential-helpers v0.7.0 // indirect + github.com/docker/go-connections v0.4.0 // indirect + github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect + github.com/docker/go-units v0.5.0 // indirect + github.com/felixge/httpsnoop v1.0.3 // indirect + github.com/gabriel-vasile/mimetype v1.4.0 // indirect + github.com/go-logr/logr v1.4.1 // indirect + github.com/go-logr/stdr v1.2.2 // indirect + github.com/gogo/protobuf v1.3.2 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/protobuf v1.5.3 // indirect github.com/google/go-cmp v0.6.0 // indirect + github.com/google/go-containerregistry v0.19.0 // indirect + github.com/google/uuid v1.3.0 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + github.com/klauspost/compress v1.16.5 // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect + github.com/moby/locker v1.0.1 // indirect + github.com/moby/sys/sequential v0.5.0 // indirect + github.com/moby/sys/signal v0.7.0 // indirect + github.com/opencontainers/go-digest v1.0.0 // indirect + github.com/opencontainers/image-spec v1.1.0-rc3 // indirect + github.com/opencontainers/runc v1.1.12 // indirect + github.com/opencontainers/runtime-spec v1.1.0-rc.1 // indirect + github.com/opencontainers/selinux v1.11.0 // indirect + github.com/pelletier/go-toml v1.9.5 // indirect + github.com/pierrec/lz4/v4 v4.1.15 // indirect + github.com/pkg/errors v0.9.1 // indirect + github.com/rogpeppe/go-internal v1.12.0 // indirect + github.com/scylladb/go-set v1.0.3-0.20200225121959-cc7b2070d91e // indirect + github.com/sirupsen/logrus v1.9.3 // indirect + github.com/spf13/afero v1.6.0 // indirect + github.com/sylabs/sif/v2 v2.8.1 // indirect + github.com/sylabs/squashfs v0.6.1 // indirect + github.com/therootcompany/xz v1.0.1 // indirect + github.com/ulikunitz/xz v0.5.10 // indirect + github.com/vbatts/tar-split v0.11.3 // indirect + github.com/wagoodman/go-partybus v0.0.0-20200526224238-eb215533f07d // indirect + github.com/wagoodman/go-progress v0.0.0-20230925121702-07e42b3cdba0 // indirect + go.opencensus.io v0.24.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.45.0 // indirect + go.opentelemetry.io/otel v1.19.0 // indirect + go.opentelemetry.io/otel/metric v1.19.0 // indirect + go.opentelemetry.io/otel/trace v1.19.0 // indirect + golang.org/x/crypto v0.22.0 // indirect + golang.org/x/mod v0.17.0 // indirect golang.org/x/net v0.24.0 // indirect + golang.org/x/sync v0.7.0 // indirect golang.org/x/sys v0.19.0 // indirect golang.org/x/text v0.14.0 // indirect + golang.org/x/tools v0.20.0 // indirect + google.golang.org/genproto v0.0.0-20230711160842-782d3b101e98 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 // indirect + google.golang.org/grpc v1.58.3 // indirect + google.golang.org/protobuf v1.33.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) + +replace github.com/openclarity/vmclarity/core => ../core diff --git a/utils/go.sum b/utils/go.sum index 27662b05e..be091e467 100644 --- a/utils/go.sum +++ b/utils/go.sum @@ -1,29 +1,362 @@ +cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU= +github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8= +github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20230306123547-8075edf89bb0 h1:59MxjQVfjXsBpLy+dbd2/ELV5ofnUkUZBvWSC85sheA= +github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20230306123547-8075edf89bb0/go.mod h1:OahwfttHWG6eJ0clwcfBAHoDI6X/LV/15hx/wlMZSrU= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= +github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/BurntSushi/toml v1.2.1/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= +github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= +github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= +github.com/Microsoft/hcsshim v0.11.4 h1:68vKo2VN8DE9AdN4tnkWnmdhqdbpUFM8OF3Airm7fz8= +github.com/Microsoft/hcsshim v0.11.4/go.mod h1:smjE4dvqPX9Zldna+t5FG3rnoHhaB7QYxPRqGcpAD9w= +github.com/adrg/xdg v0.4.0 h1:RzRqFcjH4nE5C6oTAxhBtoE2IRyjBSa62SCbyPidvls= +github.com/adrg/xdg v0.4.0/go.mod h1:N6ag73EX4wyxeaoeHctc1mas01KZgsj5tYiAIwqJE/E= +github.com/anchore/go-collections v0.0.0-20240216171411-9321230ce537 h1:GjNGuwK5jWjJMyVppBjYS54eOiiSNv4Ba869k4wh72Q= +github.com/anchore/go-collections v0.0.0-20240216171411-9321230ce537/go.mod h1:1aiktV46ATCkuVg0O573ZrH56BUawTECPETbZyBcqT8= +github.com/anchore/go-logger v0.0.0-20220728155337-03b66a5207d8 h1:imgMA0gN0TZx7PSa/pdWqXadBvrz8WsN6zySzCe4XX0= +github.com/anchore/go-logger v0.0.0-20220728155337-03b66a5207d8/go.mod h1:+gPap4jha079qzRTUaehv+UZ6sSdaNwkH0D3b6zhTuk= +github.com/anchore/go-testutils v0.0.0-20200925183923-d5f45b0d3c04 h1:VzprUTpc0vW0nnNKJfJieyH/TZ9UYAnTZs5/gHTdAe8= +github.com/anchore/go-testutils v0.0.0-20200925183923-d5f45b0d3c04/go.mod h1:6dK64g27Qi1qGQZ67gFmBFvEHScy0/C8qhQhNe5B5pQ= +github.com/anchore/stereoscope v0.0.2 h1:UTFHB/I3w7dfKvgf0K8+3T5MLZ5/hGhgbNUPVU4T26s= +github.com/anchore/stereoscope v0.0.2/go.mod h1:ckIamHiRMp8iBwWoTtE5Xkt9VQ5QC+6+O4VzwqyZr5Q= +github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= +github.com/becheran/wildmatch-go v1.0.0 h1:mE3dGGkTmpKtT4Z+88t8RStG40yN9T+kFEGj2PZFSzA= +github.com/becheran/wildmatch-go v1.0.0/go.mod h1:gbMvj0NtVdJ15Mg/mH9uxk2R1QCistMyU7d9KFzroX4= +github.com/bmatcuk/doublestar/v4 v4.0.2 h1:X0krlUVAVmtr2cRoTqR8aDMrDqnB36ht8wpWTiQ3jsA= +github.com/bmatcuk/doublestar/v4 v4.0.2/go.mod h1:xBQ8jztBU6kakFMg+8WGxn0c6z1fTSPVIjEY1Wr7jzc= +github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= +github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw= +github.com/containerd/containerd v1.7.11 h1:lfGKw3eU35sjV0aG2eYZTiwFEY1pCzxdzicHP3SZILw= +github.com/containerd/containerd v1.7.11/go.mod h1:5UluHxHTX2rdvYuZ5OJTC5m/KJNs0Zs9wVoJm9zf5ZE= +github.com/containerd/continuity v0.4.2 h1:v3y/4Yz5jwnvqPKJJ+7Wf93fyWoCB3F5EclWG023MDM= +github.com/containerd/continuity v0.4.2/go.mod h1:F6PTNCKepoxEaXLQp3wDAjygEnImnZ/7o4JzpodfroQ= +github.com/containerd/fifo v1.1.0 h1:4I2mbh5stb1u6ycIABlBw9zgtlK8viPI9QkQNRQEEmY= +github.com/containerd/fifo v1.1.0/go.mod h1:bmC4NWMbXlt2EZ0Hc7Fx7QzTFxgPID13eH0Qu+MAb2o= +github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= +github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= +github.com/containerd/stargz-snapshotter/estargz v0.14.3 h1:OqlDCK3ZVUO6C3B/5FSkDwbkEETK84kQgEeFwDC+62k= +github.com/containerd/stargz-snapshotter/estargz v0.14.3/go.mod h1:KY//uOCIkSuNAHhJogcZtrNHdKrA99/FCCRjE3HD36o= +github.com/containerd/ttrpc v1.2.2 h1:9vqZr0pxwOF5koz6N0N3kJ0zDHokrcPxIR/ZR2YFtOs= +github.com/containerd/ttrpc v1.2.2/go.mod h1:sIT6l32Ph/H9cvnJsfXM5drIVzTr5A2flTf1G5tYZak= +github.com/containerd/typeurl/v2 v2.1.1 h1:3Q4Pt7i8nYwy2KmQWIw2+1hTvwTE/6w9FqcttATPO/4= +github.com/containerd/typeurl/v2 v2.1.1/go.mod h1:IDp2JFvbwZ31H8dQbEIY7sDl2L3o3HZj1hsSQlywkQ0= +github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= +github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/docker/cli v24.0.0+incompatible h1:0+1VshNwBQzQAx9lOl+OYCTCEAD8fKs/qeXMx3O0wqM= +github.com/docker/cli v24.0.0+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= +github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= +github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= +github.com/docker/docker v24.0.9+incompatible h1:HPGzNmwfLZWdxHqK9/II92pyi1EpYKsAqcl4G0Of9v0= +github.com/docker/docker v24.0.9+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= +github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= +github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= +github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= +github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8= +github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= +github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= +github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= +github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/fatih/set v0.2.1 h1:nn2CaJyknWE/6txyUDGwysr3G5QC6xWB/PtVjPBbeaA= +github.com/fatih/set v0.2.1/go.mod h1:+RKtMCH+favT2+3YecHGxcc0b4KyVWA1QWWJUs4E0CI= +github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk= +github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/gabriel-vasile/mimetype v1.4.0 h1:Cn9dkdYsMIu56tGho+fqzh7XmvY2YyGU0FnbhiOsEro= +github.com/gabriel-vasile/mimetype v1.4.0/go.mod h1:fA8fi6KUiG7MgQQ+mEWotXoEOvmxRtOJlERCzSmRvr8= +github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ= github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= +github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= +github.com/go-test/deep v1.0.8 h1:TDsG77qcSprGbC6vTN8OuXp5g+J+b5Pcguhf7Zt61VM= +github.com/go-test/deep v1.0.8/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= github.com/go-viper/mapstructure/v2 v2.0.0 h1:dhn8MZ1gZ0mzeodTG3jt5Vj/o87xZKuNAprG2mQfMfc= github.com/go-viper/mapstructure/v2 v2.0.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= +github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= +github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= +github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= +github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-containerregistry v0.19.0 h1:uIsMRBV7m/HDkDxE/nXMnv1q+lOOSPlQ/ywc5JbB8Ic= +github.com/google/go-containerregistry v0.19.0/go.mod h1:u0qB2l7mvtWVR5kNcbFIhFY1hLbf8eeGapA+vbFDCtQ= github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6 h1:k7nVchz72niMH6YLQNvHSdIE7iqsQxK1P41mySCvssg= github.com/google/pprof v0.0.0-20240424215950-a892ee059fd6/go.mod h1:kf6iHlnVGwgKolg33glAes7Yg/8iWP8ukqeldJSO7jw= +github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/gookit/color v1.2.5/go.mod h1:AhIE+pS6D4Ql0SQWbBeXPHw7gY0/sjHoA4s/n1KB7xg= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= +github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= +github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI= +github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= +github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/logrusorgru/aurora v0.0.0-20200102142835-e9ef32dff381 h1:bqDmpDG49ZRnB5PcgP0RXtQvnMSgIF14M7CBd2shtXs= +github.com/logrusorgru/aurora v0.0.0-20200102142835-e9ef32dff381/go.mod h1:7rIyQOR62GCctdiQpZ/zOJlFyk6y+94wXzv6RNZgaR4= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= +github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= github.com/moby/sys/mountinfo v0.7.1 h1:/tTvQaSJRr2FshkhXiIpux6fQ2Zvc4j7tAhMTStAG2g= github.com/moby/sys/mountinfo v0.7.1/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI= +github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc= +github.com/moby/sys/sequential v0.5.0/go.mod h1:tH2cOOs5V9MlPiXcQzRC+eEyab644PWKGRYaaV5ZZlo= +github.com/moby/sys/signal v0.7.0 h1:25RW3d5TnQEoKvRbEKUGay6DCQ46IxAVTT9CUMgmsSI= +github.com/moby/sys/signal v0.7.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg= +github.com/moby/term v0.0.0-20221205130635-1aeaba878587 h1:HfkjXDfhgVaN5rmueG8cL8KKeFNecRCXFhaJ2qZ5SKA= +github.com/moby/term v0.0.0-20221205130635-1aeaba878587/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= +github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A= +github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc= github.com/onsi/ginkgo/v2 v2.17.2 h1:7eMhcy3GimbsA3hEnVKdw/PQM9XN9krpKVXsZdph0/g= github.com/onsi/ginkgo/v2 v2.17.2/go.mod h1:nP2DPOQoNsQmsVyv5rDA8JkXQoCs6goXIvr/PRJ1eCc= github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk= github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0= +github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= +github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= +github.com/opencontainers/image-spec v1.1.0-rc3 h1:fzg1mXZFj8YdPeNkRXMg+zb88BFV0Ys52cJydRwBkb8= +github.com/opencontainers/image-spec v1.1.0-rc3/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8= +github.com/opencontainers/runc v1.1.12 h1:BOIssBaW1La0/qbNZHXOOa71dZfZEQOzW7dqQf3phss= +github.com/opencontainers/runc v1.1.12/go.mod h1:S+lQwSfncpBha7XTy/5lBwWgm5+y5Ma/O44Ekby9FK8= +github.com/opencontainers/runtime-spec v1.1.0-rc.1 h1:wHa9jroFfKGQqFHj0I1fMRKLl0pfj+ynAqBxo3v6u9w= +github.com/opencontainers/runtime-spec v1.1.0-rc.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/selinux v1.11.0 h1:+5Zbo97w3Lbmb3PeqQtpmTkMwsW5nRI3YaLpt7tQ7oU= +github.com/opencontainers/selinux v1.11.0/go.mod h1:E5dMC3VPuVvVHDYmi78qvhJp8+M586T4DlDRYpFkyec= +github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= +github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= +github.com/pierrec/lz4/v4 v4.1.15 h1:MO0/ucJhngq7299dKLwIMtgTfbkoSPF6AoMYDd8Q4q0= +github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= +github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= +github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= +github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= +github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= +github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= +github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= +github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= +github.com/scylladb/go-set v1.0.3-0.20200225121959-cc7b2070d91e h1:7q6NSFZDeGfvvtIRwBrU/aegEYJYmvev0cHAwo17zZQ= +github.com/scylladb/go-set v1.0.3-0.20200225121959-cc7b2070d91e/go.mod h1:DkpGd78rljTxKAnTDPFqXSGxvETQnJyuSOQwsHycqfs= +github.com/sebdah/goldie/v2 v2.5.3 h1:9ES/mNN+HNUbNWpVAlrzuZ7jE+Nrczbj8uFRjM7624Y= +github.com/sebdah/goldie/v2 v2.5.3/go.mod h1:oZ9fp0+se1eapSRjfYbsV/0Hqhbuu3bJVvKI/NNtssI= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= +github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= +github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/spf13/afero v1.6.0 h1:xoax2sJ2DT8S8xA2paPFjDCScCNeWsg75VG0DLRreiY= +github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/sylabs/sif/v2 v2.8.1 h1:whr4Vz12RXfLnYyVGHoD/rD/hbF2g9OW7BJHa+WIqW8= +github.com/sylabs/sif/v2 v2.8.1/go.mod h1:LQOdYXC9a8i7BleTKRw9lohi0rTbXkJOeS9u0ebvgyM= +github.com/sylabs/squashfs v0.6.1 h1:4hgvHnD9JGlYWwT0bPYNt9zaz23mAV3Js+VEgQoRGYQ= +github.com/sylabs/squashfs v0.6.1/go.mod h1:ZwpbPCj0ocIvMy2br6KZmix6Gzh6fsGQcCnydMF+Kx8= +github.com/therootcompany/xz v1.0.1 h1:CmOtsn1CbtmyYiusbfmhmkpAAETj0wBIH6kCYaX+xzw= +github.com/therootcompany/xz v1.0.1/go.mod h1:3K3UH1yCKgBneZYhuQUvJ9HPD19UEXEI0BWbMn8qNMY= +github.com/ulikunitz/xz v0.5.10 h1:t92gobL9l3HE202wg3rlk19F6X+JOxl9BBrCCMYEYd8= +github.com/ulikunitz/xz v0.5.10/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= +github.com/urfave/cli v1.22.12/go.mod h1:sSBEIC79qR6OvcmsD4U3KABeOTxDqQtdDnaFuUN30b8= +github.com/vbatts/tar-split v0.11.3 h1:hLFqsOLQ1SsppQNTMpkpPXClLDfC2A3Zgy9OUU+RVck= +github.com/vbatts/tar-split v0.11.3/go.mod h1:9QlHN18E+fEH7RdG+QAJJcuya3rqT7eXSTY7wGrAokY= +github.com/wagoodman/go-partybus v0.0.0-20200526224238-eb215533f07d h1:KOxOL6qpmqwoPloNwi+CEgc1ayjHNOFNrvoOmeDOjDg= +github.com/wagoodman/go-partybus v0.0.0-20200526224238-eb215533f07d/go.mod h1:JPirS5jde/CF5qIjcK4WX+eQmKXdPc6vcZkJ/P0hfPw= +github.com/wagoodman/go-progress v0.0.0-20230925121702-07e42b3cdba0 h1:0KGbf+0SMg+UFy4e1A/CPVvXn21f1qtWdeJwxZFoQG8= +github.com/wagoodman/go-progress v0.0.0-20230925121702-07e42b3cdba0/go.mod h1:jLXFoL31zFaHKAAyZUh+sxiTDFe1L1ZHrcK2T1itVKA= +github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= +go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.45.0 h1:x8Z78aZx8cOF0+Kkazoc7lwUNMGy0LrzEMxTm4BbTxg= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.45.0/go.mod h1:62CPTSry9QZtOaSsE3tOzhx6LzDhHnXJ6xHeMNNiM6Q= +go.opentelemetry.io/otel v1.19.0 h1:MuS/TNf4/j4IXsZuJegVzI1cwut7Qc00344rgH7p8bs= +go.opentelemetry.io/otel v1.19.0/go.mod h1:i0QyjOq3UPoTzff0PJB2N66fb4S0+rSbSB15/oyH9fY= +go.opentelemetry.io/otel/metric v1.19.0 h1:aTzpGtV0ar9wlV4Sna9sdJyII5jTVJEvKETPiOKwvpE= +go.opentelemetry.io/otel/metric v1.19.0/go.mod h1:L5rUsV9kM1IxCj1MmSdS+JQAcVm319EUrDVLrt7jqt8= +go.opentelemetry.io/otel/trace v1.19.0 h1:DFVQmlVbfVeOuBRrwdtaehRrWiL1JoVs9CPIQ1Dzxpg= +go.opentelemetry.io/otel/trace v1.19.0/go.mod h1:mfaSyvGyEJEI0nyV2I4qhNQnbBOUUmYZpYojqMnX2vo= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.22.0 h1:g1v0xeRhjcugydODzvb3mEM9SQ0HGp9s/nh3COQ/C30= +golang.org/x/crypto v0.22.0/go.mod h1:vr6Su+7cTlO45qkww3VDJlzDn0ctJvRgYbC2NvXHt+M= +golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= +golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= +golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= +golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= +golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210505024714-0287a6fb4125/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.24.0 h1:1PcaxkF854Fu3+lvBIx5SYn9wRlBzzcnHZSiaFFAb0w= golang.org/x/net v0.24.0/go.mod h1:2Q7sJY5mzlzWjKtYUEXSlBWCdyaioyXzRB2RtU8KVE8= +golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= +golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20220906165534-d0df966e6959/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.19.0 h1:+ThwsDv+tYfnJFhF4L8jITxu1tdTWRTZpdsWgEgjL6Q= +golang.org/x/term v0.19.0/go.mod h1:2CuTdWZ7KHSQwUzKva0cbMg6q2DMI3Mmxp+gKJbskEk= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 h1:vVKdlvoWBphwdxWKrFZEuM0kGgGLxUOYcY4U/2Vjg44= +golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= +golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= +golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= +golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.20.0 h1:hz/CVckiOxybQvFw6h7b/q80NTr9IUQb4s1IIzW7KNY= golang.org/x/tools v0.20.0/go.mod h1:WvitBU7JJf6A4jOdg4S1tviW9bhUxkgeCui/0JHctQg= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= +google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= +google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= +google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= +google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= +google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= +google.golang.org/genproto v0.0.0-20230711160842-782d3b101e98 h1:Z0hjGZePRE0ZBWotvtrwxFNrNE9CUAGtplaDK5NNI/g= +google.golang.org/genproto v0.0.0-20230711160842-782d3b101e98/go.mod h1:S7mY02OqCJTD0E1OiQy1F72PWFB4bZJ87cAtLPYgDR0= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98 h1:bVf09lpb+OJbByTj913DRJioFFAjf/ZGxEz7MajTp2U= +google.golang.org/genproto/googleapis/rpc v0.0.0-20230711160842-782d3b101e98/go.mod h1:TUfxEVdsvPg18p6AslUXFoLdpED4oBnGwyqk3dV1XzM= +google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= +google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= +google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= +google.golang.org/grpc v1.58.3 h1:BjnpXut1btbtgN/6sp+brB2Kbm2LjNXnidYujAVbSoQ= +google.golang.org/grpc v1.58.3/go.mod h1:tgX3ZQDlNJGU96V6yHh1T/JeoBQ2TXdr43YbYSsCJk0= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +google.golang.org/protobuf v1.33.0 h1:uNO2rsAINq/JlFpSdYEKIZ0uKD/R9cpdv0T+yoGwGmI= +google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= +gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= +honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=