Skip to content

Commit 36315ee

Browse files
committed
Support CDI devices in --device flag
Signed-off-by: Evan Lezar <[email protected]>
1 parent c549fd7 commit 36315ee

File tree

132 files changed

+36356
-34
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

132 files changed

+36356
-34
lines changed

cli/command/container/opts.go

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"strings"
1414
"time"
1515

16+
"github.com/container-orchestrated-devices/container-device-interface/pkg/cdi"
1617
"github.com/docker/cli/cli/compose/loader"
1718
"github.com/docker/cli/opts"
1819
"github.com/docker/docker/api/types/container"
@@ -443,12 +444,17 @@ func parse(flags *pflag.FlagSet, copts *containerOptions, serverOS string) (*con
443444
// parsing flags, we haven't yet sent a _ping to the daemon to determine
444445
// what operating system it is.
445446
deviceMappings := []container.DeviceMapping{}
447+
var cdiDeviceNames []string
446448
for _, device := range copts.devices.GetAll() {
447449
var (
448450
validated string
449451
deviceMapping container.DeviceMapping
450452
err error
451453
)
454+
if cdi.IsQualifiedName(device) {
455+
cdiDeviceNames = append(cdiDeviceNames, device)
456+
continue
457+
}
452458
validated, err = validateDevice(device, serverOS)
453459
if err != nil {
454460
return nil, err
@@ -553,6 +559,16 @@ func parse(flags *pflag.FlagSet, copts *containerOptions, serverOS string) (*con
553559
}
554560
}
555561

562+
deviceRequests := copts.gpus.Value()
563+
if len(cdiDeviceNames) > 0 {
564+
cdiDeviceRequest := container.DeviceRequest{
565+
Driver: "cdi",
566+
Capabilities: [][]string{{"cdi"}},
567+
DeviceIDs: cdiDeviceNames,
568+
}
569+
deviceRequests = append(deviceRequests, cdiDeviceRequest)
570+
}
571+
556572
resources := container.Resources{
557573
CgroupParent: copts.cgroupParent,
558574
Memory: copts.memory.Value(),
@@ -583,7 +599,7 @@ func parse(flags *pflag.FlagSet, copts *containerOptions, serverOS string) (*con
583599
Ulimits: copts.ulimits.GetList(),
584600
DeviceCgroupRules: copts.deviceCgroupRules.GetAll(),
585601
Devices: deviceMappings,
586-
DeviceRequests: copts.gpus.Value(),
602+
DeviceRequests: deviceRequests,
587603
}
588604

589605
config := &container.Config{

cli/command/container/opts_test.go

Lines changed: 84 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"github.com/docker/go-connections/nat"
1515
"github.com/pkg/errors"
1616
"github.com/spf13/pflag"
17+
"github.com/stretchr/testify/require"
1718
"gotest.tools/v3/assert"
1819
is "gotest.tools/v3/assert/cmp"
1920
"gotest.tools/v3/skip"
@@ -417,39 +418,89 @@ func TestParseWithExpose(t *testing.T) {
417418

418419
func TestParseDevice(t *testing.T) {
419420
skip.If(t, runtime.GOOS != "linux") // Windows and macOS validate server-side
420-
valids := map[string]container.DeviceMapping{
421-
"/dev/snd": {
422-
PathOnHost: "/dev/snd",
423-
PathInContainer: "/dev/snd",
424-
CgroupPermissions: "rwm",
425-
},
426-
"/dev/snd:rw": {
427-
PathOnHost: "/dev/snd",
428-
PathInContainer: "/dev/snd",
429-
CgroupPermissions: "rw",
430-
},
431-
"/dev/snd:/something": {
432-
PathOnHost: "/dev/snd",
433-
PathInContainer: "/something",
434-
CgroupPermissions: "rwm",
435-
},
436-
"/dev/snd:/something:rw": {
437-
PathOnHost: "/dev/snd",
438-
PathInContainer: "/something",
439-
CgroupPermissions: "rw",
440-
},
441-
}
442-
for device, deviceMapping := range valids {
443-
_, hostconfig, _, err := parseRun([]string{fmt.Sprintf("--device=%v", device), "img", "cmd"})
444-
if err != nil {
445-
t.Fatal(err)
446-
}
447-
if len(hostconfig.Devices) != 1 {
448-
t.Fatalf("Expected 1 devices, got %v", hostconfig.Devices)
449-
}
450-
if hostconfig.Devices[0] != deviceMapping {
451-
t.Fatalf("Expected %v, got %v", deviceMapping, hostconfig.Devices)
452-
}
421+
testCases := []struct {
422+
devices []string
423+
deviceMapping *container.DeviceMapping
424+
deviceRequest *container.DeviceRequest
425+
}{
426+
{
427+
devices: []string{"/dev/snd"},
428+
deviceMapping: &container.DeviceMapping{
429+
PathOnHost: "/dev/snd",
430+
PathInContainer: "/dev/snd",
431+
CgroupPermissions: "rwm",
432+
},
433+
},
434+
{
435+
devices: []string{"/dev/snd:rw"},
436+
deviceMapping: &container.DeviceMapping{
437+
PathOnHost: "/dev/snd",
438+
PathInContainer: "/dev/snd",
439+
CgroupPermissions: "rw",
440+
},
441+
},
442+
{
443+
devices: []string{"/dev/snd:/something"},
444+
deviceMapping: &container.DeviceMapping{
445+
PathOnHost: "/dev/snd",
446+
PathInContainer: "/something",
447+
CgroupPermissions: "rwm",
448+
},
449+
},
450+
{
451+
devices: []string{"/dev/snd:/something:rw"},
452+
deviceMapping: &container.DeviceMapping{
453+
PathOnHost: "/dev/snd",
454+
PathInContainer: "/something",
455+
CgroupPermissions: "rw",
456+
},
457+
},
458+
{
459+
devices: []string{"vendor.com/class=name"},
460+
deviceMapping: nil,
461+
deviceRequest: &container.DeviceRequest{
462+
Driver: "cdi",
463+
Capabilities: [][]string{{"cdi"}},
464+
DeviceIDs: []string{"vendor.com/class=name"},
465+
},
466+
},
467+
{
468+
devices: []string{"vendor.com/class=name", "/dev/snd:/something:rw"},
469+
deviceMapping: &container.DeviceMapping{
470+
PathOnHost: "/dev/snd",
471+
PathInContainer: "/something",
472+
CgroupPermissions: "rw",
473+
},
474+
deviceRequest: &container.DeviceRequest{
475+
Driver: "cdi",
476+
Capabilities: [][]string{{"cdi"}},
477+
DeviceIDs: []string{"vendor.com/class=name"},
478+
},
479+
},
480+
}
481+
482+
for _, tc := range testCases {
483+
t.Run(fmt.Sprintf("%s", tc.devices), func(t *testing.T) {
484+
var args []string
485+
for _, d := range tc.devices {
486+
args = append(args, fmt.Sprintf("--device=%v", d))
487+
}
488+
args = append(args, "img", "cmd")
489+
490+
_, hostconfig, _, err := parseRun(args)
491+
492+
require.NoError(t, err)
493+
494+
if tc.deviceMapping != nil {
495+
require.Lenf(t, hostconfig.Devices, 1, "Expected 1 devices, got %v", hostconfig.Devices)
496+
require.EqualValues(t, *tc.deviceMapping, hostconfig.Devices[0])
497+
}
498+
499+
if tc.deviceRequest != nil {
500+
require.Lenf(t, hostconfig.DeviceRequests, 1, "Expected 1 device request, got %v", hostconfig.DeviceRequests)
501+
require.EqualValues(t, *tc.deviceRequest, hostconfig.DeviceRequests[0])
502+
}
503+
})
453504
}
454505
}
455506

vendor.mod

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ module github.com/docker/cli
77
go 1.18
88

99
require (
10+
github.com/container-orchestrated-devices/container-device-interface v0.5.4
1011
github.com/containerd/containerd v1.6.16
1112
github.com/creack/pty v1.1.11
1213
github.com/docker/distribution v2.8.1+incompatible
@@ -34,6 +35,7 @@ require (
3435
github.com/sirupsen/logrus v1.9.0
3536
github.com/spf13/cobra v1.6.1
3637
github.com/spf13/pflag v1.0.5
38+
github.com/stretchr/testify v1.8.0
3739
github.com/theupdateframework/notary v0.7.1-0.20210315103452-bf96a202a09a
3840
github.com/tonistiigi/go-rosetta v0.0.0-20200727161949-f79598599c5d
3941
github.com/xeipuuv/gojsonschema v1.2.0
@@ -49,9 +51,11 @@ require (
4951
github.com/Microsoft/go-winio v0.5.2 // indirect
5052
github.com/beorn7/perks v1.0.1 // indirect
5153
github.com/cespare/xxhash/v2 v2.1.2 // indirect
54+
github.com/davecgh/go-spew v1.1.1 // indirect
5255
github.com/docker/go v1.5.1-1.0.20160303222718-d30aec9fd63c // indirect
5356
github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c // indirect
5457
github.com/docker/go-metrics v0.0.1 // indirect
58+
github.com/fsnotify/fsnotify v1.5.1 // indirect
5559
github.com/go-sql-driver/mysql v1.6.0 // indirect
5660
github.com/golang/protobuf v1.5.2 // indirect
5761
github.com/gorilla/mux v1.8.0 // indirect
@@ -61,18 +65,25 @@ require (
6165
github.com/miekg/pkcs11 v1.1.1 // indirect
6266
github.com/moby/sys/symlink v0.2.0 // indirect
6367
github.com/opencontainers/runc v1.1.3 // indirect
68+
github.com/opencontainers/runtime-spec v1.0.3-0.20220825212826-86290f6a00fb // indirect
69+
github.com/opencontainers/runtime-tools v0.9.1-0.20221107090550-2e043c6bd626 // indirect
70+
github.com/pmezard/go-difflib v1.0.0 // indirect
6471
github.com/prometheus/client_golang v1.14.0 // indirect
6572
github.com/prometheus/client_model v0.3.0 // indirect
6673
github.com/prometheus/common v0.37.0 // indirect
6774
github.com/prometheus/procfs v0.8.0 // indirect
6875
github.com/rivo/uniseg v0.2.0 // indirect
76+
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 // indirect
6977
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
7078
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
7179
go.etcd.io/etcd/raft/v3 v3.5.6 // indirect
7280
golang.org/x/crypto v0.2.0 // indirect
81+
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 // indirect
7382
golang.org/x/net v0.5.0 // indirect
7483
golang.org/x/time v0.1.0 // indirect
7584
google.golang.org/genproto v0.0.0-20220706185917-7780775163c4 // indirect
7685
google.golang.org/grpc v1.48.0 // indirect
7786
google.golang.org/protobuf v1.28.1 // indirect
87+
gopkg.in/yaml.v3 v3.0.1 // indirect
88+
sigs.k8s.io/yaml v1.3.0 // indirect
7889
)

vendor.sum

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
5353
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
5454
github.com/bitly/go-hostpool v0.1.0/go.mod h1:4gOCgp6+NZnVqlKyZ/iBZFTAJKembaVENUpMkpg42fw=
5555
github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA=
56+
github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ=
57+
github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM=
58+
github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
5659
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4=
5760
github.com/bugsnag/bugsnag-go v1.0.5 h1:NIoY2u+am1/GRgUZa+ata8UUrRBuCK4pLq0/lcvMF7M=
5861
github.com/bugsnag/bugsnag-go v1.0.5/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8=
@@ -83,6 +86,8 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH
8386
github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo=
8487
github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA=
8588
github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI=
89+
github.com/container-orchestrated-devices/container-device-interface v0.5.4 h1:PqQGqJqQttMP5oJ/qNGEg8JttlHqGY3xDbbcKb5T9E8=
90+
github.com/container-orchestrated-devices/container-device-interface v0.5.4/go.mod h1:DjE95rfPiiSmG7uVXtg0z6MnPm/Lx4wxKCIts0ZE0vg=
8691
github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U=
8792
github.com/containerd/containerd v1.6.16 h1:0H5xH6ABsN7XTrxIAKxFpBkFCBtrZ/OSORhCpUnHjrc=
8893
github.com/containerd/containerd v1.6.16/go.mod h1:1RdCUu95+gc2v9t3IL+zIlpClSmew7/0YS8O5eQZrOw=
@@ -129,6 +134,8 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7
129134
github.com/erikstmartin/go-testdb v0.0.0-20160219214506-8d10e4a1bae5/go.mod h1:a2zkGnVExMxdzMo3M0Hi/3sEU+cWnZpSni0O6/Yb/P0=
130135
github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k=
131136
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
137+
github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI=
138+
github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU=
132139
github.com/fvbommel/sortorder v1.0.2 h1:mV4o8B2hKboCdkJm+a7uX/SIpZob4JzUpc5GGnM45eo=
133140
github.com/fvbommel/sortorder v1.0.2/go.mod h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0=
134141
github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ=
@@ -215,6 +222,7 @@ github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm4
215222
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
216223
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
217224
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
225+
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
218226
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
219227
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
220228
github.com/gorilla/mux v1.7.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
@@ -223,6 +231,10 @@ github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB7
223231
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
224232
github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed h1:5upAirOpQc1Q53c0bnx2ufif5kANL7bfZWcc6VJWJd8=
225233
github.com/hailocab/go-hostpool v0.0.0-20160125115350-e80d13ce29ed/go.mod h1:tMWxXQ9wFIaZeTI9F+hmhFiGpFmhOHzyShyFUhRm0H4=
234+
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
235+
github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I=
236+
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo=
237+
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM=
226238
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
227239
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
228240
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
@@ -279,6 +291,7 @@ github.com/miekg/pkcs11 v1.1.1/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WT
279291
github.com/mitchellh/mapstructure v1.0.0/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
280292
github.com/mitchellh/mapstructure v1.3.2 h1:mRS76wmkOn3KkKAyXDu42V+6ebnXWIztFSYGN7GeoRg=
281293
github.com/mitchellh/mapstructure v1.3.2/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
294+
github.com/mndrix/tap-go v0.0.0-20171203230836-629fa407e90b/go.mod h1:pzzDgJWZ34fGzaAZGFW22KVZDfyrYW+QABMrWnJBnSs=
282295
github.com/moby/buildkit v0.10.6 h1:DJlEuLIgnu34HQKF4n9Eg6q2YqQVC0eOpMb4p2eRS2w=
283296
github.com/moby/buildkit v0.10.6/go.mod h1:tQuuyTWtOb9D+RE425cwOCUkX0/oZ+5iBZ+uWpWQ9bU=
284297
github.com/moby/patternmatcher v0.5.0 h1:YCZgJOeULcxLw1Q+sVR636pmS7sPEn1Qo2iAN6M7DBo=
@@ -318,7 +331,13 @@ github.com/opencontainers/image-spec v1.0.3-0.20220303224323-02efb9a75ee1/go.mod
318331
github.com/opencontainers/runc v1.1.3 h1:vIXrkId+0/J2Ymu2m7VjGvbSlAId9XNRPhn2p4b+d8w=
319332
github.com/opencontainers/runc v1.1.3/go.mod h1:1J5XiS+vdZ3wCyZybsuxXZWGrgSr8fFJHLXuG2PsnNg=
320333
github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
334+
github.com/opencontainers/runtime-spec v1.0.3-0.20220825212826-86290f6a00fb h1:1xSVPOd7/UA+39/hXEGnBJ13p6JFB0E1EvQFlrRDOXI=
335+
github.com/opencontainers/runtime-spec v1.0.3-0.20220825212826-86290f6a00fb/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
336+
github.com/opencontainers/runtime-tools v0.9.1-0.20221107090550-2e043c6bd626 h1:DmNGcqH3WDbV5k8OJ+esPWbqUOX5rMLR2PMvziDMJi0=
337+
github.com/opencontainers/runtime-tools v0.9.1-0.20221107090550-2e043c6bd626/go.mod h1:BRHJJd0E+cx42OybVYSgUvZmU0B8P9gZuRXlZUP7TKI=
338+
github.com/opencontainers/selinux v1.9.1/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI=
321339
github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI=
340+
github.com/opencontainers/selinux v1.10.1 h1:09LIPVRP3uuZGQvgR+SgMSNBd1Eb3vlRbGqQpoHsF8w=
322341
github.com/opentracing/opentracing-go v1.1.0 h1:pWlfV3Bxv7k65HYwkikxat0+s3pV4bsqf19k25Ur8rU=
323342
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
324343
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -392,17 +411,22 @@ github.com/spf13/viper v0.0.0-20150530192845-be5ff3e4840c/go.mod h1:A8kyI5cUJhb8
392411
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
393412
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
394413
github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE=
414+
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
395415
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
396416
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
397417
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
398418
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
399419
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
420+
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
400421
github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk=
422+
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
423+
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtseVEc4yCz2qF8ZrQvIDBJLl4S1c3GCXmoI=
401424
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
402425
github.com/theupdateframework/notary v0.7.1-0.20210315103452-bf96a202a09a h1:tlJ7tGUHvcvL1v3yR6NcCc9nOqh2L+CG6HWrYQtwzQ0=
403426
github.com/theupdateframework/notary v0.7.1-0.20210315103452-bf96a202a09a/go.mod h1:Y94A6rPp2OwNfP/7vmf8O2xx2IykP8pPXQ1DLouGnEw=
404427
github.com/tonistiigi/go-rosetta v0.0.0-20200727161949-f79598599c5d h1:wvQZpqy8p0D/FUia6ipKDhXrzPzBVJE4PZyPc5+5Ay0=
405428
github.com/tonistiigi/go-rosetta v0.0.0-20200727161949-f79598599c5d/go.mod h1:xKQhd7snlzKFuUi1taTGWjpRE8iFTA06DeacYi3CVFQ=
429+
github.com/urfave/cli v1.19.1/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
406430
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
407431
github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE=
408432
github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU=
@@ -470,6 +494,8 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB
470494
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
471495
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
472496
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
497+
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4 h1:6zppjxzCulZykYSLyVDYbneBfbaBIQPYMevg0bEwv2s=
498+
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
473499
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
474500
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
475501
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -572,6 +598,7 @@ golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBc
572598
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
573599
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
574600
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
601+
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
575602
golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
576603
golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
577604
golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -777,3 +804,5 @@ k8s.io/klog/v2 v2.80.1 h1:atnLQ121W371wYYFawwYx1aEY2eUfs4l3J72wtgAwV4=
777804
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
778805
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
779806
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
807+
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
808+
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=

0 commit comments

Comments
 (0)