mirror of
https://github.com/containers/podman.git
synced 2025-06-19 00:06:43 +08:00
vendor buildah@main
Note that the bud-logfile-with-split-logfile-by-platform test is skipped on the remote client (see #14544). Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
This commit is contained in:
@ -546,6 +546,8 @@ func buildFlagsWrapperToOptions(c *cobra.Command, contextDir string, flags *buil
|
|||||||
Labels: flags.Label,
|
Labels: flags.Label,
|
||||||
Layers: flags.Layers,
|
Layers: flags.Layers,
|
||||||
LogRusage: flags.LogRusage,
|
LogRusage: flags.LogRusage,
|
||||||
|
LogFile: flags.Logfile,
|
||||||
|
LogSplitByPlatform: flags.LogSplitByPlatform,
|
||||||
Manifest: flags.Manifest,
|
Manifest: flags.Manifest,
|
||||||
MaxPullPushRetries: 3,
|
MaxPullPushRetries: 3,
|
||||||
NamespaceOptions: nsValues,
|
NamespaceOptions: nsValues,
|
||||||
|
@ -427,6 +427,16 @@ BUILDAH\_LAYERS environment variable. `export BUILDAH_LAYERS=true`
|
|||||||
|
|
||||||
Log output which would be sent to standard output and standard error to the
|
Log output which would be sent to standard output and standard error to the
|
||||||
specified file instead of to standard output and standard error.
|
specified file instead of to standard output and standard error.
|
||||||
|
This option is not supported on the remote client, including Mac and Windows
|
||||||
|
(excluding WSL2) machines.
|
||||||
|
|
||||||
|
#### **--logsplit** *bool-value*
|
||||||
|
|
||||||
|
If `--logfile` and `--platform` are specified, the `--logsplit` option allows
|
||||||
|
end-users to split the log file for each platform into different files in the
|
||||||
|
following format: `${logfile}_${platform-os}_${platform-arch}`.
|
||||||
|
This option is not supported on the remote client, including Mac and Windows
|
||||||
|
(excluding WSL2) machines.
|
||||||
|
|
||||||
#### **--manifest** "manifest"
|
#### **--manifest** "manifest"
|
||||||
|
|
||||||
@ -482,6 +492,15 @@ By default, Podman will manage _/etc/hosts_, adding the container's own IP addre
|
|||||||
**--no-hosts** disables this, and the image's _/etc/hosts_ will be preserved unmodified.
|
**--no-hosts** disables this, and the image's _/etc/hosts_ will be preserved unmodified.
|
||||||
This option conflicts with **--add-host**.
|
This option conflicts with **--add-host**.
|
||||||
|
|
||||||
|
#### **--omit-history**
|
||||||
|
|
||||||
|
Omit build history information in the built image. (default false).
|
||||||
|
|
||||||
|
This option is useful for the cases where end users explicitly
|
||||||
|
want to set `--omit-history` to omit the optional `History` from
|
||||||
|
built images or when working with images built using build tools that
|
||||||
|
do not include `History` information in their images.
|
||||||
|
|
||||||
#### **--os**=*string*
|
#### **--os**=*string*
|
||||||
|
|
||||||
Set the OS of the image to be built, and that of the base image to be pulled,
|
Set the OS of the image to be built, and that of the base image to be pulled,
|
||||||
|
4
go.mod
4
go.mod
@ -11,7 +11,7 @@ require (
|
|||||||
github.com/container-orchestrated-devices/container-device-interface v0.4.0
|
github.com/container-orchestrated-devices/container-device-interface v0.4.0
|
||||||
github.com/containernetworking/cni v1.1.1
|
github.com/containernetworking/cni v1.1.1
|
||||||
github.com/containernetworking/plugins v1.1.1
|
github.com/containernetworking/plugins v1.1.1
|
||||||
github.com/containers/buildah v1.26.1-0.20220524184833-5500333c2e06
|
github.com/containers/buildah v1.26.1-0.20220607182634-005447be07ee
|
||||||
github.com/containers/common v0.48.1-0.20220528105338-54c8092c69a1
|
github.com/containers/common v0.48.1-0.20220528105338-54c8092c69a1
|
||||||
github.com/containers/conmon v2.0.20+incompatible
|
github.com/containers/conmon v2.0.20+incompatible
|
||||||
github.com/containers/image/v5 v5.21.2-0.20220520105616-e594853d6471
|
github.com/containers/image/v5 v5.21.2-0.20220520105616-e594853d6471
|
||||||
@ -67,7 +67,7 @@ require (
|
|||||||
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4
|
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4
|
||||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
|
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
|
||||||
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211
|
golang.org/x/term v0.0.0-20220526004731-065cf7ba2467
|
||||||
golang.org/x/text v0.3.7
|
golang.org/x/text v0.3.7
|
||||||
google.golang.org/protobuf v1.28.0
|
google.golang.org/protobuf v1.28.0
|
||||||
gopkg.in/inf.v0 v0.9.1
|
gopkg.in/inf.v0 v0.9.1
|
||||||
|
25
go.sum
25
go.sum
@ -109,8 +109,9 @@ github.com/Microsoft/hcsshim v0.8.20/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwT
|
|||||||
github.com/Microsoft/hcsshim v0.8.21/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4=
|
github.com/Microsoft/hcsshim v0.8.21/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4=
|
||||||
github.com/Microsoft/hcsshim v0.8.22/go.mod h1:91uVCVzvX2QD16sMCenoxxXo6L1wJnLMX2PSufFMtF0=
|
github.com/Microsoft/hcsshim v0.8.22/go.mod h1:91uVCVzvX2QD16sMCenoxxXo6L1wJnLMX2PSufFMtF0=
|
||||||
github.com/Microsoft/hcsshim v0.8.23/go.mod h1:4zegtUJth7lAvFyc6cH2gGQ5B3OFQim01nnU2M8jKDg=
|
github.com/Microsoft/hcsshim v0.8.23/go.mod h1:4zegtUJth7lAvFyc6cH2gGQ5B3OFQim01nnU2M8jKDg=
|
||||||
github.com/Microsoft/hcsshim v0.9.2 h1:wB06W5aYFfUB3IvootYAY2WnOmIdgPGfqSI6tufQNnY=
|
|
||||||
github.com/Microsoft/hcsshim v0.9.2/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc=
|
github.com/Microsoft/hcsshim v0.9.2/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc=
|
||||||
|
github.com/Microsoft/hcsshim v0.9.3 h1:k371PzBuRrz2b+ebGuI2nVgVhgsVX60jMfSw80NECxo=
|
||||||
|
github.com/Microsoft/hcsshim v0.9.3/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc=
|
||||||
github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU=
|
github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU=
|
||||||
github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY=
|
github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY=
|
||||||
github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
|
github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
|
||||||
@ -268,8 +269,9 @@ github.com/containerd/containerd v1.5.7/go.mod h1:gyvv6+ugqY25TiXxcZC3L5yOeYgEw0
|
|||||||
github.com/containerd/containerd v1.5.8/go.mod h1:YdFSv5bTFLpG2HIYmfqDpSYYTDX+mc5qtSuYx1YUb/s=
|
github.com/containerd/containerd v1.5.8/go.mod h1:YdFSv5bTFLpG2HIYmfqDpSYYTDX+mc5qtSuYx1YUb/s=
|
||||||
github.com/containerd/containerd v1.5.9/go.mod h1:fvQqCfadDGga5HZyn3j4+dx56qj2I9YwBrlSdalvJYQ=
|
github.com/containerd/containerd v1.5.9/go.mod h1:fvQqCfadDGga5HZyn3j4+dx56qj2I9YwBrlSdalvJYQ=
|
||||||
github.com/containerd/containerd v1.6.1/go.mod h1:1nJz5xCZPusx6jJU8Frfct988y0NpumIq9ODB0kLtoE=
|
github.com/containerd/containerd v1.6.1/go.mod h1:1nJz5xCZPusx6jJU8Frfct988y0NpumIq9ODB0kLtoE=
|
||||||
github.com/containerd/containerd v1.6.4 h1:SEDZBp10mhCp+hkO3Njz/YhGrI7ah3edNcUlRdUPOgg=
|
|
||||||
github.com/containerd/containerd v1.6.4/go.mod h1:oWOqbuJUZmOVafhA0lj2NAXbiO1u7F0K5l1bUgdyo94=
|
github.com/containerd/containerd v1.6.4/go.mod h1:oWOqbuJUZmOVafhA0lj2NAXbiO1u7F0K5l1bUgdyo94=
|
||||||
|
github.com/containerd/containerd v1.6.6 h1:xJNPhbrmz8xAMDNoVjHy9YHtWwEQNS+CDkcIRh7t8Y0=
|
||||||
|
github.com/containerd/containerd v1.6.6/go.mod h1:ZoP1geJldzCVY3Tonoz7b1IXk8rIX0Nltt5QE4OMNk0=
|
||||||
github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
||||||
github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
||||||
github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
||||||
@ -290,6 +292,7 @@ github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb
|
|||||||
github.com/containerd/go-cni v1.1.0/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA=
|
github.com/containerd/go-cni v1.1.0/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA=
|
||||||
github.com/containerd/go-cni v1.1.3/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA=
|
github.com/containerd/go-cni v1.1.3/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA=
|
||||||
github.com/containerd/go-cni v1.1.5/go.mod h1:Rf2ZrMycr1El589IyuRzn7RkfdRZVKaFGaxSDHVAjj0=
|
github.com/containerd/go-cni v1.1.5/go.mod h1:Rf2ZrMycr1El589IyuRzn7RkfdRZVKaFGaxSDHVAjj0=
|
||||||
|
github.com/containerd/go-cni v1.1.6/go.mod h1:BWtoWl5ghVymxu6MBjg79W9NZrCRyHIdUtk4cauMe34=
|
||||||
github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
|
github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
|
||||||
github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
|
github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
|
||||||
github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g=
|
github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g=
|
||||||
@ -336,8 +339,8 @@ github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRD
|
|||||||
github.com/containernetworking/plugins v1.0.1/go.mod h1:QHCfGpaTwYTbbH+nZXKVTxNBDZcxSOplJT5ico8/FLE=
|
github.com/containernetworking/plugins v1.0.1/go.mod h1:QHCfGpaTwYTbbH+nZXKVTxNBDZcxSOplJT5ico8/FLE=
|
||||||
github.com/containernetworking/plugins v1.1.1 h1:+AGfFigZ5TiQH00vhR8qPeSatj53eNGz0C1d3wVYlHE=
|
github.com/containernetworking/plugins v1.1.1 h1:+AGfFigZ5TiQH00vhR8qPeSatj53eNGz0C1d3wVYlHE=
|
||||||
github.com/containernetworking/plugins v1.1.1/go.mod h1:Sr5TH/eBsGLXK/h71HeLfX19sZPp3ry5uHSkI4LPxV8=
|
github.com/containernetworking/plugins v1.1.1/go.mod h1:Sr5TH/eBsGLXK/h71HeLfX19sZPp3ry5uHSkI4LPxV8=
|
||||||
github.com/containers/buildah v1.26.1-0.20220524184833-5500333c2e06 h1:Tx1IfKch/SnsCk1YrdyR4B2AcS1TKLYxbSMXzmQXafU=
|
github.com/containers/buildah v1.26.1-0.20220607182634-005447be07ee h1:6giteeZK4pd7isQ/2jJfY55rmcWEleBp0bKStqSicfk=
|
||||||
github.com/containers/buildah v1.26.1-0.20220524184833-5500333c2e06/go.mod h1:oB0PwsW+rhePNsBimCnEz4YMLx8QxZBjHi/DPnXhUCg=
|
github.com/containers/buildah v1.26.1-0.20220607182634-005447be07ee/go.mod h1:Hs7VVBJ087XRdqfyoUV1bW5pIoNDAnNL2XlbZjsNBqI=
|
||||||
github.com/containers/common v0.48.1-0.20220519181648-280c6f69fa82/go.mod h1:Ru/JjL1CTHzlxghVMhchzcFUwHLvlIeR5/SUMw8VUOI=
|
github.com/containers/common v0.48.1-0.20220519181648-280c6f69fa82/go.mod h1:Ru/JjL1CTHzlxghVMhchzcFUwHLvlIeR5/SUMw8VUOI=
|
||||||
github.com/containers/common v0.48.1-0.20220528105338-54c8092c69a1 h1:oq9ol4U/HEJfDYCp9aKBFDBaE16Y1RZN0GJ4eIkrJoo=
|
github.com/containers/common v0.48.1-0.20220528105338-54c8092c69a1 h1:oq9ol4U/HEJfDYCp9aKBFDBaE16Y1RZN0GJ4eIkrJoo=
|
||||||
github.com/containers/common v0.48.1-0.20220528105338-54c8092c69a1/go.mod h1:Ru/JjL1CTHzlxghVMhchzcFUwHLvlIeR5/SUMw8VUOI=
|
github.com/containers/common v0.48.1-0.20220528105338-54c8092c69a1/go.mod h1:Ru/JjL1CTHzlxghVMhchzcFUwHLvlIeR5/SUMw8VUOI=
|
||||||
@ -426,7 +429,6 @@ github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4Kfc
|
|||||||
github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68=
|
github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68=
|
||||||
github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||||
github.com/docker/docker v1.4.2-0.20190924003213-a8608b5b67c7/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
github.com/docker/docker v1.4.2-0.20190924003213-a8608b5b67c7/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||||
github.com/docker/docker v20.10.3-0.20220208084023-a5c757555091+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
|
||||||
github.com/docker/docker v20.10.12+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
github.com/docker/docker v20.10.12+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||||
github.com/docker/docker v20.10.15+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
github.com/docker/docker v20.10.15+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||||
github.com/docker/docker v20.10.16+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
github.com/docker/docker v20.10.16+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||||
@ -493,8 +495,8 @@ github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5
|
|||||||
github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI=
|
github.com/fsnotify/fsnotify v1.5.4 h1:jRbGcIw6P2Meqdwuo0H1p6JVLbL5DHKAKlYndzMwVZI=
|
||||||
github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU=
|
github.com/fsnotify/fsnotify v1.5.4/go.mod h1:OVB6XrOHzAwXMpEM7uPOzcehqUV2UqJxmVXmkdnm1bU=
|
||||||
github.com/fsouza/go-dockerclient v1.7.7/go.mod h1:njNCXvoZj3sLPjf3yO0DPHf1mdLdCPDYPc14GskKA4Y=
|
github.com/fsouza/go-dockerclient v1.7.7/go.mod h1:njNCXvoZj3sLPjf3yO0DPHf1mdLdCPDYPc14GskKA4Y=
|
||||||
github.com/fsouza/go-dockerclient v1.7.11 h1:pRmGMANAl+tmr+IYNYq8IWWcSbiKQMSRumYLv8H5sfk=
|
github.com/fsouza/go-dockerclient v1.8.1 h1:a27vHYqNSZz88nUAurI1o6W5PgEt63nAWilOI+j63RE=
|
||||||
github.com/fsouza/go-dockerclient v1.7.11/go.mod h1:zvYxutUNOK853i1s7VywZxQgxSHbm7A6en/q9MHBN6k=
|
github.com/fsouza/go-dockerclient v1.8.1/go.mod h1:zmA2ogSxRnXmbZcy0Aq7yhRoCdP/bDns/qghCK9SWtM=
|
||||||
github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA=
|
github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA=
|
||||||
github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3nqZCxaQ2Ze/sM=
|
github.com/fullstorydev/grpcurl v1.6.0/go.mod h1:ZQ+ayqbKMJNhzLmbpCiurTVlaK2M/3nqZCxaQ2Ze/sM=
|
||||||
github.com/fzipp/gocyclo v0.3.1/go.mod h1:DJHO6AUmbdqj2ET4Z9iArSuwWgYDRryYt2wASxc7x3E=
|
github.com/fzipp/gocyclo v0.3.1/go.mod h1:DJHO6AUmbdqj2ET4Z9iArSuwWgYDRryYt2wASxc7x3E=
|
||||||
@ -949,13 +951,15 @@ github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx
|
|||||||
github.com/mndrix/tap-go v0.0.0-20171203230836-629fa407e90b/go.mod h1:pzzDgJWZ34fGzaAZGFW22KVZDfyrYW+QABMrWnJBnSs=
|
github.com/mndrix/tap-go v0.0.0-20171203230836-629fa407e90b/go.mod h1:pzzDgJWZ34fGzaAZGFW22KVZDfyrYW+QABMrWnJBnSs=
|
||||||
github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc=
|
github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc=
|
||||||
github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
|
github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
|
||||||
github.com/moby/sys/mount v0.2.0 h1:WhCW5B355jtxndN5ovugJlMFJawbUODuW8fSnEH6SSM=
|
|
||||||
github.com/moby/sys/mount v0.2.0/go.mod h1:aAivFE2LB3W4bACsUXChRHQ0qKWsetY4Y9V7sxOougM=
|
github.com/moby/sys/mount v0.2.0/go.mod h1:aAivFE2LB3W4bACsUXChRHQ0qKWsetY4Y9V7sxOougM=
|
||||||
|
github.com/moby/sys/mount v0.3.3 h1:fX1SVkXFJ47XWDoeFW4Sq7PdQJnV2QIDZAqjNqgEjUs=
|
||||||
|
github.com/moby/sys/mount v0.3.3/go.mod h1:PBaEorSNTLG5t/+4EgukEQVlAvVEc6ZjTySwKdqp5K0=
|
||||||
github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
|
github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
|
||||||
github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
|
github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
|
||||||
github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU=
|
github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU=
|
||||||
github.com/moby/sys/mountinfo v0.6.1 h1:+H/KnGEAGRpTrEAqNVQ2AM3SiwMgJUt/TXj+Z8cmCIc=
|
|
||||||
github.com/moby/sys/mountinfo v0.6.1/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU=
|
github.com/moby/sys/mountinfo v0.6.1/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU=
|
||||||
|
github.com/moby/sys/mountinfo v0.6.2 h1:BzJjoreD5BMFNmD9Rus6gdd1pLuecOFPt8wC+Vygl78=
|
||||||
|
github.com/moby/sys/mountinfo v0.6.2/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI=
|
||||||
github.com/moby/sys/signal v0.6.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg=
|
github.com/moby/sys/signal v0.6.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg=
|
||||||
github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ=
|
github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ=
|
||||||
github.com/moby/sys/symlink v0.2.0/go.mod h1:7uZVF2dqJjG/NsClqul95CqKOBRQyYSNnJ6BMgR/gFs=
|
github.com/moby/sys/symlink v0.2.0/go.mod h1:7uZVF2dqJjG/NsClqul95CqKOBRQyYSNnJ6BMgR/gFs=
|
||||||
@ -1717,8 +1721,9 @@ golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXR
|
|||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
|
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
|
golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 h1:CBpWXWQpIRjzmkkA+M7q9Fqnwd2mZr3AFqexg8YTfoM=
|
||||||
|
golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
|
@ -217,6 +217,9 @@ skip_if_remote "--output option not implemented in podman-remote" \
|
|||||||
"build with custom build output and output rootfs to tar by pipe" \
|
"build with custom build output and output rootfs to tar by pipe" \
|
||||||
"build with custom build output must fail for bad input"
|
"build with custom build output must fail for bad input"
|
||||||
|
|
||||||
|
# https://github.com/containers/podman/issues/14544
|
||||||
|
skip_if_remote "bud-logfile-with-split-logfile-by-platform"
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# BEGIN tests which are skipped due to actual podman or podman-remote bugs.
|
# BEGIN tests which are skipped due to actual podman or podman-remote bugs.
|
||||||
|
|
||||||
|
186
vendor/github.com/Microsoft/hcsshim/internal/hcs/system.go
generated
vendored
186
vendor/github.com/Microsoft/hcsshim/internal/hcs/system.go
generated
vendored
@ -4,17 +4,22 @@ import (
|
|||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"errors"
|
"errors"
|
||||||
|
"fmt"
|
||||||
"strings"
|
"strings"
|
||||||
"sync"
|
"sync"
|
||||||
"syscall"
|
"syscall"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/Microsoft/hcsshim/internal/cow"
|
"github.com/Microsoft/hcsshim/internal/cow"
|
||||||
"github.com/Microsoft/hcsshim/internal/hcs/schema1"
|
"github.com/Microsoft/hcsshim/internal/hcs/schema1"
|
||||||
hcsschema "github.com/Microsoft/hcsshim/internal/hcs/schema2"
|
hcsschema "github.com/Microsoft/hcsshim/internal/hcs/schema2"
|
||||||
|
"github.com/Microsoft/hcsshim/internal/jobobject"
|
||||||
"github.com/Microsoft/hcsshim/internal/log"
|
"github.com/Microsoft/hcsshim/internal/log"
|
||||||
|
"github.com/Microsoft/hcsshim/internal/logfields"
|
||||||
"github.com/Microsoft/hcsshim/internal/oc"
|
"github.com/Microsoft/hcsshim/internal/oc"
|
||||||
"github.com/Microsoft/hcsshim/internal/timeout"
|
"github.com/Microsoft/hcsshim/internal/timeout"
|
||||||
"github.com/Microsoft/hcsshim/internal/vmcompute"
|
"github.com/Microsoft/hcsshim/internal/vmcompute"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
"go.opencensus.io/trace"
|
"go.opencensus.io/trace"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -28,7 +33,8 @@ type System struct {
|
|||||||
waitBlock chan struct{}
|
waitBlock chan struct{}
|
||||||
waitError error
|
waitError error
|
||||||
exitError error
|
exitError error
|
||||||
os, typ string
|
os, typ, owner string
|
||||||
|
startTime time.Time
|
||||||
}
|
}
|
||||||
|
|
||||||
func newSystem(id string) *System {
|
func newSystem(id string) *System {
|
||||||
@ -38,6 +44,11 @@ func newSystem(id string) *System {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Implementation detail for silo naming, this should NOT be relied upon very heavily.
|
||||||
|
func siloNameFmt(containerID string) string {
|
||||||
|
return fmt.Sprintf(`\Container_%s`, containerID)
|
||||||
|
}
|
||||||
|
|
||||||
// CreateComputeSystem creates a new compute system with the given configuration but does not start it.
|
// CreateComputeSystem creates a new compute system with the given configuration but does not start it.
|
||||||
func CreateComputeSystem(ctx context.Context, id string, hcsDocumentInterface interface{}) (_ *System, err error) {
|
func CreateComputeSystem(ctx context.Context, id string, hcsDocumentInterface interface{}) (_ *System, err error) {
|
||||||
operation := "hcs::CreateComputeSystem"
|
operation := "hcs::CreateComputeSystem"
|
||||||
@ -127,6 +138,7 @@ func (computeSystem *System) getCachedProperties(ctx context.Context) error {
|
|||||||
}
|
}
|
||||||
computeSystem.typ = strings.ToLower(props.SystemType)
|
computeSystem.typ = strings.ToLower(props.SystemType)
|
||||||
computeSystem.os = strings.ToLower(props.RuntimeOSType)
|
computeSystem.os = strings.ToLower(props.RuntimeOSType)
|
||||||
|
computeSystem.owner = strings.ToLower(props.Owner)
|
||||||
if computeSystem.os == "" && computeSystem.typ == "container" {
|
if computeSystem.os == "" && computeSystem.typ == "container" {
|
||||||
// Pre-RS5 HCS did not return the OS, but it only supported containers
|
// Pre-RS5 HCS did not return the OS, but it only supported containers
|
||||||
// that ran Windows.
|
// that ran Windows.
|
||||||
@ -195,7 +207,7 @@ func (computeSystem *System) Start(ctx context.Context) (err error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return makeSystemError(computeSystem, operation, err, events)
|
return makeSystemError(computeSystem, operation, err, events)
|
||||||
}
|
}
|
||||||
|
computeSystem.startTime = time.Now()
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -324,11 +336,115 @@ func (computeSystem *System) Properties(ctx context.Context, types ...schema1.Pr
|
|||||||
return properties, nil
|
return properties, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// PropertiesV2 returns the requested container properties targeting a V2 schema container.
|
// queryInProc handles querying for container properties without reaching out to HCS. `props`
|
||||||
func (computeSystem *System) PropertiesV2(ctx context.Context, types ...hcsschema.PropertyType) (*hcsschema.Properties, error) {
|
// will be updated to contain any data returned from the queries present in `types`. If any properties
|
||||||
computeSystem.handleLock.RLock()
|
// failed to be queried they will be tallied up and returned in as the first return value. Failures on
|
||||||
defer computeSystem.handleLock.RUnlock()
|
// query are NOT considered errors; the only failure case for this method is if the containers job object
|
||||||
|
// cannot be opened.
|
||||||
|
func (computeSystem *System) queryInProc(ctx context.Context, props *hcsschema.Properties, types []hcsschema.PropertyType) ([]hcsschema.PropertyType, error) {
|
||||||
|
// In the future we can make use of some new functionality in the HCS that allows you
|
||||||
|
// to pass a job object for HCS to use for the container. Currently, the only way we'll
|
||||||
|
// be able to open the job/silo is if we're running as SYSTEM.
|
||||||
|
jobOptions := &jobobject.Options{
|
||||||
|
UseNTVariant: true,
|
||||||
|
Name: siloNameFmt(computeSystem.id),
|
||||||
|
}
|
||||||
|
job, err := jobobject.Open(ctx, jobOptions)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer job.Close()
|
||||||
|
|
||||||
|
var fallbackQueryTypes []hcsschema.PropertyType
|
||||||
|
for _, propType := range types {
|
||||||
|
switch propType {
|
||||||
|
case hcsschema.PTStatistics:
|
||||||
|
// Handle a bad caller asking for the same type twice. No use in re-querying if this is
|
||||||
|
// filled in already.
|
||||||
|
if props.Statistics == nil {
|
||||||
|
props.Statistics, err = computeSystem.statisticsInProc(job)
|
||||||
|
if err != nil {
|
||||||
|
log.G(ctx).WithError(err).Warn("failed to get statistics in-proc")
|
||||||
|
|
||||||
|
fallbackQueryTypes = append(fallbackQueryTypes, propType)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
fallbackQueryTypes = append(fallbackQueryTypes, propType)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return fallbackQueryTypes, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// statisticsInProc emulates what HCS does to grab statistics for a given container with a small
|
||||||
|
// change to make grabbing the private working set total much more efficient.
|
||||||
|
func (computeSystem *System) statisticsInProc(job *jobobject.JobObject) (*hcsschema.Statistics, error) {
|
||||||
|
// Start timestamp for these stats before we grab them to match HCS
|
||||||
|
timestamp := time.Now()
|
||||||
|
|
||||||
|
memInfo, err := job.QueryMemoryStats()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
processorInfo, err := job.QueryProcessorStats()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
storageInfo, err := job.QueryStorageStats()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// This calculates the private working set more efficiently than HCS does. HCS calls NtQuerySystemInformation
|
||||||
|
// with the class SystemProcessInformation which returns an array containing system information for *every*
|
||||||
|
// process running on the machine. They then grab the pids that are running in the container and filter down
|
||||||
|
// the entries in the array to only what's running in that silo and start tallying up the total. This doesn't
|
||||||
|
// work well as performance should get worse if more processess are running on the machine in general and not
|
||||||
|
// just in the container. All of the additional information besides the WorkingSetPrivateSize field is ignored
|
||||||
|
// as well which isn't great and is wasted work to fetch.
|
||||||
|
//
|
||||||
|
// HCS only let's you grab statistics in an all or nothing fashion, so we can't just grab the private
|
||||||
|
// working set ourselves and ask for everything else seperately. The optimization we can make here is
|
||||||
|
// to open the silo ourselves and do the same queries for the rest of the info, as well as calculating
|
||||||
|
// the private working set in a more efficient manner by:
|
||||||
|
//
|
||||||
|
// 1. Find the pids running in the silo
|
||||||
|
// 2. Get a process handle for every process (only need PROCESS_QUERY_LIMITED_INFORMATION access)
|
||||||
|
// 3. Call NtQueryInformationProcess on each process with the class ProcessVmCounters
|
||||||
|
// 4. Tally up the total using the field PrivateWorkingSetSize in VM_COUNTERS_EX2.
|
||||||
|
privateWorkingSet, err := job.QueryPrivateWorkingSet()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &hcsschema.Statistics{
|
||||||
|
Timestamp: timestamp,
|
||||||
|
ContainerStartTime: computeSystem.startTime,
|
||||||
|
Uptime100ns: uint64(time.Since(computeSystem.startTime).Nanoseconds()) / 100,
|
||||||
|
Memory: &hcsschema.MemoryStats{
|
||||||
|
MemoryUsageCommitBytes: memInfo.JobMemory,
|
||||||
|
MemoryUsageCommitPeakBytes: memInfo.PeakJobMemoryUsed,
|
||||||
|
MemoryUsagePrivateWorkingSetBytes: privateWorkingSet,
|
||||||
|
},
|
||||||
|
Processor: &hcsschema.ProcessorStats{
|
||||||
|
RuntimeKernel100ns: uint64(processorInfo.TotalKernelTime),
|
||||||
|
RuntimeUser100ns: uint64(processorInfo.TotalUserTime),
|
||||||
|
TotalRuntime100ns: uint64(processorInfo.TotalKernelTime + processorInfo.TotalUserTime),
|
||||||
|
},
|
||||||
|
Storage: &hcsschema.StorageStats{
|
||||||
|
ReadCountNormalized: uint64(storageInfo.ReadStats.IoCount),
|
||||||
|
ReadSizeBytes: storageInfo.ReadStats.TotalSize,
|
||||||
|
WriteCountNormalized: uint64(storageInfo.WriteStats.IoCount),
|
||||||
|
WriteSizeBytes: storageInfo.WriteStats.TotalSize,
|
||||||
|
},
|
||||||
|
}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// hcsPropertiesV2Query is a helper to make a HcsGetComputeSystemProperties call using the V2 schema property types.
|
||||||
|
func (computeSystem *System) hcsPropertiesV2Query(ctx context.Context, types []hcsschema.PropertyType) (*hcsschema.Properties, error) {
|
||||||
operation := "hcs::System::PropertiesV2"
|
operation := "hcs::System::PropertiesV2"
|
||||||
|
|
||||||
queryBytes, err := json.Marshal(hcsschema.PropertyQuery{PropertyTypes: types})
|
queryBytes, err := json.Marshal(hcsschema.PropertyQuery{PropertyTypes: types})
|
||||||
@ -345,12 +461,66 @@ func (computeSystem *System) PropertiesV2(ctx context.Context, types ...hcsschem
|
|||||||
if propertiesJSON == "" {
|
if propertiesJSON == "" {
|
||||||
return nil, ErrUnexpectedValue
|
return nil, ErrUnexpectedValue
|
||||||
}
|
}
|
||||||
properties := &hcsschema.Properties{}
|
props := &hcsschema.Properties{}
|
||||||
if err := json.Unmarshal([]byte(propertiesJSON), properties); err != nil {
|
if err := json.Unmarshal([]byte(propertiesJSON), props); err != nil {
|
||||||
return nil, makeSystemError(computeSystem, operation, err, nil)
|
return nil, makeSystemError(computeSystem, operation, err, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return props, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// PropertiesV2 returns the requested compute systems properties targeting a V2 schema compute system.
|
||||||
|
func (computeSystem *System) PropertiesV2(ctx context.Context, types ...hcsschema.PropertyType) (_ *hcsschema.Properties, err error) {
|
||||||
|
computeSystem.handleLock.RLock()
|
||||||
|
defer computeSystem.handleLock.RUnlock()
|
||||||
|
|
||||||
|
// Let HCS tally up the total for VM based queries instead of querying ourselves.
|
||||||
|
if computeSystem.typ != "container" {
|
||||||
|
return computeSystem.hcsPropertiesV2Query(ctx, types)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Define a starter Properties struct with the default fields returned from every
|
||||||
|
// query. Owner is only returned from Statistics but it's harmless to include.
|
||||||
|
properties := &hcsschema.Properties{
|
||||||
|
Id: computeSystem.id,
|
||||||
|
SystemType: computeSystem.typ,
|
||||||
|
RuntimeOsType: computeSystem.os,
|
||||||
|
Owner: computeSystem.owner,
|
||||||
|
}
|
||||||
|
|
||||||
|
logEntry := log.G(ctx)
|
||||||
|
// First lets try and query ourselves without reaching to HCS. If any of the queries fail
|
||||||
|
// we'll take note and fallback to querying HCS for any of the failed types.
|
||||||
|
fallbackTypes, err := computeSystem.queryInProc(ctx, properties, types)
|
||||||
|
if err == nil && len(fallbackTypes) == 0 {
|
||||||
return properties, nil
|
return properties, nil
|
||||||
|
} else if err != nil {
|
||||||
|
logEntry.WithError(fmt.Errorf("failed to query compute system properties in-proc: %w", err))
|
||||||
|
fallbackTypes = types
|
||||||
|
}
|
||||||
|
|
||||||
|
logEntry.WithFields(logrus.Fields{
|
||||||
|
logfields.ContainerID: computeSystem.id,
|
||||||
|
"propertyTypes": fallbackTypes,
|
||||||
|
}).Info("falling back to HCS for property type queries")
|
||||||
|
|
||||||
|
hcsProperties, err := computeSystem.hcsPropertiesV2Query(ctx, fallbackTypes)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
// Now add in anything that we might have successfully queried in process.
|
||||||
|
if properties.Statistics != nil {
|
||||||
|
hcsProperties.Statistics = properties.Statistics
|
||||||
|
hcsProperties.Owner = properties.Owner
|
||||||
|
}
|
||||||
|
|
||||||
|
// For future support for querying processlist in-proc as well.
|
||||||
|
if properties.ProcessList != nil {
|
||||||
|
hcsProperties.ProcessList = properties.ProcessList
|
||||||
|
}
|
||||||
|
|
||||||
|
return hcsProperties, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Pause pauses the execution of the computeSystem. This feature is not enabled in TP5.
|
// Pause pauses the execution of the computeSystem. This feature is not enabled in TP5.
|
||||||
|
1
vendor/github.com/Microsoft/hcsshim/internal/hns/hnspolicy.go
generated
vendored
1
vendor/github.com/Microsoft/hcsshim/internal/hns/hnspolicy.go
generated
vendored
@ -25,6 +25,7 @@ type NatPolicy struct {
|
|||||||
Protocol string `json:",omitempty"`
|
Protocol string `json:",omitempty"`
|
||||||
InternalPort uint16 `json:",omitempty"`
|
InternalPort uint16 `json:",omitempty"`
|
||||||
ExternalPort uint16 `json:",omitempty"`
|
ExternalPort uint16 `json:",omitempty"`
|
||||||
|
ExternalPortReserved bool `json:",omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type QosPolicy struct {
|
type QosPolicy struct {
|
||||||
|
111
vendor/github.com/Microsoft/hcsshim/internal/jobobject/iocp.go
generated
vendored
Normal file
111
vendor/github.com/Microsoft/hcsshim/internal/jobobject/iocp.go
generated
vendored
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
package jobobject
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"sync"
|
||||||
|
"unsafe"
|
||||||
|
|
||||||
|
"github.com/Microsoft/hcsshim/internal/log"
|
||||||
|
"github.com/Microsoft/hcsshim/internal/queue"
|
||||||
|
"github.com/Microsoft/hcsshim/internal/winapi"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
|
"golang.org/x/sys/windows"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
ioInitOnce sync.Once
|
||||||
|
initIOErr error
|
||||||
|
// Global iocp handle that will be re-used for every job object
|
||||||
|
ioCompletionPort windows.Handle
|
||||||
|
// Mapping of job handle to queue to place notifications in.
|
||||||
|
jobMap sync.Map
|
||||||
|
)
|
||||||
|
|
||||||
|
// MsgAllProcessesExited is a type representing a message that every process in a job has exited.
|
||||||
|
type MsgAllProcessesExited struct{}
|
||||||
|
|
||||||
|
// MsgUnimplemented represents a message that we are aware of, but that isn't implemented currently.
|
||||||
|
// This should not be treated as an error.
|
||||||
|
type MsgUnimplemented struct{}
|
||||||
|
|
||||||
|
// pollIOCP polls the io completion port forever.
|
||||||
|
func pollIOCP(ctx context.Context, iocpHandle windows.Handle) {
|
||||||
|
var (
|
||||||
|
overlapped uintptr
|
||||||
|
code uint32
|
||||||
|
key uintptr
|
||||||
|
)
|
||||||
|
|
||||||
|
for {
|
||||||
|
err := windows.GetQueuedCompletionStatus(iocpHandle, &code, &key, (**windows.Overlapped)(unsafe.Pointer(&overlapped)), windows.INFINITE)
|
||||||
|
if err != nil {
|
||||||
|
log.G(ctx).WithError(err).Error("failed to poll for job object message")
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if val, ok := jobMap.Load(key); ok {
|
||||||
|
msq, ok := val.(*queue.MessageQueue)
|
||||||
|
if !ok {
|
||||||
|
log.G(ctx).WithField("value", msq).Warn("encountered non queue type in job map")
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
notification, err := parseMessage(code, overlapped)
|
||||||
|
if err != nil {
|
||||||
|
log.G(ctx).WithFields(logrus.Fields{
|
||||||
|
"code": code,
|
||||||
|
"overlapped": overlapped,
|
||||||
|
}).Warn("failed to parse job object message")
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if err := msq.Write(notification); err == queue.ErrQueueClosed {
|
||||||
|
// Write will only return an error when the queue is closed.
|
||||||
|
// The only time a queue would ever be closed is when we call `Close` on
|
||||||
|
// the job it belongs to which also removes it from the jobMap, so something
|
||||||
|
// went wrong here. We can't return as this is reading messages for all jobs
|
||||||
|
// so just log it and move on.
|
||||||
|
log.G(ctx).WithFields(logrus.Fields{
|
||||||
|
"code": code,
|
||||||
|
"overlapped": overlapped,
|
||||||
|
}).Warn("tried to write to a closed queue")
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.G(ctx).Warn("received a message for a job not present in the mapping")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func parseMessage(code uint32, overlapped uintptr) (interface{}, error) {
|
||||||
|
// Check code and parse out relevant information related to that notification
|
||||||
|
// that we care about. For now all we handle is the message that all processes
|
||||||
|
// in the job have exited.
|
||||||
|
switch code {
|
||||||
|
case winapi.JOB_OBJECT_MSG_ACTIVE_PROCESS_ZERO:
|
||||||
|
return MsgAllProcessesExited{}, nil
|
||||||
|
// Other messages for completeness and a check to make sure that if we fall
|
||||||
|
// into the default case that this is a code we don't know how to handle.
|
||||||
|
case winapi.JOB_OBJECT_MSG_END_OF_JOB_TIME:
|
||||||
|
case winapi.JOB_OBJECT_MSG_END_OF_PROCESS_TIME:
|
||||||
|
case winapi.JOB_OBJECT_MSG_ACTIVE_PROCESS_LIMIT:
|
||||||
|
case winapi.JOB_OBJECT_MSG_NEW_PROCESS:
|
||||||
|
case winapi.JOB_OBJECT_MSG_EXIT_PROCESS:
|
||||||
|
case winapi.JOB_OBJECT_MSG_ABNORMAL_EXIT_PROCESS:
|
||||||
|
case winapi.JOB_OBJECT_MSG_PROCESS_MEMORY_LIMIT:
|
||||||
|
case winapi.JOB_OBJECT_MSG_JOB_MEMORY_LIMIT:
|
||||||
|
case winapi.JOB_OBJECT_MSG_NOTIFICATION_LIMIT:
|
||||||
|
default:
|
||||||
|
return nil, fmt.Errorf("unknown job notification type: %d", code)
|
||||||
|
}
|
||||||
|
return MsgUnimplemented{}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Assigns an IO completion port to get notified of events for the registered job
|
||||||
|
// object.
|
||||||
|
func attachIOCP(job windows.Handle, iocp windows.Handle) error {
|
||||||
|
info := winapi.JOBOBJECT_ASSOCIATE_COMPLETION_PORT{
|
||||||
|
CompletionKey: job,
|
||||||
|
CompletionPort: iocp,
|
||||||
|
}
|
||||||
|
_, err := windows.SetInformationJobObject(job, windows.JobObjectAssociateCompletionPortInformation, uintptr(unsafe.Pointer(&info)), uint32(unsafe.Sizeof(info)))
|
||||||
|
return err
|
||||||
|
}
|
499
vendor/github.com/Microsoft/hcsshim/internal/jobobject/jobobject.go
generated
vendored
Normal file
499
vendor/github.com/Microsoft/hcsshim/internal/jobobject/jobobject.go
generated
vendored
Normal file
@ -0,0 +1,499 @@
|
|||||||
|
package jobobject
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"sync"
|
||||||
|
"unsafe"
|
||||||
|
|
||||||
|
"github.com/Microsoft/hcsshim/internal/queue"
|
||||||
|
"github.com/Microsoft/hcsshim/internal/winapi"
|
||||||
|
"golang.org/x/sys/windows"
|
||||||
|
)
|
||||||
|
|
||||||
|
// This file provides higher level constructs for the win32 job object API.
|
||||||
|
// Most of the core creation and management functions are already present in "golang.org/x/sys/windows"
|
||||||
|
// (CreateJobObject, AssignProcessToJobObject, etc.) as well as most of the limit information
|
||||||
|
// structs and associated limit flags. Whatever is not present from the job object API
|
||||||
|
// in golang.org/x/sys/windows is located in /internal/winapi.
|
||||||
|
//
|
||||||
|
// https://docs.microsoft.com/en-us/windows/win32/procthread/job-objects
|
||||||
|
|
||||||
|
// JobObject is a high level wrapper around a Windows job object. Holds a handle to
|
||||||
|
// the job, a queue to receive iocp notifications about the lifecycle
|
||||||
|
// of the job and a mutex for synchronized handle access.
|
||||||
|
type JobObject struct {
|
||||||
|
handle windows.Handle
|
||||||
|
mq *queue.MessageQueue
|
||||||
|
handleLock sync.RWMutex
|
||||||
|
}
|
||||||
|
|
||||||
|
// JobLimits represents the resource constraints that can be applied to a job object.
|
||||||
|
type JobLimits struct {
|
||||||
|
CPULimit uint32
|
||||||
|
CPUWeight uint32
|
||||||
|
MemoryLimitInBytes uint64
|
||||||
|
MaxIOPS int64
|
||||||
|
MaxBandwidth int64
|
||||||
|
}
|
||||||
|
|
||||||
|
type CPURateControlType uint32
|
||||||
|
|
||||||
|
const (
|
||||||
|
WeightBased CPURateControlType = iota
|
||||||
|
RateBased
|
||||||
|
)
|
||||||
|
|
||||||
|
// Processor resource controls
|
||||||
|
const (
|
||||||
|
cpuLimitMin = 1
|
||||||
|
cpuLimitMax = 10000
|
||||||
|
cpuWeightMin = 1
|
||||||
|
cpuWeightMax = 9
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
ErrAlreadyClosed = errors.New("the handle has already been closed")
|
||||||
|
ErrNotRegistered = errors.New("job is not registered to receive notifications")
|
||||||
|
)
|
||||||
|
|
||||||
|
// Options represents the set of configurable options when making or opening a job object.
|
||||||
|
type Options struct {
|
||||||
|
// `Name` specifies the name of the job object if a named job object is desired.
|
||||||
|
Name string
|
||||||
|
// `Notifications` specifies if the job will be registered to receive notifications.
|
||||||
|
// Defaults to false.
|
||||||
|
Notifications bool
|
||||||
|
// `UseNTVariant` specifies if we should use the `Nt` variant of Open/CreateJobObject.
|
||||||
|
// Defaults to false.
|
||||||
|
UseNTVariant bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create creates a job object.
|
||||||
|
//
|
||||||
|
// If options.Name is an empty string, the job will not be assigned a name.
|
||||||
|
//
|
||||||
|
// If options.Notifications are not enabled `PollNotifications` will return immediately with error `errNotRegistered`.
|
||||||
|
//
|
||||||
|
// If `options` is nil, use default option values.
|
||||||
|
//
|
||||||
|
// Returns a JobObject structure and an error if there is one.
|
||||||
|
func Create(ctx context.Context, options *Options) (_ *JobObject, err error) {
|
||||||
|
if options == nil {
|
||||||
|
options = &Options{}
|
||||||
|
}
|
||||||
|
|
||||||
|
var jobName *winapi.UnicodeString
|
||||||
|
if options.Name != "" {
|
||||||
|
jobName, err = winapi.NewUnicodeString(options.Name)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var jobHandle windows.Handle
|
||||||
|
if options.UseNTVariant {
|
||||||
|
oa := winapi.ObjectAttributes{
|
||||||
|
Length: unsafe.Sizeof(winapi.ObjectAttributes{}),
|
||||||
|
ObjectName: jobName,
|
||||||
|
Attributes: 0,
|
||||||
|
}
|
||||||
|
status := winapi.NtCreateJobObject(&jobHandle, winapi.JOB_OBJECT_ALL_ACCESS, &oa)
|
||||||
|
if status != 0 {
|
||||||
|
return nil, winapi.RtlNtStatusToDosError(status)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
var jobNameBuf *uint16
|
||||||
|
if jobName != nil && jobName.Buffer != nil {
|
||||||
|
jobNameBuf = jobName.Buffer
|
||||||
|
}
|
||||||
|
jobHandle, err = windows.CreateJobObject(nil, jobNameBuf)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
if err != nil {
|
||||||
|
windows.Close(jobHandle)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
job := &JobObject{
|
||||||
|
handle: jobHandle,
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the IOCP we'll be using to receive messages for all jobs hasn't been
|
||||||
|
// created, create it and start polling.
|
||||||
|
if options.Notifications {
|
||||||
|
mq, err := setupNotifications(ctx, job)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
job.mq = mq
|
||||||
|
}
|
||||||
|
|
||||||
|
return job, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Open opens an existing job object with name provided in `options`. If no name is provided
|
||||||
|
// return an error since we need to know what job object to open.
|
||||||
|
//
|
||||||
|
// If options.Notifications is false `PollNotifications` will return immediately with error `errNotRegistered`.
|
||||||
|
//
|
||||||
|
// Returns a JobObject structure and an error if there is one.
|
||||||
|
func Open(ctx context.Context, options *Options) (_ *JobObject, err error) {
|
||||||
|
if options == nil || (options != nil && options.Name == "") {
|
||||||
|
return nil, errors.New("no job object name specified to open")
|
||||||
|
}
|
||||||
|
|
||||||
|
unicodeJobName, err := winapi.NewUnicodeString(options.Name)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
var jobHandle windows.Handle
|
||||||
|
if options != nil && options.UseNTVariant {
|
||||||
|
oa := winapi.ObjectAttributes{
|
||||||
|
Length: unsafe.Sizeof(winapi.ObjectAttributes{}),
|
||||||
|
ObjectName: unicodeJobName,
|
||||||
|
Attributes: 0,
|
||||||
|
}
|
||||||
|
status := winapi.NtOpenJobObject(&jobHandle, winapi.JOB_OBJECT_ALL_ACCESS, &oa)
|
||||||
|
if status != 0 {
|
||||||
|
return nil, winapi.RtlNtStatusToDosError(status)
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
jobHandle, err = winapi.OpenJobObject(winapi.JOB_OBJECT_ALL_ACCESS, false, unicodeJobName.Buffer)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
defer func() {
|
||||||
|
if err != nil {
|
||||||
|
windows.Close(jobHandle)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
|
job := &JobObject{
|
||||||
|
handle: jobHandle,
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the IOCP we'll be using to receive messages for all jobs hasn't been
|
||||||
|
// created, create it and start polling.
|
||||||
|
if options != nil && options.Notifications {
|
||||||
|
mq, err := setupNotifications(ctx, job)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
job.mq = mq
|
||||||
|
}
|
||||||
|
|
||||||
|
return job, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// helper function to setup notifications for creating/opening a job object
|
||||||
|
func setupNotifications(ctx context.Context, job *JobObject) (*queue.MessageQueue, error) {
|
||||||
|
job.handleLock.RLock()
|
||||||
|
defer job.handleLock.RUnlock()
|
||||||
|
|
||||||
|
if job.handle == 0 {
|
||||||
|
return nil, ErrAlreadyClosed
|
||||||
|
}
|
||||||
|
|
||||||
|
ioInitOnce.Do(func() {
|
||||||
|
h, err := windows.CreateIoCompletionPort(windows.InvalidHandle, 0, 0, 0xffffffff)
|
||||||
|
if err != nil {
|
||||||
|
initIOErr = err
|
||||||
|
return
|
||||||
|
}
|
||||||
|
ioCompletionPort = h
|
||||||
|
go pollIOCP(ctx, h)
|
||||||
|
})
|
||||||
|
|
||||||
|
if initIOErr != nil {
|
||||||
|
return nil, initIOErr
|
||||||
|
}
|
||||||
|
|
||||||
|
mq := queue.NewMessageQueue()
|
||||||
|
jobMap.Store(uintptr(job.handle), mq)
|
||||||
|
if err := attachIOCP(job.handle, ioCompletionPort); err != nil {
|
||||||
|
jobMap.Delete(uintptr(job.handle))
|
||||||
|
return nil, fmt.Errorf("failed to attach job to IO completion port: %w", err)
|
||||||
|
}
|
||||||
|
return mq, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// PollNotification will poll for a job object notification. This call should only be called once
|
||||||
|
// per job (ideally in a goroutine loop) and will block if there is not a notification ready.
|
||||||
|
// This call will return immediately with error `ErrNotRegistered` if the job was not registered
|
||||||
|
// to receive notifications during `Create`. Internally, messages will be queued and there
|
||||||
|
// is no worry of messages being dropped.
|
||||||
|
func (job *JobObject) PollNotification() (interface{}, error) {
|
||||||
|
if job.mq == nil {
|
||||||
|
return nil, ErrNotRegistered
|
||||||
|
}
|
||||||
|
return job.mq.ReadOrWait()
|
||||||
|
}
|
||||||
|
|
||||||
|
// UpdateProcThreadAttribute updates the passed in ProcThreadAttributeList to contain what is necessary to
|
||||||
|
// launch a process in a job at creation time. This can be used to avoid having to call Assign() after a process
|
||||||
|
// has already started running.
|
||||||
|
func (job *JobObject) UpdateProcThreadAttribute(attrList *windows.ProcThreadAttributeListContainer) error {
|
||||||
|
job.handleLock.RLock()
|
||||||
|
defer job.handleLock.RUnlock()
|
||||||
|
|
||||||
|
if job.handle == 0 {
|
||||||
|
return ErrAlreadyClosed
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := attrList.Update(
|
||||||
|
winapi.PROC_THREAD_ATTRIBUTE_JOB_LIST,
|
||||||
|
unsafe.Pointer(&job.handle),
|
||||||
|
unsafe.Sizeof(job.handle),
|
||||||
|
); err != nil {
|
||||||
|
return fmt.Errorf("failed to update proc thread attributes for job object: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close closes the job object handle.
|
||||||
|
func (job *JobObject) Close() error {
|
||||||
|
job.handleLock.Lock()
|
||||||
|
defer job.handleLock.Unlock()
|
||||||
|
|
||||||
|
if job.handle == 0 {
|
||||||
|
return ErrAlreadyClosed
|
||||||
|
}
|
||||||
|
|
||||||
|
if err := windows.Close(job.handle); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
if job.mq != nil {
|
||||||
|
job.mq.Close()
|
||||||
|
}
|
||||||
|
// Handles now invalid so if the map entry to receive notifications for this job still
|
||||||
|
// exists remove it so we can stop receiving notifications.
|
||||||
|
if _, ok := jobMap.Load(uintptr(job.handle)); ok {
|
||||||
|
jobMap.Delete(uintptr(job.handle))
|
||||||
|
}
|
||||||
|
|
||||||
|
job.handle = 0
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Assign assigns a process to the job object.
|
||||||
|
func (job *JobObject) Assign(pid uint32) error {
|
||||||
|
job.handleLock.RLock()
|
||||||
|
defer job.handleLock.RUnlock()
|
||||||
|
|
||||||
|
if job.handle == 0 {
|
||||||
|
return ErrAlreadyClosed
|
||||||
|
}
|
||||||
|
|
||||||
|
if pid == 0 {
|
||||||
|
return errors.New("invalid pid: 0")
|
||||||
|
}
|
||||||
|
hProc, err := windows.OpenProcess(winapi.PROCESS_ALL_ACCESS, true, pid)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
defer windows.Close(hProc)
|
||||||
|
return windows.AssignProcessToJobObject(job.handle, hProc)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Terminate terminates the job, essentially calls TerminateProcess on every process in the
|
||||||
|
// job.
|
||||||
|
func (job *JobObject) Terminate(exitCode uint32) error {
|
||||||
|
job.handleLock.RLock()
|
||||||
|
defer job.handleLock.RUnlock()
|
||||||
|
if job.handle == 0 {
|
||||||
|
return ErrAlreadyClosed
|
||||||
|
}
|
||||||
|
return windows.TerminateJobObject(job.handle, exitCode)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pids returns all of the process IDs in the job object.
|
||||||
|
func (job *JobObject) Pids() ([]uint32, error) {
|
||||||
|
job.handleLock.RLock()
|
||||||
|
defer job.handleLock.RUnlock()
|
||||||
|
|
||||||
|
if job.handle == 0 {
|
||||||
|
return nil, ErrAlreadyClosed
|
||||||
|
}
|
||||||
|
|
||||||
|
info := winapi.JOBOBJECT_BASIC_PROCESS_ID_LIST{}
|
||||||
|
err := winapi.QueryInformationJobObject(
|
||||||
|
job.handle,
|
||||||
|
winapi.JobObjectBasicProcessIdList,
|
||||||
|
uintptr(unsafe.Pointer(&info)),
|
||||||
|
uint32(unsafe.Sizeof(info)),
|
||||||
|
nil,
|
||||||
|
)
|
||||||
|
|
||||||
|
// This is either the case where there is only one process or no processes in
|
||||||
|
// the job. Any other case will result in ERROR_MORE_DATA. Check if info.NumberOfProcessIdsInList
|
||||||
|
// is 1 and just return this, otherwise return an empty slice.
|
||||||
|
if err == nil {
|
||||||
|
if info.NumberOfProcessIdsInList == 1 {
|
||||||
|
return []uint32{uint32(info.ProcessIdList[0])}, nil
|
||||||
|
}
|
||||||
|
// Return empty slice instead of nil to play well with the caller of this.
|
||||||
|
// Do not return an error if no processes are running inside the job
|
||||||
|
return []uint32{}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != winapi.ERROR_MORE_DATA {
|
||||||
|
return nil, fmt.Errorf("failed initial query for PIDs in job object: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
jobBasicProcessIDListSize := unsafe.Sizeof(info) + (unsafe.Sizeof(info.ProcessIdList[0]) * uintptr(info.NumberOfAssignedProcesses-1))
|
||||||
|
buf := make([]byte, jobBasicProcessIDListSize)
|
||||||
|
if err = winapi.QueryInformationJobObject(
|
||||||
|
job.handle,
|
||||||
|
winapi.JobObjectBasicProcessIdList,
|
||||||
|
uintptr(unsafe.Pointer(&buf[0])),
|
||||||
|
uint32(len(buf)),
|
||||||
|
nil,
|
||||||
|
); err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to query for PIDs in job object: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
bufInfo := (*winapi.JOBOBJECT_BASIC_PROCESS_ID_LIST)(unsafe.Pointer(&buf[0]))
|
||||||
|
pids := make([]uint32, bufInfo.NumberOfProcessIdsInList)
|
||||||
|
for i, bufPid := range bufInfo.AllPids() {
|
||||||
|
pids[i] = uint32(bufPid)
|
||||||
|
}
|
||||||
|
return pids, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryMemoryStats gets the memory stats for the job object.
|
||||||
|
func (job *JobObject) QueryMemoryStats() (*winapi.JOBOBJECT_MEMORY_USAGE_INFORMATION, error) {
|
||||||
|
job.handleLock.RLock()
|
||||||
|
defer job.handleLock.RUnlock()
|
||||||
|
|
||||||
|
if job.handle == 0 {
|
||||||
|
return nil, ErrAlreadyClosed
|
||||||
|
}
|
||||||
|
|
||||||
|
info := winapi.JOBOBJECT_MEMORY_USAGE_INFORMATION{}
|
||||||
|
if err := winapi.QueryInformationJobObject(
|
||||||
|
job.handle,
|
||||||
|
winapi.JobObjectMemoryUsageInformation,
|
||||||
|
uintptr(unsafe.Pointer(&info)),
|
||||||
|
uint32(unsafe.Sizeof(info)),
|
||||||
|
nil,
|
||||||
|
); err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to query for job object memory stats: %w", err)
|
||||||
|
}
|
||||||
|
return &info, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryProcessorStats gets the processor stats for the job object.
|
||||||
|
func (job *JobObject) QueryProcessorStats() (*winapi.JOBOBJECT_BASIC_ACCOUNTING_INFORMATION, error) {
|
||||||
|
job.handleLock.RLock()
|
||||||
|
defer job.handleLock.RUnlock()
|
||||||
|
|
||||||
|
if job.handle == 0 {
|
||||||
|
return nil, ErrAlreadyClosed
|
||||||
|
}
|
||||||
|
|
||||||
|
info := winapi.JOBOBJECT_BASIC_ACCOUNTING_INFORMATION{}
|
||||||
|
if err := winapi.QueryInformationJobObject(
|
||||||
|
job.handle,
|
||||||
|
winapi.JobObjectBasicAccountingInformation,
|
||||||
|
uintptr(unsafe.Pointer(&info)),
|
||||||
|
uint32(unsafe.Sizeof(info)),
|
||||||
|
nil,
|
||||||
|
); err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to query for job object process stats: %w", err)
|
||||||
|
}
|
||||||
|
return &info, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryStorageStats gets the storage (I/O) stats for the job object.
|
||||||
|
func (job *JobObject) QueryStorageStats() (*winapi.JOBOBJECT_IO_ATTRIBUTION_INFORMATION, error) {
|
||||||
|
job.handleLock.RLock()
|
||||||
|
defer job.handleLock.RUnlock()
|
||||||
|
|
||||||
|
if job.handle == 0 {
|
||||||
|
return nil, ErrAlreadyClosed
|
||||||
|
}
|
||||||
|
|
||||||
|
info := winapi.JOBOBJECT_IO_ATTRIBUTION_INFORMATION{
|
||||||
|
ControlFlags: winapi.JOBOBJECT_IO_ATTRIBUTION_CONTROL_ENABLE,
|
||||||
|
}
|
||||||
|
if err := winapi.QueryInformationJobObject(
|
||||||
|
job.handle,
|
||||||
|
winapi.JobObjectIoAttribution,
|
||||||
|
uintptr(unsafe.Pointer(&info)),
|
||||||
|
uint32(unsafe.Sizeof(info)),
|
||||||
|
nil,
|
||||||
|
); err != nil {
|
||||||
|
return nil, fmt.Errorf("failed to query for job object storage stats: %w", err)
|
||||||
|
}
|
||||||
|
return &info, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueryPrivateWorkingSet returns the private working set size for the job. This is calculated by adding up the
|
||||||
|
// private working set for every process running in the job.
|
||||||
|
func (job *JobObject) QueryPrivateWorkingSet() (uint64, error) {
|
||||||
|
pids, err := job.Pids()
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
openAndQueryWorkingSet := func(pid uint32) (uint64, error) {
|
||||||
|
h, err := windows.OpenProcess(windows.PROCESS_QUERY_LIMITED_INFORMATION, false, pid)
|
||||||
|
if err != nil {
|
||||||
|
// Continue to the next if OpenProcess doesn't return a valid handle (fails). Handles a
|
||||||
|
// case where one of the pids in the job exited before we open.
|
||||||
|
return 0, nil
|
||||||
|
}
|
||||||
|
defer func() {
|
||||||
|
_ = windows.Close(h)
|
||||||
|
}()
|
||||||
|
// Check if the process is actually running in the job still. There's a small chance
|
||||||
|
// that the process could have exited and had its pid re-used between grabbing the pids
|
||||||
|
// in the job and opening the handle to it above.
|
||||||
|
var inJob int32
|
||||||
|
if err := winapi.IsProcessInJob(h, job.handle, &inJob); err != nil {
|
||||||
|
// This shouldn't fail unless we have incorrect access rights which we control
|
||||||
|
// here so probably best to error out if this failed.
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
// Don't report stats for this process as it's not running in the job. This shouldn't be
|
||||||
|
// an error condition though.
|
||||||
|
if inJob == 0 {
|
||||||
|
return 0, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var vmCounters winapi.VM_COUNTERS_EX2
|
||||||
|
status := winapi.NtQueryInformationProcess(
|
||||||
|
h,
|
||||||
|
winapi.ProcessVmCounters,
|
||||||
|
uintptr(unsafe.Pointer(&vmCounters)),
|
||||||
|
uint32(unsafe.Sizeof(vmCounters)),
|
||||||
|
nil,
|
||||||
|
)
|
||||||
|
if !winapi.NTSuccess(status) {
|
||||||
|
return 0, fmt.Errorf("failed to query information for process: %w", winapi.RtlNtStatusToDosError(status))
|
||||||
|
}
|
||||||
|
return uint64(vmCounters.PrivateWorkingSetSize), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
var jobWorkingSetSize uint64
|
||||||
|
for _, pid := range pids {
|
||||||
|
workingSet, err := openAndQueryWorkingSet(pid)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
jobWorkingSetSize += workingSet
|
||||||
|
}
|
||||||
|
|
||||||
|
return jobWorkingSetSize, nil
|
||||||
|
}
|
315
vendor/github.com/Microsoft/hcsshim/internal/jobobject/limits.go
generated
vendored
Normal file
315
vendor/github.com/Microsoft/hcsshim/internal/jobobject/limits.go
generated
vendored
Normal file
@ -0,0 +1,315 @@
|
|||||||
|
package jobobject
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"fmt"
|
||||||
|
"unsafe"
|
||||||
|
|
||||||
|
"github.com/Microsoft/hcsshim/internal/winapi"
|
||||||
|
"golang.org/x/sys/windows"
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
memoryLimitMax uint64 = 0xffffffffffffffff
|
||||||
|
)
|
||||||
|
|
||||||
|
func isFlagSet(flag, controlFlags uint32) bool {
|
||||||
|
return (flag & controlFlags) == flag
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetResourceLimits sets resource limits on the job object (cpu, memory, storage).
|
||||||
|
func (job *JobObject) SetResourceLimits(limits *JobLimits) error {
|
||||||
|
// Go through and check what limits were specified and apply them to the job.
|
||||||
|
if limits.MemoryLimitInBytes != 0 {
|
||||||
|
if err := job.SetMemoryLimit(limits.MemoryLimitInBytes); err != nil {
|
||||||
|
return fmt.Errorf("failed to set job object memory limit: %w", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if limits.CPULimit != 0 {
|
||||||
|
if err := job.SetCPULimit(RateBased, limits.CPULimit); err != nil {
|
||||||
|
return fmt.Errorf("failed to set job object cpu limit: %w", err)
|
||||||
|
}
|
||||||
|
} else if limits.CPUWeight != 0 {
|
||||||
|
if err := job.SetCPULimit(WeightBased, limits.CPUWeight); err != nil {
|
||||||
|
return fmt.Errorf("failed to set job object cpu limit: %w", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if limits.MaxBandwidth != 0 || limits.MaxIOPS != 0 {
|
||||||
|
if err := job.SetIOLimit(limits.MaxBandwidth, limits.MaxIOPS); err != nil {
|
||||||
|
return fmt.Errorf("failed to set io limit on job object: %w", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetTerminateOnLastHandleClose sets the job object flag that specifies that the job should terminate
|
||||||
|
// all processes in the job on the last open handle being closed.
|
||||||
|
func (job *JobObject) SetTerminateOnLastHandleClose() error {
|
||||||
|
info, err := job.getExtendedInformation()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
info.BasicLimitInformation.LimitFlags |= windows.JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE
|
||||||
|
return job.setExtendedInformation(info)
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetMemoryLimit sets the memory limit of the job object based on the given `memoryLimitInBytes`.
|
||||||
|
func (job *JobObject) SetMemoryLimit(memoryLimitInBytes uint64) error {
|
||||||
|
if memoryLimitInBytes >= memoryLimitMax {
|
||||||
|
return errors.New("memory limit specified exceeds the max size")
|
||||||
|
}
|
||||||
|
|
||||||
|
info, err := job.getExtendedInformation()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
info.JobMemoryLimit = uintptr(memoryLimitInBytes)
|
||||||
|
info.BasicLimitInformation.LimitFlags |= windows.JOB_OBJECT_LIMIT_JOB_MEMORY
|
||||||
|
return job.setExtendedInformation(info)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetMemoryLimit gets the memory limit in bytes of the job object.
|
||||||
|
func (job *JobObject) GetMemoryLimit() (uint64, error) {
|
||||||
|
info, err := job.getExtendedInformation()
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return uint64(info.JobMemoryLimit), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetCPULimit sets the CPU limit depending on the specified `CPURateControlType` to
|
||||||
|
// `rateControlValue` for the job object.
|
||||||
|
func (job *JobObject) SetCPULimit(rateControlType CPURateControlType, rateControlValue uint32) error {
|
||||||
|
cpuInfo, err := job.getCPURateControlInformation()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
switch rateControlType {
|
||||||
|
case WeightBased:
|
||||||
|
if rateControlValue < cpuWeightMin || rateControlValue > cpuWeightMax {
|
||||||
|
return fmt.Errorf("processor weight value of `%d` is invalid", rateControlValue)
|
||||||
|
}
|
||||||
|
cpuInfo.ControlFlags |= winapi.JOB_OBJECT_CPU_RATE_CONTROL_ENABLE | winapi.JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED
|
||||||
|
cpuInfo.Value = rateControlValue
|
||||||
|
case RateBased:
|
||||||
|
if rateControlValue < cpuLimitMin || rateControlValue > cpuLimitMax {
|
||||||
|
return fmt.Errorf("processor rate of `%d` is invalid", rateControlValue)
|
||||||
|
}
|
||||||
|
cpuInfo.ControlFlags |= winapi.JOB_OBJECT_CPU_RATE_CONTROL_ENABLE | winapi.JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP
|
||||||
|
cpuInfo.Value = rateControlValue
|
||||||
|
default:
|
||||||
|
return errors.New("invalid job object cpu rate control type")
|
||||||
|
}
|
||||||
|
return job.setCPURateControlInfo(cpuInfo)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetCPULimit gets the cpu limits for the job object.
|
||||||
|
// `rateControlType` is used to indicate what type of cpu limit to query for.
|
||||||
|
func (job *JobObject) GetCPULimit(rateControlType CPURateControlType) (uint32, error) {
|
||||||
|
info, err := job.getCPURateControlInformation()
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if !isFlagSet(winapi.JOB_OBJECT_CPU_RATE_CONTROL_ENABLE, info.ControlFlags) {
|
||||||
|
return 0, errors.New("the job does not have cpu rate control enabled")
|
||||||
|
}
|
||||||
|
|
||||||
|
switch rateControlType {
|
||||||
|
case WeightBased:
|
||||||
|
if !isFlagSet(winapi.JOB_OBJECT_CPU_RATE_CONTROL_WEIGHT_BASED, info.ControlFlags) {
|
||||||
|
return 0, errors.New("cannot get cpu weight for job object without cpu weight option set")
|
||||||
|
}
|
||||||
|
case RateBased:
|
||||||
|
if !isFlagSet(winapi.JOB_OBJECT_CPU_RATE_CONTROL_HARD_CAP, info.ControlFlags) {
|
||||||
|
return 0, errors.New("cannot get cpu rate hard cap for job object without cpu rate hard cap option set")
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
return 0, errors.New("invalid job object cpu rate control type")
|
||||||
|
}
|
||||||
|
return info.Value, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetCPUAffinity sets the processor affinity for the job object.
|
||||||
|
// The affinity is passed in as a bitmask.
|
||||||
|
func (job *JobObject) SetCPUAffinity(affinityBitMask uint64) error {
|
||||||
|
info, err := job.getExtendedInformation()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
info.BasicLimitInformation.LimitFlags |= uint32(windows.JOB_OBJECT_LIMIT_AFFINITY)
|
||||||
|
info.BasicLimitInformation.Affinity = uintptr(affinityBitMask)
|
||||||
|
return job.setExtendedInformation(info)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetCPUAffinity gets the processor affinity for the job object.
|
||||||
|
// The returned affinity is a bitmask.
|
||||||
|
func (job *JobObject) GetCPUAffinity() (uint64, error) {
|
||||||
|
info, err := job.getExtendedInformation()
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return uint64(info.BasicLimitInformation.Affinity), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// SetIOLimit sets the IO limits specified on the job object.
|
||||||
|
func (job *JobObject) SetIOLimit(maxBandwidth, maxIOPS int64) error {
|
||||||
|
ioInfo, err := job.getIOLimit()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
ioInfo.ControlFlags |= winapi.JOB_OBJECT_IO_RATE_CONTROL_ENABLE
|
||||||
|
if maxBandwidth != 0 {
|
||||||
|
ioInfo.MaxBandwidth = maxBandwidth
|
||||||
|
}
|
||||||
|
if maxIOPS != 0 {
|
||||||
|
ioInfo.MaxIops = maxIOPS
|
||||||
|
}
|
||||||
|
return job.setIORateControlInfo(ioInfo)
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetIOMaxBandwidthLimit gets the max bandwidth for the job object.
|
||||||
|
func (job *JobObject) GetIOMaxBandwidthLimit() (int64, error) {
|
||||||
|
info, err := job.getIOLimit()
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return info.MaxBandwidth, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetIOMaxIopsLimit gets the max iops for the job object.
|
||||||
|
func (job *JobObject) GetIOMaxIopsLimit() (int64, error) {
|
||||||
|
info, err := job.getIOLimit()
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
return info.MaxIops, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Helper function for getting a job object's extended information.
|
||||||
|
func (job *JobObject) getExtendedInformation() (*windows.JOBOBJECT_EXTENDED_LIMIT_INFORMATION, error) {
|
||||||
|
job.handleLock.RLock()
|
||||||
|
defer job.handleLock.RUnlock()
|
||||||
|
|
||||||
|
if job.handle == 0 {
|
||||||
|
return nil, ErrAlreadyClosed
|
||||||
|
}
|
||||||
|
|
||||||
|
info := windows.JOBOBJECT_EXTENDED_LIMIT_INFORMATION{}
|
||||||
|
if err := winapi.QueryInformationJobObject(
|
||||||
|
job.handle,
|
||||||
|
windows.JobObjectExtendedLimitInformation,
|
||||||
|
uintptr(unsafe.Pointer(&info)),
|
||||||
|
uint32(unsafe.Sizeof(info)),
|
||||||
|
nil,
|
||||||
|
); err != nil {
|
||||||
|
return nil, fmt.Errorf("query %v returned error: %w", info, err)
|
||||||
|
}
|
||||||
|
return &info, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Helper function for getting a job object's CPU rate control information.
|
||||||
|
func (job *JobObject) getCPURateControlInformation() (*winapi.JOBOBJECT_CPU_RATE_CONTROL_INFORMATION, error) {
|
||||||
|
job.handleLock.RLock()
|
||||||
|
defer job.handleLock.RUnlock()
|
||||||
|
|
||||||
|
if job.handle == 0 {
|
||||||
|
return nil, ErrAlreadyClosed
|
||||||
|
}
|
||||||
|
|
||||||
|
info := winapi.JOBOBJECT_CPU_RATE_CONTROL_INFORMATION{}
|
||||||
|
if err := winapi.QueryInformationJobObject(
|
||||||
|
job.handle,
|
||||||
|
windows.JobObjectCpuRateControlInformation,
|
||||||
|
uintptr(unsafe.Pointer(&info)),
|
||||||
|
uint32(unsafe.Sizeof(info)),
|
||||||
|
nil,
|
||||||
|
); err != nil {
|
||||||
|
return nil, fmt.Errorf("query %v returned error: %w", info, err)
|
||||||
|
}
|
||||||
|
return &info, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Helper function for setting a job object's extended information.
|
||||||
|
func (job *JobObject) setExtendedInformation(info *windows.JOBOBJECT_EXTENDED_LIMIT_INFORMATION) error {
|
||||||
|
job.handleLock.RLock()
|
||||||
|
defer job.handleLock.RUnlock()
|
||||||
|
|
||||||
|
if job.handle == 0 {
|
||||||
|
return ErrAlreadyClosed
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := windows.SetInformationJobObject(
|
||||||
|
job.handle,
|
||||||
|
windows.JobObjectExtendedLimitInformation,
|
||||||
|
uintptr(unsafe.Pointer(info)),
|
||||||
|
uint32(unsafe.Sizeof(*info)),
|
||||||
|
); err != nil {
|
||||||
|
return fmt.Errorf("failed to set Extended info %v on job object: %w", info, err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Helper function for querying job handle for IO limit information.
|
||||||
|
func (job *JobObject) getIOLimit() (*winapi.JOBOBJECT_IO_RATE_CONTROL_INFORMATION, error) {
|
||||||
|
job.handleLock.RLock()
|
||||||
|
defer job.handleLock.RUnlock()
|
||||||
|
|
||||||
|
if job.handle == 0 {
|
||||||
|
return nil, ErrAlreadyClosed
|
||||||
|
}
|
||||||
|
|
||||||
|
ioInfo := &winapi.JOBOBJECT_IO_RATE_CONTROL_INFORMATION{}
|
||||||
|
var blockCount uint32 = 1
|
||||||
|
|
||||||
|
if _, err := winapi.QueryIoRateControlInformationJobObject(
|
||||||
|
job.handle,
|
||||||
|
nil,
|
||||||
|
&ioInfo,
|
||||||
|
&blockCount,
|
||||||
|
); err != nil {
|
||||||
|
return nil, fmt.Errorf("query %v returned error: %w", ioInfo, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if !isFlagSet(winapi.JOB_OBJECT_IO_RATE_CONTROL_ENABLE, ioInfo.ControlFlags) {
|
||||||
|
return nil, fmt.Errorf("query %v cannot get IO limits for job object without IO rate control option set", ioInfo)
|
||||||
|
}
|
||||||
|
return ioInfo, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Helper function for setting a job object's IO rate control information.
|
||||||
|
func (job *JobObject) setIORateControlInfo(ioInfo *winapi.JOBOBJECT_IO_RATE_CONTROL_INFORMATION) error {
|
||||||
|
job.handleLock.RLock()
|
||||||
|
defer job.handleLock.RUnlock()
|
||||||
|
|
||||||
|
if job.handle == 0 {
|
||||||
|
return ErrAlreadyClosed
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := winapi.SetIoRateControlInformationJobObject(job.handle, ioInfo); err != nil {
|
||||||
|
return fmt.Errorf("failed to set IO limit info %v on job object: %w", ioInfo, err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Helper function for setting a job object's CPU rate control information.
|
||||||
|
func (job *JobObject) setCPURateControlInfo(cpuInfo *winapi.JOBOBJECT_CPU_RATE_CONTROL_INFORMATION) error {
|
||||||
|
job.handleLock.RLock()
|
||||||
|
defer job.handleLock.RUnlock()
|
||||||
|
|
||||||
|
if job.handle == 0 {
|
||||||
|
return ErrAlreadyClosed
|
||||||
|
}
|
||||||
|
if _, err := windows.SetInformationJobObject(
|
||||||
|
job.handle,
|
||||||
|
windows.JobObjectCpuRateControlInformation,
|
||||||
|
uintptr(unsafe.Pointer(cpuInfo)),
|
||||||
|
uint32(unsafe.Sizeof(cpuInfo)),
|
||||||
|
); err != nil {
|
||||||
|
return fmt.Errorf("failed to set cpu limit info %v on job object: %w", cpuInfo, err)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
111
vendor/github.com/Microsoft/hcsshim/internal/queue/mq.go
generated
vendored
Normal file
111
vendor/github.com/Microsoft/hcsshim/internal/queue/mq.go
generated
vendored
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
package queue
|
||||||
|
|
||||||
|
import (
|
||||||
|
"errors"
|
||||||
|
"sync"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
ErrQueueClosed = errors.New("the queue is closed for reading and writing")
|
||||||
|
ErrQueueEmpty = errors.New("the queue is empty")
|
||||||
|
)
|
||||||
|
|
||||||
|
// MessageQueue represents a threadsafe message queue to be used to retrieve or
|
||||||
|
// write messages to.
|
||||||
|
type MessageQueue struct {
|
||||||
|
m *sync.RWMutex
|
||||||
|
c *sync.Cond
|
||||||
|
messages []interface{}
|
||||||
|
closed bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// NewMessageQueue returns a new MessageQueue.
|
||||||
|
func NewMessageQueue() *MessageQueue {
|
||||||
|
m := &sync.RWMutex{}
|
||||||
|
return &MessageQueue{
|
||||||
|
m: m,
|
||||||
|
c: sync.NewCond(m),
|
||||||
|
messages: []interface{}{},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write writes `msg` to the queue.
|
||||||
|
func (mq *MessageQueue) Write(msg interface{}) error {
|
||||||
|
mq.m.Lock()
|
||||||
|
defer mq.m.Unlock()
|
||||||
|
|
||||||
|
if mq.closed {
|
||||||
|
return ErrQueueClosed
|
||||||
|
}
|
||||||
|
mq.messages = append(mq.messages, msg)
|
||||||
|
// Signal a waiter that there is now a value available in the queue.
|
||||||
|
mq.c.Signal()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// Read will read a value from the queue if available, otherwise return an error.
|
||||||
|
func (mq *MessageQueue) Read() (interface{}, error) {
|
||||||
|
mq.m.Lock()
|
||||||
|
defer mq.m.Unlock()
|
||||||
|
if mq.closed {
|
||||||
|
return nil, ErrQueueClosed
|
||||||
|
}
|
||||||
|
if mq.isEmpty() {
|
||||||
|
return nil, ErrQueueEmpty
|
||||||
|
}
|
||||||
|
val := mq.messages[0]
|
||||||
|
mq.messages[0] = nil
|
||||||
|
mq.messages = mq.messages[1:]
|
||||||
|
return val, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ReadOrWait will read a value from the queue if available, else it will wait for a
|
||||||
|
// value to become available. This will block forever if nothing gets written or until
|
||||||
|
// the queue gets closed.
|
||||||
|
func (mq *MessageQueue) ReadOrWait() (interface{}, error) {
|
||||||
|
mq.m.Lock()
|
||||||
|
if mq.closed {
|
||||||
|
mq.m.Unlock()
|
||||||
|
return nil, ErrQueueClosed
|
||||||
|
}
|
||||||
|
if mq.isEmpty() {
|
||||||
|
for !mq.closed && mq.isEmpty() {
|
||||||
|
mq.c.Wait()
|
||||||
|
}
|
||||||
|
mq.m.Unlock()
|
||||||
|
return mq.Read()
|
||||||
|
}
|
||||||
|
val := mq.messages[0]
|
||||||
|
mq.messages[0] = nil
|
||||||
|
mq.messages = mq.messages[1:]
|
||||||
|
mq.m.Unlock()
|
||||||
|
return val, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// IsEmpty returns if the queue is empty
|
||||||
|
func (mq *MessageQueue) IsEmpty() bool {
|
||||||
|
mq.m.RLock()
|
||||||
|
defer mq.m.RUnlock()
|
||||||
|
return len(mq.messages) == 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Nonexported empty check that doesn't lock so we can call this in Read and Write.
|
||||||
|
func (mq *MessageQueue) isEmpty() bool {
|
||||||
|
return len(mq.messages) == 0
|
||||||
|
}
|
||||||
|
|
||||||
|
// Close closes the queue for future writes or reads. Any attempts to read or write from the
|
||||||
|
// queue after close will return ErrQueueClosed. This is safe to call multiple times.
|
||||||
|
func (mq *MessageQueue) Close() {
|
||||||
|
mq.m.Lock()
|
||||||
|
defer mq.m.Unlock()
|
||||||
|
// Already closed
|
||||||
|
if mq.closed {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
mq.messages = nil
|
||||||
|
mq.closed = true
|
||||||
|
// If there's anybody currently waiting on a value from ReadOrWait, we need to
|
||||||
|
// broadcast so the read(s) can return ErrQueueClosed.
|
||||||
|
mq.c.Broadcast()
|
||||||
|
}
|
3
vendor/github.com/Microsoft/hcsshim/internal/winapi/iocp.go
generated
vendored
3
vendor/github.com/Microsoft/hcsshim/internal/winapi/iocp.go
generated
vendored
@ -1,3 +0,0 @@
|
|||||||
package winapi
|
|
||||||
|
|
||||||
//sys GetQueuedCompletionStatus(cphandle windows.Handle, qty *uint32, key *uintptr, overlapped **windows.Overlapped, timeout uint32) (err error)
|
|
9
vendor/github.com/Microsoft/hcsshim/internal/winapi/jobobject.go
generated
vendored
9
vendor/github.com/Microsoft/hcsshim/internal/winapi/jobobject.go
generated
vendored
@ -24,7 +24,10 @@ const (
|
|||||||
// Access rights for creating or opening job objects.
|
// Access rights for creating or opening job objects.
|
||||||
//
|
//
|
||||||
// https://docs.microsoft.com/en-us/windows/win32/procthread/job-object-security-and-access-rights
|
// https://docs.microsoft.com/en-us/windows/win32/procthread/job-object-security-and-access-rights
|
||||||
const JOB_OBJECT_ALL_ACCESS = 0x1F001F
|
const (
|
||||||
|
JOB_OBJECT_QUERY = 0x0004
|
||||||
|
JOB_OBJECT_ALL_ACCESS = 0x1F001F
|
||||||
|
)
|
||||||
|
|
||||||
// IO limit flags
|
// IO limit flags
|
||||||
//
|
//
|
||||||
@ -93,7 +96,7 @@ type JOBOBJECT_BASIC_PROCESS_ID_LIST struct {
|
|||||||
|
|
||||||
// AllPids returns all the process Ids in the job object.
|
// AllPids returns all the process Ids in the job object.
|
||||||
func (p *JOBOBJECT_BASIC_PROCESS_ID_LIST) AllPids() []uintptr {
|
func (p *JOBOBJECT_BASIC_PROCESS_ID_LIST) AllPids() []uintptr {
|
||||||
return (*[(1 << 27) - 1]uintptr)(unsafe.Pointer(&p.ProcessIdList[0]))[:p.NumberOfProcessIdsInList]
|
return (*[(1 << 27) - 1]uintptr)(unsafe.Pointer(&p.ProcessIdList[0]))[:p.NumberOfProcessIdsInList:p.NumberOfProcessIdsInList]
|
||||||
}
|
}
|
||||||
|
|
||||||
// https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-jobobject_basic_accounting_information
|
// https://docs.microsoft.com/en-us/windows/win32/api/winnt/ns-winnt-jobobject_basic_accounting_information
|
||||||
@ -162,7 +165,7 @@ type JOBOBJECT_ASSOCIATE_COMPLETION_PORT struct {
|
|||||||
// PBOOL Result
|
// PBOOL Result
|
||||||
// );
|
// );
|
||||||
//
|
//
|
||||||
//sys IsProcessInJob(procHandle windows.Handle, jobHandle windows.Handle, result *bool) (err error) = kernel32.IsProcessInJob
|
//sys IsProcessInJob(procHandle windows.Handle, jobHandle windows.Handle, result *int32) (err error) = kernel32.IsProcessInJob
|
||||||
|
|
||||||
// BOOL QueryInformationJobObject(
|
// BOOL QueryInformationJobObject(
|
||||||
// HANDLE hJob,
|
// HANDLE hJob,
|
||||||
|
57
vendor/github.com/Microsoft/hcsshim/internal/winapi/process.go
generated
vendored
57
vendor/github.com/Microsoft/hcsshim/internal/winapi/process.go
generated
vendored
@ -6,3 +6,60 @@ const (
|
|||||||
PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE = 0x20016
|
PROC_THREAD_ATTRIBUTE_PSEUDOCONSOLE = 0x20016
|
||||||
PROC_THREAD_ATTRIBUTE_JOB_LIST = 0x2000D
|
PROC_THREAD_ATTRIBUTE_JOB_LIST = 0x2000D
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// ProcessVmCounters corresponds to the _VM_COUNTERS_EX and _VM_COUNTERS_EX2 structures.
|
||||||
|
const ProcessVmCounters = 3
|
||||||
|
|
||||||
|
// __kernel_entry NTSTATUS NtQueryInformationProcess(
|
||||||
|
// [in] HANDLE ProcessHandle,
|
||||||
|
// [in] PROCESSINFOCLASS ProcessInformationClass,
|
||||||
|
// [out] PVOID ProcessInformation,
|
||||||
|
// [in] ULONG ProcessInformationLength,
|
||||||
|
// [out, optional] PULONG ReturnLength
|
||||||
|
// );
|
||||||
|
//
|
||||||
|
//sys NtQueryInformationProcess(processHandle windows.Handle, processInfoClass uint32, processInfo uintptr, processInfoLength uint32, returnLength *uint32) (status uint32) = ntdll.NtQueryInformationProcess
|
||||||
|
|
||||||
|
// typedef struct _VM_COUNTERS_EX
|
||||||
|
// {
|
||||||
|
// SIZE_T PeakVirtualSize;
|
||||||
|
// SIZE_T VirtualSize;
|
||||||
|
// ULONG PageFaultCount;
|
||||||
|
// SIZE_T PeakWorkingSetSize;
|
||||||
|
// SIZE_T WorkingSetSize;
|
||||||
|
// SIZE_T QuotaPeakPagedPoolUsage;
|
||||||
|
// SIZE_T QuotaPagedPoolUsage;
|
||||||
|
// SIZE_T QuotaPeakNonPagedPoolUsage;
|
||||||
|
// SIZE_T QuotaNonPagedPoolUsage;
|
||||||
|
// SIZE_T PagefileUsage;
|
||||||
|
// SIZE_T PeakPagefileUsage;
|
||||||
|
// SIZE_T PrivateUsage;
|
||||||
|
// } VM_COUNTERS_EX, *PVM_COUNTERS_EX;
|
||||||
|
//
|
||||||
|
type VM_COUNTERS_EX struct {
|
||||||
|
PeakVirtualSize uintptr
|
||||||
|
VirtualSize uintptr
|
||||||
|
PageFaultCount uint32
|
||||||
|
PeakWorkingSetSize uintptr
|
||||||
|
WorkingSetSize uintptr
|
||||||
|
QuotaPeakPagedPoolUsage uintptr
|
||||||
|
QuotaPagedPoolUsage uintptr
|
||||||
|
QuotaPeakNonPagedPoolUsage uintptr
|
||||||
|
QuotaNonPagedPoolUsage uintptr
|
||||||
|
PagefileUsage uintptr
|
||||||
|
PeakPagefileUsage uintptr
|
||||||
|
PrivateUsage uintptr
|
||||||
|
}
|
||||||
|
|
||||||
|
// typedef struct _VM_COUNTERS_EX2
|
||||||
|
// {
|
||||||
|
// VM_COUNTERS_EX CountersEx;
|
||||||
|
// SIZE_T PrivateWorkingSetSize;
|
||||||
|
// SIZE_T SharedCommitUsage;
|
||||||
|
// } VM_COUNTERS_EX2, *PVM_COUNTERS_EX2;
|
||||||
|
//
|
||||||
|
type VM_COUNTERS_EX2 struct {
|
||||||
|
CountersEx VM_COUNTERS_EX
|
||||||
|
PrivateWorkingSetSize uintptr
|
||||||
|
SharedCommitUsage uintptr
|
||||||
|
}
|
||||||
|
2
vendor/github.com/Microsoft/hcsshim/internal/winapi/winapi.go
generated
vendored
2
vendor/github.com/Microsoft/hcsshim/internal/winapi/winapi.go
generated
vendored
@ -2,4 +2,4 @@
|
|||||||
// be thought of as an extension to golang.org/x/sys/windows.
|
// be thought of as an extension to golang.org/x/sys/windows.
|
||||||
package winapi
|
package winapi
|
||||||
|
|
||||||
//go:generate go run ..\..\mksyscall_windows.go -output zsyscall_windows.go console.go system.go net.go path.go thread.go iocp.go jobobject.go logon.go memory.go process.go processor.go devices.go filesystem.go errors.go
|
//go:generate go run ..\..\mksyscall_windows.go -output zsyscall_windows.go user.go console.go system.go net.go path.go thread.go jobobject.go logon.go memory.go process.go processor.go devices.go filesystem.go errors.go
|
||||||
|
22
vendor/github.com/Microsoft/hcsshim/internal/winapi/zsyscall_windows.go
generated
vendored
22
vendor/github.com/Microsoft/hcsshim/internal/winapi/zsyscall_windows.go
generated
vendored
@ -50,7 +50,6 @@ var (
|
|||||||
procSetJobCompartmentId = modiphlpapi.NewProc("SetJobCompartmentId")
|
procSetJobCompartmentId = modiphlpapi.NewProc("SetJobCompartmentId")
|
||||||
procSearchPathW = modkernel32.NewProc("SearchPathW")
|
procSearchPathW = modkernel32.NewProc("SearchPathW")
|
||||||
procCreateRemoteThread = modkernel32.NewProc("CreateRemoteThread")
|
procCreateRemoteThread = modkernel32.NewProc("CreateRemoteThread")
|
||||||
procGetQueuedCompletionStatus = modkernel32.NewProc("GetQueuedCompletionStatus")
|
|
||||||
procIsProcessInJob = modkernel32.NewProc("IsProcessInJob")
|
procIsProcessInJob = modkernel32.NewProc("IsProcessInJob")
|
||||||
procQueryInformationJobObject = modkernel32.NewProc("QueryInformationJobObject")
|
procQueryInformationJobObject = modkernel32.NewProc("QueryInformationJobObject")
|
||||||
procOpenJobObjectW = modkernel32.NewProc("OpenJobObjectW")
|
procOpenJobObjectW = modkernel32.NewProc("OpenJobObjectW")
|
||||||
@ -61,6 +60,7 @@ var (
|
|||||||
procLogonUserW = modadvapi32.NewProc("LogonUserW")
|
procLogonUserW = modadvapi32.NewProc("LogonUserW")
|
||||||
procLocalAlloc = modkernel32.NewProc("LocalAlloc")
|
procLocalAlloc = modkernel32.NewProc("LocalAlloc")
|
||||||
procLocalFree = modkernel32.NewProc("LocalFree")
|
procLocalFree = modkernel32.NewProc("LocalFree")
|
||||||
|
procNtQueryInformationProcess = modntdll.NewProc("NtQueryInformationProcess")
|
||||||
procGetActiveProcessorCount = modkernel32.NewProc("GetActiveProcessorCount")
|
procGetActiveProcessorCount = modkernel32.NewProc("GetActiveProcessorCount")
|
||||||
procCM_Get_Device_ID_List_SizeA = modcfgmgr32.NewProc("CM_Get_Device_ID_List_SizeA")
|
procCM_Get_Device_ID_List_SizeA = modcfgmgr32.NewProc("CM_Get_Device_ID_List_SizeA")
|
||||||
procCM_Get_Device_ID_ListA = modcfgmgr32.NewProc("CM_Get_Device_ID_ListA")
|
procCM_Get_Device_ID_ListA = modcfgmgr32.NewProc("CM_Get_Device_ID_ListA")
|
||||||
@ -140,19 +140,7 @@ func CreateRemoteThread(process windows.Handle, sa *windows.SecurityAttributes,
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetQueuedCompletionStatus(cphandle windows.Handle, qty *uint32, key *uintptr, overlapped **windows.Overlapped, timeout uint32) (err error) {
|
func IsProcessInJob(procHandle windows.Handle, jobHandle windows.Handle, result *int32) (err error) {
|
||||||
r1, _, e1 := syscall.Syscall6(procGetQueuedCompletionStatus.Addr(), 5, uintptr(cphandle), uintptr(unsafe.Pointer(qty)), uintptr(unsafe.Pointer(key)), uintptr(unsafe.Pointer(overlapped)), uintptr(timeout), 0)
|
|
||||||
if r1 == 0 {
|
|
||||||
if e1 != 0 {
|
|
||||||
err = errnoErr(e1)
|
|
||||||
} else {
|
|
||||||
err = syscall.EINVAL
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func IsProcessInJob(procHandle windows.Handle, jobHandle windows.Handle, result *bool) (err error) {
|
|
||||||
r1, _, e1 := syscall.Syscall(procIsProcessInJob.Addr(), 3, uintptr(procHandle), uintptr(jobHandle), uintptr(unsafe.Pointer(result)))
|
r1, _, e1 := syscall.Syscall(procIsProcessInJob.Addr(), 3, uintptr(procHandle), uintptr(jobHandle), uintptr(unsafe.Pointer(result)))
|
||||||
if r1 == 0 {
|
if r1 == 0 {
|
||||||
if e1 != 0 {
|
if e1 != 0 {
|
||||||
@ -256,6 +244,12 @@ func LocalFree(ptr uintptr) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func NtQueryInformationProcess(processHandle windows.Handle, processInfoClass uint32, processInfo uintptr, processInfoLength uint32, returnLength *uint32) (status uint32) {
|
||||||
|
r0, _, _ := syscall.Syscall6(procNtQueryInformationProcess.Addr(), 5, uintptr(processHandle), uintptr(processInfoClass), uintptr(processInfo), uintptr(processInfoLength), uintptr(unsafe.Pointer(returnLength)), 0)
|
||||||
|
status = uint32(r0)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func GetActiveProcessorCount(groupNumber uint16) (amount uint32) {
|
func GetActiveProcessorCount(groupNumber uint16) (amount uint32) {
|
||||||
r0, _, _ := syscall.Syscall(procGetActiveProcessorCount.Addr(), 1, uintptr(groupNumber), 0, 0)
|
r0, _, _ := syscall.Syscall(procGetActiveProcessorCount.Addr(), 1, uintptr(groupNumber), 0, 0)
|
||||||
amount = uint32(r0)
|
amount = uint32(r0)
|
||||||
|
4
vendor/github.com/containers/buildah/.cirrus.yml
generated
vendored
4
vendor/github.com/containers/buildah/.cirrus.yml
generated
vendored
@ -29,9 +29,9 @@ env:
|
|||||||
IMAGE_PROJECT: "libpod-218412"
|
IMAGE_PROJECT: "libpod-218412"
|
||||||
FEDORA_NAME: "fedora-36"
|
FEDORA_NAME: "fedora-36"
|
||||||
PRIOR_FEDORA_NAME: "fedora-35"
|
PRIOR_FEDORA_NAME: "fedora-35"
|
||||||
UBUNTU_NAME: "ubuntu-2110"
|
UBUNTU_NAME: "ubuntu-2204"
|
||||||
|
|
||||||
IMAGE_SUFFIX: "c4955393725038592"
|
IMAGE_SUFFIX: "c6193881921355776"
|
||||||
FEDORA_CACHE_IMAGE_NAME: "fedora-${IMAGE_SUFFIX}"
|
FEDORA_CACHE_IMAGE_NAME: "fedora-${IMAGE_SUFFIX}"
|
||||||
PRIOR_FEDORA_CACHE_IMAGE_NAME: "prior-fedora-${IMAGE_SUFFIX}"
|
PRIOR_FEDORA_CACHE_IMAGE_NAME: "prior-fedora-${IMAGE_SUFFIX}"
|
||||||
UBUNTU_CACHE_IMAGE_NAME: "ubuntu-${IMAGE_SUFFIX}"
|
UBUNTU_CACHE_IMAGE_NAME: "ubuntu-${IMAGE_SUFFIX}"
|
||||||
|
4
vendor/github.com/containers/buildah/Makefile
generated
vendored
4
vendor/github.com/containers/buildah/Makefile
generated
vendored
@ -41,11 +41,11 @@ SOURCES=*.go imagebuildah/*.go bind/*.go chroot/*.go copier/*.go define/*.go doc
|
|||||||
|
|
||||||
LINTFLAGS ?=
|
LINTFLAGS ?=
|
||||||
|
|
||||||
ifeq ($(DEBUG), 1)
|
ifeq ($(BUILDDEBUG), 1)
|
||||||
override GOGCFLAGS += -N -l
|
override GOGCFLAGS += -N -l
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# make all DEBUG=1
|
# make all BUILDDEBUG=1
|
||||||
# Note: Uses the -N -l go compiler options to disable compiler optimizations
|
# Note: Uses the -N -l go compiler options to disable compiler optimizations
|
||||||
# and inlining. Using these build options allows you to subsequently
|
# and inlining. Using these build options allows you to subsequently
|
||||||
# use source debugging tools like delve.
|
# use source debugging tools like delve.
|
||||||
|
8
vendor/github.com/containers/buildah/bind/mount.go
generated
vendored
8
vendor/github.com/containers/buildah/bind/mount.go
generated
vendored
@ -1,3 +1,4 @@
|
|||||||
|
//go:build linux
|
||||||
// +build linux
|
// +build linux
|
||||||
|
|
||||||
package bind
|
package bind
|
||||||
@ -9,6 +10,7 @@ import (
|
|||||||
"syscall"
|
"syscall"
|
||||||
|
|
||||||
"github.com/containers/buildah/util"
|
"github.com/containers/buildah/util"
|
||||||
|
cutil "github.com/containers/common/pkg/util"
|
||||||
"github.com/containers/storage/pkg/idtools"
|
"github.com/containers/storage/pkg/idtools"
|
||||||
"github.com/containers/storage/pkg/mount"
|
"github.com/containers/storage/pkg/mount"
|
||||||
"github.com/opencontainers/runtime-spec/specs-go"
|
"github.com/opencontainers/runtime-spec/specs-go"
|
||||||
@ -190,11 +192,11 @@ func SetupIntermediateMountNamespace(spec *specs.Spec, bundlePath string) (unmou
|
|||||||
// Decide if the mount should not be redirected to an intermediate location first.
|
// Decide if the mount should not be redirected to an intermediate location first.
|
||||||
func leaveBindMountAlone(mount specs.Mount) bool {
|
func leaveBindMountAlone(mount specs.Mount) bool {
|
||||||
// If we know we shouldn't do a redirection for this mount, skip it.
|
// If we know we shouldn't do a redirection for this mount, skip it.
|
||||||
if util.StringInSlice(NoBindOption, mount.Options) {
|
if cutil.StringInSlice(NoBindOption, mount.Options) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
// If we're not bind mounting it in, we don't need to do anything for it.
|
// If we're not bind mounting it in, we don't need to do anything for it.
|
||||||
if mount.Type != "bind" && !util.StringInSlice("bind", mount.Options) && !util.StringInSlice("rbind", mount.Options) {
|
if mount.Type != "bind" && !cutil.StringInSlice("bind", mount.Options) && !cutil.StringInSlice("rbind", mount.Options) {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
@ -289,7 +291,7 @@ func UnmountMountpoints(mountpoint string, mountpointsToRemove []string) error {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
// if we're also supposed to remove this thing, do that, too
|
// if we're also supposed to remove this thing, do that, too
|
||||||
if util.StringInSlice(mount.Mountpoint, mountpointsToRemove) {
|
if cutil.StringInSlice(mount.Mountpoint, mountpointsToRemove) {
|
||||||
if err := os.Remove(mount.Mountpoint); err != nil {
|
if err := os.Remove(mount.Mountpoint); err != nil {
|
||||||
return errors.Wrapf(err, "error removing %q", mount.Mountpoint)
|
return errors.Wrapf(err, "error removing %q", mount.Mountpoint)
|
||||||
}
|
}
|
||||||
|
2
vendor/github.com/containers/buildah/bind/util.go
generated
vendored
2
vendor/github.com/containers/buildah/bind/util.go
generated
vendored
@ -1,7 +1,7 @@
|
|||||||
package bind
|
package bind
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/containers/buildah/util"
|
"github.com/containers/common/pkg/util"
|
||||||
"github.com/opencontainers/runtime-spec/specs-go"
|
"github.com/opencontainers/runtime-spec/specs-go"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
4
vendor/github.com/containers/buildah/commit.go
generated
vendored
4
vendor/github.com/containers/buildah/commit.go
generated
vendored
@ -69,6 +69,10 @@ type CommitOptions struct {
|
|||||||
// Squash tells the builder to produce an image with a single layer
|
// Squash tells the builder to produce an image with a single layer
|
||||||
// instead of with possibly more than one layer.
|
// instead of with possibly more than one layer.
|
||||||
Squash bool
|
Squash bool
|
||||||
|
// OmitHistory tells the builder to ignore the history of build layers and
|
||||||
|
// base while preparing image-spec, setting this to true will ensure no history
|
||||||
|
// is added to the image-spec. (default false)
|
||||||
|
OmitHistory bool
|
||||||
// BlobDirectory is the name of a directory in which we'll look for
|
// BlobDirectory is the name of a directory in which we'll look for
|
||||||
// prebuilt copies of layer blobs that we might otherwise need to
|
// prebuilt copies of layer blobs that we might otherwise need to
|
||||||
// regenerate from on-disk layers. If blobs are available, the
|
// regenerate from on-disk layers. If blobs are available, the
|
||||||
|
2
vendor/github.com/containers/buildah/config.go
generated
vendored
2
vendor/github.com/containers/buildah/config.go
generated
vendored
@ -11,7 +11,7 @@ import (
|
|||||||
"github.com/containerd/containerd/platforms"
|
"github.com/containerd/containerd/platforms"
|
||||||
"github.com/containers/buildah/define"
|
"github.com/containers/buildah/define"
|
||||||
"github.com/containers/buildah/docker"
|
"github.com/containers/buildah/docker"
|
||||||
"github.com/containers/buildah/util"
|
"github.com/containers/common/pkg/util"
|
||||||
"github.com/containers/image/v5/manifest"
|
"github.com/containers/image/v5/manifest"
|
||||||
"github.com/containers/image/v5/pkg/compression"
|
"github.com/containers/image/v5/pkg/compression"
|
||||||
"github.com/containers/image/v5/transports"
|
"github.com/containers/image/v5/transports"
|
||||||
|
10
vendor/github.com/containers/buildah/copier/copier.go
generated
vendored
10
vendor/github.com/containers/buildah/copier/copier.go
generated
vendored
@ -344,6 +344,7 @@ type PutOptions struct {
|
|||||||
IgnoreXattrErrors bool // ignore any errors encountered when attempting to set extended attributes
|
IgnoreXattrErrors bool // ignore any errors encountered when attempting to set extended attributes
|
||||||
IgnoreDevices bool // ignore items which are character or block devices
|
IgnoreDevices bool // ignore items which are character or block devices
|
||||||
NoOverwriteDirNonDir bool // instead of quietly overwriting directories with non-directories, return an error
|
NoOverwriteDirNonDir bool // instead of quietly overwriting directories with non-directories, return an error
|
||||||
|
NoOverwriteNonDirDir bool // instead of quietly overwriting non-directories with directories, return an error
|
||||||
Rename map[string]string // rename items with the specified names, or under the specified names
|
Rename map[string]string // rename items with the specified names, or under the specified names
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1794,12 +1795,15 @@ func copierHandlerPut(bulkReader io.Reader, req request, idMappings *idtools.IDM
|
|||||||
}
|
}
|
||||||
case tar.TypeDir:
|
case tar.TypeDir:
|
||||||
if err = os.Mkdir(path, 0700); err != nil && os.IsExist(err) {
|
if err = os.Mkdir(path, 0700); err != nil && os.IsExist(err) {
|
||||||
var st os.FileInfo
|
if st, stErr := os.Lstat(path); stErr == nil && !st.IsDir() {
|
||||||
if st, err = os.Lstat(path); err == nil && !st.IsDir() {
|
if req.PutOptions.NoOverwriteNonDirDir {
|
||||||
// it's not a directory, so remove it and mkdir
|
break
|
||||||
|
}
|
||||||
if err = os.Remove(path); err == nil {
|
if err = os.Remove(path); err == nil {
|
||||||
err = os.Mkdir(path, 0700)
|
err = os.Mkdir(path, 0700)
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
err = stErr
|
||||||
}
|
}
|
||||||
// either we removed it and retried, or it was a directory,
|
// either we removed it and retried, or it was a directory,
|
||||||
// in which case we want to just add the new stuff under it
|
// in which case we want to just add the new stuff under it
|
||||||
|
10
vendor/github.com/containers/buildah/define/build.go
generated
vendored
10
vendor/github.com/containers/buildah/define/build.go
generated
vendored
@ -30,6 +30,10 @@ type AdditionalBuildContext struct {
|
|||||||
type CommonBuildOptions struct {
|
type CommonBuildOptions struct {
|
||||||
// AddHost is the list of hostnames to add to the build container's /etc/hosts.
|
// AddHost is the list of hostnames to add to the build container's /etc/hosts.
|
||||||
AddHost []string
|
AddHost []string
|
||||||
|
// OmitHistory tells the builder to ignore the history of build layers and
|
||||||
|
// base while preparing image-spec, setting this to true will ensure no history
|
||||||
|
// is added to the image-spec. (default false)
|
||||||
|
OmitHistory bool
|
||||||
// CgroupParent is the path to cgroups under which the cgroup for the container will be created.
|
// CgroupParent is the path to cgroups under which the cgroup for the container will be created.
|
||||||
CgroupParent string
|
CgroupParent string
|
||||||
// CPUPeriod limits the CPU CFS (Completely Fair Scheduler) period
|
// CPUPeriod limits the CPU CFS (Completely Fair Scheduler) period
|
||||||
@ -147,6 +151,12 @@ type BuildOptions struct {
|
|||||||
// Additional tags to add to the image that we write, if we know of a
|
// Additional tags to add to the image that we write, if we know of a
|
||||||
// way to add them.
|
// way to add them.
|
||||||
AdditionalTags []string
|
AdditionalTags []string
|
||||||
|
// Logfile specifies if log output is redirected to an external file
|
||||||
|
// instead of stdout, stderr.
|
||||||
|
LogFile string
|
||||||
|
// LogByPlatform tells imagebuildah to split log to different log files
|
||||||
|
// for each platform if logging to external file was selected.
|
||||||
|
LogSplitByPlatform bool
|
||||||
// Log is a callback that will print a progress message. If no value
|
// Log is a callback that will print a progress message. If no value
|
||||||
// is supplied, the message will be sent to Err (or os.Stderr, if Err
|
// is supplied, the message will be sent to Err (or os.Stderr, if Err
|
||||||
// is nil) by default.
|
// is nil) by default.
|
||||||
|
11
vendor/github.com/containers/buildah/define/types_unix.go
generated
vendored
11
vendor/github.com/containers/buildah/define/types_unix.go
generated
vendored
@ -6,4 +6,13 @@ import (
|
|||||||
"github.com/opencontainers/runc/libcontainer/devices"
|
"github.com/opencontainers/runc/libcontainer/devices"
|
||||||
)
|
)
|
||||||
|
|
||||||
type ContainerDevices = []devices.Device
|
// BuildahDevice is a wrapper around devices.Device
|
||||||
|
// with additional support for renaming a device
|
||||||
|
// using bind-mount in rootless environments.
|
||||||
|
type BuildahDevice struct {
|
||||||
|
devices.Device
|
||||||
|
Source string
|
||||||
|
Destination string
|
||||||
|
}
|
||||||
|
|
||||||
|
type ContainerDevices = []BuildahDevice
|
||||||
|
14
vendor/github.com/containers/buildah/go.mod
generated
vendored
14
vendor/github.com/containers/buildah/go.mod
generated
vendored
@ -3,17 +3,17 @@ module github.com/containers/buildah
|
|||||||
go 1.16
|
go 1.16
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/containerd/containerd v1.6.4
|
github.com/containerd/containerd v1.6.6
|
||||||
github.com/containernetworking/cni v1.1.0
|
github.com/containernetworking/cni v1.1.1
|
||||||
github.com/containers/common v0.48.1-0.20220519181648-280c6f69fa82
|
github.com/containers/common v0.48.1-0.20220519181648-280c6f69fa82
|
||||||
github.com/containers/image/v5 v5.21.2-0.20220520105616-e594853d6471
|
github.com/containers/image/v5 v5.21.2-0.20220520105616-e594853d6471
|
||||||
github.com/containers/ocicrypt v1.1.4-0.20220428134531-566b808bdf6f
|
github.com/containers/ocicrypt v1.1.4-0.20220428134531-566b808bdf6f
|
||||||
github.com/containers/storage v1.41.1-0.20220517121726-5019cd55275c
|
github.com/containers/storage v1.41.1-0.20220517121726-5019cd55275c
|
||||||
github.com/docker/distribution v2.8.1+incompatible
|
github.com/docker/distribution v2.8.1+incompatible
|
||||||
github.com/docker/docker v20.10.16+incompatible
|
github.com/docker/docker v20.10.17+incompatible
|
||||||
github.com/docker/go-units v0.4.0
|
github.com/docker/go-units v0.4.0
|
||||||
github.com/docker/libnetwork v0.8.0-dev.2.0.20190625141545-5a177b73e316
|
github.com/docker/libnetwork v0.8.0-dev.2.0.20190625141545-5a177b73e316
|
||||||
github.com/fsouza/go-dockerclient v1.7.11
|
github.com/fsouza/go-dockerclient v1.8.1
|
||||||
github.com/ghodss/yaml v1.0.0
|
github.com/ghodss/yaml v1.0.0
|
||||||
github.com/hashicorp/go-multierror v1.1.1
|
github.com/hashicorp/go-multierror v1.1.1
|
||||||
github.com/ishidawataru/sctp v0.0.0-20210226210310-f2269e66cdee // indirect
|
github.com/ishidawataru/sctp v0.0.0-20210226210310-f2269e66cdee // indirect
|
||||||
@ -33,13 +33,13 @@ require (
|
|||||||
github.com/sirupsen/logrus v1.8.1
|
github.com/sirupsen/logrus v1.8.1
|
||||||
github.com/spf13/cobra v1.4.0
|
github.com/spf13/cobra v1.4.0
|
||||||
github.com/spf13/pflag v1.0.5
|
github.com/spf13/pflag v1.0.5
|
||||||
github.com/stretchr/testify v1.7.1
|
github.com/stretchr/testify v1.7.2
|
||||||
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635
|
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635
|
||||||
go.etcd.io/bbolt v1.3.6
|
go.etcd.io/bbolt v1.3.6
|
||||||
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4
|
golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4
|
||||||
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
|
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
|
||||||
golang.org/x/sys v0.0.0-20220422013727-9388b58f7150
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211
|
golang.org/x/term v0.0.0-20220526004731-065cf7ba2467
|
||||||
)
|
)
|
||||||
|
|
||||||
replace github.com/sirupsen/logrus => github.com/sirupsen/logrus v1.4.2
|
replace github.com/sirupsen/logrus => github.com/sirupsen/logrus v1.4.2
|
||||||
|
37
vendor/github.com/containers/buildah/go.sum
generated
vendored
37
vendor/github.com/containers/buildah/go.sum
generated
vendored
@ -88,8 +88,9 @@ github.com/Microsoft/hcsshim v0.8.20/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwT
|
|||||||
github.com/Microsoft/hcsshim v0.8.21/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4=
|
github.com/Microsoft/hcsshim v0.8.21/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4=
|
||||||
github.com/Microsoft/hcsshim v0.8.22/go.mod h1:91uVCVzvX2QD16sMCenoxxXo6L1wJnLMX2PSufFMtF0=
|
github.com/Microsoft/hcsshim v0.8.22/go.mod h1:91uVCVzvX2QD16sMCenoxxXo6L1wJnLMX2PSufFMtF0=
|
||||||
github.com/Microsoft/hcsshim v0.8.23/go.mod h1:4zegtUJth7lAvFyc6cH2gGQ5B3OFQim01nnU2M8jKDg=
|
github.com/Microsoft/hcsshim v0.8.23/go.mod h1:4zegtUJth7lAvFyc6cH2gGQ5B3OFQim01nnU2M8jKDg=
|
||||||
github.com/Microsoft/hcsshim v0.9.2 h1:wB06W5aYFfUB3IvootYAY2WnOmIdgPGfqSI6tufQNnY=
|
|
||||||
github.com/Microsoft/hcsshim v0.9.2/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc=
|
github.com/Microsoft/hcsshim v0.9.2/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc=
|
||||||
|
github.com/Microsoft/hcsshim v0.9.3 h1:k371PzBuRrz2b+ebGuI2nVgVhgsVX60jMfSw80NECxo=
|
||||||
|
github.com/Microsoft/hcsshim v0.9.3/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc=
|
||||||
github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU=
|
github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU=
|
||||||
github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY=
|
github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY=
|
||||||
github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
|
github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
|
||||||
@ -217,8 +218,9 @@ github.com/containerd/containerd v1.5.7/go.mod h1:gyvv6+ugqY25TiXxcZC3L5yOeYgEw0
|
|||||||
github.com/containerd/containerd v1.5.8/go.mod h1:YdFSv5bTFLpG2HIYmfqDpSYYTDX+mc5qtSuYx1YUb/s=
|
github.com/containerd/containerd v1.5.8/go.mod h1:YdFSv5bTFLpG2HIYmfqDpSYYTDX+mc5qtSuYx1YUb/s=
|
||||||
github.com/containerd/containerd v1.5.9/go.mod h1:fvQqCfadDGga5HZyn3j4+dx56qj2I9YwBrlSdalvJYQ=
|
github.com/containerd/containerd v1.5.9/go.mod h1:fvQqCfadDGga5HZyn3j4+dx56qj2I9YwBrlSdalvJYQ=
|
||||||
github.com/containerd/containerd v1.6.1/go.mod h1:1nJz5xCZPusx6jJU8Frfct988y0NpumIq9ODB0kLtoE=
|
github.com/containerd/containerd v1.6.1/go.mod h1:1nJz5xCZPusx6jJU8Frfct988y0NpumIq9ODB0kLtoE=
|
||||||
github.com/containerd/containerd v1.6.4 h1:SEDZBp10mhCp+hkO3Njz/YhGrI7ah3edNcUlRdUPOgg=
|
|
||||||
github.com/containerd/containerd v1.6.4/go.mod h1:oWOqbuJUZmOVafhA0lj2NAXbiO1u7F0K5l1bUgdyo94=
|
github.com/containerd/containerd v1.6.4/go.mod h1:oWOqbuJUZmOVafhA0lj2NAXbiO1u7F0K5l1bUgdyo94=
|
||||||
|
github.com/containerd/containerd v1.6.6 h1:xJNPhbrmz8xAMDNoVjHy9YHtWwEQNS+CDkcIRh7t8Y0=
|
||||||
|
github.com/containerd/containerd v1.6.6/go.mod h1:ZoP1geJldzCVY3Tonoz7b1IXk8rIX0Nltt5QE4OMNk0=
|
||||||
github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
||||||
github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
||||||
github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
||||||
@ -239,6 +241,7 @@ github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb
|
|||||||
github.com/containerd/go-cni v1.1.0/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA=
|
github.com/containerd/go-cni v1.1.0/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA=
|
||||||
github.com/containerd/go-cni v1.1.3/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA=
|
github.com/containerd/go-cni v1.1.3/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA=
|
||||||
github.com/containerd/go-cni v1.1.5/go.mod h1:Rf2ZrMycr1El589IyuRzn7RkfdRZVKaFGaxSDHVAjj0=
|
github.com/containerd/go-cni v1.1.5/go.mod h1:Rf2ZrMycr1El589IyuRzn7RkfdRZVKaFGaxSDHVAjj0=
|
||||||
|
github.com/containerd/go-cni v1.1.6/go.mod h1:BWtoWl5ghVymxu6MBjg79W9NZrCRyHIdUtk4cauMe34=
|
||||||
github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
|
github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
|
||||||
github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
|
github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
|
||||||
github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g=
|
github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g=
|
||||||
@ -276,8 +279,9 @@ github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ
|
|||||||
github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY=
|
github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY=
|
||||||
github.com/containernetworking/cni v0.8.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY=
|
github.com/containernetworking/cni v0.8.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY=
|
||||||
github.com/containernetworking/cni v1.0.1/go.mod h1:AKuhXbN5EzmD4yTNtfSsX3tPcmtrBI6QcRV0NiNt15Y=
|
github.com/containernetworking/cni v1.0.1/go.mod h1:AKuhXbN5EzmD4yTNtfSsX3tPcmtrBI6QcRV0NiNt15Y=
|
||||||
github.com/containernetworking/cni v1.1.0 h1:T00oIz4hef+/p9gpRZa57SnIN+QnbmAHBjbxaOSFo9U=
|
|
||||||
github.com/containernetworking/cni v1.1.0/go.mod h1:sDpYKmGVENF3s6uvMvGgldDWeG8dMxakj/u+i9ht9vw=
|
github.com/containernetworking/cni v1.1.0/go.mod h1:sDpYKmGVENF3s6uvMvGgldDWeG8dMxakj/u+i9ht9vw=
|
||||||
|
github.com/containernetworking/cni v1.1.1 h1:ky20T7c0MvKvbMOwS/FrlbNwjEoqJEUUYfsL4b0mc4k=
|
||||||
|
github.com/containernetworking/cni v1.1.1/go.mod h1:sDpYKmGVENF3s6uvMvGgldDWeG8dMxakj/u+i9ht9vw=
|
||||||
github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHVlzhJpcY6TQxn/fUyDDM=
|
github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHVlzhJpcY6TQxn/fUyDDM=
|
||||||
github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8=
|
github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8=
|
||||||
github.com/containernetworking/plugins v1.0.1/go.mod h1:QHCfGpaTwYTbbH+nZXKVTxNBDZcxSOplJT5ico8/FLE=
|
github.com/containernetworking/plugins v1.0.1/go.mod h1:QHCfGpaTwYTbbH+nZXKVTxNBDZcxSOplJT5ico8/FLE=
|
||||||
@ -351,11 +355,11 @@ github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4Kfc
|
|||||||
github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68=
|
github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68=
|
||||||
github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||||
github.com/docker/docker v1.4.2-0.20190924003213-a8608b5b67c7/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
github.com/docker/docker v1.4.2-0.20190924003213-a8608b5b67c7/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||||
github.com/docker/docker v20.10.3-0.20220208084023-a5c757555091+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
|
||||||
github.com/docker/docker v20.10.12+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
github.com/docker/docker v20.10.12+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||||
github.com/docker/docker v20.10.15+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
github.com/docker/docker v20.10.15+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||||
github.com/docker/docker v20.10.16+incompatible h1:2Db6ZR/+FUR3hqPMwnogOPHFn405crbpxvWzKovETOQ=
|
|
||||||
github.com/docker/docker v20.10.16+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
github.com/docker/docker v20.10.16+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||||
|
github.com/docker/docker v20.10.17+incompatible h1:JYCuMrWaVNophQTOrMMoSwudOVEfcegoZZrleKc1xwE=
|
||||||
|
github.com/docker/docker v20.10.17+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||||
github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y=
|
github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y=
|
||||||
github.com/docker/docker-credential-helpers v0.6.4 h1:axCks+yV+2MR3/kZhAmy07yC56WZ2Pwu/fKWtKuZB0o=
|
github.com/docker/docker-credential-helpers v0.6.4 h1:axCks+yV+2MR3/kZhAmy07yC56WZ2Pwu/fKWtKuZB0o=
|
||||||
github.com/docker/docker-credential-helpers v0.6.4/go.mod h1:ofX3UI0Gz1TteYBjtgs07O36Pyasyp66D2uKT7H8W1c=
|
github.com/docker/docker-credential-helpers v0.6.4/go.mod h1:ofX3UI0Gz1TteYBjtgs07O36Pyasyp66D2uKT7H8W1c=
|
||||||
@ -401,8 +405,8 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo
|
|||||||
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
|
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
|
||||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||||
github.com/fsouza/go-dockerclient v1.7.7/go.mod h1:njNCXvoZj3sLPjf3yO0DPHf1mdLdCPDYPc14GskKA4Y=
|
github.com/fsouza/go-dockerclient v1.7.7/go.mod h1:njNCXvoZj3sLPjf3yO0DPHf1mdLdCPDYPc14GskKA4Y=
|
||||||
github.com/fsouza/go-dockerclient v1.7.11 h1:pRmGMANAl+tmr+IYNYq8IWWcSbiKQMSRumYLv8H5sfk=
|
github.com/fsouza/go-dockerclient v1.8.1 h1:a27vHYqNSZz88nUAurI1o6W5PgEt63nAWilOI+j63RE=
|
||||||
github.com/fsouza/go-dockerclient v1.7.11/go.mod h1:zvYxutUNOK853i1s7VywZxQgxSHbm7A6en/q9MHBN6k=
|
github.com/fsouza/go-dockerclient v1.8.1/go.mod h1:zmA2ogSxRnXmbZcy0Aq7yhRoCdP/bDns/qghCK9SWtM=
|
||||||
github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA=
|
github.com/fullsailor/pkcs7 v0.0.0-20190404230743-d7302db945fa/go.mod h1:KnogPXtdwXqoenmZCw6S+25EAm2MkxbG0deNDu4cbSA=
|
||||||
github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY=
|
github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY=
|
||||||
github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ=
|
github.com/getsentry/raven-go v0.2.0/go.mod h1:KungGk8q33+aIAZUIVWZDr2OfAEBsO49PX4NzFV5kcQ=
|
||||||
@ -693,13 +697,15 @@ github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh
|
|||||||
github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A=
|
github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A=
|
||||||
github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc=
|
github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc=
|
||||||
github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
|
github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
|
||||||
github.com/moby/sys/mount v0.2.0 h1:WhCW5B355jtxndN5ovugJlMFJawbUODuW8fSnEH6SSM=
|
|
||||||
github.com/moby/sys/mount v0.2.0/go.mod h1:aAivFE2LB3W4bACsUXChRHQ0qKWsetY4Y9V7sxOougM=
|
github.com/moby/sys/mount v0.2.0/go.mod h1:aAivFE2LB3W4bACsUXChRHQ0qKWsetY4Y9V7sxOougM=
|
||||||
|
github.com/moby/sys/mount v0.3.3 h1:fX1SVkXFJ47XWDoeFW4Sq7PdQJnV2QIDZAqjNqgEjUs=
|
||||||
|
github.com/moby/sys/mount v0.3.3/go.mod h1:PBaEorSNTLG5t/+4EgukEQVlAvVEc6ZjTySwKdqp5K0=
|
||||||
github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
|
github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
|
||||||
github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
|
github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
|
||||||
github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU=
|
github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU=
|
||||||
github.com/moby/sys/mountinfo v0.6.1 h1:+H/KnGEAGRpTrEAqNVQ2AM3SiwMgJUt/TXj+Z8cmCIc=
|
|
||||||
github.com/moby/sys/mountinfo v0.6.1/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU=
|
github.com/moby/sys/mountinfo v0.6.1/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU=
|
||||||
|
github.com/moby/sys/mountinfo v0.6.2 h1:BzJjoreD5BMFNmD9Rus6gdd1pLuecOFPt8wC+Vygl78=
|
||||||
|
github.com/moby/sys/mountinfo v0.6.2/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI=
|
||||||
github.com/moby/sys/signal v0.6.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg=
|
github.com/moby/sys/signal v0.6.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg=
|
||||||
github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ=
|
github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ=
|
||||||
github.com/moby/sys/symlink v0.2.0/go.mod h1:7uZVF2dqJjG/NsClqul95CqKOBRQyYSNnJ6BMgR/gFs=
|
github.com/moby/sys/symlink v0.2.0/go.mod h1:7uZVF2dqJjG/NsClqul95CqKOBRQyYSNnJ6BMgR/gFs=
|
||||||
@ -918,8 +924,9 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81P
|
|||||||
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
||||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY=
|
|
||||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||||
|
github.com/stretchr/testify v1.7.2 h1:4jaiDzPyXQvSd7D0EjG45355tLlV3VOECpq10pLC+8s=
|
||||||
|
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
|
||||||
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
|
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
|
||||||
github.com/sylabs/sif/v2 v2.7.0 h1:VFzN8alnJ/3n1JA0K9DyUtfSzezWgWrzLDcYGhgBskk=
|
github.com/sylabs/sif/v2 v2.7.0 h1:VFzN8alnJ/3n1JA0K9DyUtfSzezWgWrzLDcYGhgBskk=
|
||||||
github.com/sylabs/sif/v2 v2.7.0/go.mod h1:TiyBWsgWeh5yBeQFNuQnvROwswqK7YJT8JA1L53bsXQ=
|
github.com/sylabs/sif/v2 v2.7.0/go.mod h1:TiyBWsgWeh5yBeQFNuQnvROwswqK7YJT8JA1L53bsXQ=
|
||||||
@ -1272,14 +1279,17 @@ golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220422013727-9388b58f7150 h1:xHms4gcpe1YE7A3yIllJXP16CMAGuqwO2lX1mTyyRRc=
|
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k=
|
||||||
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211 h1:JGgROgKl9N8DuW20oFS5gxc+lE67/N3FcwmBPMe7ArY=
|
|
||||||
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
|
golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 h1:CBpWXWQpIRjzmkkA+M7q9Fqnwd2mZr3AFqexg8YTfoM=
|
||||||
|
golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
@ -1529,8 +1539,9 @@ 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.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.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
|
|
||||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/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 v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
|
gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
|
||||||
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
|
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
|
||||||
gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk=
|
gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk=
|
||||||
|
21
vendor/github.com/containers/buildah/image.go
generated
vendored
21
vendor/github.com/containers/buildah/image.go
generated
vendored
@ -70,6 +70,7 @@ type containerImageRef struct {
|
|||||||
annotations map[string]string
|
annotations map[string]string
|
||||||
preferredManifestType string
|
preferredManifestType string
|
||||||
squash bool
|
squash bool
|
||||||
|
omitHistory bool
|
||||||
emptyLayer bool
|
emptyLayer bool
|
||||||
idMappingOptions *define.IDMappingOptions
|
idMappingOptions *define.IDMappingOptions
|
||||||
parent string
|
parent string
|
||||||
@ -221,7 +222,7 @@ func (i *containerImageRef) createConfigsAndManifests() (v1.Image, v1.Manifest,
|
|||||||
oimage.RootFS.DiffIDs = []digest.Digest{}
|
oimage.RootFS.DiffIDs = []digest.Digest{}
|
||||||
// Only clear the history if we're squashing, otherwise leave it be so that we can append
|
// Only clear the history if we're squashing, otherwise leave it be so that we can append
|
||||||
// entries to it.
|
// entries to it.
|
||||||
if i.squash {
|
if i.squash || i.omitHistory {
|
||||||
oimage.History = []v1.History{}
|
oimage.History = []v1.History{}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -244,7 +245,7 @@ func (i *containerImageRef) createConfigsAndManifests() (v1.Image, v1.Manifest,
|
|||||||
// Only clear the history if we're squashing, otherwise leave it be so
|
// Only clear the history if we're squashing, otherwise leave it be so
|
||||||
// that we can append entries to it. Clear the parent, too, we no
|
// that we can append entries to it. Clear the parent, too, we no
|
||||||
// longer include its layers and history.
|
// longer include its layers and history.
|
||||||
if i.squash {
|
if i.squash || i.omitHistory {
|
||||||
dimage.Parent = ""
|
dimage.Parent = ""
|
||||||
dimage.History = []docker.V2S2History{}
|
dimage.History = []docker.V2S2History{}
|
||||||
}
|
}
|
||||||
@ -530,6 +531,14 @@ func (i *containerImageRef) NewImageSource(ctx context.Context, sc *types.System
|
|||||||
dimage.History = append(dimage.History, dnews)
|
dimage.History = append(dimage.History, dnews)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Calculate base image history for special scenarios
|
||||||
|
// when base layers does not contains any history.
|
||||||
|
// We will ignore sanity checks if baseImage history is null
|
||||||
|
// but still add new history for docker parity.
|
||||||
|
baseImageHistoryLen := len(oimage.History)
|
||||||
|
// Only attempt to append history if history was not disabled explicitly.
|
||||||
|
if !i.omitHistory {
|
||||||
appendHistory(i.preEmptyLayers)
|
appendHistory(i.preEmptyLayers)
|
||||||
created := time.Now().UTC()
|
created := time.Now().UTC()
|
||||||
if i.created != nil {
|
if i.created != nil {
|
||||||
@ -559,7 +568,10 @@ func (i *containerImageRef) NewImageSource(ctx context.Context, sc *types.System
|
|||||||
appendHistory(i.postEmptyLayers)
|
appendHistory(i.postEmptyLayers)
|
||||||
|
|
||||||
// Sanity check that we didn't just create a mismatch between non-empty layers in the
|
// Sanity check that we didn't just create a mismatch between non-empty layers in the
|
||||||
// history and the number of diffIDs.
|
// history and the number of diffIDs. Following sanity check is ignored if build history
|
||||||
|
// is disabled explicitly by the user.
|
||||||
|
// Disable sanity check when baseImageHistory is null for docker parity
|
||||||
|
if baseImageHistoryLen != 0 {
|
||||||
expectedDiffIDs := expectedOCIDiffIDs(oimage)
|
expectedDiffIDs := expectedOCIDiffIDs(oimage)
|
||||||
if len(oimage.RootFS.DiffIDs) != expectedDiffIDs {
|
if len(oimage.RootFS.DiffIDs) != expectedDiffIDs {
|
||||||
return nil, errors.Errorf("internal error: history lists %d non-empty layers, but we have %d layers on disk", expectedDiffIDs, len(oimage.RootFS.DiffIDs))
|
return nil, errors.Errorf("internal error: history lists %d non-empty layers, but we have %d layers on disk", expectedDiffIDs, len(oimage.RootFS.DiffIDs))
|
||||||
@ -568,6 +580,8 @@ func (i *containerImageRef) NewImageSource(ctx context.Context, sc *types.System
|
|||||||
if len(dimage.RootFS.DiffIDs) != expectedDiffIDs {
|
if len(dimage.RootFS.DiffIDs) != expectedDiffIDs {
|
||||||
return nil, errors.Errorf("internal error: history lists %d non-empty layers, but we have %d layers on disk", expectedDiffIDs, len(dimage.RootFS.DiffIDs))
|
return nil, errors.Errorf("internal error: history lists %d non-empty layers, but we have %d layers on disk", expectedDiffIDs, len(dimage.RootFS.DiffIDs))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Encode the image configuration blob.
|
// Encode the image configuration blob.
|
||||||
oconfig, err := json.Marshal(&oimage)
|
oconfig, err := json.Marshal(&oimage)
|
||||||
@ -819,6 +833,7 @@ func (b *Builder) makeContainerImageRef(options CommitOptions) (*containerImageR
|
|||||||
annotations: b.Annotations(),
|
annotations: b.Annotations(),
|
||||||
preferredManifestType: manifestType,
|
preferredManifestType: manifestType,
|
||||||
squash: options.Squash,
|
squash: options.Squash,
|
||||||
|
omitHistory: options.OmitHistory,
|
||||||
emptyLayer: options.EmptyLayer && !options.Squash,
|
emptyLayer: options.EmptyLayer && !options.Squash,
|
||||||
idMappingOptions: &b.IDMappingOptions,
|
idMappingOptions: &b.IDMappingOptions,
|
||||||
parent: parent,
|
parent: parent,
|
||||||
|
20
vendor/github.com/containers/buildah/imagebuildah/build.go
generated
vendored
20
vendor/github.com/containers/buildah/imagebuildah/build.go
generated
vendored
@ -253,7 +253,25 @@ func BuildDockerfiles(ctx context.Context, store storage.Store, options define.B
|
|||||||
}
|
}
|
||||||
platformOptions.Args = argsCopy
|
platformOptions.Args = argsCopy
|
||||||
builds.Go(func() error {
|
builds.Go(func() error {
|
||||||
thisID, thisRef, err := buildDockerfilesOnce(ctx, store, logger, logPrefix, platformOptions, paths, files)
|
loggerPerPlatform := logger
|
||||||
|
if platformOptions.LogFile != "" && platformOptions.LogSplitByPlatform {
|
||||||
|
logFile := platformOptions.LogFile + "_" + platformOptions.OS + "_" + platformOptions.Architecture
|
||||||
|
f, err := os.OpenFile(logFile, os.O_CREATE|os.O_TRUNC|os.O_WRONLY, 0600)
|
||||||
|
if err != nil {
|
||||||
|
return errors.Wrapf(err, "opening logfile: %q", logFile)
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
loggerPerPlatform = logrus.New()
|
||||||
|
loggerPerPlatform.SetOutput(f)
|
||||||
|
loggerPerPlatform.SetLevel(logrus.GetLevel())
|
||||||
|
stdout := f
|
||||||
|
stderr := f
|
||||||
|
reporter := f
|
||||||
|
platformOptions.Out = stdout
|
||||||
|
platformOptions.ReportWriter = reporter
|
||||||
|
platformOptions.Err = stderr
|
||||||
|
}
|
||||||
|
thisID, thisRef, err := buildDockerfilesOnce(ctx, store, loggerPerPlatform, logPrefix, platformOptions, paths, files)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
37
vendor/github.com/containers/buildah/imagebuildah/stage_executor.go
generated
vendored
37
vendor/github.com/containers/buildah/imagebuildah/stage_executor.go
generated
vendored
@ -376,7 +376,7 @@ func (s *StageExecutor) Copy(excludes []string, copies ...imagebuilder.Copy) err
|
|||||||
// Maybe index is given in COPY --from=index
|
// Maybe index is given in COPY --from=index
|
||||||
// if that's the case check if provided index
|
// if that's the case check if provided index
|
||||||
// exists and if stage short_name matches any
|
// exists and if stage short_name matches any
|
||||||
// additionalContext replace stage with addtional
|
// additionalContext replace stage with additional
|
||||||
// build context.
|
// build context.
|
||||||
if _, err := strconv.Atoi(from); err == nil {
|
if _, err := strconv.Atoi(from); err == nil {
|
||||||
if stage, ok := s.executor.stages[from]; ok {
|
if stage, ok := s.executor.stages[from]; ok {
|
||||||
@ -597,30 +597,30 @@ func (s *StageExecutor) Run(run imagebuilder.Run, config docker.Config) error {
|
|||||||
stdin = devNull
|
stdin = devNull
|
||||||
}
|
}
|
||||||
options := buildah.RunOptions{
|
options := buildah.RunOptions{
|
||||||
Logger: s.executor.logger,
|
|
||||||
Hostname: config.Hostname,
|
|
||||||
Runtime: s.executor.runtime,
|
|
||||||
Args: s.executor.runtimeArgs,
|
Args: s.executor.runtimeArgs,
|
||||||
|
Cmd: config.Cmd,
|
||||||
|
ContextDir: s.executor.contextDir,
|
||||||
|
Entrypoint: config.Entrypoint,
|
||||||
|
Env: config.Env,
|
||||||
|
Hostname: config.Hostname,
|
||||||
|
Logger: s.executor.logger,
|
||||||
|
Mounts: append([]Mount{}, s.executor.transientMounts...),
|
||||||
|
NamespaceOptions: s.executor.namespaceOptions,
|
||||||
NoHosts: s.executor.noHosts,
|
NoHosts: s.executor.noHosts,
|
||||||
NoPivot: os.Getenv("BUILDAH_NOPIVOT") != "",
|
NoPivot: os.Getenv("BUILDAH_NOPIVOT") != "",
|
||||||
Mounts: append([]Mount{}, s.executor.transientMounts...),
|
|
||||||
Env: config.Env,
|
|
||||||
User: config.User,
|
|
||||||
WorkingDir: config.WorkingDir,
|
|
||||||
Entrypoint: config.Entrypoint,
|
|
||||||
ContextDir: s.executor.contextDir,
|
|
||||||
Cmd: config.Cmd,
|
|
||||||
Stdin: stdin,
|
|
||||||
Stdout: s.executor.out,
|
|
||||||
Stderr: s.executor.err,
|
|
||||||
Quiet: s.executor.quiet,
|
Quiet: s.executor.quiet,
|
||||||
NamespaceOptions: s.executor.namespaceOptions,
|
RunMounts: run.Mounts,
|
||||||
Terminal: buildah.WithoutTerminal,
|
Runtime: s.executor.runtime,
|
||||||
Secrets: s.executor.secrets,
|
Secrets: s.executor.secrets,
|
||||||
SSHSources: s.executor.sshsources,
|
SSHSources: s.executor.sshsources,
|
||||||
RunMounts: run.Mounts,
|
|
||||||
StageMountPoints: stageMountPoints,
|
StageMountPoints: stageMountPoints,
|
||||||
|
Stderr: s.executor.err,
|
||||||
|
Stdin: stdin,
|
||||||
|
Stdout: s.executor.out,
|
||||||
SystemContext: s.executor.systemContext,
|
SystemContext: s.executor.systemContext,
|
||||||
|
Terminal: buildah.WithoutTerminal,
|
||||||
|
User: config.User,
|
||||||
|
WorkingDir: config.WorkingDir,
|
||||||
}
|
}
|
||||||
if config.NetworkDisabled {
|
if config.NetworkDisabled {
|
||||||
options.ConfigureNetwork = buildah.NetworkDisabled
|
options.ConfigureNetwork = buildah.NetworkDisabled
|
||||||
@ -1216,7 +1216,7 @@ func (s *StageExecutor) Execute(ctx context.Context, base string) (imgID string,
|
|||||||
// Create a new image, maybe with a new layer, with the
|
// Create a new image, maybe with a new layer, with the
|
||||||
// name for this stage if it's the last instruction.
|
// name for this stage if it's the last instruction.
|
||||||
logCommit(s.output, i)
|
logCommit(s.output, i)
|
||||||
// While commiting we always set squash to false here
|
// While committing we always set squash to false here
|
||||||
// because at this point we want to save history for
|
// because at this point we want to save history for
|
||||||
// layers even if its a squashed build so that they
|
// layers even if its a squashed build so that they
|
||||||
// can be part of build-cache.
|
// can be part of build-cache.
|
||||||
@ -1708,6 +1708,7 @@ func (s *StageExecutor) commit(ctx context.Context, createdBy string, emptyLayer
|
|||||||
PreferredManifestType: s.executor.outputFormat,
|
PreferredManifestType: s.executor.outputFormat,
|
||||||
SystemContext: s.executor.systemContext,
|
SystemContext: s.executor.systemContext,
|
||||||
Squash: squash,
|
Squash: squash,
|
||||||
|
OmitHistory: s.executor.commonBuildOptions.OmitHistory,
|
||||||
EmptyLayer: emptyLayer,
|
EmptyLayer: emptyLayer,
|
||||||
BlobDirectory: s.executor.blobDirectory,
|
BlobDirectory: s.executor.blobDirectory,
|
||||||
SignBy: s.executor.signBy,
|
SignBy: s.executor.signBy,
|
||||||
|
4
vendor/github.com/containers/buildah/install.md
generated
vendored
4
vendor/github.com/containers/buildah/install.md
generated
vendored
@ -396,9 +396,9 @@ cat /etc/containers/policy.json
|
|||||||
|
|
||||||
## Debug with Delve and the like
|
## Debug with Delve and the like
|
||||||
|
|
||||||
To make a source debug build without optimizations use `DEBUG=1`, like:
|
To make a source debug build without optimizations use `BUILDDEBUG=1`, like:
|
||||||
```
|
```
|
||||||
make all DEBUG=1
|
make all BUILDDEBUG=1
|
||||||
```
|
```
|
||||||
|
|
||||||
## Vendoring
|
## Vendoring
|
||||||
|
420
vendor/github.com/containers/buildah/pkg/cli/build.go
generated
vendored
Normal file
420
vendor/github.com/containers/buildah/pkg/cli/build.go
generated
vendored
Normal file
@ -0,0 +1,420 @@
|
|||||||
|
package cli
|
||||||
|
|
||||||
|
// the cli package contains urfave/cli related structs that help make up
|
||||||
|
// the command line for buildah commands. it resides here so other projects
|
||||||
|
// that vendor in this code can use them too.
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"io/ioutil"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"strings"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"github.com/containers/buildah/define"
|
||||||
|
"github.com/containers/buildah/pkg/parse"
|
||||||
|
"github.com/containers/buildah/pkg/util"
|
||||||
|
"github.com/containers/common/pkg/auth"
|
||||||
|
encconfig "github.com/containers/ocicrypt/config"
|
||||||
|
enchelpers "github.com/containers/ocicrypt/helpers"
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
"github.com/sirupsen/logrus"
|
||||||
|
"github.com/spf13/cobra"
|
||||||
|
)
|
||||||
|
|
||||||
|
type BuildOptions struct {
|
||||||
|
*LayerResults
|
||||||
|
*BudResults
|
||||||
|
*UserNSResults
|
||||||
|
*FromAndBudResults
|
||||||
|
*NameSpaceResults
|
||||||
|
Logwriter *os.File
|
||||||
|
}
|
||||||
|
|
||||||
|
const (
|
||||||
|
MaxPullPushRetries = 3
|
||||||
|
PullPushRetryDelay = 2 * time.Second
|
||||||
|
)
|
||||||
|
|
||||||
|
// GenBuildOptions translates command line flags into a BuildOptions structure
|
||||||
|
func GenBuildOptions(c *cobra.Command, inputArgs []string, iopts BuildOptions) (define.BuildOptions, []string, []string, error) {
|
||||||
|
options := define.BuildOptions{}
|
||||||
|
|
||||||
|
var removeAll []string
|
||||||
|
|
||||||
|
output := ""
|
||||||
|
cleanTmpFile := false
|
||||||
|
tags := []string{}
|
||||||
|
if c.Flag("tag").Changed {
|
||||||
|
tags = iopts.Tag
|
||||||
|
if len(tags) > 0 {
|
||||||
|
output = tags[0]
|
||||||
|
tags = tags[1:]
|
||||||
|
}
|
||||||
|
if c.Flag("manifest").Changed {
|
||||||
|
for _, tag := range tags {
|
||||||
|
if tag == iopts.Manifest {
|
||||||
|
return options, nil, nil, errors.New("the same name must not be specified for both '--tag' and '--manifest'")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if err := auth.CheckAuthFile(iopts.BudResults.Authfile); err != nil {
|
||||||
|
return options, nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.Flag("logsplit").Changed {
|
||||||
|
if !c.Flag("logfile").Changed {
|
||||||
|
return options, nil, nil, errors.Errorf("cannot use --logsplit without --logfile")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
iopts.BudResults.Authfile, cleanTmpFile = util.MirrorToTempFileIfPathIsDescriptor(iopts.BudResults.Authfile)
|
||||||
|
if cleanTmpFile {
|
||||||
|
removeAll = append(removeAll, iopts.BudResults.Authfile)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Allow for --pull, --pull=true, --pull=false, --pull=never, --pull=always
|
||||||
|
// --pull-always and --pull-never. The --pull-never and --pull-always options
|
||||||
|
// will not be documented.
|
||||||
|
pullPolicy := define.PullIfMissing
|
||||||
|
if strings.EqualFold(strings.TrimSpace(iopts.Pull), "true") {
|
||||||
|
pullPolicy = define.PullIfNewer
|
||||||
|
}
|
||||||
|
if iopts.PullAlways || strings.EqualFold(strings.TrimSpace(iopts.Pull), "always") {
|
||||||
|
pullPolicy = define.PullAlways
|
||||||
|
}
|
||||||
|
if iopts.PullNever || strings.EqualFold(strings.TrimSpace(iopts.Pull), "never") {
|
||||||
|
pullPolicy = define.PullNever
|
||||||
|
}
|
||||||
|
logrus.Debugf("Pull Policy for pull [%v]", pullPolicy)
|
||||||
|
|
||||||
|
args := make(map[string]string)
|
||||||
|
if c.Flag("build-arg").Changed {
|
||||||
|
for _, arg := range iopts.BuildArg {
|
||||||
|
av := strings.SplitN(arg, "=", 2)
|
||||||
|
if len(av) > 1 {
|
||||||
|
args[av[0]] = av[1]
|
||||||
|
} else {
|
||||||
|
// check if the env is set in the local environment and use that value if it is
|
||||||
|
if val, present := os.LookupEnv(av[0]); present {
|
||||||
|
args[av[0]] = val
|
||||||
|
} else {
|
||||||
|
delete(args, av[0])
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
additionalBuildContext := make(map[string]*define.AdditionalBuildContext)
|
||||||
|
if c.Flag("build-context").Changed {
|
||||||
|
for _, contextString := range iopts.BuildContext {
|
||||||
|
av := strings.SplitN(contextString, "=", 2)
|
||||||
|
if len(av) > 1 {
|
||||||
|
parseAdditionalBuildContext, err := parse.GetAdditionalBuildContext(av[1])
|
||||||
|
if err != nil {
|
||||||
|
return options, nil, nil, errors.Wrapf(err, "while parsing additional build context")
|
||||||
|
}
|
||||||
|
additionalBuildContext[av[0]] = &parseAdditionalBuildContext
|
||||||
|
} else {
|
||||||
|
return options, nil, nil, fmt.Errorf("while parsing additional build context: %q, accepts value in the form of key=value", av)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
containerfiles := getContainerfiles(iopts.File)
|
||||||
|
format, err := GetFormat(iopts.Format)
|
||||||
|
if err != nil {
|
||||||
|
return options, nil, nil, err
|
||||||
|
}
|
||||||
|
layers := UseLayers()
|
||||||
|
if c.Flag("layers").Changed {
|
||||||
|
layers = iopts.Layers
|
||||||
|
}
|
||||||
|
contextDir := ""
|
||||||
|
cliArgs := inputArgs
|
||||||
|
|
||||||
|
// Nothing provided, we assume the current working directory as build
|
||||||
|
// context
|
||||||
|
if len(cliArgs) == 0 {
|
||||||
|
contextDir, err = os.Getwd()
|
||||||
|
if err != nil {
|
||||||
|
return options, nil, nil, errors.Wrapf(err, "unable to choose current working directory as build context")
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// The context directory could be a URL. Try to handle that.
|
||||||
|
tempDir, subDir, err := define.TempDirForURL("", "buildah", cliArgs[0])
|
||||||
|
if err != nil {
|
||||||
|
return options, nil, nil, errors.Wrapf(err, "error prepping temporary context directory")
|
||||||
|
}
|
||||||
|
if tempDir != "" {
|
||||||
|
// We had to download it to a temporary directory.
|
||||||
|
// Delete it later.
|
||||||
|
removeAll = append(removeAll, tempDir)
|
||||||
|
contextDir = filepath.Join(tempDir, subDir)
|
||||||
|
} else {
|
||||||
|
// Nope, it was local. Use it as is.
|
||||||
|
absDir, err := filepath.Abs(cliArgs[0])
|
||||||
|
if err != nil {
|
||||||
|
return options, nil, nil, errors.Wrapf(err, "error determining path to directory")
|
||||||
|
}
|
||||||
|
contextDir = absDir
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(containerfiles) == 0 {
|
||||||
|
// Try to find the Containerfile/Dockerfile within the contextDir
|
||||||
|
containerfile, err := util.DiscoverContainerfile(contextDir)
|
||||||
|
if err != nil {
|
||||||
|
return options, nil, nil, err
|
||||||
|
}
|
||||||
|
containerfiles = append(containerfiles, containerfile)
|
||||||
|
contextDir = filepath.Dir(containerfile)
|
||||||
|
}
|
||||||
|
|
||||||
|
contextDir, err = filepath.EvalSymlinks(contextDir)
|
||||||
|
if err != nil {
|
||||||
|
return options, nil, nil, errors.Wrapf(err, "error evaluating symlinks in build context path")
|
||||||
|
}
|
||||||
|
|
||||||
|
var stdin io.Reader
|
||||||
|
if iopts.Stdin {
|
||||||
|
stdin = os.Stdin
|
||||||
|
}
|
||||||
|
|
||||||
|
var stdout, stderr, reporter *os.File
|
||||||
|
stdout = os.Stdout
|
||||||
|
stderr = os.Stderr
|
||||||
|
reporter = os.Stderr
|
||||||
|
if iopts.Logwriter != nil {
|
||||||
|
logrus.SetOutput(iopts.Logwriter)
|
||||||
|
stdout = iopts.Logwriter
|
||||||
|
stderr = iopts.Logwriter
|
||||||
|
reporter = iopts.Logwriter
|
||||||
|
}
|
||||||
|
|
||||||
|
systemContext, err := parse.SystemContextFromOptions(c)
|
||||||
|
if err != nil {
|
||||||
|
return options, nil, nil, errors.Wrapf(err, "error building system context")
|
||||||
|
}
|
||||||
|
|
||||||
|
isolation, err := parse.IsolationOption(iopts.Isolation)
|
||||||
|
if err != nil {
|
||||||
|
return options, nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
runtimeFlags := []string{}
|
||||||
|
for _, arg := range iopts.RuntimeFlags {
|
||||||
|
runtimeFlags = append(runtimeFlags, "--"+arg)
|
||||||
|
}
|
||||||
|
|
||||||
|
commonOpts, err := parse.CommonBuildOptions(c)
|
||||||
|
if err != nil {
|
||||||
|
return options, nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
pullFlagsCount := 0
|
||||||
|
if c.Flag("pull").Changed {
|
||||||
|
pullFlagsCount++
|
||||||
|
}
|
||||||
|
if c.Flag("pull-always").Changed {
|
||||||
|
pullFlagsCount++
|
||||||
|
}
|
||||||
|
if c.Flag("pull-never").Changed {
|
||||||
|
pullFlagsCount++
|
||||||
|
}
|
||||||
|
|
||||||
|
if pullFlagsCount > 1 {
|
||||||
|
return options, nil, nil, errors.Errorf("can only set one of 'pull' or 'pull-always' or 'pull-never'")
|
||||||
|
}
|
||||||
|
|
||||||
|
if (c.Flag("rm").Changed || c.Flag("force-rm").Changed) && (!c.Flag("layers").Changed && !c.Flag("no-cache").Changed) {
|
||||||
|
return options, nil, nil, errors.Errorf("'rm' and 'force-rm' can only be set with either 'layers' or 'no-cache'")
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.Flag("cache-from").Changed {
|
||||||
|
logrus.Debugf("build --cache-from not enabled, has no effect")
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.Flag("compress").Changed {
|
||||||
|
logrus.Debugf("--compress option specified but is ignored")
|
||||||
|
}
|
||||||
|
|
||||||
|
compression := define.Gzip
|
||||||
|
if iopts.DisableCompression {
|
||||||
|
compression = define.Uncompressed
|
||||||
|
}
|
||||||
|
|
||||||
|
if c.Flag("disable-content-trust").Changed {
|
||||||
|
logrus.Debugf("--disable-content-trust option specified but is ignored")
|
||||||
|
}
|
||||||
|
|
||||||
|
namespaceOptions, networkPolicy, err := parse.NamespaceOptions(c)
|
||||||
|
if err != nil {
|
||||||
|
return options, nil, nil, err
|
||||||
|
}
|
||||||
|
usernsOption, idmappingOptions, err := parse.IDMappingOptions(c, isolation)
|
||||||
|
if err != nil {
|
||||||
|
return options, nil, nil, errors.Wrapf(err, "error parsing ID mapping options")
|
||||||
|
}
|
||||||
|
namespaceOptions.AddOrReplace(usernsOption...)
|
||||||
|
|
||||||
|
platforms, err := parse.PlatformsFromOptions(c)
|
||||||
|
if err != nil {
|
||||||
|
return options, nil, nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
decryptConfig, err := DecryptConfig(iopts.DecryptionKeys)
|
||||||
|
if err != nil {
|
||||||
|
return options, nil, nil, errors.Wrapf(err, "unable to obtain decrypt config")
|
||||||
|
}
|
||||||
|
|
||||||
|
var excludes []string
|
||||||
|
if iopts.IgnoreFile != "" {
|
||||||
|
if excludes, _, err = parse.ContainerIgnoreFile(contextDir, iopts.IgnoreFile); err != nil {
|
||||||
|
return options, nil, nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var timestamp *time.Time
|
||||||
|
if c.Flag("timestamp").Changed {
|
||||||
|
t := time.Unix(iopts.Timestamp, 0).UTC()
|
||||||
|
timestamp = &t
|
||||||
|
}
|
||||||
|
if c.Flag("output").Changed {
|
||||||
|
buildOption, err := parse.GetBuildOutput(iopts.BuildOutput)
|
||||||
|
if err != nil {
|
||||||
|
return options, nil, nil, err
|
||||||
|
}
|
||||||
|
if buildOption.IsStdout {
|
||||||
|
iopts.Quiet = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
options = define.BuildOptions{
|
||||||
|
AddCapabilities: iopts.CapAdd,
|
||||||
|
AdditionalTags: tags,
|
||||||
|
AllPlatforms: iopts.AllPlatforms,
|
||||||
|
Annotations: iopts.Annotation,
|
||||||
|
Architecture: systemContext.ArchitectureChoice,
|
||||||
|
Args: args,
|
||||||
|
AdditionalBuildContexts: additionalBuildContext,
|
||||||
|
BlobDirectory: iopts.BlobCache,
|
||||||
|
CNIConfigDir: iopts.CNIConfigDir,
|
||||||
|
CNIPluginPath: iopts.CNIPlugInPath,
|
||||||
|
CommonBuildOpts: commonOpts,
|
||||||
|
Compression: compression,
|
||||||
|
ConfigureNetwork: networkPolicy,
|
||||||
|
ContextDirectory: contextDir,
|
||||||
|
CPPFlags: iopts.CPPFlags,
|
||||||
|
Devices: iopts.Devices,
|
||||||
|
DropCapabilities: iopts.CapDrop,
|
||||||
|
Err: stderr,
|
||||||
|
ForceRmIntermediateCtrs: iopts.ForceRm,
|
||||||
|
From: iopts.From,
|
||||||
|
IDMappingOptions: idmappingOptions,
|
||||||
|
IIDFile: iopts.Iidfile,
|
||||||
|
In: stdin,
|
||||||
|
Isolation: isolation,
|
||||||
|
IgnoreFile: iopts.IgnoreFile,
|
||||||
|
Labels: iopts.Label,
|
||||||
|
Layers: layers,
|
||||||
|
LogFile: iopts.Logfile,
|
||||||
|
LogSplitByPlatform: iopts.LogSplitByPlatform,
|
||||||
|
LogRusage: iopts.LogRusage,
|
||||||
|
Manifest: iopts.Manifest,
|
||||||
|
MaxPullPushRetries: MaxPullPushRetries,
|
||||||
|
NamespaceOptions: namespaceOptions,
|
||||||
|
NoCache: iopts.NoCache,
|
||||||
|
OS: systemContext.OSChoice,
|
||||||
|
Out: stdout,
|
||||||
|
Output: output,
|
||||||
|
BuildOutput: iopts.BuildOutput,
|
||||||
|
OutputFormat: format,
|
||||||
|
PullPolicy: pullPolicy,
|
||||||
|
PullPushRetryDelay: PullPushRetryDelay,
|
||||||
|
Quiet: iopts.Quiet,
|
||||||
|
RemoveIntermediateCtrs: iopts.Rm,
|
||||||
|
ReportWriter: reporter,
|
||||||
|
Runtime: iopts.Runtime,
|
||||||
|
RuntimeArgs: runtimeFlags,
|
||||||
|
RusageLogFile: iopts.RusageLogFile,
|
||||||
|
SignBy: iopts.SignBy,
|
||||||
|
SignaturePolicyPath: iopts.SignaturePolicy,
|
||||||
|
Squash: iopts.Squash,
|
||||||
|
SystemContext: systemContext,
|
||||||
|
Target: iopts.Target,
|
||||||
|
TransientMounts: iopts.Volumes,
|
||||||
|
OciDecryptConfig: decryptConfig,
|
||||||
|
Jobs: &iopts.Jobs,
|
||||||
|
Excludes: excludes,
|
||||||
|
Timestamp: timestamp,
|
||||||
|
Platforms: platforms,
|
||||||
|
UnsetEnvs: iopts.UnsetEnvs,
|
||||||
|
Envs: iopts.Envs,
|
||||||
|
OSFeatures: iopts.OSFeatures,
|
||||||
|
OSVersion: iopts.OSVersion,
|
||||||
|
}
|
||||||
|
if iopts.Quiet {
|
||||||
|
options.ReportWriter = ioutil.Discard
|
||||||
|
}
|
||||||
|
return options, containerfiles, removeAll, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func getContainerfiles(files []string) []string {
|
||||||
|
var containerfiles []string
|
||||||
|
for _, f := range files {
|
||||||
|
if f == "-" {
|
||||||
|
containerfiles = append(containerfiles, "/dev/stdin")
|
||||||
|
} else {
|
||||||
|
containerfiles = append(containerfiles, f)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return containerfiles
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetFormat translates format string into either docker or OCI format constant
|
||||||
|
func GetFormat(format string) (string, error) {
|
||||||
|
switch format {
|
||||||
|
case define.OCI:
|
||||||
|
return define.OCIv1ImageManifest, nil
|
||||||
|
case define.DOCKER:
|
||||||
|
return define.Dockerv2ImageManifest, nil
|
||||||
|
default:
|
||||||
|
return "", errors.Errorf("unrecognized image type %q", format)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// DecryptConfig translates decryptionKeys into a DescriptionConfig structure
|
||||||
|
func DecryptConfig(decryptionKeys []string) (*encconfig.DecryptConfig, error) {
|
||||||
|
decryptConfig := &encconfig.DecryptConfig{}
|
||||||
|
if len(decryptionKeys) > 0 {
|
||||||
|
// decryption
|
||||||
|
dcc, err := enchelpers.CreateCryptoConfig([]string{}, decryptionKeys)
|
||||||
|
if err != nil {
|
||||||
|
return nil, errors.Wrapf(err, "invalid decryption keys")
|
||||||
|
}
|
||||||
|
cc := encconfig.CombineCryptoConfigs([]encconfig.CryptoConfig{dcc})
|
||||||
|
decryptConfig = cc.DecryptConfig
|
||||||
|
}
|
||||||
|
|
||||||
|
return decryptConfig, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// EncryptConfig translates encryptionKeys into a EncriptionsConfig structure
|
||||||
|
func EncryptConfig(encryptionKeys []string, encryptLayers []int) (*encconfig.EncryptConfig, *[]int, error) {
|
||||||
|
var encLayers *[]int
|
||||||
|
var encConfig *encconfig.EncryptConfig
|
||||||
|
|
||||||
|
if len(encryptionKeys) > 0 {
|
||||||
|
// encryption
|
||||||
|
encLayers = &encryptLayers
|
||||||
|
ecc, err := enchelpers.CreateCryptoConfig(encryptionKeys, []string{})
|
||||||
|
if err != nil {
|
||||||
|
return nil, nil, errors.Wrapf(err, "invalid encryption keys")
|
||||||
|
}
|
||||||
|
cc := encconfig.CombineCryptoConfigs([]encconfig.CryptoConfig{ecc})
|
||||||
|
encConfig = cc.EncryptConfig
|
||||||
|
}
|
||||||
|
return encConfig, encLayers, nil
|
||||||
|
}
|
6
vendor/github.com/containers/buildah/pkg/cli/common.go
generated
vendored
6
vendor/github.com/containers/buildah/pkg/cli/common.go
generated
vendored
@ -68,10 +68,12 @@ type BudResults struct {
|
|||||||
Iidfile string
|
Iidfile string
|
||||||
Label []string
|
Label []string
|
||||||
Logfile string
|
Logfile string
|
||||||
|
LogSplitByPlatform bool
|
||||||
Manifest string
|
Manifest string
|
||||||
NoHosts bool
|
NoHosts bool
|
||||||
NoCache bool
|
NoCache bool
|
||||||
Timestamp int64
|
Timestamp int64
|
||||||
|
OmitHistory bool
|
||||||
Pull string
|
Pull string
|
||||||
PullAlways bool
|
PullAlways bool
|
||||||
PullNever bool
|
PullNever bool
|
||||||
@ -210,6 +212,7 @@ func GetBudFlags(flags *BudResults) pflag.FlagSet {
|
|||||||
fs.IntVar(&flags.Jobs, "jobs", 1, "how many stages to run in parallel")
|
fs.IntVar(&flags.Jobs, "jobs", 1, "how many stages to run in parallel")
|
||||||
fs.StringArrayVar(&flags.Label, "label", []string{}, "set metadata for an image (default [])")
|
fs.StringArrayVar(&flags.Label, "label", []string{}, "set metadata for an image (default [])")
|
||||||
fs.StringVar(&flags.Logfile, "logfile", "", "log to `file` instead of stdout/stderr")
|
fs.StringVar(&flags.Logfile, "logfile", "", "log to `file` instead of stdout/stderr")
|
||||||
|
fs.BoolVar(&flags.LogSplitByPlatform, "logsplit", false, "split logfile to different files for each platform")
|
||||||
fs.Int("loglevel", 0, "NO LONGER USED, flag ignored, and hidden")
|
fs.Int("loglevel", 0, "NO LONGER USED, flag ignored, and hidden")
|
||||||
if err := fs.MarkHidden("loglevel"); err != nil {
|
if err := fs.MarkHidden("loglevel"); err != nil {
|
||||||
panic(fmt.Sprintf("error marking the loglevel flag as hidden: %v", err))
|
panic(fmt.Sprintf("error marking the loglevel flag as hidden: %v", err))
|
||||||
@ -239,7 +242,8 @@ func GetBudFlags(flags *BudResults) pflag.FlagSet {
|
|||||||
panic(fmt.Sprintf("error marking the pull-never flag as hidden: %v", err))
|
panic(fmt.Sprintf("error marking the pull-never flag as hidden: %v", err))
|
||||||
}
|
}
|
||||||
fs.BoolVarP(&flags.Quiet, "quiet", "q", false, "refrain from announcing build instructions and image read/write progress")
|
fs.BoolVarP(&flags.Quiet, "quiet", "q", false, "refrain from announcing build instructions and image read/write progress")
|
||||||
fs.BoolVar(&flags.IdentityLabel, "identity-label", true, "add default identity label (default true)")
|
fs.BoolVar(&flags.OmitHistory, "omit-history", false, "omit build history information from built image")
|
||||||
|
fs.BoolVar(&flags.IdentityLabel, "identity-label", true, "add default identity label")
|
||||||
fs.BoolVar(&flags.Rm, "rm", true, "remove intermediate containers after a successful build")
|
fs.BoolVar(&flags.Rm, "rm", true, "remove intermediate containers after a successful build")
|
||||||
// "runtime" definition moved to avoid name collision in podman build. Defined in cmd/buildah/build.go.
|
// "runtime" definition moved to avoid name collision in podman build. Defined in cmd/buildah/build.go.
|
||||||
fs.StringSliceVar(&flags.RuntimeFlags, "runtime-flag", []string{}, "add global flags for the container runtime")
|
fs.StringSliceVar(&flags.RuntimeFlags, "runtime-flag", []string{}, "add global flags for the container runtime")
|
||||||
|
4
vendor/github.com/containers/buildah/pkg/overlay/overlay.go
generated
vendored
4
vendor/github.com/containers/buildah/pkg/overlay/overlay.go
generated
vendored
@ -26,7 +26,7 @@ type Options struct {
|
|||||||
// Note!! : Following API does not handles escaping or validates correctness of the values
|
// Note!! : Following API does not handles escaping or validates correctness of the values
|
||||||
// passed to UpperDirOptionFragment instead API will try to pass values as is it
|
// passed to UpperDirOptionFragment instead API will try to pass values as is it
|
||||||
// to the `mount` command. It is user's responsibility to make sure they pre-validate
|
// to the `mount` command. It is user's responsibility to make sure they pre-validate
|
||||||
// these values. Invalid inputs may lead to undefined behviour.
|
// these values. Invalid inputs may lead to undefined behaviour.
|
||||||
// This is provided as-is, use it if it works for you, we can/will change/break that in the future.
|
// This is provided as-is, use it if it works for you, we can/will change/break that in the future.
|
||||||
// See discussion here for more context: https://github.com/containers/buildah/pull/3715#discussion_r786036959
|
// See discussion here for more context: https://github.com/containers/buildah/pull/3715#discussion_r786036959
|
||||||
// TODO: Should we address above comment and handle escaping of metacharacters like
|
// TODO: Should we address above comment and handle escaping of metacharacters like
|
||||||
@ -36,7 +36,7 @@ type Options struct {
|
|||||||
// Note!! : Following API does not handles escaping or validates correctness of the values
|
// Note!! : Following API does not handles escaping or validates correctness of the values
|
||||||
// passed to WorkDirOptionFragment instead API will try to pass values as is it
|
// passed to WorkDirOptionFragment instead API will try to pass values as is it
|
||||||
// to the `mount` command. It is user's responsibility to make sure they pre-validate
|
// to the `mount` command. It is user's responsibility to make sure they pre-validate
|
||||||
// these values. Invalid inputs may lead to undefined behviour.
|
// these values. Invalid inputs may lead to undefined behaviour.
|
||||||
// This is provided as-is, use it if it works for you, we can/will change/break that in the future.
|
// This is provided as-is, use it if it works for you, we can/will change/break that in the future.
|
||||||
// See discussion here for more context: https://github.com/containers/buildah/pull/3715#discussion_r786036959
|
// See discussion here for more context: https://github.com/containers/buildah/pull/3715#discussion_r786036959
|
||||||
// TODO: Should we address above comment and handle escaping of metacharacters like
|
// TODO: Should we address above comment and handle escaping of metacharacters like
|
||||||
|
2
vendor/github.com/containers/buildah/pkg/parse/parse.go
generated
vendored
2
vendor/github.com/containers/buildah/pkg/parse/parse.go
generated
vendored
@ -137,6 +137,7 @@ func CommonBuildOptionsFromFlagSet(flags *pflag.FlagSet, findFlagFunc func(name
|
|||||||
cpuShares, _ := flags.GetUint64("cpu-shares")
|
cpuShares, _ := flags.GetUint64("cpu-shares")
|
||||||
httpProxy, _ := flags.GetBool("http-proxy")
|
httpProxy, _ := flags.GetBool("http-proxy")
|
||||||
identityLabel, _ := flags.GetBool("identity-label")
|
identityLabel, _ := flags.GetBool("identity-label")
|
||||||
|
omitHistory, _ := flags.GetBool("omit-history")
|
||||||
|
|
||||||
ulimit := []string{}
|
ulimit := []string{}
|
||||||
if flags.Changed("ulimit") {
|
if flags.Changed("ulimit") {
|
||||||
@ -162,6 +163,7 @@ func CommonBuildOptionsFromFlagSet(flags *pflag.FlagSet, findFlagFunc func(name
|
|||||||
Memory: memoryLimit,
|
Memory: memoryLimit,
|
||||||
MemorySwap: memorySwap,
|
MemorySwap: memorySwap,
|
||||||
NoHosts: noHosts,
|
NoHosts: noHosts,
|
||||||
|
OmitHistory: omitHistory,
|
||||||
ShmSize: findFlagFunc("shm-size").Value.String(),
|
ShmSize: findFlagFunc("shm-size").Value.String(),
|
||||||
Ulimit: ulimit,
|
Ulimit: ulimit,
|
||||||
Volumes: volumes,
|
Volumes: volumes,
|
||||||
|
10
vendor/github.com/containers/buildah/pkg/parse/parse_unix.go
generated
vendored
10
vendor/github.com/containers/buildah/pkg/parse/parse_unix.go
generated
vendored
@ -7,7 +7,6 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
||||||
"github.com/containers/buildah/define"
|
"github.com/containers/buildah/define"
|
||||||
"github.com/containers/storage/pkg/unshare"
|
|
||||||
"github.com/opencontainers/runc/libcontainer/devices"
|
"github.com/opencontainers/runc/libcontainer/devices"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
)
|
)
|
||||||
@ -18,9 +17,6 @@ func DeviceFromPath(device string) (define.ContainerDevices, error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if unshare.IsRootless() && src != dst {
|
|
||||||
return nil, errors.Errorf("Renaming device %s to %s is not supported in rootless containers", src, dst)
|
|
||||||
}
|
|
||||||
srcInfo, err := os.Stat(src)
|
srcInfo, err := os.Stat(src)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, errors.Wrapf(err, "error getting info of source device %s", src)
|
return nil, errors.Wrapf(err, "error getting info of source device %s", src)
|
||||||
@ -32,7 +28,8 @@ func DeviceFromPath(device string) (define.ContainerDevices, error) {
|
|||||||
return nil, errors.Wrapf(err, "%s is not a valid device", src)
|
return nil, errors.Wrapf(err, "%s is not a valid device", src)
|
||||||
}
|
}
|
||||||
dev.Path = dst
|
dev.Path = dst
|
||||||
devs = append(devs, *dev)
|
device := define.BuildahDevice{Device: *dev, Source: src, Destination: dst}
|
||||||
|
devs = append(devs, device)
|
||||||
return devs, nil
|
return devs, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -44,7 +41,8 @@ func DeviceFromPath(device string) (define.ContainerDevices, error) {
|
|||||||
for _, d := range srcDevices {
|
for _, d := range srcDevices {
|
||||||
d.Path = filepath.Join(dst, filepath.Base(d.Path))
|
d.Path = filepath.Join(dst, filepath.Base(d.Path))
|
||||||
d.Permissions = devices.Permissions(permissions)
|
d.Permissions = devices.Permissions(permissions)
|
||||||
devs = append(devs, *d)
|
device := define.BuildahDevice{Device: *d, Source: src, Destination: dst}
|
||||||
|
devs = append(devs, device)
|
||||||
}
|
}
|
||||||
return devs, nil
|
return devs, nil
|
||||||
}
|
}
|
||||||
|
25
vendor/github.com/containers/buildah/run.go
generated
vendored
25
vendor/github.com/containers/buildah/run.go
generated
vendored
@ -9,6 +9,7 @@ import (
|
|||||||
"github.com/containers/buildah/pkg/sshagent"
|
"github.com/containers/buildah/pkg/sshagent"
|
||||||
"github.com/containers/image/v5/types"
|
"github.com/containers/image/v5/types"
|
||||||
"github.com/opencontainers/runtime-spec/specs-go"
|
"github.com/opencontainers/runtime-spec/specs-go"
|
||||||
|
spec "github.com/opencontainers/runtime-spec/specs-go"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -178,3 +179,27 @@ type runMountArtifacts struct {
|
|||||||
// LockedTargets to be unlocked if there are any.
|
// LockedTargets to be unlocked if there are any.
|
||||||
LockedTargets []string
|
LockedTargets []string
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// RunMountInfo are the available run mounts for this run
|
||||||
|
type runMountInfo struct {
|
||||||
|
// ContextDir is the root directory for the source location for bind mounts.
|
||||||
|
ContextDir string
|
||||||
|
// Secrets are the available secrets to use in a RUN
|
||||||
|
Secrets map[string]define.Secret
|
||||||
|
// SSHSources is the available ssh agents to use in a RUN
|
||||||
|
SSHSources map[string]*sshagent.Source `json:"-"`
|
||||||
|
// Map of stages and container mountpoint if any from stage executor
|
||||||
|
StageMountPoints map[string]internal.StageMountDetails
|
||||||
|
// System context of current build
|
||||||
|
SystemContext *types.SystemContext
|
||||||
|
}
|
||||||
|
|
||||||
|
// IDMaps are the UIDs, GID, and maps for the run
|
||||||
|
type IDMaps struct {
|
||||||
|
uidmap []spec.LinuxIDMapping
|
||||||
|
gidmap []spec.LinuxIDMapping
|
||||||
|
rootUID int
|
||||||
|
rootGID int
|
||||||
|
processUID int
|
||||||
|
processGID int
|
||||||
|
}
|
||||||
|
136
vendor/github.com/containers/buildah/run_linux.go
generated
vendored
136
vendor/github.com/containers/buildah/run_linux.go
generated
vendored
@ -144,6 +144,43 @@ func (b *Builder) Run(command []string, options RunOptions) error {
|
|||||||
g.SetProcessArgs(nil)
|
g.SetProcessArgs(nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Mount devices if any and if session is rootless attempt a bind-mount
|
||||||
|
// just like podman.
|
||||||
|
if unshare.IsRootless() {
|
||||||
|
// We are going to create bind mounts for devices
|
||||||
|
// but we need to make sure that we don't override
|
||||||
|
// anything which is already in OCI spec.
|
||||||
|
mounts := make(map[string]interface{})
|
||||||
|
for _, m := range g.Mounts() {
|
||||||
|
mounts[m.Destination] = true
|
||||||
|
}
|
||||||
|
newMounts := []spec.Mount{}
|
||||||
|
for _, d := range b.Devices {
|
||||||
|
// Default permission is read-only.
|
||||||
|
perm := "ro"
|
||||||
|
// Get permission configured for this device but only process `write`
|
||||||
|
// permission in rootless since `mknod` is not supported anyways.
|
||||||
|
if strings.Contains(string(d.Rule.Permissions), "w") {
|
||||||
|
perm = "rw"
|
||||||
|
}
|
||||||
|
devMnt := spec.Mount{
|
||||||
|
Destination: d.Destination,
|
||||||
|
Type: parse.TypeBind,
|
||||||
|
Source: d.Source,
|
||||||
|
Options: []string{"slave", "nosuid", "noexec", perm, "rbind"},
|
||||||
|
}
|
||||||
|
// Podman parity: podman skips these two devices hence we do the same.
|
||||||
|
if d.Path == "/dev/ptmx" || strings.HasPrefix(d.Path, "/dev/tty") {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
// Device is already in OCI spec do not re-mount.
|
||||||
|
if _, found := mounts[d.Path]; found {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
newMounts = append(newMounts, devMnt)
|
||||||
|
}
|
||||||
|
g.Config.Mounts = append(newMounts, g.Config.Mounts...)
|
||||||
|
} else {
|
||||||
for _, d := range b.Devices {
|
for _, d := range b.Devices {
|
||||||
sDev := spec.LinuxDevice{
|
sDev := spec.LinuxDevice{
|
||||||
Type: string(d.Type),
|
Type: string(d.Type),
|
||||||
@ -157,6 +194,7 @@ func (b *Builder) Run(command []string, options RunOptions) error {
|
|||||||
g.AddDevice(sDev)
|
g.AddDevice(sDev)
|
||||||
g.AddLinuxResourcesDevice(true, string(d.Type), &d.Major, &d.Minor, string(d.Permissions))
|
g.AddLinuxResourcesDevice(true, string(d.Type), &d.Major, &d.Minor, string(d.Permissions))
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
setupMaskedPaths(g)
|
setupMaskedPaths(g)
|
||||||
setupReadOnlyPaths(g)
|
setupReadOnlyPaths(g)
|
||||||
@ -283,7 +321,16 @@ rootless=%d
|
|||||||
|
|
||||||
bindFiles["/run/.containerenv"] = containerenvPath
|
bindFiles["/run/.containerenv"] = containerenvPath
|
||||||
}
|
}
|
||||||
runArtifacts, err := b.setupMounts(options.SystemContext, mountPoint, spec, path, options.Mounts, bindFiles, volumes, b.CommonBuildOpts.Volumes, options.Secrets, options.SSHSources, options.RunMounts, options.ContextDir, options.StageMountPoints)
|
|
||||||
|
runMountInfo := runMountInfo{
|
||||||
|
ContextDir: options.ContextDir,
|
||||||
|
Secrets: options.Secrets,
|
||||||
|
SSHSources: options.SSHSources,
|
||||||
|
StageMountPoints: options.StageMountPoints,
|
||||||
|
SystemContext: options.SystemContext,
|
||||||
|
}
|
||||||
|
|
||||||
|
runArtifacts, err := b.setupMounts(mountPoint, spec, path, options.Mounts, bindFiles, volumes, b.CommonBuildOpts.Volumes, options.RunMounts, runMountInfo)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return errors.Wrapf(err, "error resolving mountpoints for container %q", b.ContainerID)
|
return errors.Wrapf(err, "error resolving mountpoints for container %q", b.ContainerID)
|
||||||
}
|
}
|
||||||
@ -440,7 +487,7 @@ func runSetupBuiltinVolumes(mountLabel, mountPoint, containerDir string, builtin
|
|||||||
return mounts, nil
|
return mounts, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Builder) setupMounts(context *imagetypes.SystemContext, mountPoint string, spec *specs.Spec, bundlePath string, optionMounts []specs.Mount, bindFiles map[string]string, builtinVolumes, volumeMounts []string, secrets map[string]define.Secret, sshSources map[string]*sshagent.Source, runFileMounts []string, contextDir string, stageMountPoints map[string]internal.StageMountDetails) (*runMountArtifacts, error) {
|
func (b *Builder) setupMounts(mountPoint string, spec *specs.Spec, bundlePath string, optionMounts []specs.Mount, bindFiles map[string]string, builtinVolumes, volumeMounts []string, runFileMounts []string, runMountInfo runMountInfo) (*runMountArtifacts, error) {
|
||||||
// Start building a new list of mounts.
|
// Start building a new list of mounts.
|
||||||
var mounts []specs.Mount
|
var mounts []specs.Mount
|
||||||
haveMount := func(destination string) bool {
|
haveMount := func(destination string) bool {
|
||||||
@ -483,9 +530,16 @@ func (b *Builder) setupMounts(context *imagetypes.SystemContext, mountPoint stri
|
|||||||
// Get the list of subscriptions mounts.
|
// Get the list of subscriptions mounts.
|
||||||
subscriptionMounts := subscriptions.MountsWithUIDGID(b.MountLabel, cdir, b.DefaultMountsFilePath, mountPoint, int(rootUID), int(rootGID), unshare.IsRootless(), false)
|
subscriptionMounts := subscriptions.MountsWithUIDGID(b.MountLabel, cdir, b.DefaultMountsFilePath, mountPoint, int(rootUID), int(rootGID), unshare.IsRootless(), false)
|
||||||
|
|
||||||
|
idMaps := IDMaps{
|
||||||
|
uidmap: spec.Linux.UIDMappings,
|
||||||
|
gidmap: spec.Linux.GIDMappings,
|
||||||
|
rootUID: int(rootUID),
|
||||||
|
rootGID: int(rootGID),
|
||||||
|
processUID: int(processUID),
|
||||||
|
processGID: int(processGID),
|
||||||
|
}
|
||||||
// Get the list of mounts that are just for this Run() call.
|
// Get the list of mounts that are just for this Run() call.
|
||||||
// TODO: acui: de-spaghettify run mounts
|
runMounts, mountArtifacts, err := b.runSetupRunMounts(runFileMounts, runMountInfo, idMaps)
|
||||||
runMounts, mountArtifacts, err := b.runSetupRunMounts(context, runFileMounts, secrets, stageMountPoints, sshSources, cdir, contextDir, spec.Linux.UIDMappings, spec.Linux.GIDMappings, int(rootUID), int(rootGID), int(processUID), int(processGID))
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -497,7 +551,7 @@ func (b *Builder) setupMounts(context *imagetypes.SystemContext, mountPoint stri
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Get the list of explicitly-specified volume mounts.
|
// Get the list of explicitly-specified volume mounts.
|
||||||
volumes, err := b.runSetupVolumeMounts(spec.Linux.MountLabel, volumeMounts, optionMounts, int(rootUID), int(rootGID), int(processUID), int(processGID))
|
volumes, err := b.runSetupVolumeMounts(spec.Linux.MountLabel, volumeMounts, optionMounts, idMaps)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -1765,7 +1819,7 @@ func (b *Builder) cleanupTempVolumes() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Builder) runSetupVolumeMounts(mountLabel string, volumeMounts []string, optionMounts []specs.Mount, rootUID, rootGID, processUID, processGID int) (mounts []specs.Mount, Err error) {
|
func (b *Builder) runSetupVolumeMounts(mountLabel string, volumeMounts []string, optionMounts []specs.Mount, idMaps IDMaps) (mounts []specs.Mount, Err error) {
|
||||||
// Make sure the overlay directory is clean before running
|
// Make sure the overlay directory is clean before running
|
||||||
containerDir, err := b.store.ContainerDirectory(b.ContainerID)
|
containerDir, err := b.store.ContainerDirectory(b.ContainerID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -1823,7 +1877,7 @@ func (b *Builder) runSetupVolumeMounts(mountLabel string, volumeMounts []string,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if foundU {
|
if foundU {
|
||||||
if err := chown.ChangeHostPathOwnership(host, true, processUID, processGID); err != nil {
|
if err := chown.ChangeHostPathOwnership(host, true, idMaps.processUID, idMaps.processGID); err != nil {
|
||||||
return specs.Mount{}, err
|
return specs.Mount{}, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1837,13 +1891,14 @@ func (b *Builder) runSetupVolumeMounts(mountLabel string, volumeMounts []string,
|
|||||||
return specs.Mount{}, err
|
return specs.Mount{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
contentDir, err := overlay.TempDir(containerDir, rootUID, rootGID)
|
contentDir, err := overlay.TempDir(containerDir, idMaps.rootUID, idMaps.rootGID)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return specs.Mount{}, errors.Wrapf(err, "failed to create TempDir in the %s directory", containerDir)
|
return specs.Mount{}, errors.Wrapf(err, "failed to create TempDir in the %s directory", containerDir)
|
||||||
}
|
}
|
||||||
|
|
||||||
overlayOpts := overlay.Options{RootUID: rootUID,
|
overlayOpts := overlay.Options{
|
||||||
RootGID: rootGID,
|
RootUID: idMaps.rootUID,
|
||||||
|
RootGID: idMaps.rootGID,
|
||||||
UpperDirOptionFragment: upperDir,
|
UpperDirOptionFragment: upperDir,
|
||||||
WorkDirOptionFragment: workDir,
|
WorkDirOptionFragment: workDir,
|
||||||
GraphOpts: b.store.GraphOptions(),
|
GraphOpts: b.store.GraphOptions(),
|
||||||
@ -1856,7 +1911,7 @@ func (b *Builder) runSetupVolumeMounts(mountLabel string, volumeMounts []string,
|
|||||||
|
|
||||||
// If chown true, add correct ownership to the overlay temp directories.
|
// If chown true, add correct ownership to the overlay temp directories.
|
||||||
if foundU {
|
if foundU {
|
||||||
if err := chown.ChangeHostPathOwnership(contentDir, true, processUID, processGID); err != nil {
|
if err := chown.ChangeHostPathOwnership(contentDir, true, idMaps.processUID, idMaps.processGID); err != nil {
|
||||||
return specs.Mount{}, err
|
return specs.Mount{}, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2096,14 +2151,14 @@ func (b *Builder) configureEnvironment(g *generate.Generator, options RunOptions
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func addOrReplaceMount(moutns []specs.Mount, mount specs.Mount) []spec.Mount {
|
func addOrReplaceMount(mounts []specs.Mount, mount specs.Mount) []spec.Mount {
|
||||||
for i := range moutns {
|
for i := range mounts {
|
||||||
if moutns[i].Destination == mount.Destination {
|
if mounts[i].Destination == mount.Destination {
|
||||||
moutns[i] = mount
|
mounts[i] = mount
|
||||||
return moutns
|
return mounts
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return append(moutns, mount)
|
return append(mounts, mount)
|
||||||
}
|
}
|
||||||
|
|
||||||
// setupSpecialMountSpecChanges creates special mounts for depending on the namespaces
|
// setupSpecialMountSpecChanges creates special mounts for depending on the namespaces
|
||||||
@ -2474,7 +2529,7 @@ func init() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// runSetupRunMounts sets up mounts that exist only in this RUN, not in subsequent runs
|
// runSetupRunMounts sets up mounts that exist only in this RUN, not in subsequent runs
|
||||||
func (b *Builder) runSetupRunMounts(context *imagetypes.SystemContext, mounts []string, secrets map[string]define.Secret, stageMountPoints map[string]internal.StageMountDetails, sshSources map[string]*sshagent.Source, containerWorkingDir string, contextDir string, uidmap []spec.LinuxIDMapping, gidmap []spec.LinuxIDMapping, rootUID int, rootGID int, processUID int, processGID int) ([]spec.Mount, *runMountArtifacts, error) {
|
func (b *Builder) runSetupRunMounts(mounts []string, sources runMountInfo, idMaps IDMaps) ([]spec.Mount, *runMountArtifacts, error) {
|
||||||
mountTargets := make([]string, 0, 10)
|
mountTargets := make([]string, 0, 10)
|
||||||
tmpFiles := make([]string, 0, len(mounts))
|
tmpFiles := make([]string, 0, len(mounts))
|
||||||
mountImages := make([]string, 0, 10)
|
mountImages := make([]string, 0, 10)
|
||||||
@ -2494,10 +2549,10 @@ func (b *Builder) runSetupRunMounts(context *imagetypes.SystemContext, mounts []
|
|||||||
if len(arr) == 2 {
|
if len(arr) == 2 {
|
||||||
tokens = strings.Split(arr[1], ",")
|
tokens = strings.Split(arr[1], ",")
|
||||||
}
|
}
|
||||||
// For now, we only support type secret.
|
|
||||||
switch kv[1] {
|
switch kv[1] {
|
||||||
case "secret":
|
case "secret":
|
||||||
mount, envFile, err := getSecretMount(tokens, secrets, b.MountLabel, containerWorkingDir, uidmap, gidmap)
|
mount, envFile, err := b.getSecretMount(tokens, sources.Secrets, idMaps)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
@ -2509,7 +2564,7 @@ func (b *Builder) runSetupRunMounts(context *imagetypes.SystemContext, mounts []
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
case "ssh":
|
case "ssh":
|
||||||
mount, agent, err := b.getSSHMount(tokens, sshCount, sshSources, b.MountLabel, uidmap, gidmap, b.ProcessLabel)
|
mount, agent, err := b.getSSHMount(tokens, sshCount, sources.SSHSources, idMaps)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
@ -2524,7 +2579,7 @@ func (b *Builder) runSetupRunMounts(context *imagetypes.SystemContext, mounts []
|
|||||||
sshCount++
|
sshCount++
|
||||||
}
|
}
|
||||||
case "bind":
|
case "bind":
|
||||||
mount, image, err := b.getBindMount(context, tokens, contextDir, rootUID, rootGID, processUID, processGID, stageMountPoints)
|
mount, image, err := b.getBindMount(tokens, sources.SystemContext, sources.ContextDir, sources.StageMountPoints, idMaps)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
@ -2535,14 +2590,14 @@ func (b *Builder) runSetupRunMounts(context *imagetypes.SystemContext, mounts []
|
|||||||
mountImages = append(mountImages, image)
|
mountImages = append(mountImages, image)
|
||||||
}
|
}
|
||||||
case "tmpfs":
|
case "tmpfs":
|
||||||
mount, err := b.getTmpfsMount(tokens, rootUID, rootGID, processUID, processGID)
|
mount, err := b.getTmpfsMount(tokens, idMaps)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
finalMounts = append(finalMounts, *mount)
|
finalMounts = append(finalMounts, *mount)
|
||||||
mountTargets = append(mountTargets, mount.Destination)
|
mountTargets = append(mountTargets, mount.Destination)
|
||||||
case "cache":
|
case "cache":
|
||||||
mount, lockedPaths, err := b.getCacheMount(tokens, rootUID, rootGID, processUID, processGID, stageMountPoints)
|
mount, lockedPaths, err := b.getCacheMount(tokens, sources.StageMountPoints, idMaps)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
@ -2564,7 +2619,7 @@ func (b *Builder) runSetupRunMounts(context *imagetypes.SystemContext, mounts []
|
|||||||
return finalMounts, artifacts, nil
|
return finalMounts, artifacts, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Builder) getBindMount(context *imagetypes.SystemContext, tokens []string, contextDir string, rootUID, rootGID, processUID, processGID int, stageMountPoints map[string]internal.StageMountDetails) (*spec.Mount, string, error) {
|
func (b *Builder) getBindMount(tokens []string, context *imagetypes.SystemContext, contextDir string, stageMountPoints map[string]internal.StageMountDetails, idMaps IDMaps) (*spec.Mount, string, error) {
|
||||||
if contextDir == "" {
|
if contextDir == "" {
|
||||||
return nil, "", errors.New("Context Directory for current run invocation is not configured")
|
return nil, "", errors.New("Context Directory for current run invocation is not configured")
|
||||||
}
|
}
|
||||||
@ -2574,42 +2629,42 @@ func (b *Builder) getBindMount(context *imagetypes.SystemContext, tokens []strin
|
|||||||
return nil, image, err
|
return nil, image, err
|
||||||
}
|
}
|
||||||
optionMounts = append(optionMounts, mount)
|
optionMounts = append(optionMounts, mount)
|
||||||
volumes, err := b.runSetupVolumeMounts(b.MountLabel, nil, optionMounts, rootUID, rootGID, processUID, processGID)
|
volumes, err := b.runSetupVolumeMounts(b.MountLabel, nil, optionMounts, idMaps)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, image, err
|
return nil, image, err
|
||||||
}
|
}
|
||||||
return &volumes[0], image, nil
|
return &volumes[0], image, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Builder) getTmpfsMount(tokens []string, rootUID, rootGID, processUID, processGID int) (*spec.Mount, error) {
|
func (b *Builder) getTmpfsMount(tokens []string, idMaps IDMaps) (*spec.Mount, error) {
|
||||||
var optionMounts []specs.Mount
|
var optionMounts []specs.Mount
|
||||||
mount, err := internalParse.GetTmpfsMount(tokens)
|
mount, err := internalParse.GetTmpfsMount(tokens)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
optionMounts = append(optionMounts, mount)
|
optionMounts = append(optionMounts, mount)
|
||||||
volumes, err := b.runSetupVolumeMounts(b.MountLabel, nil, optionMounts, rootUID, rootGID, processUID, processGID)
|
volumes, err := b.runSetupVolumeMounts(b.MountLabel, nil, optionMounts, idMaps)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return &volumes[0], nil
|
return &volumes[0], nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (b *Builder) getCacheMount(tokens []string, rootUID, rootGID, processUID, processGID int, stageMountPoints map[string]internal.StageMountDetails) (*spec.Mount, []string, error) {
|
func (b *Builder) getCacheMount(tokens []string, stageMountPoints map[string]internal.StageMountDetails, idMaps IDMaps) (*spec.Mount, []string, error) {
|
||||||
var optionMounts []specs.Mount
|
var optionMounts []specs.Mount
|
||||||
mount, lockedTargets, err := internalParse.GetCacheMount(tokens, b.store, b.MountLabel, stageMountPoints)
|
mount, lockedTargets, err := internalParse.GetCacheMount(tokens, b.store, b.MountLabel, stageMountPoints)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, lockedTargets, err
|
return nil, lockedTargets, err
|
||||||
}
|
}
|
||||||
optionMounts = append(optionMounts, mount)
|
optionMounts = append(optionMounts, mount)
|
||||||
volumes, err := b.runSetupVolumeMounts(b.MountLabel, nil, optionMounts, rootUID, rootGID, processUID, processGID)
|
volumes, err := b.runSetupVolumeMounts(b.MountLabel, nil, optionMounts, idMaps)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, lockedTargets, err
|
return nil, lockedTargets, err
|
||||||
}
|
}
|
||||||
return &volumes[0], lockedTargets, nil
|
return &volumes[0], lockedTargets, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getSecretMount(tokens []string, secrets map[string]define.Secret, mountlabel string, containerWorkingDir string, uidmap []spec.LinuxIDMapping, gidmap []spec.LinuxIDMapping) (*spec.Mount, string, error) {
|
func (b *Builder) getSecretMount(tokens []string, secrets map[string]define.Secret, idMaps IDMaps) (*spec.Mount, string, error) {
|
||||||
errInvalidSyntax := errors.New("secret should have syntax id=id[,target=path,required=bool,mode=uint,uid=uint,gid=uint")
|
errInvalidSyntax := errors.New("secret should have syntax id=id[,target=path,required=bool,mode=uint,uid=uint,gid=uint")
|
||||||
if len(tokens) == 0 {
|
if len(tokens) == 0 {
|
||||||
return nil, "", errInvalidSyntax
|
return nil, "", errInvalidSyntax
|
||||||
@ -2683,6 +2738,10 @@ func getSecretMount(tokens []string, secrets map[string]define.Secret, mountlabe
|
|||||||
envFile = tmpFile.Name()
|
envFile = tmpFile.Name()
|
||||||
ctrFileOnHost = tmpFile.Name()
|
ctrFileOnHost = tmpFile.Name()
|
||||||
case "file":
|
case "file":
|
||||||
|
containerWorkingDir, err := b.store.ContainerDirectory(b.ContainerID)
|
||||||
|
if err != nil {
|
||||||
|
return nil, "", err
|
||||||
|
}
|
||||||
data, err = ioutil.ReadFile(secr.Source)
|
data, err = ioutil.ReadFile(secr.Source)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, "", err
|
return nil, "", err
|
||||||
@ -2701,10 +2760,10 @@ func getSecretMount(tokens []string, secrets map[string]define.Secret, mountlabe
|
|||||||
return nil, "", err
|
return nil, "", err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := label.Relabel(ctrFileOnHost, mountlabel, false); err != nil {
|
if err := label.Relabel(ctrFileOnHost, b.MountLabel, false); err != nil {
|
||||||
return nil, "", err
|
return nil, "", err
|
||||||
}
|
}
|
||||||
hostUID, hostGID, err := util.GetHostIDs(uidmap, gidmap, uid, gid)
|
hostUID, hostGID, err := util.GetHostIDs(idMaps.uidmap, idMaps.gidmap, uid, gid)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, "", err
|
return nil, "", err
|
||||||
}
|
}
|
||||||
@ -2724,7 +2783,7 @@ func getSecretMount(tokens []string, secrets map[string]define.Secret, mountlabe
|
|||||||
}
|
}
|
||||||
|
|
||||||
// getSSHMount parses the --mount type=ssh flag in the Containerfile, checks if there's an ssh source provided, and creates and starts an ssh-agent to be forwarded into the container
|
// getSSHMount parses the --mount type=ssh flag in the Containerfile, checks if there's an ssh source provided, and creates and starts an ssh-agent to be forwarded into the container
|
||||||
func (b *Builder) getSSHMount(tokens []string, count int, sshsources map[string]*sshagent.Source, mountlabel string, uidmap []spec.LinuxIDMapping, gidmap []spec.LinuxIDMapping, processLabel string) (*spec.Mount, *sshagent.AgentServer, error) {
|
func (b *Builder) getSSHMount(tokens []string, count int, sshsources map[string]*sshagent.Source, idMaps IDMaps) (*spec.Mount, *sshagent.AgentServer, error) {
|
||||||
errInvalidSyntax := errors.New("ssh should have syntax id=id[,target=path,required=bool,mode=uint,uid=uint,gid=uint")
|
errInvalidSyntax := errors.New("ssh should have syntax id=id[,target=path,required=bool,mode=uint,uid=uint,gid=uint")
|
||||||
|
|
||||||
var err error
|
var err error
|
||||||
@ -2791,25 +2850,24 @@ func (b *Builder) getSSHMount(tokens []string, count int, sshsources map[string]
|
|||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
// Start ssh server, and get the host sock we're mounting in the container
|
// Start ssh server, and get the host sock we're mounting in the container
|
||||||
hostSock, err := fwdAgent.Serve(processLabel)
|
hostSock, err := fwdAgent.Serve(b.ProcessLabel)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := label.Relabel(filepath.Dir(hostSock), mountlabel, false); err != nil {
|
if err := label.Relabel(filepath.Dir(hostSock), b.MountLabel, false); err != nil {
|
||||||
if shutdownErr := fwdAgent.Shutdown(); shutdownErr != nil {
|
if shutdownErr := fwdAgent.Shutdown(); shutdownErr != nil {
|
||||||
b.Logger.Errorf("error shutting down agent: %v", shutdownErr)
|
b.Logger.Errorf("error shutting down agent: %v", shutdownErr)
|
||||||
}
|
}
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
if err := label.Relabel(hostSock, mountlabel, false); err != nil {
|
if err := label.Relabel(hostSock, b.MountLabel, false); err != nil {
|
||||||
if shutdownErr := fwdAgent.Shutdown(); shutdownErr != nil {
|
if shutdownErr := fwdAgent.Shutdown(); shutdownErr != nil {
|
||||||
b.Logger.Errorf("error shutting down agent: %v", shutdownErr)
|
b.Logger.Errorf("error shutting down agent: %v", shutdownErr)
|
||||||
}
|
}
|
||||||
return nil, nil, err
|
return nil, nil, err
|
||||||
}
|
}
|
||||||
|
hostUID, hostGID, err := util.GetHostIDs(idMaps.uidmap, idMaps.gidmap, uid, gid)
|
||||||
hostUID, hostGID, err := util.GetHostIDs(uidmap, gidmap, uid, gid)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if shutdownErr := fwdAgent.Shutdown(); shutdownErr != nil {
|
if shutdownErr := fwdAgent.Shutdown(); shutdownErr != nil {
|
||||||
b.Logger.Errorf("error shutting down agent: %v", shutdownErr)
|
b.Logger.Errorf("error shutting down agent: %v", shutdownErr)
|
||||||
|
17
vendor/github.com/containers/buildah/util/util.go
generated
vendored
17
vendor/github.com/containers/buildah/util/util.go
generated
vendored
@ -14,6 +14,7 @@ import (
|
|||||||
"github.com/containers/buildah/define"
|
"github.com/containers/buildah/define"
|
||||||
"github.com/containers/common/libimage"
|
"github.com/containers/common/libimage"
|
||||||
"github.com/containers/common/pkg/config"
|
"github.com/containers/common/pkg/config"
|
||||||
|
"github.com/containers/common/pkg/util"
|
||||||
"github.com/containers/image/v5/docker/reference"
|
"github.com/containers/image/v5/docker/reference"
|
||||||
"github.com/containers/image/v5/pkg/shortnames"
|
"github.com/containers/image/v5/pkg/shortnames"
|
||||||
"github.com/containers/image/v5/signature"
|
"github.com/containers/image/v5/signature"
|
||||||
@ -44,6 +45,11 @@ var (
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
// StringInSlice is deprecated, use github.com/containers/common/pkg/util.StringInSlice
|
||||||
|
func StringInSlice(s string, slice []string) bool {
|
||||||
|
return util.StringInSlice(s, slice)
|
||||||
|
}
|
||||||
|
|
||||||
// resolveName checks if name is a valid image name, and if that name doesn't
|
// resolveName checks if name is a valid image name, and if that name doesn't
|
||||||
// include a domain portion, returns a list of the names which it might
|
// include a domain portion, returns a list of the names which it might
|
||||||
// correspond to in the set of configured registries, and the transport used to
|
// correspond to in the set of configured registries, and the transport used to
|
||||||
@ -244,17 +250,6 @@ func Runtime() string {
|
|||||||
return conf.Engine.OCIRuntime
|
return conf.Engine.OCIRuntime
|
||||||
}
|
}
|
||||||
|
|
||||||
// StringInSlice returns a boolean indicating if the exact value s is present
|
|
||||||
// in the slice slice.
|
|
||||||
func StringInSlice(s string, slice []string) bool {
|
|
||||||
for _, v := range slice {
|
|
||||||
if v == s {
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
// GetContainerIDs uses ID mappings to compute the container-level IDs that will
|
// GetContainerIDs uses ID mappings to compute the container-level IDs that will
|
||||||
// correspond to a UID/GID pair on the host.
|
// correspond to a UID/GID pair on the host.
|
||||||
func GetContainerIDs(uidmap, gidmap []specs.LinuxIDMapping, uid, gid uint32) (uint32, uint32, error) {
|
func GetContainerIDs(uidmap, gidmap []specs.LinuxIDMapping, uid, gid uint32) (uint32, uint32, error) {
|
||||||
|
210
vendor/github.com/fsouza/go-dockerclient/AUTHORS
generated
vendored
210
vendor/github.com/fsouza/go-dockerclient/AUTHORS
generated
vendored
@ -1,209 +1 @@
|
|||||||
# This is the official list of go-dockerclient authors for copyright purposes.
|
# The official list of authors for copyright purposes can be found on GitHub: https://github.com/fsouza/go-dockerclient/graphs/contributors
|
||||||
|
|
||||||
Abhishek Chanda
|
|
||||||
Adam Bell-Hanssen
|
|
||||||
Adnan Khan
|
|
||||||
Adrien Kohlbecker
|
|
||||||
Aithal
|
|
||||||
Aldrin Leal
|
|
||||||
Alex Dadgar
|
|
||||||
Alfonso Acosta
|
|
||||||
André Carvalho
|
|
||||||
Andreas Jaekle
|
|
||||||
Andrew Snodgrass
|
|
||||||
Andrews Medina
|
|
||||||
Andrey Sibiryov
|
|
||||||
Andy Goldstein
|
|
||||||
Anirudh Aithal
|
|
||||||
Antoine Brechon
|
|
||||||
Antonio Murdaca
|
|
||||||
Artem Sidorenko
|
|
||||||
Arthur Rodrigues
|
|
||||||
Ben Marini
|
|
||||||
Ben McCann
|
|
||||||
Ben Parees
|
|
||||||
Benno van den Berg
|
|
||||||
Bradley Cicenas
|
|
||||||
Brendan Fosberry
|
|
||||||
Brett Buddin
|
|
||||||
Brian Lalor
|
|
||||||
Brian P. Hamachek
|
|
||||||
Brian Palmer
|
|
||||||
Bryan Boreham
|
|
||||||
Burke Libbey
|
|
||||||
Carlos Diaz-Padron
|
|
||||||
Carson A
|
|
||||||
Cássio Botaro
|
|
||||||
Cesar Wong
|
|
||||||
Cezar Sa Espinola
|
|
||||||
Changping Chen
|
|
||||||
Charles Teinturier
|
|
||||||
Cheah Chu Yeow
|
|
||||||
cheneydeng
|
|
||||||
Chris Bednarski
|
|
||||||
Chris Stavropoulos
|
|
||||||
Christian Stewart
|
|
||||||
Christophe Mourette
|
|
||||||
Clayton Coleman
|
|
||||||
Clint Armstrong
|
|
||||||
CMGS
|
|
||||||
Colin Hebert
|
|
||||||
Craig Jellick
|
|
||||||
Damien Lespiau
|
|
||||||
Damon Wang
|
|
||||||
Dan Williams
|
|
||||||
Daniel, Dao Quang Minh
|
|
||||||
Daniel Black
|
|
||||||
Daniel Garcia
|
|
||||||
Daniel Hess
|
|
||||||
Daniel Hiltgen
|
|
||||||
Daniel Nephin
|
|
||||||
Daniel Tsui
|
|
||||||
Darren Shepherd
|
|
||||||
Dave Choi
|
|
||||||
David Huie
|
|
||||||
Dawn Chen
|
|
||||||
Denis Makogon
|
|
||||||
Derek Petersen
|
|
||||||
Dinesh Subhraveti
|
|
||||||
Drew Wells
|
|
||||||
Ed
|
|
||||||
Elias G. Schneevoigt
|
|
||||||
Erez Horev
|
|
||||||
Eric Anderson
|
|
||||||
Eric Fode
|
|
||||||
Eric J. Holmes
|
|
||||||
Eric Mountain
|
|
||||||
Erwin van Eyk
|
|
||||||
Ethan Mosbaugh
|
|
||||||
Ewout Prangsma
|
|
||||||
Fabio Rehm
|
|
||||||
Fatih Arslan
|
|
||||||
Faye Salwin
|
|
||||||
Felipe Oliveira
|
|
||||||
Flavia Missi
|
|
||||||
Florent Aide
|
|
||||||
Francisco Souza
|
|
||||||
Frank Groeneveld
|
|
||||||
George MacRorie
|
|
||||||
George Moura
|
|
||||||
Grégoire Delattre
|
|
||||||
Guilherme Rezende
|
|
||||||
Guillermo Álvarez Fernández
|
|
||||||
Harry Zhang
|
|
||||||
He Simei
|
|
||||||
Isaac Schnitzer
|
|
||||||
Ivan Mikushin
|
|
||||||
James Bardin
|
|
||||||
James Nugent
|
|
||||||
Jamie Snell
|
|
||||||
Januar Wayong
|
|
||||||
Jari Kolehmainen
|
|
||||||
Jason Wilder
|
|
||||||
Jawher Moussa
|
|
||||||
Jean-Baptiste Dalido
|
|
||||||
Jeff Mitchell
|
|
||||||
Jeffrey Hulten
|
|
||||||
Jen Andre
|
|
||||||
Jérôme Laurens
|
|
||||||
Jim Minter
|
|
||||||
Johan Euphrosine
|
|
||||||
Johannes Scheuermann
|
|
||||||
John Hughes
|
|
||||||
Jorge Marey
|
|
||||||
Julian Einwag
|
|
||||||
Kamil Domanski
|
|
||||||
Karan Misra
|
|
||||||
Ken Herner
|
|
||||||
Kevin Lin
|
|
||||||
Kevin Xu
|
|
||||||
Kim, Hirokuni
|
|
||||||
Kostas Lekkas
|
|
||||||
Kyle Allan
|
|
||||||
Kyle Quest
|
|
||||||
Yunhee Lee
|
|
||||||
Liron Levin
|
|
||||||
Lior Yankovich
|
|
||||||
Liu Peng
|
|
||||||
Lorenz Leutgeb
|
|
||||||
Lucas Clemente
|
|
||||||
Lucas Weiblen
|
|
||||||
Lyon Hill
|
|
||||||
Mantas Matelis
|
|
||||||
Manuel Vogel
|
|
||||||
Marguerite des Trois Maisons
|
|
||||||
Mariusz Borsa
|
|
||||||
Martin Sweeney
|
|
||||||
Máximo Cuadros Ortiz
|
|
||||||
Michael Schmatz
|
|
||||||
Michal Fojtik
|
|
||||||
Mike Dillon
|
|
||||||
Mrunal Patel
|
|
||||||
Nate Jones
|
|
||||||
Nathan Pemberton
|
|
||||||
Nguyen Sy Thanh Son
|
|
||||||
Nicholas Van Wiggeren
|
|
||||||
Nick Ethier
|
|
||||||
niko83
|
|
||||||
Omeid Matten
|
|
||||||
Orivej Desh
|
|
||||||
Paul Bellamy
|
|
||||||
Paul Morie
|
|
||||||
Paul Weil
|
|
||||||
Peng Yin
|
|
||||||
Peter Edge
|
|
||||||
Peter Jihoon Kim
|
|
||||||
Peter Teich
|
|
||||||
Phil Lu
|
|
||||||
Philippe Lafoucrière
|
|
||||||
Radek Simko
|
|
||||||
Rafe Colton
|
|
||||||
Randy Fay
|
|
||||||
Raphaël Pinson
|
|
||||||
Reed Allman
|
|
||||||
RJ Catalano
|
|
||||||
Rob Miller
|
|
||||||
Robbert Klarenbeek
|
|
||||||
Robert Williamson
|
|
||||||
Roman Khlystik
|
|
||||||
Russell Haering
|
|
||||||
Salvador Gironès
|
|
||||||
Sam Rijs
|
|
||||||
Sami Wagiaalla
|
|
||||||
Samuel Archambault
|
|
||||||
Samuel Karp
|
|
||||||
Sebastian Borza
|
|
||||||
Sergey Ponomarev
|
|
||||||
Seth Jennings
|
|
||||||
Shane Xie
|
|
||||||
Silas Sewell
|
|
||||||
Simon Eskildsen
|
|
||||||
Simon Menke
|
|
||||||
Skolos
|
|
||||||
Soulou
|
|
||||||
Sridhar Ratnakumar
|
|
||||||
Steven Jack
|
|
||||||
Summer Mousa
|
|
||||||
Sunjin Lee
|
|
||||||
Sunny
|
|
||||||
Swaroop Ramachandra
|
|
||||||
Tarsis Azevedo
|
|
||||||
Tim Schindler
|
|
||||||
Timothy St. Clair
|
|
||||||
Tobi Knaup
|
|
||||||
Tom Wilkie
|
|
||||||
Tomas Knappek
|
|
||||||
Tonic
|
|
||||||
ttyh061
|
|
||||||
Umut Çömlekçioğlu
|
|
||||||
upccup
|
|
||||||
Victor Marmol
|
|
||||||
Vijay Krishnan
|
|
||||||
Vincenzo Prignano
|
|
||||||
Vlad Alexandru Ionescu
|
|
||||||
Weitao Zhou
|
|
||||||
Wiliam Souza
|
|
||||||
Ye Yin
|
|
||||||
Yosuke Otosu
|
|
||||||
Yu, Zou
|
|
||||||
Yuriy Bogdanov
|
|
||||||
|
6
vendor/github.com/fsouza/go-dockerclient/README.md
generated
vendored
6
vendor/github.com/fsouza/go-dockerclient/README.md
generated
vendored
@ -25,12 +25,6 @@ implemented/merged.
|
|||||||
For new projects, using the official SDK is probably more appropriate as
|
For new projects, using the official SDK is probably more appropriate as
|
||||||
go-dockerclient lags behind the official SDK.
|
go-dockerclient lags behind the official SDK.
|
||||||
|
|
||||||
When using the official SDK, keep in mind that because of how the its
|
|
||||||
dependencies are organized, you may need some extra steps in order to be able
|
|
||||||
to import it in your projects (see
|
|
||||||
[#784](https://github.com/fsouza/go-dockerclient/issues/784) and
|
|
||||||
[moby/moby#28269](https://github.com/moby/moby/issues/28269)).
|
|
||||||
|
|
||||||
## Example
|
## Example
|
||||||
|
|
||||||
```go
|
```go
|
||||||
|
24
vendor/github.com/fsouza/go-dockerclient/container_stats.go
generated
vendored
24
vendor/github.com/fsouza/go-dockerclient/container_stats.go
generated
vendored
@ -55,6 +55,30 @@ type Stats struct {
|
|||||||
TotalPgpgin uint64 `json:"total_pgpgin,omitempty" yaml:"total_pgpgin,omitempty" toml:"total_pgpgin,omitempty"`
|
TotalPgpgin uint64 `json:"total_pgpgin,omitempty" yaml:"total_pgpgin,omitempty" toml:"total_pgpgin,omitempty"`
|
||||||
HierarchicalMemswLimit uint64 `json:"hierarchical_memsw_limit,omitempty" yaml:"hierarchical_memsw_limit,omitempty" toml:"hierarchical_memsw_limit,omitempty"`
|
HierarchicalMemswLimit uint64 `json:"hierarchical_memsw_limit,omitempty" yaml:"hierarchical_memsw_limit,omitempty" toml:"hierarchical_memsw_limit,omitempty"`
|
||||||
Swap uint64 `json:"swap,omitempty" yaml:"swap,omitempty" toml:"swap,omitempty"`
|
Swap uint64 `json:"swap,omitempty" yaml:"swap,omitempty" toml:"swap,omitempty"`
|
||||||
|
Anon uint64 `json:"anon,omitempty" yaml:"anon,omitempty" toml:"anon,omitempty"`
|
||||||
|
AnonThp uint64 `json:"anon_thp,omitempty" yaml:"anon_thp,omitempty" toml:"anon_thp,omitempty"`
|
||||||
|
File uint64 `json:"file,omitempty" yaml:"file,omitempty" toml:"file,omitempty"`
|
||||||
|
FileDirty uint64 `json:"file_dirty,omitempty" yaml:"file_dirty,omitempty" toml:"file_dirty,omitempty"`
|
||||||
|
FileMapped uint64 `json:"file_mapped,omitempty" yaml:"file_mapped,omitempty" toml:"file_mapped,omitempty"`
|
||||||
|
FileWriteback uint64 `json:"file_writeback,omitempty" yaml:"file_writeback,omitempty" toml:"file_writeback,omitempty"`
|
||||||
|
KernelStack uint64 `json:"kernel_stack,omitempty" yaml:"kernel_stack,omitempty" toml:"kernel_stack,omitempty"`
|
||||||
|
Pgactivate uint64 `json:"pgactivate,omitempty" yaml:"pgactivate,omitempty" toml:"pgactivate,omitempty"`
|
||||||
|
Pgdeactivate uint64 `json:"pgdeactivate,omitempty" yaml:"pgdeactivate,omitempty" toml:"pgdeactivate,omitempty"`
|
||||||
|
Pglazyfree uint64 `json:"pglazyfree,omitempty" yaml:"pglazyfree,omitempty" toml:"pglazyfree,omitempty"`
|
||||||
|
Pglazyfreed uint64 `json:"pglazyfreed,omitempty" yaml:"pglazyfreed,omitempty" toml:"pglazyfreed,omitempty"`
|
||||||
|
Pgrefill uint64 `json:"pgrefill,omitempty" yaml:"pgrefill,omitempty" toml:"pgrefill,omitempty"`
|
||||||
|
Pgscan uint64 `json:"pgscan,omitempty" yaml:"pgscan,omitempty" toml:"pgscan,omitempty"`
|
||||||
|
Pgsteal uint64 `json:"pgsteal,omitempty" yaml:"pgsteal,omitempty" toml:"pgsteal,omitempty"`
|
||||||
|
Shmem uint64 `json:"shmem,omitempty" yaml:"shmem,omitempty" toml:"shmem,omitempty"`
|
||||||
|
Slab uint64 `json:"slab,omitempty" yaml:"slab,omitempty" toml:"slab,omitempty"`
|
||||||
|
SlabReclaimable uint64 `json:"slab_reclaimable,omitempty" yaml:"slab_reclaimable,omitempty" toml:"slab_reclaimable,omitempty"`
|
||||||
|
SlabUnreclaimable uint64 `json:"slab_unreclaimable,omitempty" yaml:"slab_unreclaimable,omitempty" toml:"slab_unreclaimable,omitempty"`
|
||||||
|
Sock uint64 `json:"sock,omitempty" yaml:"sock,omitempty" toml:"sock,omitempty"`
|
||||||
|
ThpCollapseAlloc uint64 `json:"thp_collapse_alloc,omitempty" yaml:"thp_collapse_alloc,omitempty" toml:"thp_collapse_alloc,omitempty"`
|
||||||
|
ThpFaultAlloc uint64 `json:"thp_fault_alloc,omitempty" yaml:"thp_fault_alloc,omitempty" toml:"thp_fault_alloc,omitempty"`
|
||||||
|
WorkingsetActivate uint64 `json:"workingset_activate,omitempty" yaml:"workingset_activate,omitempty" toml:"workingset_activate,omitempty"`
|
||||||
|
WorkingsetNodereclaim uint64 `json:"workingset_nodereclaim,omitempty" yaml:"workingset_nodereclaim,omitempty" toml:"workingset_nodereclaim,omitempty"`
|
||||||
|
WorkingsetRefault uint64 `json:"workingset_refault,omitempty" yaml:"workingset_refault,omitempty" toml:"workingset_refault,omitempty"`
|
||||||
} `json:"stats,omitempty" yaml:"stats,omitempty" toml:"stats,omitempty"`
|
} `json:"stats,omitempty" yaml:"stats,omitempty" toml:"stats,omitempty"`
|
||||||
MaxUsage uint64 `json:"max_usage,omitempty" yaml:"max_usage,omitempty" toml:"max_usage,omitempty"`
|
MaxUsage uint64 `json:"max_usage,omitempty" yaml:"max_usage,omitempty" toml:"max_usage,omitempty"`
|
||||||
Usage uint64 `json:"usage,omitempty" yaml:"usage,omitempty" toml:"usage,omitempty"`
|
Usage uint64 `json:"usage,omitempty" yaml:"usage,omitempty" toml:"usage,omitempty"`
|
||||||
|
22
vendor/github.com/fsouza/go-dockerclient/go.mod
generated
vendored
22
vendor/github.com/fsouza/go-dockerclient/go.mod
generated
vendored
@ -4,27 +4,31 @@ go 1.17
|
|||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/Microsoft/go-winio v0.5.2
|
github.com/Microsoft/go-winio v0.5.2
|
||||||
github.com/docker/docker v20.10.3-0.20220208084023-a5c757555091+incompatible
|
github.com/docker/docker v20.10.17+incompatible
|
||||||
github.com/docker/go-units v0.4.0
|
github.com/docker/go-units v0.4.0
|
||||||
github.com/google/go-cmp v0.5.8
|
github.com/google/go-cmp v0.5.8
|
||||||
github.com/gorilla/mux v1.8.0
|
github.com/gorilla/mux v1.8.0
|
||||||
golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b
|
golang.org/x/term v0.0.0-20220526004731-065cf7ba2467
|
||||||
)
|
)
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
|
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect
|
||||||
github.com/containerd/containerd v1.6.1 // indirect
|
github.com/Microsoft/hcsshim v0.9.3 // indirect
|
||||||
|
github.com/containerd/cgroups v1.0.3 // indirect
|
||||||
|
github.com/containerd/containerd v1.6.6 // indirect
|
||||||
github.com/docker/go-connections v0.4.0 // indirect
|
github.com/docker/go-connections v0.4.0 // indirect
|
||||||
github.com/gogo/protobuf v1.3.2 // indirect
|
github.com/gogo/protobuf v1.3.2 // indirect
|
||||||
github.com/klauspost/compress v1.11.13 // indirect
|
github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect
|
||||||
github.com/moby/sys/mount v0.2.0 // indirect
|
github.com/moby/sys/mount v0.3.3 // indirect
|
||||||
github.com/moby/sys/mountinfo v0.5.0 // indirect
|
github.com/moby/sys/mountinfo v0.6.2 // indirect
|
||||||
github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 // indirect
|
github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 // indirect
|
||||||
github.com/morikuni/aec v1.0.0 // indirect
|
github.com/morikuni/aec v1.0.0 // indirect
|
||||||
github.com/opencontainers/go-digest v1.0.0 // indirect
|
github.com/opencontainers/go-digest v1.0.0 // indirect
|
||||||
github.com/opencontainers/image-spec v1.0.2 // indirect
|
github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799 // indirect
|
||||||
github.com/opencontainers/runc v1.1.0 // indirect
|
github.com/opencontainers/runc v1.1.2 // indirect
|
||||||
github.com/pkg/errors v0.9.1 // indirect
|
github.com/pkg/errors v0.9.1 // indirect
|
||||||
github.com/sirupsen/logrus v1.8.1 // indirect
|
github.com/sirupsen/logrus v1.8.1 // indirect
|
||||||
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e // indirect
|
go.opencensus.io v0.23.0 // indirect
|
||||||
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a // indirect
|
||||||
|
gopkg.in/yaml.v3 v3.0.1 // indirect
|
||||||
)
|
)
|
||||||
|
50
vendor/github.com/fsouza/go-dockerclient/go.sum
generated
vendored
50
vendor/github.com/fsouza/go-dockerclient/go.sum
generated
vendored
@ -81,8 +81,9 @@ github.com/Microsoft/hcsshim v0.8.16/go.mod h1:o5/SZqmR7x9JNKsW3pu+nqHm0MF8vbA+V
|
|||||||
github.com/Microsoft/hcsshim v0.8.20/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4=
|
github.com/Microsoft/hcsshim v0.8.20/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4=
|
||||||
github.com/Microsoft/hcsshim v0.8.21/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4=
|
github.com/Microsoft/hcsshim v0.8.21/go.mod h1:+w2gRZ5ReXQhFOrvSQeNfhrYB/dg3oDwTOcER2fw4I4=
|
||||||
github.com/Microsoft/hcsshim v0.8.23/go.mod h1:4zegtUJth7lAvFyc6cH2gGQ5B3OFQim01nnU2M8jKDg=
|
github.com/Microsoft/hcsshim v0.8.23/go.mod h1:4zegtUJth7lAvFyc6cH2gGQ5B3OFQim01nnU2M8jKDg=
|
||||||
github.com/Microsoft/hcsshim v0.9.2 h1:wB06W5aYFfUB3IvootYAY2WnOmIdgPGfqSI6tufQNnY=
|
|
||||||
github.com/Microsoft/hcsshim v0.9.2/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc=
|
github.com/Microsoft/hcsshim v0.9.2/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc=
|
||||||
|
github.com/Microsoft/hcsshim v0.9.3 h1:k371PzBuRrz2b+ebGuI2nVgVhgsVX60jMfSw80NECxo=
|
||||||
|
github.com/Microsoft/hcsshim v0.9.3/go.mod h1:7pLA8lDk46WKDWlVsENo92gC0XFa8rbKfyFRBqxEbCc=
|
||||||
github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU=
|
github.com/Microsoft/hcsshim/test v0.0.0-20201218223536-d3e5debf77da/go.mod h1:5hlzMzRKMLyo42nCZ9oml8AdTlq/0cvIaBv6tK1RehU=
|
||||||
github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY=
|
github.com/Microsoft/hcsshim/test v0.0.0-20210227013316-43a75bb4edd3/go.mod h1:mw7qgWloBUl75W/gVH3cQszUg1+gUITj7D6NY7ywVnY=
|
||||||
github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
|
github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
|
||||||
@ -172,6 +173,7 @@ github.com/containerd/cgroups v0.0.0-20200710171044-318312a37340/go.mod h1:s5q4S
|
|||||||
github.com/containerd/cgroups v0.0.0-20200824123100-0b889c03f102/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo=
|
github.com/containerd/cgroups v0.0.0-20200824123100-0b889c03f102/go.mod h1:s5q4SojHctfxANBDvMeIaIovkq29IP48TKAxnhYRxvo=
|
||||||
github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE=
|
github.com/containerd/cgroups v0.0.0-20210114181951-8a68de567b68/go.mod h1:ZJeTFisyysqgcCdecO57Dj79RfL0LNeGiFUqLYQRYLE=
|
||||||
github.com/containerd/cgroups v1.0.1/go.mod h1:0SJrPIenamHDcZhEcJMNBB85rHcUsw4f25ZfBiPYRkU=
|
github.com/containerd/cgroups v1.0.1/go.mod h1:0SJrPIenamHDcZhEcJMNBB85rHcUsw4f25ZfBiPYRkU=
|
||||||
|
github.com/containerd/cgroups v1.0.3 h1:ADZftAkglvCiD44c77s5YmMqaP2pzVCFZvBmAlBdAP4=
|
||||||
github.com/containerd/cgroups v1.0.3/go.mod h1:/ofk34relqNjSGyqPrmEULrO4Sc8LJhvJmWbUCUKqj8=
|
github.com/containerd/cgroups v1.0.3/go.mod h1:/ofk34relqNjSGyqPrmEULrO4Sc8LJhvJmWbUCUKqj8=
|
||||||
github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
|
github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
|
||||||
github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
|
github.com/containerd/console v0.0.0-20181022165439-0650fd9eeb50/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
|
||||||
@ -195,8 +197,9 @@ github.com/containerd/containerd v1.5.0-rc.0/go.mod h1:V/IXoMqNGgBlabz3tHD2TWDoT
|
|||||||
github.com/containerd/containerd v1.5.1/go.mod h1:0DOxVqwDy2iZvrZp2JUx/E+hS0UNTVn7dJnIOwtYR4g=
|
github.com/containerd/containerd v1.5.1/go.mod h1:0DOxVqwDy2iZvrZp2JUx/E+hS0UNTVn7dJnIOwtYR4g=
|
||||||
github.com/containerd/containerd v1.5.7/go.mod h1:gyvv6+ugqY25TiXxcZC3L5yOeYgEw0QMhscqVp1AR9c=
|
github.com/containerd/containerd v1.5.7/go.mod h1:gyvv6+ugqY25TiXxcZC3L5yOeYgEw0QMhscqVp1AR9c=
|
||||||
github.com/containerd/containerd v1.5.8/go.mod h1:YdFSv5bTFLpG2HIYmfqDpSYYTDX+mc5qtSuYx1YUb/s=
|
github.com/containerd/containerd v1.5.8/go.mod h1:YdFSv5bTFLpG2HIYmfqDpSYYTDX+mc5qtSuYx1YUb/s=
|
||||||
github.com/containerd/containerd v1.6.1 h1:oa2uY0/0G+JX4X7hpGCYvkp9FjUancz56kSNnb1sG3o=
|
|
||||||
github.com/containerd/containerd v1.6.1/go.mod h1:1nJz5xCZPusx6jJU8Frfct988y0NpumIq9ODB0kLtoE=
|
github.com/containerd/containerd v1.6.1/go.mod h1:1nJz5xCZPusx6jJU8Frfct988y0NpumIq9ODB0kLtoE=
|
||||||
|
github.com/containerd/containerd v1.6.6 h1:xJNPhbrmz8xAMDNoVjHy9YHtWwEQNS+CDkcIRh7t8Y0=
|
||||||
|
github.com/containerd/containerd v1.6.6/go.mod h1:ZoP1geJldzCVY3Tonoz7b1IXk8rIX0Nltt5QE4OMNk0=
|
||||||
github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
||||||
github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
github.com/containerd/continuity v0.0.0-20190815185530-f2a389ac0a02/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
||||||
github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
github.com/containerd/continuity v0.0.0-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
||||||
@ -216,6 +219,7 @@ github.com/containerd/go-cni v1.0.1/go.mod h1:+vUpYxKvAF72G9i1WoDOiPGRtQpqsNW/ZH
|
|||||||
github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb1aZGrrohk=
|
github.com/containerd/go-cni v1.0.2/go.mod h1:nrNABBHzu0ZwCug9Ije8hL2xBCYh/pjfMb1aZGrrohk=
|
||||||
github.com/containerd/go-cni v1.1.0/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA=
|
github.com/containerd/go-cni v1.1.0/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA=
|
||||||
github.com/containerd/go-cni v1.1.3/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA=
|
github.com/containerd/go-cni v1.1.3/go.mod h1:Rflh2EJ/++BA2/vY5ao3K6WJRR/bZKsX123aPk+kUtA=
|
||||||
|
github.com/containerd/go-cni v1.1.6/go.mod h1:BWtoWl5ghVymxu6MBjg79W9NZrCRyHIdUtk4cauMe34=
|
||||||
github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
|
github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
|
||||||
github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
|
github.com/containerd/go-runc v0.0.0-20190911050354-e029b79d8cda/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
|
||||||
github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g=
|
github.com/containerd/go-runc v0.0.0-20200220073739-7016d3ce2328/go.mod h1:PpyHrqVs8FTi9vpyHwPwiNEGaACDxT/N/pLcvMSRA9g=
|
||||||
@ -226,6 +230,7 @@ github.com/containerd/imgcrypt v1.0.4-0.20210301171431-0ae5c75f59ba/go.mod h1:6T
|
|||||||
github.com/containerd/imgcrypt v1.1.1-0.20210312161619-7ed62a527887/go.mod h1:5AZJNI6sLHJljKuI9IHnw1pWqo/F0nGDOuR9zgTs7ow=
|
github.com/containerd/imgcrypt v1.1.1-0.20210312161619-7ed62a527887/go.mod h1:5AZJNI6sLHJljKuI9IHnw1pWqo/F0nGDOuR9zgTs7ow=
|
||||||
github.com/containerd/imgcrypt v1.1.1/go.mod h1:xpLnwiQmEUJPvQoAapeb2SNCxz7Xr6PJrXQb0Dpc4ms=
|
github.com/containerd/imgcrypt v1.1.1/go.mod h1:xpLnwiQmEUJPvQoAapeb2SNCxz7Xr6PJrXQb0Dpc4ms=
|
||||||
github.com/containerd/imgcrypt v1.1.3/go.mod h1:/TPA1GIDXMzbj01yd8pIbQiLdQxed5ue1wb8bP7PQu4=
|
github.com/containerd/imgcrypt v1.1.3/go.mod h1:/TPA1GIDXMzbj01yd8pIbQiLdQxed5ue1wb8bP7PQu4=
|
||||||
|
github.com/containerd/imgcrypt v1.1.4/go.mod h1:LorQnPtzL/T0IyCeftcsMEO7AqxUDbdO8j/tSUpgxvo=
|
||||||
github.com/containerd/nri v0.0.0-20201007170849-eb1350a75164/go.mod h1:+2wGSDGFYfE5+So4M5syatU0N0f0LbWpuqyMi4/BE8c=
|
github.com/containerd/nri v0.0.0-20201007170849-eb1350a75164/go.mod h1:+2wGSDGFYfE5+So4M5syatU0N0f0LbWpuqyMi4/BE8c=
|
||||||
github.com/containerd/nri v0.0.0-20210316161719-dbaa18c31c14/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY=
|
github.com/containerd/nri v0.0.0-20210316161719-dbaa18c31c14/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY=
|
||||||
github.com/containerd/nri v0.1.0/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY=
|
github.com/containerd/nri v0.1.0/go.mod h1:lmxnXF6oMkbqs39FiCt1s0R2HSMhcLel9vNL3m4AaeY=
|
||||||
@ -249,13 +254,16 @@ github.com/containernetworking/cni v0.7.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ
|
|||||||
github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY=
|
github.com/containernetworking/cni v0.8.0/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY=
|
||||||
github.com/containernetworking/cni v0.8.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY=
|
github.com/containernetworking/cni v0.8.1/go.mod h1:LGwApLUm2FpoOfxTDEeq8T9ipbpZ61X79hmU3w8FmsY=
|
||||||
github.com/containernetworking/cni v1.0.1/go.mod h1:AKuhXbN5EzmD4yTNtfSsX3tPcmtrBI6QcRV0NiNt15Y=
|
github.com/containernetworking/cni v1.0.1/go.mod h1:AKuhXbN5EzmD4yTNtfSsX3tPcmtrBI6QcRV0NiNt15Y=
|
||||||
|
github.com/containernetworking/cni v1.1.1/go.mod h1:sDpYKmGVENF3s6uvMvGgldDWeG8dMxakj/u+i9ht9vw=
|
||||||
github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHVlzhJpcY6TQxn/fUyDDM=
|
github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHVlzhJpcY6TQxn/fUyDDM=
|
||||||
github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8=
|
github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8=
|
||||||
github.com/containernetworking/plugins v1.0.1/go.mod h1:QHCfGpaTwYTbbH+nZXKVTxNBDZcxSOplJT5ico8/FLE=
|
github.com/containernetworking/plugins v1.0.1/go.mod h1:QHCfGpaTwYTbbH+nZXKVTxNBDZcxSOplJT5ico8/FLE=
|
||||||
|
github.com/containernetworking/plugins v1.1.1/go.mod h1:Sr5TH/eBsGLXK/h71HeLfX19sZPp3ry5uHSkI4LPxV8=
|
||||||
github.com/containers/ocicrypt v1.0.1/go.mod h1:MeJDzk1RJHv89LjsH0Sp5KTY3ZYkjXO/C+bKAeWFIrc=
|
github.com/containers/ocicrypt v1.0.1/go.mod h1:MeJDzk1RJHv89LjsH0Sp5KTY3ZYkjXO/C+bKAeWFIrc=
|
||||||
github.com/containers/ocicrypt v1.1.0/go.mod h1:b8AOe0YR67uU8OqfVNcznfFpAzu3rdgUV4GP9qXPfu4=
|
github.com/containers/ocicrypt v1.1.0/go.mod h1:b8AOe0YR67uU8OqfVNcznfFpAzu3rdgUV4GP9qXPfu4=
|
||||||
github.com/containers/ocicrypt v1.1.1/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY=
|
github.com/containers/ocicrypt v1.1.1/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY=
|
||||||
github.com/containers/ocicrypt v1.1.2/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY=
|
github.com/containers/ocicrypt v1.1.2/go.mod h1:Dm55fwWm1YZAjYRaJ94z2mfZikIyIN4B0oB3dj3jFxY=
|
||||||
|
github.com/containers/ocicrypt v1.1.3/go.mod h1:xpdkbVAuaH3WzbEabUd5yDsl9SwJA5pABH85425Es2g=
|
||||||
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
|
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
|
||||||
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
||||||
github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
||||||
@ -298,8 +306,8 @@ github.com/docker/distribution v0.0.0-20190905152932-14b96e55d84c/go.mod h1:0+TT
|
|||||||
github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||||
github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||||
github.com/docker/docker v1.4.2-0.20190924003213-a8608b5b67c7/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
github.com/docker/docker v1.4.2-0.20190924003213-a8608b5b67c7/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||||
github.com/docker/docker v20.10.3-0.20220208084023-a5c757555091+incompatible h1:DPMrerxYRbdZnOnlPPwt9QGf207ETn7FebEmxUQI3bE=
|
github.com/docker/docker v20.10.17+incompatible h1:JYCuMrWaVNophQTOrMMoSwudOVEfcegoZZrleKc1xwE=
|
||||||
github.com/docker/docker v20.10.3-0.20220208084023-a5c757555091+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
github.com/docker/docker v20.10.17+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||||
github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y=
|
github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y=
|
||||||
github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
|
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-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec=
|
||||||
@ -395,6 +403,7 @@ github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4er
|
|||||||
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||||
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||||
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
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/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/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||||
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||||
@ -457,6 +466,7 @@ github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLe
|
|||||||
github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||||
github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||||
github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||||
|
github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
|
||||||
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
|
||||||
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
|
||||||
@ -542,7 +552,6 @@ github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQL
|
|||||||
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
|
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/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||||
github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
|
github.com/klauspost/compress v1.11.3/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
|
||||||
github.com/klauspost/compress v1.11.13 h1:eSvu8Tmq6j2psUJqJrLcWH6K3w5Dwc+qipbaA6eVEN4=
|
|
||||||
github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
|
github.com/klauspost/compress v1.11.13/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs=
|
||||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||||
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||||
@ -576,6 +585,7 @@ github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182aff
|
|||||||
github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY=
|
github.com/maxbrunsfeld/counterfeiter/v6 v6.2.2/go.mod h1:eD9eIE7cdwcMi9rYluz88Jz2VyhSmden33/aXg4oVIY=
|
||||||
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
|
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
|
||||||
github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs=
|
github.com/miekg/pkcs11 v1.0.3/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs=
|
||||||
|
github.com/miekg/pkcs11 v1.1.1/go.mod h1:XsNlhZGX73bx86s2hdc/FuaLm2CPZJemRLMA+WTFxgs=
|
||||||
github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4=
|
github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4=
|
||||||
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
|
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
|
||||||
github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
||||||
@ -588,12 +598,13 @@ github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh
|
|||||||
github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A=
|
github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A=
|
||||||
github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc=
|
github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc=
|
||||||
github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
|
github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
|
||||||
github.com/moby/sys/mount v0.2.0 h1:WhCW5B355jtxndN5ovugJlMFJawbUODuW8fSnEH6SSM=
|
github.com/moby/sys/mount v0.3.3 h1:fX1SVkXFJ47XWDoeFW4Sq7PdQJnV2QIDZAqjNqgEjUs=
|
||||||
github.com/moby/sys/mount v0.2.0/go.mod h1:aAivFE2LB3W4bACsUXChRHQ0qKWsetY4Y9V7sxOougM=
|
github.com/moby/sys/mount v0.3.3/go.mod h1:PBaEorSNTLG5t/+4EgukEQVlAvVEc6ZjTySwKdqp5K0=
|
||||||
github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
|
github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
|
||||||
github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
|
github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
|
||||||
github.com/moby/sys/mountinfo v0.5.0 h1:2Ks8/r6lopsxWi9m58nlwjaeSzUX9iiL1vj5qB/9ObI=
|
|
||||||
github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU=
|
github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU=
|
||||||
|
github.com/moby/sys/mountinfo v0.6.2 h1:BzJjoreD5BMFNmD9Rus6gdd1pLuecOFPt8wC+Vygl78=
|
||||||
|
github.com/moby/sys/mountinfo v0.6.2/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI=
|
||||||
github.com/moby/sys/signal v0.6.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg=
|
github.com/moby/sys/signal v0.6.0/go.mod h1:GQ6ObYZfqacOwTtlXvcmh9A26dVRul/hbOZn88Kg8Tg=
|
||||||
github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ=
|
github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ=
|
||||||
github.com/moby/sys/symlink v0.2.0/go.mod h1:7uZVF2dqJjG/NsClqul95CqKOBRQyYSNnJ6BMgR/gFs=
|
github.com/moby/sys/symlink v0.2.0/go.mod h1:7uZVF2dqJjG/NsClqul95CqKOBRQyYSNnJ6BMgR/gFs=
|
||||||
@ -615,6 +626,7 @@ github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRW
|
|||||||
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||||
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
|
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
|
||||||
github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM=
|
github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM=
|
||||||
|
github.com/networkplumbing/go-nft v0.2.0/go.mod h1:HnnM+tYvlGAsMU7yoYwXEVLLiDW9gdMmb5HoGcwpuQs=
|
||||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
|
||||||
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
|
github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A=
|
||||||
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
|
github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU=
|
||||||
@ -632,6 +644,7 @@ github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108
|
|||||||
github.com/onsi/ginkgo v1.13.0/go.mod h1:+REjRxOmWfHCjfv9TTWB1jD1Frx4XydAD3zm1lskyM0=
|
github.com/onsi/ginkgo v1.13.0/go.mod h1:+REjRxOmWfHCjfv9TTWB1jD1Frx4XydAD3zm1lskyM0=
|
||||||
github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
|
github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
|
||||||
github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
|
github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0=
|
||||||
|
github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c=
|
||||||
github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
|
github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
|
||||||
github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
|
github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA=
|
||||||
github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
||||||
@ -641,6 +654,7 @@ github.com/onsi/gomega v1.9.0/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoT
|
|||||||
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
|
github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo=
|
||||||
github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc=
|
github.com/onsi/gomega v1.10.3/go.mod h1:V9xEwhxec5O8UDM77eCW8vLymOMltsqPVYWrpDsH8xc=
|
||||||
github.com/onsi/gomega v1.15.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0=
|
github.com/onsi/gomega v1.15.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0=
|
||||||
|
github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY=
|
||||||
github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
|
github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
|
||||||
github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
|
github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
|
||||||
github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
|
github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
|
||||||
@ -650,16 +664,18 @@ github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3I
|
|||||||
github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
|
github.com/opencontainers/image-spec v1.0.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
|
||||||
github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
|
github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
|
||||||
github.com/opencontainers/image-spec v1.0.2-0.20211117181255-693428a734f5/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
|
github.com/opencontainers/image-spec v1.0.2-0.20211117181255-693428a734f5/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
|
||||||
github.com/opencontainers/image-spec v1.0.2 h1:9yCKha/T5XdGtO0q9Q9a6T5NUCsTn/DrBg0D7ufOcFM=
|
|
||||||
github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
|
github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
|
||||||
|
github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799 h1:rc3tiVYb5z54aKaDfakKn0dDjIyPpTtszkjuMzyt7ec=
|
||||||
|
github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
|
||||||
github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
|
github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
|
||||||
github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
|
github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
|
||||||
github.com/opencontainers/runc v1.0.0-rc8.0.20190926000215-3e425f80a8c9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
|
github.com/opencontainers/runc v1.0.0-rc8.0.20190926000215-3e425f80a8c9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
|
||||||
github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
|
github.com/opencontainers/runc v1.0.0-rc9/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
|
||||||
github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0=
|
github.com/opencontainers/runc v1.0.0-rc93/go.mod h1:3NOsor4w32B2tC0Zbl8Knk4Wg84SM2ImC1fxBuqJ/H0=
|
||||||
github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0=
|
github.com/opencontainers/runc v1.0.2/go.mod h1:aTaHFFwQXuA71CiyxOdFFIorAoemI04suvGRQFzWTD0=
|
||||||
github.com/opencontainers/runc v1.1.0 h1:O9+X96OcDjkmmZyfaG996kV7yq8HsoU2h1XRRQcefG8=
|
|
||||||
github.com/opencontainers/runc v1.1.0/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc=
|
github.com/opencontainers/runc v1.1.0/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc=
|
||||||
|
github.com/opencontainers/runc v1.1.2 h1:2VSZwLx5k/BfsBxMMipG/LYUnmqOD/BPkIVgQUcTlLw=
|
||||||
|
github.com/opencontainers/runc v1.1.2/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc=
|
||||||
github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
||||||
github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
||||||
github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
github.com/opencontainers/runtime-spec v1.0.2-0.20190207185410-29686dbc5559/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
||||||
@ -671,6 +687,7 @@ github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqi
|
|||||||
github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo=
|
github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo=
|
||||||
github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8=
|
github.com/opencontainers/selinux v1.8.2/go.mod h1:MUIHuUEvKB1wtJjQdOyYRgOnLD2xAPP8dBsCoU0KuF8=
|
||||||
github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI=
|
github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI=
|
||||||
|
github.com/opencontainers/selinux v1.10.1/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI=
|
||||||
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
|
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
|
||||||
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
|
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
|
||||||
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
|
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
|
||||||
@ -693,6 +710,7 @@ github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5Fsn
|
|||||||
github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g=
|
github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g=
|
||||||
github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
|
github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M=
|
||||||
github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
|
github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
|
||||||
|
github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0=
|
||||||
github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
||||||
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
|
||||||
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||||
@ -833,6 +851,7 @@ go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
|||||||
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
||||||
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
|
||||||
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
|
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
|
||||||
|
go.opencensus.io v0.23.0 h1:gqCw0LfLxScz8irSi8exQc7fyQ0fKQU/qnC/X8+V/1M=
|
||||||
go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
|
go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E=
|
||||||
go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc=
|
go.opentelemetry.io/contrib v0.20.0/go.mod h1:G/EtFaa6qaN7+LxqfIAT3GiZa7Wv5DTBUzl5H4LY0Kc=
|
||||||
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0/go.mod h1:oVGt1LRbBOBq1A5BQLlUg9UaU/54aiHw8cgjV3aWZ/E=
|
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.20.0/go.mod h1:oVGt1LRbBOBq1A5BQLlUg9UaU/54aiHw8cgjV3aWZ/E=
|
||||||
@ -1090,13 +1109,16 @@ golang.org/x/sys v0.0.0-20210903071746-97244b99971b/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||||||
golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e h1:fLOSk5Q00efkSvAm+4xcoXD+RRmLmmulPn5I3Y9F2EM=
|
|
||||||
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k=
|
||||||
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||||
golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b h1:9zKuko04nR4gjZ4+DNjHqRlAJqbJETHwiNKDqTfOjfE=
|
|
||||||
golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
|
golang.org/x/term v0.0.0-20220526004731-065cf7ba2467 h1:CBpWXWQpIRjzmkkA+M7q9Fqnwd2mZr3AFqexg8YTfoM=
|
||||||
|
golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
|
||||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||||
@ -1177,6 +1199,7 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f
|
|||||||
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
|
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
|
||||||
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||||
golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||||
|
golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||||
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
|
||||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
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-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||||
@ -1333,8 +1356,9 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
|||||||
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
|
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.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
||||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
|
|
||||||
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
|
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/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 v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
|
gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
|
||||||
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
|
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
|
||||||
gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk=
|
gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk=
|
||||||
|
1
vendor/github.com/moby/sys/mount/flags_bsd.go
generated
vendored
1
vendor/github.com/moby/sys/mount/flags_bsd.go
generated
vendored
@ -1,3 +1,4 @@
|
|||||||
|
//go:build freebsd || openbsd
|
||||||
// +build freebsd openbsd
|
// +build freebsd openbsd
|
||||||
|
|
||||||
package mount
|
package mount
|
||||||
|
3
vendor/github.com/moby/sys/mount/flags_unix.go
generated
vendored
3
vendor/github.com/moby/sys/mount/flags_unix.go
generated
vendored
@ -1,3 +1,4 @@
|
|||||||
|
//go:build !darwin && !windows
|
||||||
// +build !darwin,!windows
|
// +build !darwin,!windows
|
||||||
|
|
||||||
package mount
|
package mount
|
||||||
@ -101,7 +102,7 @@ func MergeTmpfsOptions(options []string) ([]string, error) {
|
|||||||
}
|
}
|
||||||
opt := strings.SplitN(option, "=", 2)
|
opt := strings.SplitN(option, "=", 2)
|
||||||
if len(opt) != 2 || !validFlags[opt[0]] {
|
if len(opt) != 2 || !validFlags[opt[0]] {
|
||||||
return nil, fmt.Errorf("Invalid tmpfs option %q", opt)
|
return nil, fmt.Errorf("invalid tmpfs option %q", opt)
|
||||||
}
|
}
|
||||||
if !dataCollisions[opt[0]] {
|
if !dataCollisions[opt[0]] {
|
||||||
// We prepend the option and add to collision map
|
// We prepend the option and add to collision map
|
||||||
|
6
vendor/github.com/moby/sys/mount/go.mod
generated
vendored
6
vendor/github.com/moby/sys/mount/go.mod
generated
vendored
@ -1,8 +1,8 @@
|
|||||||
module github.com/moby/sys/mount
|
module github.com/moby/sys/mount
|
||||||
|
|
||||||
go 1.14
|
go 1.16
|
||||||
|
|
||||||
require (
|
require (
|
||||||
github.com/moby/sys/mountinfo v0.4.0
|
github.com/moby/sys/mountinfo v0.6.2
|
||||||
golang.org/x/sys v0.0.0-20200922070232-aee5d888a860
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a
|
||||||
)
|
)
|
||||||
|
9
vendor/github.com/moby/sys/mount/go.sum
generated
vendored
9
vendor/github.com/moby/sys/mount/go.sum
generated
vendored
@ -1,5 +1,4 @@
|
|||||||
github.com/moby/sys/mountinfo v0.4.0 h1:1KInV3Huv18akCu58V7lzNlt+jFmqlu1EaErnEHE/VM=
|
github.com/moby/sys/mountinfo v0.6.2 h1:BzJjoreD5BMFNmD9Rus6gdd1pLuecOFPt8wC+Vygl78=
|
||||||
github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
|
github.com/moby/sys/mountinfo v0.6.2/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI=
|
||||||
golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k=
|
||||||
golang.org/x/sys v0.0.0-20200922070232-aee5d888a860 h1:YEu4SMq7D0cmT7CBbXfcH0NZeuChAXwsHe/9XueUO6o=
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||||
golang.org/x/sys v0.0.0-20200922070232-aee5d888a860/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
|
||||||
|
3
vendor/github.com/moby/sys/mount/mount_errors.go
generated
vendored
3
vendor/github.com/moby/sys/mount/mount_errors.go
generated
vendored
@ -1,4 +1,5 @@
|
|||||||
// +build !windows
|
//go:build !darwin && !windows
|
||||||
|
// +build !darwin,!windows
|
||||||
|
|
||||||
package mount
|
package mount
|
||||||
|
|
||||||
|
3
vendor/github.com/moby/sys/mount/mount_unix.go
generated
vendored
3
vendor/github.com/moby/sys/mount/mount_unix.go
generated
vendored
@ -1,3 +1,4 @@
|
|||||||
|
//go:build !darwin && !windows
|
||||||
// +build !darwin,!windows
|
// +build !darwin,!windows
|
||||||
|
|
||||||
package mount
|
package mount
|
||||||
@ -22,7 +23,7 @@ func Mount(device, target, mType, options string) error {
|
|||||||
// a normal unmount. If target is not a mount point, no error is returned.
|
// a normal unmount. If target is not a mount point, no error is returned.
|
||||||
func Unmount(target string) error {
|
func Unmount(target string) error {
|
||||||
err := unix.Unmount(target, mntDetach)
|
err := unix.Unmount(target, mntDetach)
|
||||||
if err == nil || err == unix.EINVAL {
|
if err == nil || err == unix.EINVAL { //nolint:errorlint // unix errors are bare
|
||||||
// Ignore "not mounted" error here. Note the same error
|
// Ignore "not mounted" error here. Note the same error
|
||||||
// can be returned if flags are invalid, so this code
|
// can be returned if flags are invalid, so this code
|
||||||
// assumes that the flags value is always correct.
|
// assumes that the flags value is always correct.
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
// +build freebsd,cgo openbsd,cgo
|
//go:build freebsd && cgo
|
||||||
|
// +build freebsd,cgo
|
||||||
|
|
||||||
package mount
|
package mount
|
||||||
|
|
1
vendor/github.com/moby/sys/mount/mounter_linux.go
generated
vendored
1
vendor/github.com/moby/sys/mount/mounter_linux.go
generated
vendored
@ -65,7 +65,6 @@ func mount(device, target, mType string, flags uintptr, data string) error {
|
|||||||
flags: oflags | unix.MS_REMOUNT,
|
flags: oflags | unix.MS_REMOUNT,
|
||||||
err: err,
|
err: err,
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
78
vendor/github.com/moby/sys/mount/mounter_openbsd.go
generated
vendored
Normal file
78
vendor/github.com/moby/sys/mount/mounter_openbsd.go
generated
vendored
Normal file
@ -0,0 +1,78 @@
|
|||||||
|
//go:build openbsd && cgo
|
||||||
|
// +build openbsd,cgo
|
||||||
|
|
||||||
|
/*
|
||||||
|
Due to how OpenBSD mount(2) works, filesystem types need to be
|
||||||
|
supported explicitly since it uses separate structs to pass
|
||||||
|
filesystem-specific arguments.
|
||||||
|
|
||||||
|
For now only UFS/FFS is supported as it's the default fs
|
||||||
|
on OpenBSD systems.
|
||||||
|
|
||||||
|
See: https://man.openbsd.org/mount.2
|
||||||
|
*/
|
||||||
|
|
||||||
|
package mount
|
||||||
|
|
||||||
|
/*
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/mount.h>
|
||||||
|
*/
|
||||||
|
import "C"
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"syscall"
|
||||||
|
"unsafe"
|
||||||
|
)
|
||||||
|
|
||||||
|
func createExportInfo(readOnly bool) C.struct_export_args {
|
||||||
|
exportFlags := C.int(0)
|
||||||
|
if readOnly {
|
||||||
|
exportFlags = C.MNT_EXRDONLY
|
||||||
|
}
|
||||||
|
out := C.struct_export_args{
|
||||||
|
ex_root: 0,
|
||||||
|
ex_flags: exportFlags,
|
||||||
|
}
|
||||||
|
return out
|
||||||
|
}
|
||||||
|
|
||||||
|
func createUfsArgs(device string, readOnly bool) unsafe.Pointer {
|
||||||
|
out := &C.struct_ufs_args{
|
||||||
|
fspec: C.CString(device),
|
||||||
|
export_info: createExportInfo(readOnly),
|
||||||
|
}
|
||||||
|
return unsafe.Pointer(out)
|
||||||
|
}
|
||||||
|
|
||||||
|
func mount(device, target, mType string, flag uintptr, data string) error {
|
||||||
|
readOnly := flag&RDONLY != 0
|
||||||
|
|
||||||
|
var fsArgs unsafe.Pointer
|
||||||
|
|
||||||
|
switch mType {
|
||||||
|
case "ffs":
|
||||||
|
fsArgs = createUfsArgs(device, readOnly)
|
||||||
|
default:
|
||||||
|
return &mountError{
|
||||||
|
op: "mount",
|
||||||
|
source: device,
|
||||||
|
target: target,
|
||||||
|
flags: flag,
|
||||||
|
err: fmt.Errorf("unsupported file system type: %s", mType),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if errno := C.mount(C.CString(mType), C.CString(target), C.int(flag), fsArgs); errno != 0 {
|
||||||
|
return &mountError{
|
||||||
|
op: "mount",
|
||||||
|
source: device,
|
||||||
|
target: target,
|
||||||
|
flags: flag,
|
||||||
|
err: syscall.Errno(errno),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
3
vendor/github.com/moby/sys/mount/mounter_unsupported.go
generated
vendored
3
vendor/github.com/moby/sys/mount/mounter_unsupported.go
generated
vendored
@ -1,4 +1,5 @@
|
|||||||
// +build !linux,!freebsd,!openbsd,!windows freebsd,!cgo openbsd,!cgo
|
//go:build (!linux && !freebsd && !openbsd && !windows && !darwin) || (freebsd && !cgo) || (openbsd && !cgo)
|
||||||
|
// +build !linux,!freebsd,!openbsd,!windows,!darwin freebsd,!cgo openbsd,!cgo
|
||||||
|
|
||||||
package mount
|
package mount
|
||||||
|
|
||||||
|
2
vendor/github.com/moby/sys/mountinfo/go.mod
generated
vendored
2
vendor/github.com/moby/sys/mountinfo/go.mod
generated
vendored
@ -2,4 +2,4 @@ module github.com/moby/sys/mountinfo
|
|||||||
|
|
||||||
go 1.16
|
go 1.16
|
||||||
|
|
||||||
require golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359
|
require golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a
|
||||||
|
4
vendor/github.com/moby/sys/mountinfo/go.sum
generated
vendored
4
vendor/github.com/moby/sys/mountinfo/go.sum
generated
vendored
@ -1,2 +1,2 @@
|
|||||||
golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359 h1:2B5p2L5IfGiD7+b9BOoRMC6DgObAVZV+Fsp050NqXik=
|
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a h1:dGzPydgVsqGcTRVwiLJ1jVbufYwmzD3LfVPLKsKg+0k=
|
||||||
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=
|
||||||
|
2
vendor/github.com/moby/sys/mountinfo/mounted_linux.go
generated
vendored
2
vendor/github.com/moby/sys/mountinfo/mounted_linux.go
generated
vendored
@ -15,7 +15,7 @@ import (
|
|||||||
//
|
//
|
||||||
// If a non-existent path is specified, an appropriate error is returned.
|
// If a non-existent path is specified, an appropriate error is returned.
|
||||||
// In case the caller is not interested in this particular error, it should
|
// In case the caller is not interested in this particular error, it should
|
||||||
// be handled separately using e.g. errors.Is(err, os.ErrNotExist).
|
// be handled separately using e.g. errors.Is(err, fs.ErrNotExist).
|
||||||
//
|
//
|
||||||
// This function is only available on Linux. When available (since kernel
|
// This function is only available on Linux. When available (since kernel
|
||||||
// v5.6), openat2(2) syscall is used to reliably detect all mounts. Otherwise,
|
// v5.6), openat2(2) syscall is used to reliably detect all mounts. Otherwise,
|
||||||
|
4
vendor/github.com/moby/sys/mountinfo/mounted_unix.go
generated
vendored
4
vendor/github.com/moby/sys/mountinfo/mounted_unix.go
generated
vendored
@ -1,5 +1,5 @@
|
|||||||
//go:build linux || (freebsd && cgo) || (openbsd && cgo) || (darwin && cgo)
|
//go:build linux || freebsd || openbsd || darwin
|
||||||
// +build linux freebsd,cgo openbsd,cgo darwin,cgo
|
// +build linux freebsd openbsd darwin
|
||||||
|
|
||||||
package mountinfo
|
package mountinfo
|
||||||
|
|
||||||
|
2
vendor/github.com/moby/sys/mountinfo/mountinfo.go
generated
vendored
2
vendor/github.com/moby/sys/mountinfo/mountinfo.go
generated
vendored
@ -15,7 +15,7 @@ func GetMounts(f FilterFunc) ([]*Info, error) {
|
|||||||
//
|
//
|
||||||
// If a non-existent path is specified, an appropriate error is returned.
|
// If a non-existent path is specified, an appropriate error is returned.
|
||||||
// In case the caller is not interested in this particular error, it should
|
// In case the caller is not interested in this particular error, it should
|
||||||
// be handled separately using e.g. errors.Is(err, os.ErrNotExist).
|
// be handled separately using e.g. errors.Is(err, fs.ErrNotExist).
|
||||||
func Mounted(path string) (bool, error) {
|
func Mounted(path string) (bool, error) {
|
||||||
// root is always mounted
|
// root is always mounted
|
||||||
if path == string(os.PathSeparator) {
|
if path == string(os.PathSeparator) {
|
||||||
|
44
vendor/github.com/moby/sys/mountinfo/mountinfo_bsd.go
generated
vendored
44
vendor/github.com/moby/sys/mountinfo/mountinfo_bsd.go
generated
vendored
@ -1,53 +1,37 @@
|
|||||||
//go:build (freebsd && cgo) || (openbsd && cgo) || (darwin && cgo)
|
//go:build freebsd || openbsd || darwin
|
||||||
// +build freebsd,cgo openbsd,cgo darwin,cgo
|
// +build freebsd openbsd darwin
|
||||||
|
|
||||||
package mountinfo
|
package mountinfo
|
||||||
|
|
||||||
/*
|
import "golang.org/x/sys/unix"
|
||||||
#include <sys/param.h>
|
|
||||||
#include <sys/ucred.h>
|
|
||||||
#include <sys/mount.h>
|
|
||||||
*/
|
|
||||||
import "C"
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"reflect"
|
|
||||||
"unsafe"
|
|
||||||
)
|
|
||||||
|
|
||||||
// parseMountTable returns information about mounted filesystems
|
// parseMountTable returns information about mounted filesystems
|
||||||
func parseMountTable(filter FilterFunc) ([]*Info, error) {
|
func parseMountTable(filter FilterFunc) ([]*Info, error) {
|
||||||
var rawEntries *C.struct_statfs
|
count, err := unix.Getfsstat(nil, unix.MNT_WAIT)
|
||||||
|
if err != nil {
|
||||||
count := int(C.getmntinfo(&rawEntries, C.MNT_WAIT))
|
return nil, err
|
||||||
if count == 0 {
|
|
||||||
return nil, fmt.Errorf("failed to call getmntinfo")
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var entries []C.struct_statfs
|
entries := make([]unix.Statfs_t, count)
|
||||||
header := (*reflect.SliceHeader)(unsafe.Pointer(&entries))
|
_, err = unix.Getfsstat(entries, unix.MNT_WAIT)
|
||||||
header.Cap = count
|
if err != nil {
|
||||||
header.Len = count
|
return nil, err
|
||||||
header.Data = uintptr(unsafe.Pointer(rawEntries))
|
}
|
||||||
|
|
||||||
var out []*Info
|
var out []*Info
|
||||||
for _, entry := range entries {
|
for _, entry := range entries {
|
||||||
var mountinfo Info
|
|
||||||
var skip, stop bool
|
var skip, stop bool
|
||||||
mountinfo.Mountpoint = C.GoString(&entry.f_mntonname[0])
|
mountinfo := getMountinfo(&entry)
|
||||||
mountinfo.FSType = C.GoString(&entry.f_fstypename[0])
|
|
||||||
mountinfo.Source = C.GoString(&entry.f_mntfromname[0])
|
|
||||||
|
|
||||||
if filter != nil {
|
if filter != nil {
|
||||||
// filter out entries we're not interested in
|
// filter out entries we're not interested in
|
||||||
skip, stop = filter(&mountinfo)
|
skip, stop = filter(mountinfo)
|
||||||
if skip {
|
if skip {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
out = append(out, &mountinfo)
|
out = append(out, mountinfo)
|
||||||
if stop {
|
if stop {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
14
vendor/github.com/moby/sys/mountinfo/mountinfo_freebsdlike.go
generated
vendored
Normal file
14
vendor/github.com/moby/sys/mountinfo/mountinfo_freebsdlike.go
generated
vendored
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
//go:build freebsd || darwin
|
||||||
|
// +build freebsd darwin
|
||||||
|
|
||||||
|
package mountinfo
|
||||||
|
|
||||||
|
import "golang.org/x/sys/unix"
|
||||||
|
|
||||||
|
func getMountinfo(entry *unix.Statfs_t) *Info {
|
||||||
|
return &Info{
|
||||||
|
Mountpoint: unix.ByteSliceToString(entry.Mntonname[:]),
|
||||||
|
FSType: unix.ByteSliceToString(entry.Fstypename[:]),
|
||||||
|
Source: unix.ByteSliceToString(entry.Mntfromname[:]),
|
||||||
|
}
|
||||||
|
}
|
11
vendor/github.com/moby/sys/mountinfo/mountinfo_openbsd.go
generated
vendored
Normal file
11
vendor/github.com/moby/sys/mountinfo/mountinfo_openbsd.go
generated
vendored
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
package mountinfo
|
||||||
|
|
||||||
|
import "golang.org/x/sys/unix"
|
||||||
|
|
||||||
|
func getMountinfo(entry *unix.Statfs_t) *Info {
|
||||||
|
return &Info{
|
||||||
|
Mountpoint: unix.ByteSliceToString(entry.F_mntonname[:]),
|
||||||
|
FSType: unix.ByteSliceToString(entry.F_fstypename[:]),
|
||||||
|
Source: unix.ByteSliceToString(entry.F_mntfromname[:]),
|
||||||
|
}
|
||||||
|
}
|
4
vendor/github.com/moby/sys/mountinfo/mountinfo_unsupported.go
generated
vendored
4
vendor/github.com/moby/sys/mountinfo/mountinfo_unsupported.go
generated
vendored
@ -1,5 +1,5 @@
|
|||||||
//go:build (!windows && !linux && !freebsd && !openbsd && !darwin) || (freebsd && !cgo) || (openbsd && !cgo) || (darwin && !cgo)
|
//go:build !windows && !linux && !freebsd && !openbsd && !darwin
|
||||||
// +build !windows,!linux,!freebsd,!openbsd,!darwin freebsd,!cgo openbsd,!cgo darwin,!cgo
|
// +build !windows,!linux,!freebsd,!openbsd,!darwin
|
||||||
|
|
||||||
package mountinfo
|
package mountinfo
|
||||||
|
|
||||||
|
2
vendor/golang.org/x/term/terminal.go
generated
vendored
2
vendor/golang.org/x/term/terminal.go
generated
vendored
@ -935,7 +935,7 @@ func (s *stRingBuffer) Add(a string) {
|
|||||||
// next most recent, and so on. If such an element doesn't exist then ok is
|
// next most recent, and so on. If such an element doesn't exist then ok is
|
||||||
// false.
|
// false.
|
||||||
func (s *stRingBuffer) NthPreviousEntry(n int) (value string, ok bool) {
|
func (s *stRingBuffer) NthPreviousEntry(n int) (value string, ok bool) {
|
||||||
if n >= s.size {
|
if n < 0 || n >= s.size {
|
||||||
return "", false
|
return "", false
|
||||||
}
|
}
|
||||||
index := s.head - n
|
index := s.head - n
|
||||||
|
16
vendor/modules.txt
vendored
16
vendor/modules.txt
vendored
@ -11,7 +11,7 @@ github.com/Microsoft/go-winio/backuptar
|
|||||||
github.com/Microsoft/go-winio/pkg/guid
|
github.com/Microsoft/go-winio/pkg/guid
|
||||||
github.com/Microsoft/go-winio/pkg/security
|
github.com/Microsoft/go-winio/pkg/security
|
||||||
github.com/Microsoft/go-winio/vhd
|
github.com/Microsoft/go-winio/vhd
|
||||||
# github.com/Microsoft/hcsshim v0.9.2
|
# github.com/Microsoft/hcsshim v0.9.3
|
||||||
github.com/Microsoft/hcsshim
|
github.com/Microsoft/hcsshim
|
||||||
github.com/Microsoft/hcsshim/computestorage
|
github.com/Microsoft/hcsshim/computestorage
|
||||||
github.com/Microsoft/hcsshim/internal/cow
|
github.com/Microsoft/hcsshim/internal/cow
|
||||||
@ -21,11 +21,13 @@ github.com/Microsoft/hcsshim/internal/hcs/schema2
|
|||||||
github.com/Microsoft/hcsshim/internal/hcserror
|
github.com/Microsoft/hcsshim/internal/hcserror
|
||||||
github.com/Microsoft/hcsshim/internal/hns
|
github.com/Microsoft/hcsshim/internal/hns
|
||||||
github.com/Microsoft/hcsshim/internal/interop
|
github.com/Microsoft/hcsshim/internal/interop
|
||||||
|
github.com/Microsoft/hcsshim/internal/jobobject
|
||||||
github.com/Microsoft/hcsshim/internal/log
|
github.com/Microsoft/hcsshim/internal/log
|
||||||
github.com/Microsoft/hcsshim/internal/logfields
|
github.com/Microsoft/hcsshim/internal/logfields
|
||||||
github.com/Microsoft/hcsshim/internal/longpath
|
github.com/Microsoft/hcsshim/internal/longpath
|
||||||
github.com/Microsoft/hcsshim/internal/mergemaps
|
github.com/Microsoft/hcsshim/internal/mergemaps
|
||||||
github.com/Microsoft/hcsshim/internal/oc
|
github.com/Microsoft/hcsshim/internal/oc
|
||||||
|
github.com/Microsoft/hcsshim/internal/queue
|
||||||
github.com/Microsoft/hcsshim/internal/safefile
|
github.com/Microsoft/hcsshim/internal/safefile
|
||||||
github.com/Microsoft/hcsshim/internal/timeout
|
github.com/Microsoft/hcsshim/internal/timeout
|
||||||
github.com/Microsoft/hcsshim/internal/vmcompute
|
github.com/Microsoft/hcsshim/internal/vmcompute
|
||||||
@ -63,7 +65,7 @@ github.com/container-orchestrated-devices/container-device-interface/pkg/cdi
|
|||||||
github.com/container-orchestrated-devices/container-device-interface/specs-go
|
github.com/container-orchestrated-devices/container-device-interface/specs-go
|
||||||
# github.com/containerd/cgroups v1.0.3
|
# github.com/containerd/cgroups v1.0.3
|
||||||
github.com/containerd/cgroups/stats/v1
|
github.com/containerd/cgroups/stats/v1
|
||||||
# github.com/containerd/containerd v1.6.4
|
# github.com/containerd/containerd v1.6.6
|
||||||
github.com/containerd/containerd/errdefs
|
github.com/containerd/containerd/errdefs
|
||||||
github.com/containerd/containerd/log
|
github.com/containerd/containerd/log
|
||||||
github.com/containerd/containerd/pkg/userns
|
github.com/containerd/containerd/pkg/userns
|
||||||
@ -87,7 +89,7 @@ github.com/containernetworking/cni/pkg/version
|
|||||||
# github.com/containernetworking/plugins v1.1.1
|
# github.com/containernetworking/plugins v1.1.1
|
||||||
## explicit
|
## explicit
|
||||||
github.com/containernetworking/plugins/pkg/ns
|
github.com/containernetworking/plugins/pkg/ns
|
||||||
# github.com/containers/buildah v1.26.1-0.20220524184833-5500333c2e06
|
# github.com/containers/buildah v1.26.1-0.20220607182634-005447be07ee
|
||||||
## explicit
|
## explicit
|
||||||
github.com/containers/buildah
|
github.com/containers/buildah
|
||||||
github.com/containers/buildah/bind
|
github.com/containers/buildah/bind
|
||||||
@ -393,7 +395,7 @@ github.com/felixge/httpsnoop
|
|||||||
# github.com/fsnotify/fsnotify v1.5.4
|
# github.com/fsnotify/fsnotify v1.5.4
|
||||||
## explicit
|
## explicit
|
||||||
github.com/fsnotify/fsnotify
|
github.com/fsnotify/fsnotify
|
||||||
# github.com/fsouza/go-dockerclient v1.7.11
|
# github.com/fsouza/go-dockerclient v1.8.1
|
||||||
github.com/fsouza/go-dockerclient
|
github.com/fsouza/go-dockerclient
|
||||||
# github.com/ghodss/yaml v1.0.0
|
# github.com/ghodss/yaml v1.0.0
|
||||||
## explicit
|
## explicit
|
||||||
@ -480,9 +482,9 @@ github.com/matttproud/golang_protobuf_extensions/pbutil
|
|||||||
github.com/miekg/pkcs11
|
github.com/miekg/pkcs11
|
||||||
# github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible
|
# github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible
|
||||||
github.com/mistifyio/go-zfs
|
github.com/mistifyio/go-zfs
|
||||||
# github.com/moby/sys/mount v0.2.0
|
# github.com/moby/sys/mount v0.3.3
|
||||||
github.com/moby/sys/mount
|
github.com/moby/sys/mount
|
||||||
# github.com/moby/sys/mountinfo v0.6.1
|
# github.com/moby/sys/mountinfo v0.6.2
|
||||||
github.com/moby/sys/mountinfo
|
github.com/moby/sys/mountinfo
|
||||||
# github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6
|
# github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6
|
||||||
## explicit
|
## explicit
|
||||||
@ -745,7 +747,7 @@ golang.org/x/sys/plan9
|
|||||||
golang.org/x/sys/unix
|
golang.org/x/sys/unix
|
||||||
golang.org/x/sys/windows
|
golang.org/x/sys/windows
|
||||||
golang.org/x/sys/windows/registry
|
golang.org/x/sys/windows/registry
|
||||||
# golang.org/x/term v0.0.0-20210927222741-03fcf44c2211
|
# golang.org/x/term v0.0.0-20220526004731-065cf7ba2467
|
||||||
## explicit
|
## explicit
|
||||||
golang.org/x/term
|
golang.org/x/term
|
||||||
# golang.org/x/text v0.3.7
|
# golang.org/x/text v0.3.7
|
||||||
|
Reference in New Issue
Block a user