mirror of
https://github.com/containers/podman
synced 2024-10-18 16:24:34 +00:00
[NO TESTS NEEDED] Vendor in containers/buildah v1.20.0
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
This commit is contained in:
parent
fa6ba9b00f
commit
fc197fb4f5
|
@ -9,7 +9,7 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/containers/buildah"
|
||||
"github.com/containers/buildah/imagebuildah"
|
||||
"github.com/containers/buildah/define"
|
||||
buildahCLI "github.com/containers/buildah/pkg/cli"
|
||||
"github.com/containers/buildah/pkg/parse"
|
||||
"github.com/containers/common/pkg/completion"
|
||||
|
@ -196,7 +196,7 @@ func build(cmd *cobra.Command, args []string) error {
|
|||
var contextDir string
|
||||
if len(args) > 0 {
|
||||
// The context directory could be a URL. Try to handle that.
|
||||
tempDir, subDir, err := imagebuildah.TempDirForURL("", "buildah", args[0])
|
||||
tempDir, subDir, err := define.TempDirForURL("", "buildah", args[0])
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "error prepping temporary context directory")
|
||||
}
|
||||
|
@ -304,16 +304,16 @@ func buildFlagsWrapperToOptions(c *cobra.Command, contextDir string, flags *buil
|
|||
return nil, err
|
||||
}
|
||||
|
||||
pullPolicy := imagebuildah.PullIfMissing
|
||||
pullPolicy := define.PullIfMissing
|
||||
if c.Flags().Changed("pull") && flags.Pull {
|
||||
pullPolicy = imagebuildah.PullAlways
|
||||
pullPolicy = define.PullAlways
|
||||
}
|
||||
if flags.PullAlways {
|
||||
pullPolicy = imagebuildah.PullAlways
|
||||
pullPolicy = define.PullAlways
|
||||
}
|
||||
|
||||
if flags.PullNever {
|
||||
pullPolicy = imagebuildah.PullIfMissing
|
||||
pullPolicy = define.PullIfMissing
|
||||
}
|
||||
|
||||
args := make(map[string]string)
|
||||
|
@ -388,9 +388,9 @@ func buildFlagsWrapperToOptions(c *cobra.Command, contextDir string, flags *buil
|
|||
flags.Layers = false
|
||||
}
|
||||
|
||||
compression := imagebuildah.Gzip
|
||||
compression := define.Gzip
|
||||
if flags.DisableCompression {
|
||||
compression = imagebuildah.Uncompressed
|
||||
compression = define.Uncompressed
|
||||
}
|
||||
|
||||
isolation, err := parse.IsolationOption(flags.Isolation)
|
||||
|
@ -443,7 +443,7 @@ func buildFlagsWrapperToOptions(c *cobra.Command, contextDir string, flags *buil
|
|||
return nil, errors.Wrapf(err, "unable to obtain decrypt config")
|
||||
}
|
||||
|
||||
opts := imagebuildah.BuildOptions{
|
||||
opts := define.BuildOptions{
|
||||
AddCapabilities: flags.CapAdd,
|
||||
AdditionalTags: tags,
|
||||
Annotations: flags.Annotation,
|
||||
|
|
8
go.mod
8
go.mod
|
@ -10,7 +10,7 @@ require (
|
|||
github.com/checkpoint-restore/go-criu v0.0.0-20190109184317-bdb7599cd87b
|
||||
github.com/containernetworking/cni v0.8.1
|
||||
github.com/containernetworking/plugins v0.9.1
|
||||
github.com/containers/buildah v1.19.8
|
||||
github.com/containers/buildah v1.20.0
|
||||
github.com/containers/common v0.35.4
|
||||
github.com/containers/conmon v2.0.20+incompatible
|
||||
github.com/containers/image/v5 v5.10.5
|
||||
|
@ -24,7 +24,7 @@ require (
|
|||
github.com/davecgh/go-spew v1.1.1
|
||||
github.com/digitalocean/go-qemu v0.0.0-20210209191958-152a1535e49f
|
||||
github.com/docker/distribution v2.7.1+incompatible
|
||||
github.com/docker/docker v20.10.0-beta1.0.20201113105859-b6bfff2a628f+incompatible
|
||||
github.com/docker/docker v20.10.3-0.20210216175712-646072ed6524+incompatible
|
||||
github.com/docker/go-connections v0.4.0
|
||||
github.com/docker/go-plugins-helpers v0.0.0-20200102110956-c9a8a2d92ccc
|
||||
github.com/docker/go-units v0.4.0
|
||||
|
@ -40,7 +40,7 @@ require (
|
|||
github.com/json-iterator/go v1.1.10
|
||||
github.com/kr/text v0.2.0 // indirect
|
||||
github.com/mattn/go-colorable v0.1.8 // indirect
|
||||
github.com/moby/term v0.0.0-20201110203204-bea5bbe245bf
|
||||
github.com/moby/term v0.0.0-20201216013528-df9cb8a40635
|
||||
github.com/mrunalp/fileutils v0.5.0
|
||||
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e // indirect
|
||||
github.com/onsi/ginkgo v1.15.2
|
||||
|
@ -64,7 +64,7 @@ require (
|
|||
github.com/vishvananda/netlink v1.1.1-0.20201029203352-d40f9887b852
|
||||
go.etcd.io/bbolt v1.3.5
|
||||
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad
|
||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9
|
||||
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a
|
||||
golang.org/x/sys v0.0.0-20210324051608-47abb6519492
|
||||
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect
|
||||
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776
|
||||
|
|
61
go.sum
61
go.sum
|
@ -44,7 +44,6 @@ github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym
|
|||
github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA=
|
||||
github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA=
|
||||
github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw=
|
||||
github.com/Microsoft/go-winio v0.4.15-0.20200113171025-3fe6c5262873/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw=
|
||||
github.com/Microsoft/go-winio v0.4.16-0.20201130162521-d1ffc52c7331/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0=
|
||||
github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0=
|
||||
github.com/Microsoft/go-winio v0.4.17-0.20210211115548-6eac466e5fa3 h1:mw6pDQqv38/WGF1cO/jF5t/jyAJ2yi7CmtFLLO5tGFI=
|
||||
|
@ -137,18 +136,17 @@ github.com/containerd/containerd v1.3.0-beta.2.0.20190828155532-0293cbd26c69/go.
|
|||
github.com/containerd/containerd v1.3.0/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
|
||||
github.com/containerd/containerd v1.3.1-0.20191213020239-082f7e3aed57/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
|
||||
github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
|
||||
github.com/containerd/containerd v1.3.4/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
|
||||
github.com/containerd/containerd v1.4.0-beta.2.0.20200729163537-40b22ef07410/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
|
||||
github.com/containerd/containerd v1.4.1/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
|
||||
github.com/containerd/containerd v1.4.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
|
||||
github.com/containerd/containerd v1.5.0-beta.1 h1:IK6yirB4X7wpKyFSikWiT++nZsyIxGAAgNEv3fEGuls=
|
||||
github.com/containerd/containerd v1.5.0-beta.1/go.mod h1:5HfvG1V2FsKesEGQ17k5/T7V960Tmcumvqn8Mc+pCYQ=
|
||||
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-20191127005431-f65d91d395eb/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
||||
github.com/containerd/continuity v0.0.0-20200413184840-d3ef23f19fbb/go.mod h1:Dq467ZllaHgAtVp4p1xUQWBrFXR9s/wyoTpG8zOJGkY=
|
||||
github.com/containerd/continuity v0.0.0-20200710164510-efbc4488d8fe/go.mod h1:cECdGN1O8G9bgKTlLhuPJimka6Xb/Gg7vYzCTNVxhvo=
|
||||
github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7 h1:6ejg6Lkk8dskcM7wQ28gONkukbQkM4qpj4RnYbpFzrI=
|
||||
github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7/go.mod h1:kR3BEg7bDFaEddKm54WSmrol1fKWDU1nKYkgrcgZT7Y=
|
||||
github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e h1:6JKvHHt396/qabvMhnhUZvWaHZzfVfldxE60TK8YLhg=
|
||||
github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ=
|
||||
github.com/containerd/fifo v0.0.0-20180307165137-3d5202aec260/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI=
|
||||
github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI=
|
||||
github.com/containerd/fifo v0.0.0-20200410184934-f15a3290365b/go.mod h1:jPQ2IAeZRCYxpS/Cm1495vGFww6ecHmMk1YJH2Q5ln0=
|
||||
|
@ -176,15 +174,13 @@ github.com/containernetworking/plugins v0.8.6/go.mod h1:qnw5mN19D8fIwkqW7oHHYDHV
|
|||
github.com/containernetworking/plugins v0.8.7/go.mod h1:R7lXeZaBzpfqapcAbHRW8/CYwm0dHzbz0XEjofx0uB0=
|
||||
github.com/containernetworking/plugins v0.9.1 h1:FD1tADPls2EEi3flPc2OegIY1M9pUa9r2Quag7HMLV8=
|
||||
github.com/containernetworking/plugins v0.9.1/go.mod h1:xP/idU2ldlzN6m4p5LmGiwRDjeJr6FLK6vuiUwoH7P8=
|
||||
github.com/containers/buildah v1.19.8 h1:4TzmetfKPQF5hh6GgMwbAfrD50j+PAcsRiWDnx+gCI8=
|
||||
github.com/containers/buildah v1.19.8/go.mod h1:VnyHWgNmfR1d89/zJ/F4cbwOzaQS+6sBky46W7dCo3E=
|
||||
github.com/containers/common v0.33.4/go.mod h1:PhgL71XuC4jJ/1BIqeP7doke3aMFkCP90YBXwDeUr9g=
|
||||
github.com/containers/buildah v1.20.0 h1:H8db/d2uSGm947mqjX0Iup6F0T9AnK3kS/ff9RCemZA=
|
||||
github.com/containers/buildah v1.20.0/go.mod h1:8V3UBoTKBWU9AxNHb1MAKnZZ9oSoz/IsYyjeymrpl1s=
|
||||
github.com/containers/common v0.35.3/go.mod h1:rMzxgD7nMGw++cEbsp+NZv0UJO4rgXbm7F7IbJPTwIE=
|
||||
github.com/containers/common v0.35.4 h1:szyWRncsHkBwCVpu1dkEOXUjkwCetlfcLmKJTwo1Sp8=
|
||||
github.com/containers/common v0.35.4/go.mod h1:rMzxgD7nMGw++cEbsp+NZv0UJO4rgXbm7F7IbJPTwIE=
|
||||
github.com/containers/conmon v2.0.20+incompatible h1:YbCVSFSCqFjjVwHTPINGdMX1F6JXHGTUje2ZYobNrkg=
|
||||
github.com/containers/conmon v2.0.20+incompatible/go.mod h1:hgwZ2mtuDrppv78a/cOBNiCm6O0UMWGx1mu7P00nu5I=
|
||||
github.com/containers/image/v5 v5.10.1/go.mod h1:JlRLJZv7elVbtHaaaR6Kz8i6G3k2ttj4t7fubwxD9Hs=
|
||||
github.com/containers/image/v5 v5.10.2/go.mod h1:JlRLJZv7elVbtHaaaR6Kz8i6G3k2ttj4t7fubwxD9Hs=
|
||||
github.com/containers/image/v5 v5.10.5 h1:VK1UbsZMzjdw5Xqr3Im9h4iOqHWU0naFs+I78kavc7I=
|
||||
github.com/containers/image/v5 v5.10.5/go.mod h1:SgIbWEedCNBbn2FI5cH0/jed1Ecy2s8XK5zTxvJTzII=
|
||||
github.com/containers/libtrust v0.0.0-20190913040956-14b96171aa3b h1:Q8ePgVfHDplZ7U33NwHZkrVELsZP5fYj9pM5WBZB2GE=
|
||||
|
@ -196,8 +192,6 @@ github.com/containers/ocicrypt v1.1.0/go.mod h1:b8AOe0YR67uU8OqfVNcznfFpAzu3rdgU
|
|||
github.com/containers/psgo v1.5.2 h1:3aoozst/GIwsrr/5jnFy3FrJay98uujPCu9lTuSZ/Cw=
|
||||
github.com/containers/psgo v1.5.2/go.mod h1:2ubh0SsreMZjSXW1Hif58JrEcFudQyIy9EzPUWfawVU=
|
||||
github.com/containers/storage v1.23.5/go.mod h1:ha26Q6ngehFNhf3AWoXldvAvwI4jFe3ETQAf/CeZPyM=
|
||||
github.com/containers/storage v1.24.5/go.mod h1:YC+2pY8SkfEAcZkwycxYbpK8EiRbx5soPPwz9dxe4IQ=
|
||||
github.com/containers/storage v1.24.6/go.mod h1:YC+2pY8SkfEAcZkwycxYbpK8EiRbx5soPPwz9dxe4IQ=
|
||||
github.com/containers/storage v1.24.8/go.mod h1:YC+2pY8SkfEAcZkwycxYbpK8EiRbx5soPPwz9dxe4IQ=
|
||||
github.com/containers/storage v1.28.0/go.mod h1:ixAwO7Bj31cigqPEG7aCz+PYmxkDxbIFdUFioYdxbzI=
|
||||
github.com/containers/storage v1.28.1 h1:axYBD+c0N0YkHelDoqzdLQXfY3fgb8pqIMsRHqUNGts=
|
||||
|
@ -253,10 +247,9 @@ github.com/docker/distribution v2.7.1-0.20190205005809-0d3efadf0154+incompatible
|
|||
github.com/docker/distribution v2.7.1+incompatible h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug=
|
||||
github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||
github.com/docker/docker v1.4.2-0.20191219165747-a9416c67da9f/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||
github.com/docker/docker v17.12.0-ce-rc1.0.20200505174321-1655290016ac+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||
github.com/docker/docker v17.12.0-ce-rc1.0.20201020191947-73dc6a680cdd+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||
github.com/docker/docker v20.10.0-beta1.0.20201113105859-b6bfff2a628f+incompatible h1:lwpV3629md5omgAKjxPWX17shI7vMRpE3nyb9WHn8pA=
|
||||
github.com/docker/docker v20.10.0-beta1.0.20201113105859-b6bfff2a628f+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||
github.com/docker/docker v20.10.3-0.20210216175712-646072ed6524+incompatible h1:Yu2uGErhwEoOT/OxAFe+/SiJCqRLs+pgcS5XKrDXnG4=
|
||||
github.com/docker/docker v20.10.3-0.20210216175712-646072ed6524+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||
github.com/docker/docker-credential-helpers v0.6.3 h1:zI2p9+1NQYdnG6sMU26EX4aVGlqbInSQxQXLvzJ4RPQ=
|
||||
github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y=
|
||||
github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ=
|
||||
|
@ -294,8 +287,8 @@ github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoD
|
|||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||
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/fsouza/go-dockerclient v1.6.6 h1:9e3xkBrVkPb81gzYq23i7iDUEd6sx2ooeJA/gnYU6R4=
|
||||
github.com/fsouza/go-dockerclient v1.6.6/go.mod h1:3/oRIWoe7uT6bwtAayj/EmJmepBjeL4pYvt7ZxC7Rnk=
|
||||
github.com/fsouza/go-dockerclient v1.7.2 h1:bBEAcqLTkpq205jooP5RVroUKiVEWgGecHyeZc4OFjo=
|
||||
github.com/fsouza/go-dockerclient v1.7.2/go.mod h1:+ugtMCVRwnPfY7d8/baCzZ3uwB0BrG5DB8OzbtxaRz8=
|
||||
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/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||
|
@ -371,8 +364,10 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw
|
|||
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=
|
||||
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
|
||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g=
|
||||
github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
|
||||
|
@ -541,20 +536,16 @@ github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0Qu
|
|||
github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
||||
github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
|
||||
github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A=
|
||||
github.com/moby/sys/mount v0.1.0/go.mod h1:FVQFLDRWwyBjDTBNQXDlWnSFREqOo3OKX9aqhmeoo74=
|
||||
github.com/moby/sys/mount v0.1.1 h1:mdhBytJ1SMmMat0gtzWWjFX/87K5j6E/7Q5z7rR0cZY=
|
||||
github.com/moby/sys/mount v0.1.1/go.mod h1:FVQFLDRWwyBjDTBNQXDlWnSFREqOo3OKX9aqhmeoo74=
|
||||
github.com/moby/sys/mountinfo v0.1.0/go.mod h1:w2t2Avltqx8vE7gX5l+QiBKxODu2TX0+Syr3h52Tw4o=
|
||||
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/mountinfo v0.1.3/go.mod h1:w2t2Avltqx8vE7gX5l+QiBKxODu2TX0+Syr3h52Tw4o=
|
||||
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 h1:1O+1cHA1aujwEwwVMa2Xm2l+gIpUHyd3+D+d7LZh1kM=
|
||||
github.com/moby/sys/mountinfo v0.4.1/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
|
||||
github.com/moby/sys/symlink v0.1.0/go.mod h1:GGDODQmbFOjFsXvfLVn3+ZRxkch54RkSiGqsZeMYowQ=
|
||||
github.com/moby/term v0.0.0-20200312100748-672ec06f55cd/go.mod h1:DdlQx2hp0Ss5/fLikoLlEeIYiATotOjgB//nb973jeo=
|
||||
github.com/moby/term v0.0.0-20200429084858-129dac9f73f6/go.mod h1:or9wGItza1sRcM4Wd3dIv8DsFHYQuFsMHEdxUIlUxms=
|
||||
github.com/moby/term v0.0.0-20200915141129-7f0af18e79f2/go.mod h1:TjQg8pa4iejrUrjiz0MCtMV38jdMNW4doKSiBrEvCQQ=
|
||||
github.com/moby/term v0.0.0-20201110203204-bea5bbe245bf h1:Un6PNx5oMK6CCwO3QTUyPiK2mtZnPrpDl5UnZ64eCkw=
|
||||
github.com/moby/term v0.0.0-20201110203204-bea5bbe245bf/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc=
|
||||
github.com/moby/term v0.0.0-20201216013528-df9cb8a40635 h1:rzf0wL0CHVc8CEsgyygG0Mn9CNCCPZqOPaz8RiiHYQk=
|
||||
github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc=
|
||||
github.com/moby/vpnkit v0.5.0/go.mod h1:KyjUrL9cb6ZSNNAUwZfqRjhwwgJ3BJN+kXh0t43WTUQ=
|
||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
|
||||
|
@ -590,7 +581,6 @@ github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+
|
|||
github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk=
|
||||
github.com/onsi/ginkgo v1.14.2/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY=
|
||||
github.com/onsi/ginkgo v1.15.0/go.mod h1:hF8qUzuuC8DJGygJH3726JnCZX4MYbRB8yFfISqnKUg=
|
||||
github.com/onsi/ginkgo v1.15.2 h1:l77YT15o814C2qVL47NOyjV/6RbaP7kKdrvZnxQ3Org=
|
||||
github.com/onsi/ginkgo v1.15.2/go.mod h1:Dd6YFfwBW84ETqqtL0CPyPXillHgY6XhQH3uuCCTr/o=
|
||||
|
@ -601,7 +591,6 @@ github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1Cpa
|
|||
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
|
||||
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.4/go.mod h1:g/HbgYopi++010VEqkFgJHKC09uJiW9UkXvMUuKHUCQ=
|
||||
github.com/onsi/gomega v1.10.5/go.mod h1:gza4q3jKQJijlu05nKWRCW/GavJumGt8aNRxWg7mt48=
|
||||
github.com/onsi/gomega v1.11.0 h1:+CqWgvj0OZycCaqclBD1pxKHAU+tOkHmQIWvDHq2aug=
|
||||
github.com/onsi/gomega v1.11.0/go.mod h1:azGKhqFUon9Vuj0YmTfLSmx0FUwqXYSTl5re8lQLTUg=
|
||||
|
@ -628,7 +617,6 @@ github.com/opencontainers/runtime-spec v1.0.1/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/
|
|||
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/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
||||
github.com/opencontainers/runtime-spec v1.0.3-0.20200520003142-237cc4f519e2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
||||
github.com/opencontainers/runtime-spec v1.0.3-0.20200710190001-3e4195d92445/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
||||
github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d h1:pNa8metDkwZjb9g4T8s+krQ+HRgZAkqnXml+wNir/+s=
|
||||
github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
||||
github.com/opencontainers/runtime-tools v0.0.0-20181011054405-1d69bd0f9c39/go.mod h1:r3f7wjNzSs2extwzU3Y+6pKfobzPh+kKFJ3ofN+3nfs=
|
||||
|
@ -638,8 +626,8 @@ github.com/opencontainers/selinux v1.5.1/go.mod h1:yTcKuYAh6R95iDpefGLQaPaRwJFwy
|
|||
github.com/opencontainers/selinux v1.6.0/go.mod h1:VVGKuOLlE7v4PJyT6h7mNWvq1rzqiriPsEqVhc+svHE=
|
||||
github.com/opencontainers/selinux v1.8.0 h1:+77ba4ar4jsCbL1GLbFL8fFM57w6suPfSS9PDLDY7KM=
|
||||
github.com/opencontainers/selinux v1.8.0/go.mod h1:RScLhm78qiWa2gbVCcGkC7tCGdgk3ogry1nUQF8Evvo=
|
||||
github.com/openshift/imagebuilder v1.1.8 h1:gjiIl8pbNj0eC4XWvFJHATdDvYm64p9/pLDLQWoLZPA=
|
||||
github.com/openshift/imagebuilder v1.1.8/go.mod h1:9aJRczxCH0mvT6XQ+5STAQaPWz7OsWcU5/mRkt8IWeo=
|
||||
github.com/openshift/imagebuilder v1.2.0 h1:uoZFjJICLlTMjlAL/UG2PA2kM8RjAsVflGfHJK7MMDk=
|
||||
github.com/openshift/imagebuilder v1.2.0/go.mod h1:9aJRczxCH0mvT6XQ+5STAQaPWz7OsWcU5/mRkt8IWeo=
|
||||
github.com/ostreedev/ostree-go v0.0.0-20190702140239-759a8c1ac913 h1:TnbXhKzrTOyuvWrjI8W6pcoI9XPbLHFXCdN2dtUw7Rw=
|
||||
github.com/ostreedev/ostree-go v0.0.0-20190702140239-759a8c1ac913/go.mod h1:J6OG6YJVEWopen4avK3VNQSnALmmjvniMmni/YFYAwc=
|
||||
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
|
||||
|
@ -687,8 +675,9 @@ github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDa
|
|||
github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
|
||||
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
|
||||
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
|
||||
github.com/prometheus/procfs v0.2.0 h1:wH4vA7pcjKuZzjF7lM8awk4fnuJO6idemZXoKnULUx4=
|
||||
github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
|
||||
github.com/prometheus/procfs v0.6.0 h1:mxy4L2jP6qMonqmq+aTtOx1ifVWUgG/TAmntgbh3xv4=
|
||||
github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
|
||||
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
|
||||
github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
|
||||
|
@ -834,7 +823,6 @@ golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8U
|
|||
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20200423211502-4bdfaf469ed5/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200429183012-4b2356b1ed79/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20200728195943-123391ffb6de/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
|
@ -926,8 +914,9 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
|
|||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9 h1:SQFwaSi55rU7vdNs9Yr0Z324VNlrF+0wMqRXT4St8ck=
|
||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a h1:DcqTD9SDLc+1P/r1EmRBwnVsrOwW+kk2vWf9n+1sGhs=
|
||||
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
|
@ -982,7 +971,6 @@ golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200327173247-9dae0f8f5775/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200728102440-3e129f6d46b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200817155316-9781c653f443/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
|
@ -1002,8 +990,10 @@ golang.org/x/sys v0.0.0-20201218084310-7d0127a74742/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||
golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210216224549-f992740a1bac/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210324051608-47abb6519492 h1:Paq34FxTluEPvVyayQqMPgHm+vTOrIifmcYxFBx9TLg=
|
||||
golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/term v0.0.0-20201113234701-d7a72108b828/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 h1:v+OssWQX+hTHEmOBgwxdZxK4zHq3yOs8F9J7mk0PY8E=
|
||||
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
|
||||
|
@ -1118,7 +1108,6 @@ google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQ
|
|||
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||
google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||
google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
|
||||
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
|
||||
google.golang.org/grpc v1.33.2 h1:EQyQC3sa8M+p6Ulc8yy9SWSS2GVwyRc83gAbG8lrl4o=
|
||||
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
From c85882a8f7fb6efbf4d59dfe8340bfbef57ccd48 Mon Sep 17 00:00:00 2001
|
||||
From 6f8e097d8b46190df60e830adce1185532a939d0 Mon Sep 17 00:00:00 2001
|
||||
From: Ed Santiago <santiago@redhat.com>
|
||||
Date: Tue, 9 Feb 2021 17:28:05 -0700
|
||||
Subject: [PATCH] tweaks for running buildah tests under podman
|
||||
|
||||
Signed-off-by: Ed Santiago <santiago@redhat.com>
|
||||
---
|
||||
tests/bud.bats | 26 ++++++++++++++++----------
|
||||
tests/bud.bats | 27 +++++++++++++++++----------
|
||||
tests/helpers.bash | 28 ++++++++++++++++++++++++----
|
||||
2 files changed, 40 insertions(+), 14 deletions(-)
|
||||
2 files changed, 41 insertions(+), 14 deletions(-)
|
||||
|
||||
diff --git a/tests/bud.bats b/tests/bud.bats
|
||||
index 1efc3c58..9a39d594 100644
|
||||
index cf55d9a4..e55b05b5 100644
|
||||
--- a/tests/bud.bats
|
||||
+++ b/tests/bud.bats
|
||||
@@ -4,7 +4,7 @@ load helpers
|
||||
|
@ -22,7 +22,7 @@ index 1efc3c58..9a39d594 100644
|
|||
}
|
||||
|
||||
@test "bud with --dns* flags" {
|
||||
@@ -95,6 +95,7 @@ symlink(subdir)"
|
||||
@@ -117,6 +117,7 @@ symlink(subdir)"
|
||||
}
|
||||
|
||||
@test "bud-flags-order-verification" {
|
||||
|
@ -30,7 +30,7 @@ index 1efc3c58..9a39d594 100644
|
|||
run_buildah 125 bud /tmp/tmpdockerfile/ -t blabla
|
||||
check_options_flag_err "-t"
|
||||
|
||||
@@ -1324,13 +1325,13 @@ function _test_http() {
|
||||
@@ -1416,13 +1417,13 @@ function _test_http() {
|
||||
@test "bud with dir for file but no Dockerfile in dir" {
|
||||
target=alpine-image
|
||||
run_buildah 125 bud --signature-policy ${TESTSDIR}/policy.json -t ${target} -f ${TESTSDIR}/bud/empty-dir ${TESTSDIR}/bud/empty-dir
|
||||
|
@ -46,7 +46,7 @@ index 1efc3c58..9a39d594 100644
|
|||
}
|
||||
|
||||
@test "bud with ARG before FROM default value" {
|
||||
@@ -1742,7 +1743,9 @@ _EOF
|
||||
@@ -1834,7 +1835,9 @@ _EOF
|
||||
run_buildah bud --signature-policy ${TESTSDIR}/policy.json --layers -t test-img-2 --build-arg TEST=foo -f Dockerfile4 ${TESTSDIR}/bud/build-arg
|
||||
run_buildah inspect -f '{{.FromImageID}}' test-img-2
|
||||
argsid="$output"
|
||||
|
@ -57,7 +57,7 @@ index 1efc3c58..9a39d594 100644
|
|||
|
||||
# Set the build-arg via an ENV in the local environment and verify that the cached layers are not used
|
||||
export TEST=bar
|
||||
@@ -1795,6 +1798,7 @@ _EOF
|
||||
@@ -1887,6 +1890,7 @@ _EOF
|
||||
}
|
||||
|
||||
@test "bud without any arguments should succeed" {
|
||||
|
@ -65,7 +65,7 @@ index 1efc3c58..9a39d594 100644
|
|||
cd ${TESTSDIR}/bud/from-scratch
|
||||
run_buildah bud --signature-policy ${TESTSDIR}/policy.json
|
||||
}
|
||||
@@ -1802,7 +1806,7 @@ _EOF
|
||||
@@ -1894,7 +1898,7 @@ _EOF
|
||||
@test "bud without any arguments should fail when no Dockerfile exist" {
|
||||
cd $(mktemp -d)
|
||||
run_buildah 125 bud --signature-policy ${TESTSDIR}/policy.json
|
||||
|
@ -74,7 +74,7 @@ index 1efc3c58..9a39d594 100644
|
|||
}
|
||||
|
||||
@test "bud with specified context should fail if directory contains no Dockerfile" {
|
||||
@@ -1815,16 +1819,17 @@ _EOF
|
||||
@@ -1907,16 +1911,17 @@ _EOF
|
||||
DIR=$(mktemp -d)
|
||||
mkdir -p "$DIR"/Dockerfile
|
||||
run_buildah 125 bud --signature-policy ${TESTSDIR}/policy.json "$DIR"
|
||||
|
@ -94,7 +94,7 @@ index 1efc3c58..9a39d594 100644
|
|||
DIR=$(mktemp -d)
|
||||
echo "FROM alpine" > "$DIR"/Dockerfile
|
||||
run_buildah 0 bud --signature-policy ${TESTSDIR}/policy.json "$DIR"/Dockerfile
|
||||
@@ -1876,7 +1881,7 @@ _EOF
|
||||
@@ -1968,7 +1973,7 @@ _EOF
|
||||
|
||||
@test "bud-squash-hardlinks" {
|
||||
_prefetch busybox
|
||||
|
@ -103,7 +103,7 @@ index 1efc3c58..9a39d594 100644
|
|||
}
|
||||
|
||||
@test "bud with additional directory of devices" {
|
||||
@@ -2023,6 +2028,7 @@ _EOF
|
||||
@@ -2115,6 +2120,7 @@ _EOF
|
||||
}
|
||||
|
||||
@test "bud pull never" {
|
||||
|
@ -111,7 +111,7 @@ index 1efc3c58..9a39d594 100644
|
|||
target=pull
|
||||
run_buildah 125 bud --signature-policy ${TESTSDIR}/policy.json -t ${target} --pull-never ${TESTSDIR}/bud/pull
|
||||
expect_output --substring "pull policy is \"never\" but \""
|
||||
@@ -2042,6 +2048,7 @@ _EOF
|
||||
@@ -2134,6 +2140,7 @@ _EOF
|
||||
}
|
||||
|
||||
@test "bud with Containerfile should fail with nonexistent authfile" {
|
||||
|
@ -119,7 +119,7 @@ index 1efc3c58..9a39d594 100644
|
|||
target=alpine-image
|
||||
run_buildah 125 bud --authfile /tmp/nonexistent --signature-policy ${TESTSDIR}/policy.json -t ${target} ${TESTSDIR}/bud/containerfile
|
||||
}
|
||||
@@ -2169,6 +2176,7 @@ EOM
|
||||
@@ -2261,6 +2268,7 @@ EOM
|
||||
}
|
||||
|
||||
@test "bud with encrypted FROM image" {
|
||||
|
@ -127,7 +127,7 @@ index 1efc3c58..9a39d594 100644
|
|||
_prefetch busybox
|
||||
mkdir ${TESTDIR}/tmp
|
||||
openssl genrsa -out ${TESTDIR}/tmp/mykey.pem 1024
|
||||
@@ -2241,8 +2249,6 @@ EOM
|
||||
@@ -2333,8 +2341,6 @@ EOM
|
||||
_prefetch alpine
|
||||
run_buildah bud --timestamp=0 --quiet --pull=false --signature-policy ${TESTSDIR}/policy.json -t timestamp -f Dockerfile.1 ${TESTSDIR}/bud/cache-stages
|
||||
cid=$output
|
||||
|
@ -136,8 +136,16 @@ index 1efc3c58..9a39d594 100644
|
|||
run_buildah inspect --format '{{ .OCIv1.Created }}' timestamp
|
||||
expect_output --substring "1970-01-01"
|
||||
run_buildah inspect --format '{{ .History }}' timestamp
|
||||
@@ -2594,6 +2600,7 @@ _EOF
|
||||
}
|
||||
|
||||
@test "bud with --arch flag" {
|
||||
+ skip "FIXME: for podman, emergency skip to get CI going"
|
||||
_prefetch alpine
|
||||
mytmpdir=${TESTDIR}/my-dir
|
||||
mkdir -p ${mytmpdir}
|
||||
diff --git a/tests/helpers.bash b/tests/helpers.bash
|
||||
index 5623a0e7..9683360f 100644
|
||||
index b28fd2c3..d42a6b82 100644
|
||||
--- a/tests/helpers.bash
|
||||
+++ b/tests/helpers.bash
|
||||
@@ -70,7 +70,7 @@ function _prefetch() {
|
||||
|
|
273
vendor/github.com/containers/buildah/.cirrus.yml
generated
vendored
273
vendor/github.com/containers/buildah/.cirrus.yml
generated
vendored
|
@ -6,7 +6,7 @@ env:
|
|||
#### Global variables used for all tasks
|
||||
####
|
||||
# Name of the ultimate destination branch for this CI run, PR or post-merge.
|
||||
DEST_BRANCH: "release-1.19"
|
||||
DEST_BRANCH: "master"
|
||||
GOPATH: "/var/tmp/go"
|
||||
GOSRC: "${GOPATH}/src/github.com/containers/buildah"
|
||||
# Overrides default location (/tmp/cirrus) for repo clone
|
||||
|
@ -19,8 +19,6 @@ env:
|
|||
CIRRUS_CLONE_DEPTH: 50
|
||||
# Unless set by in_podman.sh, default to operating outside of a podman container
|
||||
IN_PODMAN: 'false'
|
||||
# Not cross-compiling by default
|
||||
CROSS_TARGET: ""
|
||||
|
||||
####
|
||||
#### Cache-image names to test with
|
||||
|
@ -28,16 +26,18 @@ env:
|
|||
# GCE project where images live
|
||||
IMAGE_PROJECT: "libpod-218412"
|
||||
# See https://github.com/containers/podman/blob/master/contrib/cirrus/README.md#test_build_cache_images_task-task
|
||||
FEDORA_NAME: "fedora-32"
|
||||
PRIOR_FEDORA_NAME: "fedora-31"
|
||||
UBUNTU_NAME: "ubuntu-20"
|
||||
PRIOR_UBUNTU_NAME: "ubuntu-19"
|
||||
FEDORA_NAME: "fedora-33"
|
||||
PRIOR_FEDORA_NAME: "fedora-32"
|
||||
UBUNTU_NAME: "ubuntu-2010"
|
||||
PRIOR_UBUNTU_NAME: "ubuntu-2004"
|
||||
|
||||
_BUILT_IMAGE_SUFFIX: "podman-6530021898584064"
|
||||
FEDORA_CACHE_IMAGE_NAME: "${FEDORA_NAME}-${_BUILT_IMAGE_SUFFIX}"
|
||||
PRIOR_FEDORA_CACHE_IMAGE_NAME: "${PRIOR_FEDORA_NAME}-${_BUILT_IMAGE_SUFFIX}"
|
||||
UBUNTU_CACHE_IMAGE_NAME: "${UBUNTU_NAME}-${_BUILT_IMAGE_SUFFIX}"
|
||||
PRIOR_UBUNTU_CACHE_IMAGE_NAME: "${PRIOR_UBUNTU_NAME}-${_BUILT_IMAGE_SUFFIX}"
|
||||
IMAGE_SUFFIX: "c6102133168668672"
|
||||
FEDORA_CACHE_IMAGE_NAME: "fedora-${IMAGE_SUFFIX}"
|
||||
PRIOR_FEDORA_CACHE_IMAGE_NAME: "prior-fedora-${IMAGE_SUFFIX}"
|
||||
UBUNTU_CACHE_IMAGE_NAME: "ubuntu-${IMAGE_SUFFIX}"
|
||||
PRIOR_UBUNTU_CACHE_IMAGE_NAME: "prior-ubuntu-${IMAGE_SUFFIX}"
|
||||
|
||||
IN_PODMAN_IMAGE: "quay.io/libpod/fedora_podman:${IMAGE_SUFFIX}"
|
||||
|
||||
####
|
||||
#### Command variables to help avoid duplication
|
||||
|
@ -62,10 +62,12 @@ gce_instance:
|
|||
|
||||
|
||||
# Update metadata on VM images referenced by this repository state
|
||||
'cirrus-ci/only_prs/meta_task':
|
||||
meta_task:
|
||||
name: "VM img. keepalive"
|
||||
alias: meta
|
||||
|
||||
container:
|
||||
image: "quay.io/libpod/imgts:latest" # see contrib/imgts
|
||||
image: "quay.io/libpod/imgts:${IMAGE_SUFFIX}" # see contrib/imgts
|
||||
cpu: 1
|
||||
memory: 1
|
||||
|
||||
|
@ -86,7 +88,10 @@ gce_instance:
|
|||
script: '/usr/local/bin/entrypoint.sh |& ${_TIMESTAMP}'
|
||||
|
||||
|
||||
'cirrus-ci/only_prs/gate_task':
|
||||
smoke_task:
|
||||
alias: 'smoke'
|
||||
name: "Smoke Test"
|
||||
|
||||
gce_instance:
|
||||
memory: "12Gb"
|
||||
|
||||
|
@ -103,34 +108,11 @@ gce_instance:
|
|||
binary_artifacts:
|
||||
path: ./bin/*
|
||||
|
||||
|
||||
'cirrus-ci/only_prs/unit_task':
|
||||
|
||||
timeout_in: 45m
|
||||
|
||||
setup_script: '${SCRIPT_BASE}/setup.sh |& ${_TIMESTAMP}'
|
||||
build_script: '${SCRIPT_BASE}/build.sh |& ${_TIMESTAMP}'
|
||||
unit_test_script: '${SCRIPT_BASE}/test.sh unit |& ${_TIMESTAMP}'
|
||||
|
||||
binary_artifacts:
|
||||
path: ./bin/*
|
||||
|
||||
|
||||
'cirrus-ci/only_prs/conformance_task':
|
||||
gce_instance: # Only need to specify differences from defaults (above)
|
||||
image_name: "${UBUNTU_CACHE_IMAGE_NAME}"
|
||||
|
||||
timeout_in: 20m
|
||||
|
||||
setup_script: '${SCRIPT_BASE}/setup.sh |& ${_TIMESTAMP}'
|
||||
conformance_test_script: '${SCRIPT_BASE}/test.sh conformance |& ${_TIMESTAMP}'
|
||||
|
||||
|
||||
# This task runs `make vendor` followed by ./hack/tree_status.sh to check
|
||||
# whether the git tree is clean. The reasoning for that is to make sure
|
||||
# that the vendor.conf, the code and the vendored packages in ./vendor are
|
||||
# in sync at all times.
|
||||
'cirrus-ci/only_prs/vendor_task':
|
||||
# Check that all included go modules from other sources match
|
||||
# # what is expected in `vendor/modules.txt` vs `go.mod`.
|
||||
vendor_task:
|
||||
name: "Test Vendoring"
|
||||
alias: vendor
|
||||
|
||||
env:
|
||||
CIRRUS_WORKING_DIR: "/var/tmp/go/src/github.com/containers/buildah"
|
||||
|
@ -150,35 +132,131 @@ gce_instance:
|
|||
- './hack/tree_status.sh'
|
||||
|
||||
|
||||
'cirrus-ci/only_prs/cross_task':
|
||||
unit_task:
|
||||
name: "Unit tests"
|
||||
alias: unit
|
||||
|
||||
depends_on:
|
||||
- 'cirrus-ci/only_prs/gate'
|
||||
- 'cirrus-ci/only_prs/vendor'
|
||||
- smoke
|
||||
- vendor
|
||||
|
||||
env:
|
||||
matrix:
|
||||
CROSS_TARGET: cross
|
||||
timeout_in: 45m
|
||||
|
||||
setup_script: '${SCRIPT_BASE}/setup.sh |& ${_TIMESTAMP}'
|
||||
build_script: '${SCRIPT_BASE}/build.sh |& ${_TIMESTAMP}'
|
||||
unit_test_script: '${SCRIPT_BASE}/test.sh unit |& ${_TIMESTAMP}'
|
||||
|
||||
binary_artifacts:
|
||||
path: ./bin/*
|
||||
|
||||
env:
|
||||
matrix:
|
||||
STORAGE_DRIVER: 'vfs'
|
||||
STORAGE_DRIVER: 'overlay'
|
||||
|
||||
conformance_task:
|
||||
name: "Docker Build Conformance"
|
||||
alias: conformance
|
||||
|
||||
depends_on:
|
||||
- unit
|
||||
|
||||
gce_instance:
|
||||
image_name: "${UBUNTU_CACHE_IMAGE_NAME}"
|
||||
|
||||
timeout_in: 20m
|
||||
|
||||
setup_script: '${SCRIPT_BASE}/setup.sh |& ${_TIMESTAMP}'
|
||||
conformance_test_script: '${SCRIPT_BASE}/test.sh conformance |& ${_TIMESTAMP}'
|
||||
|
||||
env:
|
||||
matrix:
|
||||
STORAGE_DRIVER: 'vfs'
|
||||
STORAGE_DRIVER: 'overlay'
|
||||
|
||||
# Confirm cross-compile ALL archetectures on a Mac OS-X VM.
|
||||
cross_build_task:
|
||||
name: "Cross Compile"
|
||||
alias: cross_build
|
||||
|
||||
depends_on:
|
||||
- unit
|
||||
|
||||
osx_instance:
|
||||
image: 'catalina-base'
|
||||
|
||||
script:
|
||||
- brew install go
|
||||
- brew install go-md2man
|
||||
- brew install gpgme
|
||||
- make cross CGO_ENABLED=0
|
||||
|
||||
binary_artifacts:
|
||||
path: ./bin/*
|
||||
|
||||
|
||||
'cirrus-ci/required/testing_task':
|
||||
static_build_task:
|
||||
name: "Static Build"
|
||||
alias: static_build
|
||||
|
||||
depends_on:
|
||||
- 'cirrus-ci/only_prs/gate'
|
||||
- 'cirrus-ci/only_prs/vendor'
|
||||
- unit
|
||||
|
||||
gce_instance: # Only need to specify differences from defaults (above)
|
||||
matrix: # Duplicate this task for each matrix product.
|
||||
image_name: "${FEDORA_CACHE_IMAGE_NAME}"
|
||||
image_name: "${PRIOR_FEDORA_CACHE_IMAGE_NAME}"
|
||||
image_name: "${UBUNTU_CACHE_IMAGE_NAME}"
|
||||
# image_name: "${PRIOR_UBUNTU_CACHE_IMAGE_NAME}"
|
||||
gce_instance:
|
||||
image_name: "${FEDORA_CACHE_IMAGE_NAME}"
|
||||
cpu: 8
|
||||
memory: 12
|
||||
disk: 200
|
||||
|
||||
init_script: |
|
||||
set -ex
|
||||
setenforce 0
|
||||
growpart /dev/sda 1 || true
|
||||
resize2fs /dev/sda1 || true
|
||||
yum -y install podman
|
||||
|
||||
nix_cache:
|
||||
folder: '.cache'
|
||||
fingerprint_script: cat nix/*
|
||||
|
||||
build_script: |
|
||||
set -ex
|
||||
mkdir -p .cache
|
||||
mv .cache /nix
|
||||
if [[ -z $(ls -A /nix) ]]; then podman run --rm --privileged -ti -v /:/mnt nixos/nix cp -rfT /nix /mnt/nix; fi
|
||||
podman run --rm --privileged -ti -v /nix:/nix -v ${PWD}:${PWD} -w ${PWD} nixos/nix nix --print-build-logs --option cores 8 --option max-jobs 8 build --file nix/
|
||||
|
||||
binaries_artifacts:
|
||||
path: "result/bin/buildah"
|
||||
|
||||
save_cache_script: |
|
||||
mv /nix .cache
|
||||
chown -Rf $(whoami) .cache
|
||||
|
||||
|
||||
integration_task:
|
||||
name: "Integration $DISTRO_NV"
|
||||
alias: integration
|
||||
|
||||
depends_on:
|
||||
- unit
|
||||
|
||||
matrix:
|
||||
- env:
|
||||
DISTRO_NV: "${FEDORA_NAME}"
|
||||
IMAGE_NAME: "${FEDORA_CACHE_IMAGE_NAME}"
|
||||
# - env:
|
||||
# DISTRO_NV: "${PRIOR_FEDORA_NAME}"
|
||||
# IMAGE_NAME: "${PRIOR_FEDORA_CACHE_IMAGE_NAME}"
|
||||
- env:
|
||||
DISTRO_NV: "${UBUNTU_NAME}"
|
||||
IMAGE_NAME: "${UBUNTU_CACHE_IMAGE_NAME}"
|
||||
- env:
|
||||
DISTRO_NV: "${PRIOR_UBUNTU_NAME}"
|
||||
IMAGE_NAME: "${PRIOR_UBUNTU_CACHE_IMAGE_NAME}"
|
||||
|
||||
gce_instance:
|
||||
image_name: "$IMAGE_NAME"
|
||||
|
||||
# Separate scripts for separate outputs, makes debugging easier.
|
||||
setup_script: '${SCRIPT_BASE}/setup.sh |& ${_TIMESTAMP}'
|
||||
|
@ -198,19 +276,23 @@ gce_instance:
|
|||
package_versions_script: '$GOSRC/$SCRIPT_BASE/logcollector.sh packages'
|
||||
golang_version_script: '$GOSRC/$SCRIPT_BASE/logcollector.sh golang'
|
||||
|
||||
env:
|
||||
matrix:
|
||||
STORAGE_DRIVER: 'vfs'
|
||||
STORAGE_DRIVER: 'overlay'
|
||||
|
||||
'cirrus-ci/required/in_podman_task':
|
||||
in_podman_task:
|
||||
name: "Containerized Integration"
|
||||
alias: in_podman
|
||||
|
||||
depends_on:
|
||||
- 'cirrus-ci/only_prs/gate'
|
||||
- 'cirrus-ci/only_prs/vendor'
|
||||
- unit
|
||||
|
||||
env:
|
||||
# This is key, it causes the scripts to re-execute themselves inside a container.
|
||||
# This is key, cause the scripts to re-execute themselves inside a container.
|
||||
IN_PODMAN: 'true'
|
||||
BUILDAH_ISOLATION: 'chroot'
|
||||
STORAGE_DRIVER: 'vfs'
|
||||
STORAGE_OPTIONS: ''
|
||||
|
||||
# Separate scripts for separate outputs, makes debugging easier.
|
||||
setup_script: '${SCRIPT_BASE}/setup.sh |& ${_TIMESTAMP}'
|
||||
|
@ -223,60 +305,29 @@ gce_instance:
|
|||
always:
|
||||
<<: *standardlogs
|
||||
|
||||
# TODO: Bors-ng has trouble interpreting multiple status-checks as being required
|
||||
# when their names contain wild-cards (like `testing%`). Until that issue
|
||||
# can be fixed, use a single "test" to represent pass/fail status of all
|
||||
# required checks.
|
||||
'cirrus-ci/success_task':
|
||||
|
||||
# Status aggregator for all tests. This task simply ensures a defined
|
||||
# set of tasks all passed, and allows confirming that based on the status
|
||||
# of this task.
|
||||
success_task:
|
||||
name: "Total Success"
|
||||
alias: success
|
||||
|
||||
depends_on:
|
||||
- "cirrus-ci/required/testing"
|
||||
- "cirrus-ci/required/in_podman"
|
||||
|
||||
env:
|
||||
CIRRUS_WORKING_DIR: /tmp
|
||||
CIRRUS_CLONE_DEPTH: 1 # no code is being used by this task
|
||||
- meta
|
||||
- smoke
|
||||
- unit
|
||||
- conformance
|
||||
- vendor
|
||||
- cross_build
|
||||
- integration
|
||||
- in_podman
|
||||
- static_build
|
||||
|
||||
container:
|
||||
image: "quay.io/libpod/fedora-minimal:latest"
|
||||
cpu: 1
|
||||
memory: 1
|
||||
|
||||
clone_script: mkdir -p $CIRRUS_WORKING_DIR
|
||||
script: /bin/true
|
||||
|
||||
# Build the static binary
|
||||
'cirrus-ci/only_prs/static_binary_task':
|
||||
depends_on:
|
||||
- "cirrus-ci/only_prs/gate"
|
||||
|
||||
gce_instance:
|
||||
image_name: "${FEDORA_CACHE_IMAGE_NAME}"
|
||||
cpu: 8
|
||||
memory: 12
|
||||
disk: 200
|
||||
|
||||
init_script: |
|
||||
set -ex
|
||||
setenforce 0
|
||||
growpart /dev/sda 1 || true
|
||||
resize2fs /dev/sda1 || true
|
||||
yum -y install podman
|
||||
|
||||
nix_cache:
|
||||
folder: '.cache'
|
||||
fingerprint_script: |
|
||||
echo "nix-v1-$(sha1sum nix/nixpkgs.json | head -c 40)"
|
||||
|
||||
build_script: |
|
||||
set -ex
|
||||
mkdir -p .cache
|
||||
mv .cache /nix
|
||||
if [[ -z $(ls -A /nix) ]]; then podman run --rm --privileged -ti -v /:/mnt nixos/nix cp -rfT /nix /mnt/nix; fi
|
||||
podman run --rm --privileged -ti -v /nix:/nix -v ${PWD}:${PWD} -w ${PWD} nixos/nix nix --print-build-logs --option cores 8 --option max-jobs 8 build --file nix/
|
||||
|
||||
binaries_artifacts:
|
||||
path: "result/bin/buildah"
|
||||
|
||||
save_cache_script: |
|
||||
mv /nix .cache
|
||||
chown -Rf $(whoami) .cache
|
||||
|
|
38
vendor/github.com/containers/buildah/CHANGELOG.md
generated
vendored
38
vendor/github.com/containers/buildah/CHANGELOG.md
generated
vendored
|
@ -2,44 +2,6 @@
|
|||
|
||||
# Changelog
|
||||
|
||||
## v1.19.6 (2021-02-18)
|
||||
Bump c/containers/storage v1.24.6
|
||||
Don't fail copy to emptydir
|
||||
Workaround for RHEL gating test failure
|
||||
Fix config-flags-verification test on F33
|
||||
Fix bud capabilities test
|
||||
Stop overriding the location of the blob info cache
|
||||
Fix caching layers with build args
|
||||
|
||||
## v1.19.5 (2021-02-09)
|
||||
Vendor in latest containers/image and common
|
||||
|
||||
## v1.19.4 (2021-02-06)
|
||||
run: fix check for host pid namespace
|
||||
bump containernetworking/cni library to v0.8.1 - fix for CVE-2021-20206
|
||||
Finish plumbing for buildah bud --manifest
|
||||
buildah manifest add localimage should work
|
||||
Fix build arg check
|
||||
--iidfile: print hash prefix
|
||||
|
||||
## v1.19.3 (2021-01-28)
|
||||
[ci:docs] Fix man page for buildah push
|
||||
Vendor in containers/image v5.10.1
|
||||
Rebuild layer if a change in ARG is detected
|
||||
Bump golang.org/x/crypto to latest rel-1.19
|
||||
local image lookup by digest
|
||||
Use build-arg ENV val from local environment if set
|
||||
Pick default OCI Runtime from containers.conf
|
||||
|
||||
## v1.19.2 (2021-01-15)
|
||||
If overlay mount point destination does not exists, do not throw error
|
||||
Vendor in containers/common
|
||||
|
||||
## v1.19.1 (2021-01-14)
|
||||
Cherry pick localhost fix and update CI configuration for release-1.19
|
||||
use local image name for pull policy checks
|
||||
Vendor in common 0.33.1
|
||||
|
||||
## v1.19.0 (2021-01-08)
|
||||
Update vendor of containers/storage and containers/common
|
||||
Buildah inspect should be able to inspect manifests
|
||||
|
|
7
vendor/github.com/containers/buildah/Makefile
generated
vendored
7
vendor/github.com/containers/buildah/Makefile
generated
vendored
|
@ -100,9 +100,10 @@ codespell:
|
|||
|
||||
.PHONY: validate
|
||||
validate: install.tools
|
||||
@./tests/validate/whitespace.sh
|
||||
@./tests/validate/git-validation.sh
|
||||
@./hack/xref-helpmsgs-manpages
|
||||
./tests/validate/whitespace.sh
|
||||
./tests/validate/git-validation.sh
|
||||
./hack/xref-helpmsgs-manpages
|
||||
./tests/validate/pr-should-include-tests
|
||||
|
||||
.PHONY: install.tools
|
||||
install.tools:
|
||||
|
|
5
vendor/github.com/containers/buildah/OWNERS
generated
vendored
5
vendor/github.com/containers/buildah/OWNERS
generated
vendored
|
@ -1,19 +1,24 @@
|
|||
approvers:
|
||||
- TomSweeneyRedHat
|
||||
- ashley-cui
|
||||
- cevich
|
||||
- giuseppe
|
||||
- lsm5
|
||||
- nalind
|
||||
- rhatdan
|
||||
- umohnani8
|
||||
- vrothberg
|
||||
reviewers:
|
||||
- QiWang19
|
||||
- TomSweeneyRedHat
|
||||
- ashley-cui
|
||||
- baude
|
||||
- cevich
|
||||
- edsantiago
|
||||
- giuseppe
|
||||
- haircommander
|
||||
- jwhonce
|
||||
- lsm5
|
||||
- mheon
|
||||
- mrunalp
|
||||
- nalind
|
||||
|
|
58
vendor/github.com/containers/buildah/add.go
generated
vendored
58
vendor/github.com/containers/buildah/add.go
generated
vendored
|
@ -10,12 +10,14 @@ import (
|
|||
"os"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"strconv"
|
||||
"strings"
|
||||
"sync"
|
||||
"syscall"
|
||||
"time"
|
||||
|
||||
"github.com/containers/buildah/copier"
|
||||
"github.com/containers/buildah/define"
|
||||
"github.com/containers/buildah/pkg/chrootuser"
|
||||
"github.com/containers/storage/pkg/fileutils"
|
||||
"github.com/containers/storage/pkg/idtools"
|
||||
|
@ -28,6 +30,8 @@ import (
|
|||
|
||||
// AddAndCopyOptions holds options for add and copy commands.
|
||||
type AddAndCopyOptions struct {
|
||||
//Chmod sets the access permissions of the destination content.
|
||||
Chmod string
|
||||
// Chown is a spec for the user who should be given ownership over the
|
||||
// newly-added content, potentially overriding permissions which would
|
||||
// otherwise be set to 0:0.
|
||||
|
@ -51,7 +55,7 @@ type AddAndCopyOptions struct {
|
|||
// ID mapping options to use when contents to be copied are part of
|
||||
// another container, and need ownerships to be mapped from the host to
|
||||
// that container's values before copying them into the container.
|
||||
IDMappingOptions *IDMappingOptions
|
||||
IDMappingOptions *define.IDMappingOptions
|
||||
// DryRun indicates that the content should be digested, but not actually
|
||||
// copied into the container.
|
||||
DryRun bool
|
||||
|
@ -72,7 +76,7 @@ func sourceIsRemote(source string) bool {
|
|||
}
|
||||
|
||||
// getURL writes a tar archive containing the named content
|
||||
func getURL(src string, chown *idtools.IDPair, mountpoint, renameTarget string, writer io.Writer) error {
|
||||
func getURL(src string, chown *idtools.IDPair, mountpoint, renameTarget string, writer io.Writer, chmod *os.FileMode) error {
|
||||
url, err := url.Parse(src)
|
||||
if err != nil {
|
||||
return err
|
||||
|
@ -129,13 +133,17 @@ func getURL(src string, chown *idtools.IDPair, mountpoint, renameTarget string,
|
|||
uid = chown.UID
|
||||
gid = chown.GID
|
||||
}
|
||||
var mode int64 = 0600
|
||||
if chmod != nil {
|
||||
mode = int64(*chmod)
|
||||
}
|
||||
hdr := tar.Header{
|
||||
Typeflag: tar.TypeReg,
|
||||
Name: name,
|
||||
Size: size,
|
||||
Uid: uid,
|
||||
Gid: gid,
|
||||
Mode: 0600,
|
||||
Mode: mode,
|
||||
ModTime: date,
|
||||
}
|
||||
err = tw.WriteHeader(&hdr)
|
||||
|
@ -243,15 +251,25 @@ func (b *Builder) Add(destination string, extract bool, options AddAndCopyOption
|
|||
|
||||
// Find out which user (and group) the destination should belong to.
|
||||
var chownDirs, chownFiles *idtools.IDPair
|
||||
var user specs.User
|
||||
var userUID, userGID uint32
|
||||
if options.Chown != "" {
|
||||
user, _, err = b.user(mountPoint, options.Chown)
|
||||
userUID, userGID, err = b.userForCopy(mountPoint, options.Chown)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "error looking up UID/GID for %q", options.Chown)
|
||||
}
|
||||
}
|
||||
chownDirs = &idtools.IDPair{UID: int(user.UID), GID: int(user.GID)}
|
||||
chownFiles = &idtools.IDPair{UID: int(user.UID), GID: int(user.GID)}
|
||||
var chmodDirsFiles *os.FileMode
|
||||
if options.Chmod != "" {
|
||||
p, err := strconv.ParseUint(options.Chmod, 8, 32)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "error parsing chmod %q", options.Chmod)
|
||||
}
|
||||
perm := os.FileMode(p)
|
||||
chmodDirsFiles = &perm
|
||||
}
|
||||
|
||||
chownDirs = &idtools.IDPair{UID: int(userUID), GID: int(userGID)}
|
||||
chownFiles = &idtools.IDPair{UID: int(userUID), GID: int(userGID)}
|
||||
if options.Chown == "" && options.PreserveOwnership {
|
||||
chownDirs = nil
|
||||
chownFiles = nil
|
||||
|
@ -359,7 +377,7 @@ func (b *Builder) Add(destination string, extract bool, options AddAndCopyOption
|
|||
pipeReader, pipeWriter := io.Pipe()
|
||||
wg.Add(1)
|
||||
go func() {
|
||||
getErr = getURL(src, chownFiles, mountPoint, renameTarget, pipeWriter)
|
||||
getErr = getURL(src, chownFiles, mountPoint, renameTarget, pipeWriter, chmodDirsFiles)
|
||||
pipeWriter.Close()
|
||||
wg.Done()
|
||||
}()
|
||||
|
@ -478,9 +496,9 @@ func (b *Builder) Add(destination string, extract bool, options AddAndCopyOption
|
|||
Excludes: options.Excludes,
|
||||
ExpandArchives: extract,
|
||||
ChownDirs: chownDirs,
|
||||
ChmodDirs: nil,
|
||||
ChmodDirs: chmodDirsFiles,
|
||||
ChownFiles: chownFiles,
|
||||
ChmodFiles: nil,
|
||||
ChmodFiles: chmodDirsFiles,
|
||||
StripSetuidBit: options.StripSetuidBit,
|
||||
StripSetgidBit: options.StripSetgidBit,
|
||||
StripStickyBit: options.StripStickyBit,
|
||||
|
@ -552,8 +570,9 @@ func (b *Builder) Add(destination string, extract bool, options AddAndCopyOption
|
|||
return nil
|
||||
}
|
||||
|
||||
// user returns the user (and group) information which the destination should belong to.
|
||||
func (b *Builder) user(mountPoint string, userspec string) (specs.User, string, error) {
|
||||
// userForRun returns the user (and group) information which we should use for
|
||||
// running commands
|
||||
func (b *Builder) userForRun(mountPoint string, userspec string) (specs.User, string, error) {
|
||||
if userspec == "" {
|
||||
userspec = b.User()
|
||||
}
|
||||
|
@ -577,3 +596,18 @@ func (b *Builder) user(mountPoint string, userspec string) (specs.User, string,
|
|||
}
|
||||
return u, homeDir, err
|
||||
}
|
||||
|
||||
// userForCopy returns the user (and group) information which we should use for
|
||||
// setting ownership of contents being copied. It's just like what
|
||||
// userForRun() does, except for the case where we're passed a single numeric
|
||||
// value, where we need to use that value for both the UID and the GID.
|
||||
func (b *Builder) userForCopy(mountPoint string, userspec string) (uint32, uint32, error) {
|
||||
if id, err := strconv.ParseUint(userspec, 10, 32); err == nil {
|
||||
return uint32(id), uint32(id), nil
|
||||
}
|
||||
user, _, err := b.userForRun(mountPoint, userspec)
|
||||
if err != nil {
|
||||
return 0xffffffff, 0xffffffff, err
|
||||
}
|
||||
return user.UID, user.GID, nil
|
||||
}
|
||||
|
|
124
vendor/github.com/containers/buildah/buildah.go
generated
vendored
124
vendor/github.com/containers/buildah/buildah.go
generated
vendored
|
@ -25,10 +25,10 @@ import (
|
|||
const (
|
||||
// Package is the name of this package, used in help output and to
|
||||
// identify working containers.
|
||||
Package = "buildah"
|
||||
Package = define.Package
|
||||
// Version for the Package. Bump version in contrib/rpm/buildah.spec
|
||||
// too.
|
||||
Version = "1.19.8"
|
||||
Version = define.Version
|
||||
// The value we use to identify what type of information, currently a
|
||||
// serialized Builder structure, we are using as per-container state.
|
||||
// This should only be changed when we make incompatible changes to
|
||||
|
@ -66,35 +66,22 @@ const (
|
|||
|
||||
// NetworkConfigurationPolicy takes the value NetworkDefault, NetworkDisabled,
|
||||
// or NetworkEnabled.
|
||||
type NetworkConfigurationPolicy int
|
||||
type NetworkConfigurationPolicy = define.NetworkConfigurationPolicy
|
||||
|
||||
const (
|
||||
// NetworkDefault is one of the values that BuilderOptions.ConfigureNetwork
|
||||
// can take, signalling that the default behavior should be used.
|
||||
NetworkDefault NetworkConfigurationPolicy = iota
|
||||
NetworkDefault = define.NetworkDefault
|
||||
// NetworkDisabled is one of the values that BuilderOptions.ConfigureNetwork
|
||||
// can take, signalling that network interfaces should NOT be configured for
|
||||
// newly-created network namespaces.
|
||||
NetworkDisabled
|
||||
NetworkDisabled = define.NetworkDisabled
|
||||
// NetworkEnabled is one of the values that BuilderOptions.ConfigureNetwork
|
||||
// can take, signalling that network interfaces should be configured for
|
||||
// newly-created network namespaces.
|
||||
NetworkEnabled
|
||||
NetworkEnabled = define.NetworkEnabled
|
||||
)
|
||||
|
||||
// String formats a NetworkConfigurationPolicy as a string.
|
||||
func (p NetworkConfigurationPolicy) String() string {
|
||||
switch p {
|
||||
case NetworkDefault:
|
||||
return "NetworkDefault"
|
||||
case NetworkDisabled:
|
||||
return "NetworkDisabled"
|
||||
case NetworkEnabled:
|
||||
return "NetworkEnabled"
|
||||
}
|
||||
return fmt.Sprintf("unknown NetworkConfigurationPolicy %d", p)
|
||||
}
|
||||
|
||||
// Builder objects are used to represent containers which are being used to
|
||||
// build images. They also carry potential updates which will be applied to
|
||||
// the image's configuration when the container's contents are used to build an
|
||||
|
@ -149,15 +136,15 @@ type Builder struct {
|
|||
DefaultMountsFilePath string `json:"defaultMountsFilePath,omitempty"`
|
||||
|
||||
// Isolation controls how we handle "RUN" statements and the Run() method.
|
||||
Isolation Isolation
|
||||
Isolation define.Isolation
|
||||
// NamespaceOptions controls how we set up the namespaces for processes that we run in the container.
|
||||
NamespaceOptions NamespaceOptions
|
||||
NamespaceOptions define.NamespaceOptions
|
||||
// ConfigureNetwork controls whether or not network interfaces and
|
||||
// routing are configured for a new network namespace (i.e., when not
|
||||
// joining another's namespace and not just using the host's
|
||||
// namespace), effectively deciding whether or not the process has a
|
||||
// usable network.
|
||||
ConfigureNetwork NetworkConfigurationPolicy
|
||||
ConfigureNetwork define.NetworkConfigurationPolicy
|
||||
// CNIPluginPath is the location of CNI plugin helpers, if they should be
|
||||
// run from a location other than the default location.
|
||||
CNIPluginPath string
|
||||
|
@ -165,7 +152,7 @@ type Builder struct {
|
|||
// the default configuration directory shouldn't be used.
|
||||
CNIConfigDir string
|
||||
// ID mapping options to use when running processes in the container with non-host user namespaces.
|
||||
IDMappingOptions IDMappingOptions
|
||||
IDMappingOptions define.IDMappingOptions
|
||||
// Capabilities is a list of capabilities to use when running commands in the container.
|
||||
Capabilities []string
|
||||
// PrependedEmptyLayers are history entries that we'll add to a
|
||||
|
@ -177,7 +164,7 @@ type Builder struct {
|
|||
// committed image after the history item for the layer that we're
|
||||
// committing.
|
||||
AppendedEmptyLayers []v1.History
|
||||
CommonBuildOpts *CommonBuildOptions
|
||||
CommonBuildOpts *define.CommonBuildOptions
|
||||
// TopLayer is the top layer of the image
|
||||
TopLayer string
|
||||
// Format for the build Image
|
||||
|
@ -187,7 +174,7 @@ type Builder struct {
|
|||
// ContentDigester counts the digest of all Add()ed content
|
||||
ContentDigester CompositeDigester
|
||||
// Devices are the additional devices to add to the containers
|
||||
Devices ContainerDevices
|
||||
Devices define.ContainerDevices
|
||||
}
|
||||
|
||||
// BuilderInfo are used as objects to display container information
|
||||
|
@ -209,14 +196,14 @@ type BuilderInfo struct {
|
|||
Docker docker.V2Image
|
||||
DefaultMountsFilePath string
|
||||
Isolation string
|
||||
NamespaceOptions NamespaceOptions
|
||||
NamespaceOptions define.NamespaceOptions
|
||||
Capabilities []string
|
||||
ConfigureNetwork string
|
||||
CNIPluginPath string
|
||||
CNIConfigDir string
|
||||
IDMappingOptions IDMappingOptions
|
||||
IDMappingOptions define.IDMappingOptions
|
||||
History []v1.History
|
||||
Devices ContainerDevices
|
||||
Devices define.ContainerDevices
|
||||
}
|
||||
|
||||
// GetBuildInfo gets a pointer to a Builder object and returns a BuilderInfo object from it.
|
||||
|
@ -256,66 +243,7 @@ func GetBuildInfo(b *Builder) BuilderInfo {
|
|||
}
|
||||
|
||||
// CommonBuildOptions are resources that can be defined by flags for both buildah from and build-using-dockerfile
|
||||
type CommonBuildOptions struct {
|
||||
// AddHost is the list of hostnames to add to the build container's /etc/hosts.
|
||||
AddHost []string
|
||||
// CgroupParent is the path to cgroups under which the cgroup for the container will be created.
|
||||
CgroupParent string
|
||||
// CPUPeriod limits the CPU CFS (Completely Fair Scheduler) period
|
||||
CPUPeriod uint64
|
||||
// CPUQuota limits the CPU CFS (Completely Fair Scheduler) quota
|
||||
CPUQuota int64
|
||||
// CPUShares (relative weight
|
||||
CPUShares uint64
|
||||
// CPUSetCPUs in which to allow execution (0-3, 0,1)
|
||||
CPUSetCPUs string
|
||||
// CPUSetMems memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems.
|
||||
CPUSetMems string
|
||||
// HTTPProxy determines whether *_proxy env vars from the build host are passed into the container.
|
||||
HTTPProxy bool
|
||||
// Memory is the upper limit (in bytes) on how much memory running containers can use.
|
||||
Memory int64
|
||||
// DNSSearch is the list of DNS search domains to add to the build container's /etc/resolv.conf
|
||||
DNSSearch []string
|
||||
// DNSServers is the list of DNS servers to add to the build container's /etc/resolv.conf
|
||||
DNSServers []string
|
||||
// DNSOptions is the list of DNS
|
||||
DNSOptions []string
|
||||
// MemorySwap limits the amount of memory and swap together.
|
||||
MemorySwap int64
|
||||
// LabelOpts is the a slice of fields of an SELinux context, given in "field:pair" format, or "disable".
|
||||
// Recognized field names are "role", "type", and "level".
|
||||
LabelOpts []string
|
||||
// OmitTimestamp forces epoch 0 as created timestamp to allow for
|
||||
// deterministic, content-addressable builds.
|
||||
OmitTimestamp bool
|
||||
// SeccompProfilePath is the pathname of a seccomp profile.
|
||||
SeccompProfilePath string
|
||||
// ApparmorProfile is the name of an apparmor profile.
|
||||
ApparmorProfile string
|
||||
// ShmSize is the "size" value to use when mounting an shmfs on the container's /dev/shm directory.
|
||||
ShmSize string
|
||||
// Ulimit specifies resource limit options, in the form type:softlimit[:hardlimit].
|
||||
// These types are recognized:
|
||||
// "core": maximum core dump size (ulimit -c)
|
||||
// "cpu": maximum CPU time (ulimit -t)
|
||||
// "data": maximum size of a process's data segment (ulimit -d)
|
||||
// "fsize": maximum size of new files (ulimit -f)
|
||||
// "locks": maximum number of file locks (ulimit -x)
|
||||
// "memlock": maximum amount of locked memory (ulimit -l)
|
||||
// "msgqueue": maximum amount of data in message queues (ulimit -q)
|
||||
// "nice": niceness adjustment (nice -n, ulimit -e)
|
||||
// "nofile": maximum number of open files (ulimit -n)
|
||||
// "nproc": maximum number of processes (ulimit -u)
|
||||
// "rss": maximum size of a process's (ulimit -m)
|
||||
// "rtprio": maximum real-time scheduling priority (ulimit -r)
|
||||
// "rttime": maximum amount of real-time execution between blocking syscalls
|
||||
// "sigpending": maximum number of pending signals (ulimit -i)
|
||||
// "stack": maximum stack size (ulimit -s)
|
||||
Ulimit []string
|
||||
// Volumes to bind mount into the container
|
||||
Volumes []string
|
||||
}
|
||||
type CommonBuildOptions = define.CommonBuildOptions
|
||||
|
||||
// BuilderOptions are used to initialize a new Builder.
|
||||
type BuilderOptions struct {
|
||||
|
@ -331,7 +259,7 @@ type BuilderOptions struct {
|
|||
// PullPolicy decides whether or not we should pull the image that
|
||||
// we're using as a base image. It should be PullIfMissing,
|
||||
// PullAlways, or PullNever.
|
||||
PullPolicy PullPolicy
|
||||
PullPolicy define.PullPolicy
|
||||
// Registry is a value which is prepended to the image's name, if it
|
||||
// needs to be pulled and the image name alone can not be resolved to a
|
||||
// reference to a source image. No separator is implicitly added.
|
||||
|
@ -360,16 +288,16 @@ type BuilderOptions struct {
|
|||
DefaultMountsFilePath string
|
||||
// Isolation controls how we handle "RUN" statements and the Run()
|
||||
// method.
|
||||
Isolation Isolation
|
||||
Isolation define.Isolation
|
||||
// NamespaceOptions controls how we set up namespaces for processes that
|
||||
// we might need to run using the container's root filesystem.
|
||||
NamespaceOptions NamespaceOptions
|
||||
NamespaceOptions define.NamespaceOptions
|
||||
// ConfigureNetwork controls whether or not network interfaces and
|
||||
// routing are configured for a new network namespace (i.e., when not
|
||||
// joining another's namespace and not just using the host's
|
||||
// namespace), effectively deciding whether or not the process has a
|
||||
// usable network.
|
||||
ConfigureNetwork NetworkConfigurationPolicy
|
||||
ConfigureNetwork define.NetworkConfigurationPolicy
|
||||
// CNIPluginPath is the location of CNI plugin helpers, if they should be
|
||||
// run from a location other than the default location.
|
||||
CNIPluginPath string
|
||||
|
@ -377,15 +305,15 @@ type BuilderOptions struct {
|
|||
// the default configuration directory shouldn't be used.
|
||||
CNIConfigDir string
|
||||
// ID mapping options to use if we're setting up our own user namespace.
|
||||
IDMappingOptions *IDMappingOptions
|
||||
IDMappingOptions *define.IDMappingOptions
|
||||
// Capabilities is a list of capabilities to use when
|
||||
// running commands in the container.
|
||||
Capabilities []string
|
||||
CommonBuildOpts *CommonBuildOptions
|
||||
CommonBuildOpts *define.CommonBuildOptions
|
||||
// Format for the container image
|
||||
Format string
|
||||
// Devices are the additional devices to add to the containers
|
||||
Devices ContainerDevices
|
||||
Devices define.ContainerDevices
|
||||
//DefaultEnv for containers
|
||||
DefaultEnv []string
|
||||
// MaxPullRetries is the maximum number of attempts we'll make to pull
|
||||
|
@ -460,7 +388,7 @@ func OpenBuilder(store storage.Store, container string) (*Builder, error) {
|
|||
return nil, errors.Wrapf(err, "error parsing %q, read from %q", string(buildstate), filepath.Join(cdir, stateFile))
|
||||
}
|
||||
if b.Type != containerType {
|
||||
return nil, errors.Errorf("container %q is not a %s container (is a %q container)", container, Package, b.Type)
|
||||
return nil, errors.Errorf("container %q is not a %s container (is a %q container)", container, define.Package, b.Type)
|
||||
}
|
||||
b.store = store
|
||||
b.fixupConfig()
|
||||
|
@ -504,7 +432,7 @@ func OpenBuilderByPath(store storage.Store, path string) (*Builder, error) {
|
|||
if err != nil {
|
||||
logrus.Debugf("error parsing %q, read from %q: %v", string(buildstate), filepath.Join(cdir, stateFile), err)
|
||||
} else if b.Type != containerType {
|
||||
logrus.Debugf("container %q is not a %s container (is a %q container)", container.ID, Package, b.Type)
|
||||
logrus.Debugf("container %q is not a %s container (is a %q container)", container.ID, define.Package, b.Type)
|
||||
}
|
||||
}
|
||||
return nil, storage.ErrContainerUnknown
|
||||
|
@ -541,7 +469,7 @@ func OpenAllBuilders(store storage.Store) (builders []*Builder, err error) {
|
|||
if err != nil {
|
||||
logrus.Debugf("error parsing %q, read from %q: %v", string(buildstate), filepath.Join(cdir, stateFile), err)
|
||||
} else if b.Type != containerType {
|
||||
logrus.Debugf("container %q is not a %s container (is a %q container)", container.ID, Package, b.Type)
|
||||
logrus.Debugf("container %q is not a %s container (is a %q container)", container.ID, define.Package, b.Type)
|
||||
}
|
||||
}
|
||||
return builders, nil
|
||||
|
|
122
vendor/github.com/containers/buildah/changelog.txt
generated
vendored
122
vendor/github.com/containers/buildah/changelog.txt
generated
vendored
|
@ -1,41 +1,109 @@
|
|||
|
||||
- Changelog for v1.19.6 (2021-02-18)
|
||||
* Bump c/containers/storage v1.24.6
|
||||
- Changelog for v1.20.0 (2021-03-25)
|
||||
* vendor in containers/storage v1.28.1
|
||||
* build(deps): bump github.com/containers/common from 0.35.2 to 0.35.3
|
||||
* tests: prefetch: use buildah, not podman, for pulls
|
||||
* Use faster way to check image tag existence during multi-arch build
|
||||
* Add information about multi-arch images to the Readme
|
||||
* COPY --chown: expand the conformance test
|
||||
* pkg/chrootuser: use a bufio.Scanner
|
||||
* [CI:DOCS] Fix rootful typo in docs
|
||||
* build(deps): bump github.com/onsi/ginkgo from 1.15.1 to 1.15.2
|
||||
* Add documentation and testing for .containerignore
|
||||
* build(deps): bump github.com/sirupsen/logrus from 1.8.0 to 1.8.1
|
||||
* build(deps): bump github.com/hashicorp/go-multierror from 1.1.0 to 1.1.1
|
||||
* Lookup Containerfile if user specifies a directory
|
||||
* Add Tag format placeholder to docs
|
||||
* copier: ignore sockets
|
||||
* image: propagate errors from extractRootfs
|
||||
* Remove system test of 'buildah containers -a'
|
||||
* Clarify userns options are usable only as root in man pages
|
||||
* Fix system test of 'containers -a'
|
||||
* Remove duplicated code in addcopy
|
||||
* build(deps): bump github.com/onsi/ginkgo from 1.15.0 to 1.15.1
|
||||
* build(deps): bump github.com/onsi/gomega from 1.10.5 to 1.11.0
|
||||
* build(deps): bump github.com/fsouza/go-dockerclient from 1.7.1 to 1.7.2
|
||||
* Update multi-arch buildah build setup with new logic
|
||||
* Update nix pin with `make nixpkgs`
|
||||
* overlay.bats: fix the "overlay source permissions" test
|
||||
* imagebuildah: use overlay for volumes when using overlay
|
||||
* Make PolicyMap and PullPolicy names align
|
||||
* copier: add GetOptions.IgnoreUnreadable
|
||||
* Check local image to match system context
|
||||
* fix: Containerfiles - smaller set of userns u/gids
|
||||
* Set upperdir permissions based on source
|
||||
* Shrink the vendoring size of pkc/cli
|
||||
* Clarify image name match failure message
|
||||
* ADD/COPY: create the destination directory first, chroot to it
|
||||
* copier.GetOptions: add NoDerefSymLinks
|
||||
* copier: add an Eval function
|
||||
* Update system test for 'from --cap-add/drop'
|
||||
* copier: fix a renaming bug
|
||||
* copier: return child process stderr if we can't JSON decode the response
|
||||
* Add some system tests
|
||||
* build(deps): bump github.com/containers/storage from 1.26.0 to 1.27.0
|
||||
* complement add/copy --chmod documentation
|
||||
* buildah login and logout, do not need to enter user namespace
|
||||
* Add multi-arch image build
|
||||
* chmod/chown added/fixed in bash completions
|
||||
* OWNERS: add @lsm5
|
||||
* buildah add/copy --chmod dockerfile implementation
|
||||
* bump github.com/openshift/imagebuilder from 1.1.8 to 1.2.0
|
||||
* buildah add/copy --chmod cli implementation for files and urls
|
||||
* Make sure we set the buildah version label
|
||||
* Isolation strings, should match user input
|
||||
* [CI:DOCS] buildah-from.md: remove dup arch,os
|
||||
* build(deps): bump github.com/containers/image/v5 from 5.10.2 to 5.10.3
|
||||
* Cirrus: Temp. disable prior-fedora (F32) testing
|
||||
* pr-should-include-tests: recognized "renamed" tests
|
||||
* build(deps): bump github.com/sirupsen/logrus from 1.7.0 to 1.8.0
|
||||
* build(deps): bump github.com/fsouza/go-dockerclient from 1.7.0 to 1.7.1
|
||||
* build(deps): bump github.com/containers/common from 0.34.2 to 0.35.0
|
||||
* Fix reaping of stages with no instructions
|
||||
* add stale bot
|
||||
* Add base image name to comment
|
||||
* build(deps): bump github.com/spf13/cobra from 1.1.1 to 1.1.3
|
||||
* Don't fail copy to emptydir
|
||||
* Workaround for RHEL gating test failure
|
||||
* Fix config-flags-verification test on F33
|
||||
* Fix bud capabilities test
|
||||
* Stop overriding the location of the blob info cache
|
||||
* buildah: use volatile containers
|
||||
* vendor: update containers/storage
|
||||
* Eliminate the use of containers/building import in pkg subdirs
|
||||
* Add more support for removing config
|
||||
* Improve messages about --cache-from not being supported
|
||||
* Revert patch to allow COPY/ADD of empty dirs.
|
||||
* Don't fail copy to emptydir
|
||||
* Fix tutorial for rootless mode
|
||||
* Fix caching layers with build args
|
||||
|
||||
- Changelog for v1.19.5 (2021-02-09)
|
||||
* Vendor in latest containers/image and common
|
||||
|
||||
- Changelog for v1.19.4 (2021-02-06)
|
||||
* Vendor in containers/image v5.10.2
|
||||
* build(deps): bump github.com/containers/common from 0.34.0 to 0.34.2
|
||||
* build(deps): bump github.com/onsi/ginkgo from 1.14.2 to 1.15.0
|
||||
* 'make validate': require PRs to include tests
|
||||
* build(deps): bump github.com/onsi/gomega from 1.10.4 to 1.10.5
|
||||
* build(deps): bump github.com/containers/storage from 1.24.5 to 1.25.0
|
||||
* Use chown function for U volume flag from containers/common repository
|
||||
* --iidfile: print hash prefix
|
||||
* bump containernetworking/cni to v0.8.1 - fix for CVE-2021-20206
|
||||
* run: fix check for host pid namespace
|
||||
* bump containernetworking/cni library to v0.8.1 - fix for CVE-2021-20206
|
||||
* Finish plumbing for buildah bud --manifest
|
||||
* buildah manifest add localimage should work
|
||||
* Stop testing directory permissions with latest docker
|
||||
* Fix build arg check
|
||||
* --iidfile: print hash prefix
|
||||
|
||||
- Changelog for v1.19.3 (2021-01-28)
|
||||
* build(deps): bump github.com/containers/ocicrypt from 1.0.3 to 1.1.0
|
||||
* [ci:docs] Fix man page for buildah push
|
||||
* Vendor in containers/image v5.10.1
|
||||
* Update nix pin with `make nixpkgs`
|
||||
* Bump to containers/image v5.10.1
|
||||
* Rebuild layer if a change in ARG is detected
|
||||
* Bump golang.org/x/crypto to latest rel-1.19
|
||||
* Bump golang.org/x/crypto to the latest
|
||||
* Add Ashley and Urvashi to Approvers
|
||||
* local image lookup by digest
|
||||
* Use build-arg ENV val from local environment if set
|
||||
* Pick default OCI Runtime from containers.conf
|
||||
|
||||
- Changelog for v1.19.2 (2021-01-15)
|
||||
* If overlay mount point destination does not exists, do not throw error
|
||||
* Vendor in containers/common
|
||||
|
||||
- Changelog for v1.19.1 (2021-01-14)
|
||||
* Cherry pick localhost fix and update CI configuration for release-1.19
|
||||
* use local image name for pull policy checks
|
||||
* Vendor in common 0.33.1
|
||||
* Added required devel packages
|
||||
* Cirrus: Native OSX Build
|
||||
* Cirrus: Two minor cleanup items
|
||||
* Workaround for RHEL gating test failure
|
||||
* build(deps): bump github.com/stretchr/testify from 1.6.1 to 1.7.0
|
||||
* build(deps): bump github.com/mattn/go-shellwords from 1.0.10 to 1.0.11
|
||||
* Reset upstream branch to dev version
|
||||
* If destination does not exists, do not throw error
|
||||
|
||||
- Changelog for v1.19.0 (2021-01-08)
|
||||
* Update vendor of containers/storage and containers/common
|
||||
|
|
5
vendor/github.com/containers/buildah/common.go
generated
vendored
5
vendor/github.com/containers/buildah/common.go
generated
vendored
|
@ -7,6 +7,7 @@ import (
|
|||
"path/filepath"
|
||||
"time"
|
||||
|
||||
"github.com/containers/buildah/define"
|
||||
"github.com/containers/common/pkg/retry"
|
||||
cp "github.com/containers/image/v5/copy"
|
||||
"github.com/containers/image/v5/docker"
|
||||
|
@ -19,9 +20,9 @@ import (
|
|||
|
||||
const (
|
||||
// OCI used to define the "oci" image format
|
||||
OCI = "oci"
|
||||
OCI = define.OCI
|
||||
// DOCKER used to define the "docker" image format
|
||||
DOCKER = "docker"
|
||||
DOCKER = define.DOCKER
|
||||
)
|
||||
|
||||
func getCopyOptions(store storage.Store, reportWriter io.Writer, sourceSystemContext *types.SystemContext, destinationSystemContext *types.SystemContext, manifestType string, removeSignatures bool, addSigner string, ociEncryptLayers *[]int, ociEncryptConfig *encconfig.EncryptConfig, ociDecryptConfig *encconfig.DecryptConfig) *cp.Options {
|
||||
|
|
13
vendor/github.com/containers/buildah/config.go
generated
vendored
13
vendor/github.com/containers/buildah/config.go
generated
vendored
|
@ -7,6 +7,7 @@ import (
|
|||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/containers/buildah/define"
|
||||
"github.com/containers/buildah/docker"
|
||||
"github.com/containers/image/v5/manifest"
|
||||
"github.com/containers/image/v5/transports"
|
||||
|
@ -108,7 +109,7 @@ func (b *Builder) fixupConfig() {
|
|||
if b.Architecture() == "" {
|
||||
b.SetArchitecture(runtime.GOARCH)
|
||||
}
|
||||
if b.Format == Dockerv2ImageManifest && b.Hostname() == "" {
|
||||
if b.Format == define.Dockerv2ImageManifest && b.Hostname() == "" {
|
||||
b.SetHostname(stringid.TruncateID(stringid.GenerateRandomID()))
|
||||
}
|
||||
}
|
||||
|
@ -219,7 +220,7 @@ func (b *Builder) ClearOnBuild() {
|
|||
// Note: this setting is not present in the OCIv1 image format, so it is
|
||||
// discarded when writing images using OCIv1 formats.
|
||||
func (b *Builder) SetOnBuild(onBuild string) {
|
||||
if onBuild != "" && b.Format != Dockerv2ImageManifest {
|
||||
if onBuild != "" && b.Format != define.Dockerv2ImageManifest {
|
||||
logrus.Warnf("ONBUILD is not supported for OCI image format, %s will be ignored. Must use `docker` format", onBuild)
|
||||
}
|
||||
b.Docker.Config.OnBuild = append(b.Docker.Config.OnBuild, onBuild)
|
||||
|
@ -251,7 +252,7 @@ func (b *Builder) Shell() []string {
|
|||
// Note: this setting is not present in the OCIv1 image format, so it is
|
||||
// discarded when writing images using OCIv1 formats.
|
||||
func (b *Builder) SetShell(shell []string) {
|
||||
if len(shell) > 0 && b.Format != Dockerv2ImageManifest {
|
||||
if len(shell) > 0 && b.Format != define.Dockerv2ImageManifest {
|
||||
logrus.Warnf("SHELL is not supported for OCI image format, %s will be ignored. Must use `docker` format", shell)
|
||||
}
|
||||
|
||||
|
@ -488,7 +489,7 @@ func (b *Builder) Domainname() string {
|
|||
// Note: this setting is not present in the OCIv1 image format, so it is
|
||||
// discarded when writing images using OCIv1 formats.
|
||||
func (b *Builder) SetDomainname(name string) {
|
||||
if name != "" && b.Format != Dockerv2ImageManifest {
|
||||
if name != "" && b.Format != define.Dockerv2ImageManifest {
|
||||
logrus.Warnf("DOMAINNAME is not supported for OCI image format, domainname %s will be ignored. Must use `docker` format", name)
|
||||
}
|
||||
b.Docker.Config.Domainname = name
|
||||
|
@ -510,7 +511,7 @@ func (b *Builder) Comment() string {
|
|||
// Note: this setting is not present in the OCIv1 image format, so it is
|
||||
// discarded when writing images using OCIv1 formats.
|
||||
func (b *Builder) SetComment(comment string) {
|
||||
if comment != "" && b.Format != Dockerv2ImageManifest {
|
||||
if comment != "" && b.Format != define.Dockerv2ImageManifest {
|
||||
logrus.Warnf("COMMENT is not supported for OCI image format, comment %s will be ignored. Must use `docker` format", comment)
|
||||
}
|
||||
b.Docker.Comment = comment
|
||||
|
@ -565,7 +566,7 @@ func (b *Builder) Healthcheck() *docker.HealthConfig {
|
|||
func (b *Builder) SetHealthcheck(config *docker.HealthConfig) {
|
||||
b.Docker.Config.Healthcheck = nil
|
||||
if config != nil {
|
||||
if b.Format != Dockerv2ImageManifest {
|
||||
if b.Format != define.Dockerv2ImageManifest {
|
||||
logrus.Warnf("Healthcheck is not supported for OCI image format and will be ignored. Must use `docker` format")
|
||||
}
|
||||
b.Docker.Config.Healthcheck = &docker.HealthConfig{
|
||||
|
|
4
vendor/github.com/containers/buildah/copier/copier.go
generated
vendored
4
vendor/github.com/containers/buildah/copier/copier.go
generated
vendored
|
@ -1128,6 +1128,10 @@ func copierHandlerGet(bulkWriter io.Writer, req request, pm *fileutils.PatternMa
|
|||
}
|
||||
return errors.Wrapf(err, "copier: get: error reading %q", path)
|
||||
}
|
||||
if info.Mode()&os.ModeType == os.ModeSocket {
|
||||
logrus.Warningf("buildah/copier: skipping socket %q", info.Name())
|
||||
return nil
|
||||
}
|
||||
// compute the path of this item
|
||||
// relative to the top-level directory,
|
||||
// for the tar header
|
||||
|
|
223
vendor/github.com/containers/buildah/define/build.go
generated
vendored
Normal file
223
vendor/github.com/containers/buildah/define/build.go
generated
vendored
Normal file
|
@ -0,0 +1,223 @@
|
|||
package define
|
||||
|
||||
import (
|
||||
"io"
|
||||
"time"
|
||||
|
||||
"github.com/containers/image/v5/types"
|
||||
encconfig "github.com/containers/ocicrypt/config"
|
||||
"github.com/containers/storage/pkg/archive"
|
||||
)
|
||||
|
||||
// CommonBuildOptions are resources that can be defined by flags for both buildah from and build-using-dockerfile
|
||||
type CommonBuildOptions struct {
|
||||
// AddHost is the list of hostnames to add to the build container's /etc/hosts.
|
||||
AddHost []string
|
||||
// CgroupParent is the path to cgroups under which the cgroup for the container will be created.
|
||||
CgroupParent string
|
||||
// CPUPeriod limits the CPU CFS (Completely Fair Scheduler) period
|
||||
CPUPeriod uint64
|
||||
// CPUQuota limits the CPU CFS (Completely Fair Scheduler) quota
|
||||
CPUQuota int64
|
||||
// CPUShares (relative weight
|
||||
CPUShares uint64
|
||||
// CPUSetCPUs in which to allow execution (0-3, 0,1)
|
||||
CPUSetCPUs string
|
||||
// CPUSetMems memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems.
|
||||
CPUSetMems string
|
||||
// HTTPProxy determines whether *_proxy env vars from the build host are passed into the container.
|
||||
HTTPProxy bool
|
||||
// Memory is the upper limit (in bytes) on how much memory running containers can use.
|
||||
Memory int64
|
||||
// DNSSearch is the list of DNS search domains to add to the build container's /etc/resolv.conf
|
||||
DNSSearch []string
|
||||
// DNSServers is the list of DNS servers to add to the build container's /etc/resolv.conf
|
||||
DNSServers []string
|
||||
// DNSOptions is the list of DNS
|
||||
DNSOptions []string
|
||||
// MemorySwap limits the amount of memory and swap together.
|
||||
MemorySwap int64
|
||||
// LabelOpts is the a slice of fields of an SELinux context, given in "field:pair" format, or "disable".
|
||||
// Recognized field names are "role", "type", and "level".
|
||||
LabelOpts []string
|
||||
// OmitTimestamp forces epoch 0 as created timestamp to allow for
|
||||
// deterministic, content-addressable builds.
|
||||
OmitTimestamp bool
|
||||
// SeccompProfilePath is the pathname of a seccomp profile.
|
||||
SeccompProfilePath string
|
||||
// ApparmorProfile is the name of an apparmor profile.
|
||||
ApparmorProfile string
|
||||
// ShmSize is the "size" value to use when mounting an shmfs on the container's /dev/shm directory.
|
||||
ShmSize string
|
||||
// Ulimit specifies resource limit options, in the form type:softlimit[:hardlimit].
|
||||
// These types are recognized:
|
||||
// "core": maximum core dump size (ulimit -c)
|
||||
// "cpu": maximum CPU time (ulimit -t)
|
||||
// "data": maximum size of a process's data segment (ulimit -d)
|
||||
// "fsize": maximum size of new files (ulimit -f)
|
||||
// "locks": maximum number of file locks (ulimit -x)
|
||||
// "memlock": maximum amount of locked memory (ulimit -l)
|
||||
// "msgqueue": maximum amount of data in message queues (ulimit -q)
|
||||
// "nice": niceness adjustment (nice -n, ulimit -e)
|
||||
// "nofile": maximum number of open files (ulimit -n)
|
||||
// "nproc": maximum number of processes (ulimit -u)
|
||||
// "rss": maximum size of a process's (ulimit -m)
|
||||
// "rtprio": maximum real-time scheduling priority (ulimit -r)
|
||||
// "rttime": maximum amount of real-time execution between blocking syscalls
|
||||
// "sigpending": maximum number of pending signals (ulimit -i)
|
||||
// "stack": maximum stack size (ulimit -s)
|
||||
Ulimit []string
|
||||
// Volumes to bind mount into the container
|
||||
Volumes []string
|
||||
}
|
||||
|
||||
// BuildOptions can be used to alter how an image is built.
|
||||
type BuildOptions struct {
|
||||
// ContextDirectory is the default source location for COPY and ADD
|
||||
// commands.
|
||||
ContextDirectory string
|
||||
// PullPolicy controls whether or not we pull images. It should be one
|
||||
// of PullIfMissing, PullAlways, PullIfNewer, or PullNever.
|
||||
PullPolicy PullPolicy
|
||||
// Registry is a value which is prepended to the image's name, if it
|
||||
// needs to be pulled and the image name alone can not be resolved to a
|
||||
// reference to a source image. No separator is implicitly added.
|
||||
Registry string
|
||||
// IgnoreUnrecognizedInstructions tells us to just log instructions we
|
||||
// don't recognize, and try to keep going.
|
||||
IgnoreUnrecognizedInstructions bool
|
||||
// Manifest Name to which the image will be added.
|
||||
Manifest string
|
||||
// Quiet tells us whether or not to announce steps as we go through them.
|
||||
Quiet bool
|
||||
// Isolation controls how Run() runs things.
|
||||
Isolation Isolation
|
||||
// Runtime is the name of the command to run for RUN instructions when
|
||||
// Isolation is either IsolationDefault or IsolationOCI. It should
|
||||
// accept the same arguments and flags that runc does.
|
||||
Runtime string
|
||||
// RuntimeArgs adds global arguments for the runtime.
|
||||
RuntimeArgs []string
|
||||
// TransientMounts is a list of mounts that won't be kept in the image.
|
||||
TransientMounts []string
|
||||
// Compression specifies the type of compression which is applied to
|
||||
// layer blobs. The default is to not use compression, but
|
||||
// archive.Gzip is recommended.
|
||||
Compression archive.Compression
|
||||
// Arguments which can be interpolated into Dockerfiles
|
||||
Args map[string]string
|
||||
// Name of the image to write to.
|
||||
Output string
|
||||
// Additional tags to add to the image that we write, if we know of a
|
||||
// way to add them.
|
||||
AdditionalTags []string
|
||||
// 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 nil) by default.
|
||||
Log func(format string, args ...interface{})
|
||||
// In is connected to stdin for RUN instructions.
|
||||
In io.Reader
|
||||
// Out is a place where non-error log messages are sent.
|
||||
Out io.Writer
|
||||
// Err is a place where error log messages should be sent.
|
||||
Err io.Writer
|
||||
// SignaturePolicyPath specifies an override location for the signature
|
||||
// policy which should be used for verifying the new image as it is
|
||||
// being written. Except in specific circumstances, no value should be
|
||||
// specified, indicating that the shared, system-wide default policy
|
||||
// should be used.
|
||||
SignaturePolicyPath string
|
||||
// ReportWriter is an io.Writer which will be used to report the
|
||||
// progress of the (possible) pulling of the source image and the
|
||||
// writing of the new image.
|
||||
ReportWriter io.Writer
|
||||
// OutputFormat is the format of the output image's manifest and
|
||||
// configuration data.
|
||||
// Accepted values are buildah.OCIv1ImageManifest and buildah.Dockerv2ImageManifest.
|
||||
OutputFormat string
|
||||
// SystemContext holds parameters used for authentication.
|
||||
SystemContext *types.SystemContext
|
||||
// NamespaceOptions controls how we set up namespaces processes that we
|
||||
// might need when handling RUN instructions.
|
||||
NamespaceOptions []NamespaceOption
|
||||
// ConfigureNetwork controls whether or not network interfaces and
|
||||
// routing are configured for a new network namespace (i.e., when not
|
||||
// joining another's namespace and not just using the host's
|
||||
// namespace), effectively deciding whether or not the process has a
|
||||
// usable network.
|
||||
ConfigureNetwork NetworkConfigurationPolicy
|
||||
// CNIPluginPath is the location of CNI plugin helpers, if they should be
|
||||
// run from a location other than the default location.
|
||||
CNIPluginPath string
|
||||
// CNIConfigDir is the location of CNI configuration files, if the files in
|
||||
// the default configuration directory shouldn't be used.
|
||||
CNIConfigDir string
|
||||
// ID mapping options to use if we're setting up our own user namespace
|
||||
// when handling RUN instructions.
|
||||
IDMappingOptions *IDMappingOptions
|
||||
// AddCapabilities is a list of capabilities to add to the default set when
|
||||
// handling RUN instructions.
|
||||
AddCapabilities []string
|
||||
// DropCapabilities is a list of capabilities to remove from the default set
|
||||
// when handling RUN instructions. If a capability appears in both lists, it
|
||||
// will be dropped.
|
||||
DropCapabilities []string
|
||||
// CommonBuildOpts is *required*.
|
||||
CommonBuildOpts *CommonBuildOptions
|
||||
// DefaultMountsFilePath is the file path holding the mounts to be mounted in "host-path:container-path" format
|
||||
DefaultMountsFilePath string
|
||||
// IIDFile tells the builder to write the image ID to the specified file
|
||||
IIDFile string
|
||||
// Squash tells the builder to produce an image with a single layer
|
||||
// instead of with possibly more than one layer.
|
||||
Squash bool
|
||||
// Labels metadata for an image
|
||||
Labels []string
|
||||
// Annotation metadata for an image
|
||||
Annotations []string
|
||||
// OnBuild commands to be run by images based on this image
|
||||
OnBuild []string
|
||||
// Layers tells the builder to create a cache of images for each step in the Dockerfile
|
||||
Layers bool
|
||||
// NoCache tells the builder to build the image from scratch without checking for a cache.
|
||||
// It creates a new set of cached images for the build.
|
||||
NoCache bool
|
||||
// RemoveIntermediateCtrs tells the builder whether to remove intermediate containers used
|
||||
// during the build process. Default is true.
|
||||
RemoveIntermediateCtrs bool
|
||||
// ForceRmIntermediateCtrs tells the builder to remove all intermediate containers even if
|
||||
// the build was unsuccessful.
|
||||
ForceRmIntermediateCtrs bool
|
||||
// BlobDirectory is a directory which we'll use for caching layer blobs.
|
||||
BlobDirectory string
|
||||
// Target the targeted FROM in the Dockerfile to build.
|
||||
Target string
|
||||
// Devices are the additional devices to add to the containers.
|
||||
Devices []string
|
||||
// SignBy is the fingerprint of a GPG key to use for signing images.
|
||||
SignBy string
|
||||
// Architecture specifies the target architecture of the image to be built.
|
||||
Architecture string
|
||||
// Timestamp sets the created timestamp to the specified time, allowing
|
||||
// for deterministic, content-addressable builds.
|
||||
Timestamp *time.Time
|
||||
// OS is the specifies the operating system of the image to be built.
|
||||
OS string
|
||||
// MaxPullPushRetries is the maximum number of attempts we'll make to pull or push any one
|
||||
// image from or to an external registry if the first attempt fails.
|
||||
MaxPullPushRetries int
|
||||
// PullPushRetryDelay is how long to wait before retrying a pull or push attempt.
|
||||
PullPushRetryDelay time.Duration
|
||||
// OciDecryptConfig contains the config that can be used to decrypt an image if it is
|
||||
// encrypted if non-nil. If nil, it does not attempt to decrypt an image.
|
||||
OciDecryptConfig *encconfig.DecryptConfig
|
||||
// Jobs is the number of stages to run in parallel. If not specified it defaults to 1.
|
||||
Jobs *int
|
||||
// LogRusage logs resource usage for each step.
|
||||
LogRusage bool
|
||||
// Excludes is a list of excludes to be used instead of the .dockerignore file.
|
||||
Excludes []string
|
||||
// From is the image name to use to replace the value specified in the first
|
||||
// FROM instruction in the Containerfile
|
||||
From string
|
||||
}
|
32
vendor/github.com/containers/buildah/define/isolation.go
generated
vendored
Normal file
32
vendor/github.com/containers/buildah/define/isolation.go
generated
vendored
Normal file
|
@ -0,0 +1,32 @@
|
|||
package define
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
type Isolation int
|
||||
|
||||
const (
|
||||
// IsolationDefault is whatever we think will work best.
|
||||
IsolationDefault Isolation = iota
|
||||
// IsolationOCI is a proper OCI runtime.
|
||||
IsolationOCI
|
||||
// IsolationChroot is a more chroot-like environment: less isolation,
|
||||
// but with fewer requirements.
|
||||
IsolationChroot
|
||||
// IsolationOCIRootless is a proper OCI runtime in rootless mode.
|
||||
IsolationOCIRootless
|
||||
)
|
||||
|
||||
// String converts a Isolation into a string.
|
||||
func (i Isolation) String() string {
|
||||
switch i {
|
||||
case IsolationDefault, IsolationOCI:
|
||||
return "oci"
|
||||
case IsolationChroot:
|
||||
return "chroot"
|
||||
case IsolationOCIRootless:
|
||||
return "rootless"
|
||||
}
|
||||
return fmt.Sprintf("unrecognized isolation type %d", i)
|
||||
}
|
87
vendor/github.com/containers/buildah/define/namespace.go
generated
vendored
Normal file
87
vendor/github.com/containers/buildah/define/namespace.go
generated
vendored
Normal file
|
@ -0,0 +1,87 @@
|
|||
package define
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// NamespaceOption controls how we set up a namespace when launching processes.
|
||||
type NamespaceOption struct {
|
||||
// Name specifies the type of namespace, typically matching one of the
|
||||
// ...Namespace constants defined in
|
||||
// github.com/opencontainers/runtime-spec/specs-go.
|
||||
Name string
|
||||
// Host is used to force our processes to use the host's namespace of
|
||||
// this type.
|
||||
Host bool
|
||||
// Path is the path of the namespace to attach our process to, if Host
|
||||
// is not set. If Host is not set and Path is also empty, a new
|
||||
// namespace will be created for the process that we're starting.
|
||||
// If Name is specs.NetworkNamespace, if Path doesn't look like an
|
||||
// absolute path, it is treated as a comma-separated list of CNI
|
||||
// configuration names which will be selected from among all of the CNI
|
||||
// network configurations which we find.
|
||||
Path string
|
||||
}
|
||||
|
||||
// NamespaceOptions provides some helper methods for a slice of NamespaceOption
|
||||
// structs.
|
||||
type NamespaceOptions []NamespaceOption
|
||||
|
||||
// Find the configuration for the namespace of the given type. If there are
|
||||
// duplicates, find the _last_ one of the type, since we assume it was appended
|
||||
// more recently.
|
||||
func (n *NamespaceOptions) Find(namespace string) *NamespaceOption {
|
||||
for i := range *n {
|
||||
j := len(*n) - 1 - i
|
||||
if (*n)[j].Name == namespace {
|
||||
return &((*n)[j])
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// AddOrReplace either adds or replaces the configuration for a given namespace.
|
||||
func (n *NamespaceOptions) AddOrReplace(options ...NamespaceOption) {
|
||||
nextOption:
|
||||
for _, option := range options {
|
||||
for i := range *n {
|
||||
j := len(*n) - 1 - i
|
||||
if (*n)[j].Name == option.Name {
|
||||
(*n)[j] = option
|
||||
continue nextOption
|
||||
}
|
||||
}
|
||||
*n = append(*n, option)
|
||||
}
|
||||
}
|
||||
|
||||
// NetworkConfigurationPolicy takes the value NetworkDefault, NetworkDisabled,
|
||||
// or NetworkEnabled.
|
||||
type NetworkConfigurationPolicy int
|
||||
|
||||
const (
|
||||
// NetworkDefault is one of the values that BuilderOptions.ConfigureNetwork
|
||||
// can take, signalling that the default behavior should be used.
|
||||
NetworkDefault NetworkConfigurationPolicy = iota
|
||||
// NetworkDisabled is one of the values that BuilderOptions.ConfigureNetwork
|
||||
// can take, signalling that network interfaces should NOT be configured for
|
||||
// newly-created network namespaces.
|
||||
NetworkDisabled
|
||||
// NetworkEnabled is one of the values that BuilderOptions.ConfigureNetwork
|
||||
// can take, signalling that network interfaces should be configured for
|
||||
// newly-created network namespaces.
|
||||
NetworkEnabled
|
||||
)
|
||||
|
||||
// String formats a NetworkConfigurationPolicy as a string.
|
||||
func (p NetworkConfigurationPolicy) String() string {
|
||||
switch p {
|
||||
case NetworkDefault:
|
||||
return "NetworkDefault"
|
||||
case NetworkDisabled:
|
||||
return "NetworkDisabled"
|
||||
case NetworkEnabled:
|
||||
return "NetworkEnabled"
|
||||
}
|
||||
return fmt.Sprintf("unknown NetworkConfigurationPolicy %d", p)
|
||||
}
|
50
vendor/github.com/containers/buildah/define/pull.go
generated
vendored
Normal file
50
vendor/github.com/containers/buildah/define/pull.go
generated
vendored
Normal file
|
@ -0,0 +1,50 @@
|
|||
package define
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// PullPolicy takes the value PullIfMissing, PullAlways, PullIfNewer, or PullNever.
|
||||
type PullPolicy int
|
||||
|
||||
const (
|
||||
// PullIfMissing is one of the values that BuilderOptions.PullPolicy
|
||||
// can take, signalling that the source image should be pulled from a
|
||||
// registry if a local copy of it is not already present.
|
||||
PullIfMissing PullPolicy = iota
|
||||
// PullAlways is one of the values that BuilderOptions.PullPolicy can
|
||||
// take, signalling that a fresh, possibly updated, copy of the image
|
||||
// should be pulled from a registry before the build proceeds.
|
||||
PullAlways
|
||||
// PullIfNewer is one of the values that BuilderOptions.PullPolicy
|
||||
// can take, signalling that the source image should only be pulled
|
||||
// from a registry if a local copy is not already present or if a
|
||||
// newer version the image is present on the repository.
|
||||
PullIfNewer
|
||||
// PullNever is one of the values that BuilderOptions.PullPolicy can
|
||||
// take, signalling that the source image should not be pulled from a
|
||||
// registry.
|
||||
PullNever
|
||||
)
|
||||
|
||||
// String converts a PullPolicy into a string.
|
||||
func (p PullPolicy) String() string {
|
||||
switch p {
|
||||
case PullIfMissing:
|
||||
return "missing"
|
||||
case PullAlways:
|
||||
return "always"
|
||||
case PullIfNewer:
|
||||
return "ifnewer"
|
||||
case PullNever:
|
||||
return "never"
|
||||
}
|
||||
return fmt.Sprintf("unrecognized policy %d", p)
|
||||
}
|
||||
|
||||
var PolicyMap = map[string]PullPolicy{
|
||||
"missing": PullIfMissing,
|
||||
"always": PullAlways,
|
||||
"never": PullNever,
|
||||
"ifnewer": PullIfNewer,
|
||||
}
|
243
vendor/github.com/containers/buildah/define/types.go
generated
vendored
243
vendor/github.com/containers/buildah/define/types.go
generated
vendored
|
@ -1,50 +1,219 @@
|
|||
package define
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"fmt"
|
||||
)
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
// PullPolicy takes the value PullIfMissing, PullAlways, PullIfNewer, or PullNever.
|
||||
type PullPolicy int
|
||||
"github.com/containers/image/v5/manifest"
|
||||
"github.com/containers/storage/pkg/archive"
|
||||
"github.com/containers/storage/pkg/chrootarchive"
|
||||
"github.com/containers/storage/pkg/ioutils"
|
||||
v1 "github.com/opencontainers/image-spec/specs-go/v1"
|
||||
"github.com/opencontainers/runtime-spec/specs-go"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
const (
|
||||
// PullIfMissing is one of the values that BuilderOptions.PullPolicy
|
||||
// can take, signalling that the source image should be pulled from a
|
||||
// registry if a local copy of it is not already present.
|
||||
PullIfMissing PullPolicy = iota
|
||||
// PullAlways is one of the values that BuilderOptions.PullPolicy can
|
||||
// take, signalling that a fresh, possibly updated, copy of the image
|
||||
// should be pulled from a registry before the build proceeds.
|
||||
PullAlways
|
||||
// PullIfNewer is one of the values that BuilderOptions.PullPolicy
|
||||
// can take, signalling that the source image should only be pulled
|
||||
// from a registry if a local copy is not already present or if a
|
||||
// newer version the image is present on the repository.
|
||||
PullIfNewer
|
||||
// PullNever is one of the values that BuilderOptions.PullPolicy can
|
||||
// take, signalling that the source image should not be pulled from a
|
||||
// registry if a local copy of it is not already present.
|
||||
PullNever
|
||||
// Package is the name of this package, used in help output and to
|
||||
// identify working containers.
|
||||
Package = "buildah"
|
||||
// Version for the Package. Bump version in contrib/rpm/buildah.spec
|
||||
// too.
|
||||
Version = "1.20.0"
|
||||
|
||||
// DefaultRuntime if containers.conf fails.
|
||||
DefaultRuntime = "runc"
|
||||
|
||||
DefaultCNIPluginPath = "/usr/libexec/cni:/opt/cni/bin"
|
||||
// DefaultCNIConfigDir is the default location of CNI configuration files.
|
||||
DefaultCNIConfigDir = "/etc/cni/net.d"
|
||||
|
||||
// OCIv1ImageManifest is the MIME type of an OCIv1 image manifest,
|
||||
// suitable for specifying as a value of the PreferredManifestType
|
||||
// member of a CommitOptions structure. It is also the default.
|
||||
OCIv1ImageManifest = v1.MediaTypeImageManifest
|
||||
// Dockerv2ImageManifest is the MIME type of a Docker v2s2 image
|
||||
// manifest, suitable for specifying as a value of the
|
||||
// PreferredManifestType member of a CommitOptions structure.
|
||||
Dockerv2ImageManifest = manifest.DockerV2Schema2MediaType
|
||||
|
||||
// OCI used to define the "oci" image format
|
||||
OCI = "oci"
|
||||
// DOCKER used to define the "docker" image format
|
||||
DOCKER = "docker"
|
||||
)
|
||||
|
||||
// String converts a PullPolicy into a string.
|
||||
func (p PullPolicy) String() string {
|
||||
switch p {
|
||||
case PullIfMissing:
|
||||
return "PullIfMissing"
|
||||
case PullAlways:
|
||||
return "PullAlways"
|
||||
case PullIfNewer:
|
||||
return "PullIfNewer"
|
||||
case PullNever:
|
||||
return "PullNever"
|
||||
var (
|
||||
// DefaultCapabilities is the list of capabilities which we grant by
|
||||
// default to containers which are running under UID 0.
|
||||
DefaultCapabilities = []string{
|
||||
"CAP_AUDIT_WRITE",
|
||||
"CAP_CHOWN",
|
||||
"CAP_DAC_OVERRIDE",
|
||||
"CAP_FOWNER",
|
||||
"CAP_FSETID",
|
||||
"CAP_KILL",
|
||||
"CAP_MKNOD",
|
||||
"CAP_NET_BIND_SERVICE",
|
||||
"CAP_SETFCAP",
|
||||
"CAP_SETGID",
|
||||
"CAP_SETPCAP",
|
||||
"CAP_SETUID",
|
||||
"CAP_SYS_CHROOT",
|
||||
}
|
||||
return fmt.Sprintf("unrecognized policy %d", p)
|
||||
// DefaultNetworkSysctl is the list of Kernel parameters which we
|
||||
// grant by default to containers which are running under UID 0.
|
||||
DefaultNetworkSysctl = map[string]string{
|
||||
"net.ipv4.ping_group_range": "0 0",
|
||||
}
|
||||
|
||||
Gzip = archive.Gzip
|
||||
Bzip2 = archive.Bzip2
|
||||
Xz = archive.Xz
|
||||
Zstd = archive.Zstd
|
||||
Uncompressed = archive.Uncompressed
|
||||
)
|
||||
|
||||
// IDMappingOptions controls how we set up UID/GID mapping when we set up a
|
||||
// user namespace.
|
||||
type IDMappingOptions struct {
|
||||
HostUIDMapping bool
|
||||
HostGIDMapping bool
|
||||
UIDMap []specs.LinuxIDMapping
|
||||
GIDMap []specs.LinuxIDMapping
|
||||
}
|
||||
|
||||
var PolicyMap = map[string]PullPolicy{
|
||||
"missing": PullIfMissing,
|
||||
"always": PullAlways,
|
||||
"never": PullNever,
|
||||
"ifnewer": PullIfNewer,
|
||||
// TempDirForURL checks if the passed-in string looks like a URL or -. If it is,
|
||||
// TempDirForURL creates a temporary directory, arranges for its contents to be
|
||||
// the contents of that URL, and returns the temporary directory's path, along
|
||||
// with the name of a subdirectory which should be used as the build context
|
||||
// (which may be empty or "."). Removal of the temporary directory is the
|
||||
// responsibility of the caller. If the string doesn't look like a URL,
|
||||
// TempDirForURL returns empty strings and a nil error code.
|
||||
func TempDirForURL(dir, prefix, url string) (name string, subdir string, err error) {
|
||||
if !strings.HasPrefix(url, "http://") &&
|
||||
!strings.HasPrefix(url, "https://") &&
|
||||
!strings.HasPrefix(url, "git://") &&
|
||||
!strings.HasPrefix(url, "github.com/") &&
|
||||
url != "-" {
|
||||
return "", "", nil
|
||||
}
|
||||
name, err = ioutil.TempDir(dir, prefix)
|
||||
if err != nil {
|
||||
return "", "", errors.Wrapf(err, "error creating temporary directory for %q", url)
|
||||
}
|
||||
if strings.HasPrefix(url, "git://") || strings.HasSuffix(url, ".git") {
|
||||
err = cloneToDirectory(url, name)
|
||||
if err != nil {
|
||||
if err2 := os.RemoveAll(name); err2 != nil {
|
||||
logrus.Debugf("error removing temporary directory %q: %v", name, err2)
|
||||
}
|
||||
return "", "", err
|
||||
}
|
||||
return name, "", nil
|
||||
}
|
||||
if strings.HasPrefix(url, "github.com/") {
|
||||
ghurl := url
|
||||
url = fmt.Sprintf("https://%s/archive/master.tar.gz", ghurl)
|
||||
logrus.Debugf("resolving url %q to %q", ghurl, url)
|
||||
subdir = path.Base(ghurl) + "-master"
|
||||
}
|
||||
if strings.HasPrefix(url, "http://") || strings.HasPrefix(url, "https://") {
|
||||
err = downloadToDirectory(url, name)
|
||||
if err != nil {
|
||||
if err2 := os.RemoveAll(name); err2 != nil {
|
||||
logrus.Debugf("error removing temporary directory %q: %v", name, err2)
|
||||
}
|
||||
return "", subdir, err
|
||||
}
|
||||
return name, subdir, nil
|
||||
}
|
||||
if url == "-" {
|
||||
err = stdinToDirectory(name)
|
||||
if err != nil {
|
||||
if err2 := os.RemoveAll(name); err2 != nil {
|
||||
logrus.Debugf("error removing temporary directory %q: %v", name, err2)
|
||||
}
|
||||
return "", subdir, err
|
||||
}
|
||||
logrus.Debugf("Build context is at %q", name)
|
||||
return name, subdir, nil
|
||||
}
|
||||
logrus.Debugf("don't know how to retrieve %q", url)
|
||||
if err2 := os.Remove(name); err2 != nil {
|
||||
logrus.Debugf("error removing temporary directory %q: %v", name, err2)
|
||||
}
|
||||
return "", "", errors.Errorf("unreachable code reached")
|
||||
}
|
||||
|
||||
func cloneToDirectory(url, dir string) error {
|
||||
if !strings.HasPrefix(url, "git://") && !strings.HasSuffix(url, ".git") {
|
||||
url = "git://" + url
|
||||
}
|
||||
gitBranch := strings.Split(url, "#")
|
||||
var cmd *exec.Cmd
|
||||
if len(gitBranch) < 2 {
|
||||
logrus.Debugf("cloning %q to %q", url, dir)
|
||||
cmd = exec.Command("git", "clone", url, dir)
|
||||
} else {
|
||||
logrus.Debugf("cloning repo %q and branch %q to %q", gitBranch[0], gitBranch[1], dir)
|
||||
cmd = exec.Command("git", "clone", "-b", gitBranch[1], gitBranch[0], dir)
|
||||
}
|
||||
return cmd.Run()
|
||||
}
|
||||
|
||||
func downloadToDirectory(url, dir string) error {
|
||||
logrus.Debugf("extracting %q to %q", url, dir)
|
||||
resp, err := http.Get(url)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
if resp.ContentLength == 0 {
|
||||
return errors.Errorf("no contents in %q", url)
|
||||
}
|
||||
if err := chrootarchive.Untar(resp.Body, dir, nil); err != nil {
|
||||
resp1, err := http.Get(url)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer resp1.Body.Close()
|
||||
body, err := ioutil.ReadAll(resp1.Body)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
dockerfile := filepath.Join(dir, "Dockerfile")
|
||||
// Assume this is a Dockerfile
|
||||
if err := ioutils.AtomicWriteFile(dockerfile, body, 0600); err != nil {
|
||||
return errors.Wrapf(err, "Failed to write %q to %q", url, dockerfile)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func stdinToDirectory(dir string) error {
|
||||
logrus.Debugf("extracting stdin to %q", dir)
|
||||
r := bufio.NewReader(os.Stdin)
|
||||
b, err := ioutil.ReadAll(r)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "Failed to read from stdin")
|
||||
}
|
||||
reader := bytes.NewReader(b)
|
||||
if err := chrootarchive.Untar(reader, dir, nil); err != nil {
|
||||
dockerfile := filepath.Join(dir, "Dockerfile")
|
||||
// Assume this is a Dockerfile
|
||||
if err := ioutils.AtomicWriteFile(dockerfile, b, 0600); err != nil {
|
||||
return errors.Wrapf(err, "Failed to write bytes to %q", dockerfile)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
|
9
vendor/github.com/containers/buildah/define/types_unix.go
generated
vendored
Normal file
9
vendor/github.com/containers/buildah/define/types_unix.go
generated
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
// +build darwin linux
|
||||
|
||||
package define
|
||||
|
||||
import (
|
||||
"github.com/opencontainers/runc/libcontainer/devices"
|
||||
)
|
||||
|
||||
type ContainerDevices = []devices.Device
|
6
vendor/github.com/containers/buildah/define/types_unsupported.go
generated
vendored
Normal file
6
vendor/github.com/containers/buildah/define/types_unsupported.go
generated
vendored
Normal file
|
@ -0,0 +1,6 @@
|
|||
// +build !linux,!darwin
|
||||
|
||||
package define
|
||||
|
||||
// ContainerDevices is currently not implemented.
|
||||
type ContainerDevices = []struct{}
|
39
vendor/github.com/containers/buildah/go.mod
generated
vendored
39
vendor/github.com/containers/buildah/go.mod
generated
vendored
|
@ -3,43 +3,40 @@ module github.com/containers/buildah
|
|||
go 1.12
|
||||
|
||||
require (
|
||||
github.com/containerd/containerd v1.4.1 // indirect
|
||||
github.com/containernetworking/cni v0.8.1
|
||||
github.com/containers/common v0.33.4
|
||||
github.com/containers/image/v5 v5.10.2
|
||||
github.com/containers/ocicrypt v1.0.3
|
||||
github.com/containers/storage v1.24.6
|
||||
github.com/containers/common v0.35.3
|
||||
github.com/containers/image/v5 v5.10.5
|
||||
github.com/containers/ocicrypt v1.1.0
|
||||
github.com/containers/storage v1.28.1
|
||||
github.com/docker/distribution v2.7.1+incompatible
|
||||
github.com/docker/go-units v0.4.0
|
||||
github.com/docker/libnetwork v0.8.0-dev.2.0.20190625141545-5a177b73e316
|
||||
github.com/fsouza/go-dockerclient v1.6.6
|
||||
github.com/fsouza/go-dockerclient v1.7.2
|
||||
github.com/ghodss/yaml v1.0.0
|
||||
github.com/hashicorp/go-multierror v1.1.0
|
||||
github.com/hashicorp/go-multierror v1.1.1
|
||||
github.com/ishidawataru/sctp v0.0.0-20191218070446-00ab2ac2db07 // indirect
|
||||
github.com/mattn/go-shellwords v1.0.10
|
||||
github.com/moby/sys/mount v0.1.1 // indirect
|
||||
github.com/moby/term v0.0.0-20200915141129-7f0af18e79f2 // indirect
|
||||
github.com/onsi/ginkgo v1.14.2
|
||||
github.com/onsi/gomega v1.10.4
|
||||
github.com/mattn/go-shellwords v1.0.11
|
||||
github.com/onsi/ginkgo v1.15.2
|
||||
github.com/onsi/gomega v1.11.0
|
||||
github.com/opencontainers/go-digest v1.0.0
|
||||
github.com/opencontainers/image-spec v1.0.2-0.20190823105129-775207bd45b6
|
||||
github.com/opencontainers/runc v1.0.0-rc91
|
||||
github.com/opencontainers/runtime-spec v1.0.3-0.20200710190001-3e4195d92445
|
||||
github.com/opencontainers/runc v1.0.0-rc93
|
||||
github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d
|
||||
github.com/opencontainers/runtime-tools v0.9.0
|
||||
github.com/opencontainers/selinux v1.8.0
|
||||
github.com/openshift/imagebuilder v1.1.8
|
||||
github.com/openshift/imagebuilder v1.2.0
|
||||
github.com/pkg/errors v0.9.1
|
||||
github.com/prometheus/procfs v0.6.0 // indirect
|
||||
github.com/seccomp/libseccomp-golang v0.9.2-0.20200616122406-847368b35ebf
|
||||
github.com/sirupsen/logrus v1.7.0
|
||||
github.com/spf13/cobra v1.1.1
|
||||
github.com/sirupsen/logrus v1.8.1
|
||||
github.com/spf13/cobra v1.1.3
|
||||
github.com/spf13/pflag v1.0.5
|
||||
github.com/stretchr/testify v1.7.0
|
||||
github.com/syndtr/gocapability v0.0.0-20180916011248-d98352740cb2
|
||||
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635
|
||||
go.etcd.io/bbolt v1.3.5
|
||||
golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad
|
||||
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a
|
||||
golang.org/x/sys v0.0.0-20201218084310-7d0127a74742
|
||||
gotest.tools/v3 v3.0.3 // indirect
|
||||
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a
|
||||
golang.org/x/sys v0.0.0-20210216224549-f992740a1bac
|
||||
k8s.io/klog v1.0.0 // indirect
|
||||
)
|
||||
|
||||
|
|
584
vendor/github.com/containers/buildah/go.sum
generated
vendored
584
vendor/github.com/containers/buildah/go.sum
generated
vendored
File diff suppressed because it is too large
Load diff
45
vendor/github.com/containers/buildah/image.go
generated
vendored
45
vendor/github.com/containers/buildah/image.go
generated
vendored
|
@ -14,6 +14,7 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/containers/buildah/copier"
|
||||
"github.com/containers/buildah/define"
|
||||
"github.com/containers/buildah/docker"
|
||||
"github.com/containers/image/v5/docker/reference"
|
||||
"github.com/containers/image/v5/image"
|
||||
|
@ -35,14 +36,16 @@ const (
|
|||
// OCIv1ImageManifest is the MIME type of an OCIv1 image manifest,
|
||||
// suitable for specifying as a value of the PreferredManifestType
|
||||
// member of a CommitOptions structure. It is also the default.
|
||||
OCIv1ImageManifest = v1.MediaTypeImageManifest
|
||||
OCIv1ImageManifest = define.OCIv1ImageManifest
|
||||
// Dockerv2ImageManifest is the MIME type of a Docker v2s2 image
|
||||
// manifest, suitable for specifying as a value of the
|
||||
// PreferredManifestType member of a CommitOptions structure.
|
||||
Dockerv2ImageManifest = manifest.DockerV2Schema2MediaType
|
||||
Dockerv2ImageManifest = define.Dockerv2ImageManifest
|
||||
)
|
||||
|
||||
type containerImageRef struct {
|
||||
fromImageName string
|
||||
fromImageID string
|
||||
store storage.Store
|
||||
compression archive.Compression
|
||||
name reference.Named
|
||||
|
@ -60,7 +63,7 @@ type containerImageRef struct {
|
|||
exporting bool
|
||||
squash bool
|
||||
emptyLayer bool
|
||||
idMappingOptions *IDMappingOptions
|
||||
idMappingOptions *define.IDMappingOptions
|
||||
parent string
|
||||
blobDirectory string
|
||||
preEmptyLayers []v1.History
|
||||
|
@ -143,14 +146,16 @@ func computeLayerMIMEType(what string, layerCompression archive.Compression) (om
|
|||
}
|
||||
|
||||
// Extract the container's whole filesystem as if it were a single layer.
|
||||
func (i *containerImageRef) extractRootfs() (io.ReadCloser, error) {
|
||||
func (i *containerImageRef) extractRootfs() (io.ReadCloser, chan error, error) {
|
||||
var uidMap, gidMap []idtools.IDMap
|
||||
mountPoint, err := i.store.Mount(i.containerID, i.mountLabel)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "error mounting container %q", i.containerID)
|
||||
return nil, nil, errors.Wrapf(err, "error mounting container %q", i.containerID)
|
||||
}
|
||||
pipeReader, pipeWriter := io.Pipe()
|
||||
errChan := make(chan error, 1)
|
||||
go func() {
|
||||
defer close(errChan)
|
||||
if i.idMappingOptions != nil {
|
||||
uidMap, gidMap = convertRuntimeIDMaps(i.idMappingOptions.UIDMap, i.idMappingOptions.GIDMap)
|
||||
}
|
||||
|
@ -159,7 +164,9 @@ func (i *containerImageRef) extractRootfs() (io.ReadCloser, error) {
|
|||
GIDMap: gidMap,
|
||||
}
|
||||
err = copier.Get(mountPoint, mountPoint, copierOptions, []string{"."}, pipeWriter)
|
||||
errChan <- err
|
||||
pipeWriter.Close()
|
||||
|
||||
}()
|
||||
return ioutils.NewReadCloserWrapper(pipeReader, func() error {
|
||||
if err = pipeReader.Close(); err != nil {
|
||||
|
@ -172,7 +179,7 @@ func (i *containerImageRef) extractRootfs() (io.ReadCloser, error) {
|
|||
err = err2
|
||||
}
|
||||
return err
|
||||
}), nil
|
||||
}), errChan, nil
|
||||
}
|
||||
|
||||
// Build fresh copies of the container configuration structures so that we can edit them
|
||||
|
@ -279,7 +286,7 @@ func (i *containerImageRef) NewImageSource(ctx context.Context, sc *types.System
|
|||
logrus.Debugf("layer list: %q", layers)
|
||||
|
||||
// Make a temporary directory to hold blobs.
|
||||
path, err := ioutil.TempDir(os.TempDir(), Package)
|
||||
path, err := ioutil.TempDir(os.TempDir(), define.Package)
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "error creating temporary directory to hold layer blobs")
|
||||
}
|
||||
|
@ -354,9 +361,10 @@ func (i *containerImageRef) NewImageSource(ctx context.Context, sc *types.System
|
|||
Compression: &noCompression,
|
||||
}
|
||||
var rc io.ReadCloser
|
||||
var errChan chan error
|
||||
if i.squash {
|
||||
// Extract the root filesystem as a single layer.
|
||||
rc, err = i.extractRootfs()
|
||||
rc, errChan, err = i.extractRootfs()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
@ -414,6 +422,14 @@ func (i *containerImageRef) NewImageSource(ctx context.Context, sc *types.System
|
|||
writeCloser.Close()
|
||||
layerFile.Close()
|
||||
rc.Close()
|
||||
|
||||
if errChan != nil {
|
||||
err = <-errChan
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "error storing %s to file", what)
|
||||
}
|
||||
|
@ -483,11 +499,16 @@ func (i *containerImageRef) NewImageSource(ctx context.Context, sc *types.System
|
|||
if i.created != nil {
|
||||
created = (*i.created).UTC()
|
||||
}
|
||||
comment := i.historyComment
|
||||
// Add a comment for which base image is being used
|
||||
if strings.Contains(i.parent, i.fromImageID) && i.fromImageName != i.fromImageID {
|
||||
comment += "FROM " + i.fromImageName
|
||||
}
|
||||
onews := v1.History{
|
||||
Created: &created,
|
||||
CreatedBy: i.createdBy,
|
||||
Author: oimage.Author,
|
||||
Comment: i.historyComment,
|
||||
Comment: comment,
|
||||
EmptyLayer: i.emptyLayer,
|
||||
}
|
||||
oimage.History = append(oimage.History, onews)
|
||||
|
@ -495,7 +516,7 @@ func (i *containerImageRef) NewImageSource(ctx context.Context, sc *types.System
|
|||
Created: created,
|
||||
CreatedBy: i.createdBy,
|
||||
Author: dimage.Author,
|
||||
Comment: i.historyComment,
|
||||
Comment: comment,
|
||||
EmptyLayer: i.emptyLayer,
|
||||
}
|
||||
dimage.History = append(dimage.History, dnews)
|
||||
|
@ -697,7 +718,7 @@ func (b *Builder) makeImageRef(options CommitOptions, exporting bool) (types.Ima
|
|||
}
|
||||
manifestType := options.PreferredManifestType
|
||||
if manifestType == "" {
|
||||
manifestType = OCIv1ImageManifest
|
||||
manifestType = define.OCIv1ImageManifest
|
||||
}
|
||||
oconfig, err := json.Marshal(&b.OCIv1)
|
||||
if err != nil {
|
||||
|
@ -729,6 +750,8 @@ func (b *Builder) makeImageRef(options CommitOptions, exporting bool) (types.Ima
|
|||
}
|
||||
|
||||
ref := &containerImageRef{
|
||||
fromImageName: b.FromImage,
|
||||
fromImageID: b.FromImageID,
|
||||
store: b.store,
|
||||
compression: options.Compression,
|
||||
name: name,
|
||||
|
|
181
vendor/github.com/containers/buildah/imagebuildah/build.go
generated
vendored
181
vendor/github.com/containers/buildah/imagebuildah/build.go
generated
vendored
|
@ -11,13 +11,10 @@ import (
|
|||
"os/exec"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/containers/buildah"
|
||||
"github.com/containers/buildah/define"
|
||||
"github.com/containers/common/pkg/config"
|
||||
"github.com/containers/image/v5/docker/reference"
|
||||
"github.com/containers/image/v5/types"
|
||||
encconfig "github.com/containers/ocicrypt/config"
|
||||
"github.com/containers/storage"
|
||||
"github.com/containers/storage/pkg/archive"
|
||||
specs "github.com/opencontainers/runtime-spec/specs-go"
|
||||
|
@ -28,10 +25,10 @@ import (
|
|||
)
|
||||
|
||||
const (
|
||||
PullIfMissing = buildah.PullIfMissing
|
||||
PullAlways = buildah.PullAlways
|
||||
PullIfNewer = buildah.PullIfNewer
|
||||
PullNever = buildah.PullNever
|
||||
PullIfMissing = define.PullIfMissing
|
||||
PullAlways = define.PullAlways
|
||||
PullIfNewer = define.PullIfNewer
|
||||
PullNever = define.PullNever
|
||||
|
||||
Gzip = archive.Gzip
|
||||
Bzip2 = archive.Bzip2
|
||||
|
@ -43,161 +40,12 @@ const (
|
|||
// Mount is a mountpoint for the build container.
|
||||
type Mount specs.Mount
|
||||
|
||||
// BuildOptions can be used to alter how an image is built.
|
||||
type BuildOptions struct {
|
||||
// ContextDirectory is the default source location for COPY and ADD
|
||||
// commands.
|
||||
ContextDirectory string
|
||||
// PullPolicy controls whether or not we pull images. It should be one
|
||||
// of PullIfMissing, PullAlways, PullIfNewer, or PullNever.
|
||||
PullPolicy buildah.PullPolicy
|
||||
// Registry is a value which is prepended to the image's name, if it
|
||||
// needs to be pulled and the image name alone can not be resolved to a
|
||||
// reference to a source image. No separator is implicitly added.
|
||||
Registry string
|
||||
// IgnoreUnrecognizedInstructions tells us to just log instructions we
|
||||
// don't recognize, and try to keep going.
|
||||
IgnoreUnrecognizedInstructions bool
|
||||
// Manifest Name to which the image will be added.
|
||||
Manifest string
|
||||
// Quiet tells us whether or not to announce steps as we go through them.
|
||||
Quiet bool
|
||||
// Isolation controls how Run() runs things.
|
||||
Isolation buildah.Isolation
|
||||
// Runtime is the name of the command to run for RUN instructions when
|
||||
// Isolation is either IsolationDefault or IsolationOCI. It should
|
||||
// accept the same arguments and flags that runc does.
|
||||
Runtime string
|
||||
// RuntimeArgs adds global arguments for the runtime.
|
||||
RuntimeArgs []string
|
||||
// TransientMounts is a list of mounts that won't be kept in the image.
|
||||
TransientMounts []string
|
||||
// Compression specifies the type of compression which is applied to
|
||||
// layer blobs. The default is to not use compression, but
|
||||
// archive.Gzip is recommended.
|
||||
Compression archive.Compression
|
||||
// Arguments which can be interpolated into Dockerfiles
|
||||
Args map[string]string
|
||||
// Name of the image to write to.
|
||||
Output string
|
||||
// Additional tags to add to the image that we write, if we know of a
|
||||
// way to add them.
|
||||
AdditionalTags []string
|
||||
// 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 nil) by default.
|
||||
Log func(format string, args ...interface{})
|
||||
// In is connected to stdin for RUN instructions.
|
||||
In io.Reader
|
||||
// Out is a place where non-error log messages are sent.
|
||||
Out io.Writer
|
||||
// Err is a place where error log messages should be sent.
|
||||
Err io.Writer
|
||||
// SignaturePolicyPath specifies an override location for the signature
|
||||
// policy which should be used for verifying the new image as it is
|
||||
// being written. Except in specific circumstances, no value should be
|
||||
// specified, indicating that the shared, system-wide default policy
|
||||
// should be used.
|
||||
SignaturePolicyPath string
|
||||
// ReportWriter is an io.Writer which will be used to report the
|
||||
// progress of the (possible) pulling of the source image and the
|
||||
// writing of the new image.
|
||||
ReportWriter io.Writer
|
||||
// OutputFormat is the format of the output image's manifest and
|
||||
// configuration data.
|
||||
// Accepted values are buildah.OCIv1ImageManifest and buildah.Dockerv2ImageManifest.
|
||||
OutputFormat string
|
||||
// SystemContext holds parameters used for authentication.
|
||||
SystemContext *types.SystemContext
|
||||
// NamespaceOptions controls how we set up namespaces processes that we
|
||||
// might need when handling RUN instructions.
|
||||
NamespaceOptions []buildah.NamespaceOption
|
||||
// ConfigureNetwork controls whether or not network interfaces and
|
||||
// routing are configured for a new network namespace (i.e., when not
|
||||
// joining another's namespace and not just using the host's
|
||||
// namespace), effectively deciding whether or not the process has a
|
||||
// usable network.
|
||||
ConfigureNetwork buildah.NetworkConfigurationPolicy
|
||||
// CNIPluginPath is the location of CNI plugin helpers, if they should be
|
||||
// run from a location other than the default location.
|
||||
CNIPluginPath string
|
||||
// CNIConfigDir is the location of CNI configuration files, if the files in
|
||||
// the default configuration directory shouldn't be used.
|
||||
CNIConfigDir string
|
||||
// ID mapping options to use if we're setting up our own user namespace
|
||||
// when handling RUN instructions.
|
||||
IDMappingOptions *buildah.IDMappingOptions
|
||||
// AddCapabilities is a list of capabilities to add to the default set when
|
||||
// handling RUN instructions.
|
||||
AddCapabilities []string
|
||||
// DropCapabilities is a list of capabilities to remove from the default set
|
||||
// when handling RUN instructions. If a capability appears in both lists, it
|
||||
// will be dropped.
|
||||
DropCapabilities []string
|
||||
// CommonBuildOpts is *required*.
|
||||
CommonBuildOpts *buildah.CommonBuildOptions
|
||||
// DefaultMountsFilePath is the file path holding the mounts to be mounted in "host-path:container-path" format
|
||||
DefaultMountsFilePath string
|
||||
// IIDFile tells the builder to write the image ID to the specified file
|
||||
IIDFile string
|
||||
// Squash tells the builder to produce an image with a single layer
|
||||
// instead of with possibly more than one layer.
|
||||
Squash bool
|
||||
// Labels metadata for an image
|
||||
Labels []string
|
||||
// Annotation metadata for an image
|
||||
Annotations []string
|
||||
// OnBuild commands to be run by images based on this image
|
||||
OnBuild []string
|
||||
// Layers tells the builder to create a cache of images for each step in the Dockerfile
|
||||
Layers bool
|
||||
// NoCache tells the builder to build the image from scratch without checking for a cache.
|
||||
// It creates a new set of cached images for the build.
|
||||
NoCache bool
|
||||
// RemoveIntermediateCtrs tells the builder whether to remove intermediate containers used
|
||||
// during the build process. Default is true.
|
||||
RemoveIntermediateCtrs bool
|
||||
// ForceRmIntermediateCtrs tells the builder to remove all intermediate containers even if
|
||||
// the build was unsuccessful.
|
||||
ForceRmIntermediateCtrs bool
|
||||
// BlobDirectory is a directory which we'll use for caching layer blobs.
|
||||
BlobDirectory string
|
||||
// Target the targeted FROM in the Dockerfile to build.
|
||||
Target string
|
||||
// Devices are the additional devices to add to the containers.
|
||||
Devices []string
|
||||
// SignBy is the fingerprint of a GPG key to use for signing images.
|
||||
SignBy string
|
||||
// Architecture specifies the target architecture of the image to be built.
|
||||
Architecture string
|
||||
// Timestamp sets the created timestamp to the specified time, allowing
|
||||
// for deterministic, content-addressable builds.
|
||||
Timestamp *time.Time
|
||||
// OS is the specifies the operating system of the image to be built.
|
||||
OS string
|
||||
// MaxPullPushRetries is the maximum number of attempts we'll make to pull or push any one
|
||||
// image from or to an external registry if the first attempt fails.
|
||||
MaxPullPushRetries int
|
||||
// PullPushRetryDelay is how long to wait before retrying a pull or push attempt.
|
||||
PullPushRetryDelay time.Duration
|
||||
// OciDecryptConfig contains the config that can be used to decrypt an image if it is
|
||||
// encrypted if non-nil. If nil, it does not attempt to decrypt an image.
|
||||
OciDecryptConfig *encconfig.DecryptConfig
|
||||
// Jobs is the number of stages to run in parallel. If not specified it defaults to 1.
|
||||
Jobs *int
|
||||
// LogRusage logs resource usage for each step.
|
||||
LogRusage bool
|
||||
// Excludes is a list of excludes to be used instead of the .dockerignore file.
|
||||
Excludes []string
|
||||
// From is the image name to use to replace the value specified in the first
|
||||
// FROM instruction in the Containerfile
|
||||
From string
|
||||
}
|
||||
type BuildOptions = define.BuildOptions
|
||||
|
||||
// BuildDockerfiles parses a set of one or more Dockerfiles (which may be
|
||||
// URLs), creates a new Executor, and then runs Prepare/Execute/Commit/Delete
|
||||
// over the entire set of instructions.
|
||||
func BuildDockerfiles(ctx context.Context, store storage.Store, options BuildOptions, paths ...string) (string, reference.Canonical, error) {
|
||||
func BuildDockerfiles(ctx context.Context, store storage.Store, options define.BuildOptions, paths ...string) (string, reference.Canonical, error) {
|
||||
if len(paths) == 0 {
|
||||
return "", nil, errors.Errorf("error building: no dockerfiles specified")
|
||||
}
|
||||
|
@ -236,12 +84,21 @@ func BuildDockerfiles(ctx context.Context, store storage.Store, options BuildOpt
|
|||
return "", nil, err
|
||||
}
|
||||
|
||||
var contents *os.File
|
||||
// If given a directory, add '/Dockerfile' to it.
|
||||
if dinfo.Mode().IsDir() {
|
||||
dfile = filepath.Join(dfile, "Dockerfile")
|
||||
for _, file := range []string{"Containerfile", "Dockerfile"} {
|
||||
f := filepath.Join(dfile, file)
|
||||
logrus.Debugf("reading local %q", f)
|
||||
contents, err = os.Open(f)
|
||||
if err == nil {
|
||||
break
|
||||
}
|
||||
}
|
||||
} else {
|
||||
contents, err = os.Open(dfile)
|
||||
}
|
||||
logrus.Debugf("reading local Dockerfile %q", dfile)
|
||||
contents, err := os.Open(dfile)
|
||||
|
||||
if err != nil {
|
||||
return "", nil, err
|
||||
}
|
||||
|
|
25
vendor/github.com/containers/buildah/imagebuildah/executor.go
generated
vendored
25
vendor/github.com/containers/buildah/imagebuildah/executor.go
generated
vendored
|
@ -13,6 +13,7 @@ import (
|
|||
"time"
|
||||
|
||||
"github.com/containers/buildah"
|
||||
"github.com/containers/buildah/define"
|
||||
"github.com/containers/buildah/pkg/parse"
|
||||
"github.com/containers/buildah/util"
|
||||
"github.com/containers/common/pkg/config"
|
||||
|
@ -56,7 +57,7 @@ type Executor struct {
|
|||
stages map[string]*StageExecutor
|
||||
store storage.Store
|
||||
contextDir string
|
||||
pullPolicy buildah.PullPolicy
|
||||
pullPolicy define.PullPolicy
|
||||
registry string
|
||||
ignoreUnrecognizedInstructions bool
|
||||
quiet bool
|
||||
|
@ -74,13 +75,13 @@ type Executor struct {
|
|||
signaturePolicyPath string
|
||||
systemContext *types.SystemContext
|
||||
reportWriter io.Writer
|
||||
isolation buildah.Isolation
|
||||
namespaceOptions []buildah.NamespaceOption
|
||||
configureNetwork buildah.NetworkConfigurationPolicy
|
||||
isolation define.Isolation
|
||||
namespaceOptions []define.NamespaceOption
|
||||
configureNetwork define.NetworkConfigurationPolicy
|
||||
cniPluginPath string
|
||||
cniConfigDir string
|
||||
idmappingOptions *buildah.IDMappingOptions
|
||||
commonBuildOptions *buildah.CommonBuildOptions
|
||||
idmappingOptions *define.IDMappingOptions
|
||||
commonBuildOptions *define.CommonBuildOptions
|
||||
defaultMountsFilePath string
|
||||
iidfile string
|
||||
squash bool
|
||||
|
@ -98,7 +99,7 @@ type Executor struct {
|
|||
excludes []string
|
||||
unusedArgs map[string]struct{}
|
||||
capabilities []string
|
||||
devices buildah.ContainerDevices
|
||||
devices define.ContainerDevices
|
||||
signBy string
|
||||
architecture string
|
||||
timestamp *time.Time
|
||||
|
@ -126,7 +127,7 @@ type imageTypeAndHistoryAndDiffIDs struct {
|
|||
}
|
||||
|
||||
// NewExecutor creates a new instance of the imagebuilder.Executor interface.
|
||||
func NewExecutor(store storage.Store, options BuildOptions, mainNode *parser.Node) (*Executor, error) {
|
||||
func NewExecutor(store storage.Store, options define.BuildOptions, mainNode *parser.Node) (*Executor, error) {
|
||||
defaultContainerConfig, err := config.Default()
|
||||
if err != nil {
|
||||
return nil, errors.Wrapf(err, "failed to get container config")
|
||||
|
@ -144,7 +145,7 @@ func NewExecutor(store storage.Store, options BuildOptions, mainNode *parser.Nod
|
|||
return nil, err
|
||||
}
|
||||
|
||||
devices := buildah.ContainerDevices{}
|
||||
devices := define.ContainerDevices{}
|
||||
for _, device := range append(defaultContainerConfig.Containers.Devices, options.Devices...) {
|
||||
dev, err := parse.DeviceFromPath(device)
|
||||
if err != nil {
|
||||
|
@ -419,7 +420,8 @@ func (b *Executor) buildStage(ctx context.Context, cleanupStages map[int]*StageE
|
|||
// build and b.forceRmIntermediateCtrs is set, make sure we
|
||||
// remove the intermediate/build containers, regardless of
|
||||
// whether or not the stage's build fails.
|
||||
if b.forceRmIntermediateCtrs || !b.layers {
|
||||
// Skip cleanup if the stage has no instructions.
|
||||
if b.forceRmIntermediateCtrs || !b.layers && len(stage.Node.Children) > 0 {
|
||||
b.stagesLock.Lock()
|
||||
cleanupStages[stage.Position] = stageExecutor
|
||||
b.stagesLock.Unlock()
|
||||
|
@ -433,7 +435,8 @@ func (b *Executor) buildStage(ctx context.Context, cleanupStages map[int]*StageE
|
|||
// The stage succeeded, so remove its build container if we're
|
||||
// told to delete successful intermediate/build containers for
|
||||
// multi-layered builds.
|
||||
if b.removeIntermediateCtrs {
|
||||
// Skip cleanup if the stage has no instructions.
|
||||
if b.removeIntermediateCtrs && len(stage.Node.Children) > 0 {
|
||||
b.stagesLock.Lock()
|
||||
cleanupStages[stage.Position] = stageExecutor
|
||||
b.stagesLock.Unlock()
|
||||
|
|
71
vendor/github.com/containers/buildah/imagebuildah/stage_executor.go
generated
vendored
71
vendor/github.com/containers/buildah/imagebuildah/stage_executor.go
generated
vendored
|
@ -13,6 +13,7 @@ import (
|
|||
|
||||
"github.com/containers/buildah"
|
||||
"github.com/containers/buildah/copier"
|
||||
"github.com/containers/buildah/define"
|
||||
buildahdocker "github.com/containers/buildah/docker"
|
||||
"github.com/containers/buildah/pkg/rusage"
|
||||
"github.com/containers/buildah/util"
|
||||
|
@ -27,6 +28,7 @@ import (
|
|||
docker "github.com/fsouza/go-dockerclient"
|
||||
digest "github.com/opencontainers/go-digest"
|
||||
v1 "github.com/opencontainers/image-spec/specs-go/v1"
|
||||
"github.com/opencontainers/runtime-spec/specs-go"
|
||||
"github.com/openshift/imagebuilder"
|
||||
"github.com/openshift/imagebuilder/dockerfile/parser"
|
||||
"github.com/pkg/errors"
|
||||
|
@ -184,7 +186,7 @@ func (s *StageExecutor) volumeCacheInvalidate(path string) error {
|
|||
|
||||
// Save the contents of each of the executor's list of volumes for which we
|
||||
// don't already have a cache file.
|
||||
func (s *StageExecutor) volumeCacheSave() error {
|
||||
func (s *StageExecutor) volumeCacheSaveVFS() error {
|
||||
for cachedPath, cacheFile := range s.volumeCache {
|
||||
archivedPath := filepath.Join(s.mountPoint, cachedPath)
|
||||
_, err := os.Stat(cacheFile)
|
||||
|
@ -218,7 +220,7 @@ func (s *StageExecutor) volumeCacheSave() error {
|
|||
}
|
||||
|
||||
// Restore the contents of each of the executor's list of volumes.
|
||||
func (s *StageExecutor) volumeCacheRestore() error {
|
||||
func (s *StageExecutor) volumeCacheRestoreVFS() (err error) {
|
||||
for cachedPath, cacheFile := range s.volumeCache {
|
||||
archivedPath := filepath.Join(s.mountPoint, cachedPath)
|
||||
logrus.Debugf("restoring contents of volume %q from %q", archivedPath, cacheFile)
|
||||
|
@ -258,6 +260,45 @@ func (s *StageExecutor) volumeCacheRestore() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// Save the contents of each of the executor's list of volumes for which we
|
||||
// don't already have a cache file.
|
||||
func (s *StageExecutor) volumeCacheSaveOverlay() (mounts []specs.Mount, err error) {
|
||||
for cachedPath := range s.volumeCache {
|
||||
volumePath := filepath.Join(s.mountPoint, cachedPath)
|
||||
mount := specs.Mount{
|
||||
Source: volumePath,
|
||||
Destination: cachedPath,
|
||||
Options: []string{"O", "private"},
|
||||
}
|
||||
mounts = append(mounts, mount)
|
||||
}
|
||||
return mounts, nil
|
||||
}
|
||||
|
||||
// Reset the contents of each of the executor's list of volumes.
|
||||
func (s *StageExecutor) volumeCacheRestoreOverlay() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// Save the contents of each of the executor's list of volumes for which we
|
||||
// don't already have a cache file.
|
||||
func (s *StageExecutor) volumeCacheSave() (mounts []specs.Mount, err error) {
|
||||
switch s.executor.store.GraphDriverName() {
|
||||
case "overlay":
|
||||
return s.volumeCacheSaveOverlay()
|
||||
}
|
||||
return nil, s.volumeCacheSaveVFS()
|
||||
}
|
||||
|
||||
// Reset the contents of each of the executor's list of volumes.
|
||||
func (s *StageExecutor) volumeCacheRestore() error {
|
||||
switch s.executor.store.GraphDriverName() {
|
||||
case "overlay":
|
||||
return s.volumeCacheRestoreOverlay()
|
||||
}
|
||||
return s.volumeCacheRestoreVFS()
|
||||
}
|
||||
|
||||
// Copy copies data into the working tree. The "Download" field is how
|
||||
// imagebuilder tells us the instruction was "ADD" and not "COPY".
|
||||
func (s *StageExecutor) Copy(excludes []string, copies ...imagebuilder.Copy) error {
|
||||
|
@ -275,7 +316,7 @@ func (s *StageExecutor) Copy(excludes []string, copies ...imagebuilder.Copy) err
|
|||
// The From field says to read the content from another
|
||||
// container. Update the ID mappings and
|
||||
// all-content-comes-from-below-this-directory value.
|
||||
var idMappingOptions *buildah.IDMappingOptions
|
||||
var idMappingOptions *define.IDMappingOptions
|
||||
var copyExcludes []string
|
||||
stripSetuid := false
|
||||
stripSetgid := false
|
||||
|
@ -321,6 +362,7 @@ func (s *StageExecutor) Copy(excludes []string, copies ...imagebuilder.Copy) err
|
|||
}
|
||||
}
|
||||
options := buildah.AddAndCopyOptions{
|
||||
Chmod: copy.Chmod,
|
||||
Chown: copy.Chown,
|
||||
PreserveOwnership: preserveOwnership,
|
||||
ContextDir: contextDir,
|
||||
|
@ -378,16 +420,18 @@ func (s *StageExecutor) Run(run imagebuilder.Run, config docker.Config) error {
|
|||
|
||||
args := run.Args
|
||||
if run.Shell {
|
||||
if len(config.Shell) > 0 && s.builder.Format == buildah.Dockerv2ImageManifest {
|
||||
if len(config.Shell) > 0 && s.builder.Format == define.Dockerv2ImageManifest {
|
||||
args = append(config.Shell, args...)
|
||||
} else {
|
||||
args = append([]string{"/bin/sh", "-c"}, args...)
|
||||
}
|
||||
}
|
||||
if err := s.volumeCacheSave(); err != nil {
|
||||
mounts, err := s.volumeCacheSave()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err := s.builder.Run(args, options)
|
||||
options.Mounts = append(options.Mounts, mounts...)
|
||||
err = s.builder.Run(args, options)
|
||||
if err2 := s.volumeCacheRestore(); err2 != nil {
|
||||
if err == nil {
|
||||
return err2
|
||||
|
@ -722,15 +766,15 @@ func (s *StageExecutor) Execute(ctx context.Context, base string) (imgID string,
|
|||
}
|
||||
|
||||
// Check if there's a --from if the step command is COPY.
|
||||
// Also check the chown flag for validity.
|
||||
// Also check the chmod and the chown flags for validity.
|
||||
for _, flag := range step.Flags {
|
||||
command := strings.ToUpper(step.Command)
|
||||
// chown and from flags should have an '=' sign, '--chown=' or '--from='
|
||||
if command == "COPY" && (flag == "--chown" || flag == "--from") {
|
||||
return "", nil, errors.Errorf("COPY only supports the --chown=<uid:gid> and the --from=<image|stage> flags")
|
||||
// chmod, chown and from flags should have an '=' sign, '--chmod=', '--chown=' or '--from='
|
||||
if command == "COPY" && (flag == "--chmod" || flag == "--chown" || flag == "--from") {
|
||||
return "", nil, errors.Errorf("COPY only supports the --chmod=<permissions> --chown=<uid:gid> and the --from=<image|stage> flags")
|
||||
}
|
||||
if command == "ADD" && flag == "--chown" {
|
||||
return "", nil, errors.Errorf("ADD only supports the --chown=<uid:gid> flag")
|
||||
if command == "ADD" && (flag == "--chmod" || flag == "--chown") {
|
||||
return "", nil, errors.Errorf("ADD only supports the --chmod=<permissions> and the --chown=<uid:gid> flags")
|
||||
}
|
||||
if strings.Contains(flag, "--from") && command == "COPY" {
|
||||
arr := strings.Split(flag, "=")
|
||||
|
@ -1234,7 +1278,7 @@ func (s *StageExecutor) commit(ctx context.Context, createdBy string, emptyLayer
|
|||
s.builder.SetHealthcheck(nil)
|
||||
}
|
||||
s.builder.ClearLabels()
|
||||
s.builder.SetLabel(buildah.BuilderIdentityAnnotation, buildah.Version)
|
||||
|
||||
for k, v := range config.Labels {
|
||||
s.builder.SetLabel(k, v)
|
||||
}
|
||||
|
@ -1246,6 +1290,7 @@ func (s *StageExecutor) commit(ctx context.Context, createdBy string, emptyLayer
|
|||
s.builder.SetLabel(label[0], "")
|
||||
}
|
||||
}
|
||||
s.builder.SetLabel(buildah.BuilderIdentityAnnotation, define.Version)
|
||||
for _, annotationSpec := range s.executor.annotations {
|
||||
annotation := strings.SplitN(annotationSpec, "=", 2)
|
||||
if len(annotation) > 1 {
|
||||
|
|
141
vendor/github.com/containers/buildah/imagebuildah/util.go
generated
vendored
141
vendor/github.com/containers/buildah/imagebuildah/util.go
generated
vendored
|
@ -1,151 +1,10 @@
|
|||
package imagebuildah
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"bytes"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
|
||||
"github.com/containers/buildah"
|
||||
"github.com/containers/storage/pkg/chrootarchive"
|
||||
"github.com/containers/storage/pkg/ioutils"
|
||||
"github.com/opencontainers/runtime-spec/specs-go"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/sirupsen/logrus"
|
||||
)
|
||||
|
||||
func cloneToDirectory(url, dir string) error {
|
||||
if !strings.HasPrefix(url, "git://") && !strings.HasSuffix(url, ".git") {
|
||||
url = "git://" + url
|
||||
}
|
||||
gitBranch := strings.Split(url, "#")
|
||||
var cmd *exec.Cmd
|
||||
if len(gitBranch) < 2 {
|
||||
logrus.Debugf("cloning %q to %q", url, dir)
|
||||
cmd = exec.Command("git", "clone", url, dir)
|
||||
} else {
|
||||
logrus.Debugf("cloning repo %q and branch %q to %q", gitBranch[0], gitBranch[1], dir)
|
||||
cmd = exec.Command("git", "clone", "-b", gitBranch[1], gitBranch[0], dir)
|
||||
}
|
||||
return cmd.Run()
|
||||
}
|
||||
|
||||
func downloadToDirectory(url, dir string) error {
|
||||
logrus.Debugf("extracting %q to %q", url, dir)
|
||||
resp, err := http.Get(url)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer resp.Body.Close()
|
||||
if resp.ContentLength == 0 {
|
||||
return errors.Errorf("no contents in %q", url)
|
||||
}
|
||||
if err := chrootarchive.Untar(resp.Body, dir, nil); err != nil {
|
||||
resp1, err := http.Get(url)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
defer resp1.Body.Close()
|
||||
body, err := ioutil.ReadAll(resp1.Body)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
dockerfile := filepath.Join(dir, "Dockerfile")
|
||||
// Assume this is a Dockerfile
|
||||
if err := ioutils.AtomicWriteFile(dockerfile, body, 0600); err != nil {
|
||||
return errors.Wrapf(err, "Failed to write %q to %q", url, dockerfile)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func stdinToDirectory(dir string) error {
|
||||
logrus.Debugf("extracting stdin to %q", dir)
|
||||
r := bufio.NewReader(os.Stdin)
|
||||
b, err := ioutil.ReadAll(r)
|
||||
if err != nil {
|
||||
return errors.Wrapf(err, "Failed to read from stdin")
|
||||
}
|
||||
reader := bytes.NewReader(b)
|
||||
if err := chrootarchive.Untar(reader, dir, nil); err != nil {
|
||||
dockerfile := filepath.Join(dir, "Dockerfile")
|
||||
// Assume this is a Dockerfile
|
||||
if err := ioutils.AtomicWriteFile(dockerfile, b, 0600); err != nil {
|
||||
return errors.Wrapf(err, "Failed to write bytes to %q", dockerfile)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// TempDirForURL checks if the passed-in string looks like a URL or -. If it is,
|
||||
// TempDirForURL creates a temporary directory, arranges for its contents to be
|
||||
// the contents of that URL, and returns the temporary directory's path, along
|
||||
// with the name of a subdirectory which should be used as the build context
|
||||
// (which may be empty or "."). Removal of the temporary directory is the
|
||||
// responsibility of the caller. If the string doesn't look like a URL,
|
||||
// TempDirForURL returns empty strings and a nil error code.
|
||||
func TempDirForURL(dir, prefix, url string) (name string, subdir string, err error) {
|
||||
if !strings.HasPrefix(url, "http://") &&
|
||||
!strings.HasPrefix(url, "https://") &&
|
||||
!strings.HasPrefix(url, "git://") &&
|
||||
!strings.HasPrefix(url, "github.com/") &&
|
||||
url != "-" {
|
||||
return "", "", nil
|
||||
}
|
||||
name, err = ioutil.TempDir(dir, prefix)
|
||||
if err != nil {
|
||||
return "", "", errors.Wrapf(err, "error creating temporary directory for %q", url)
|
||||
}
|
||||
if strings.HasPrefix(url, "git://") || strings.HasSuffix(url, ".git") {
|
||||
err = cloneToDirectory(url, name)
|
||||
if err != nil {
|
||||
if err2 := os.RemoveAll(name); err2 != nil {
|
||||
logrus.Debugf("error removing temporary directory %q: %v", name, err2)
|
||||
}
|
||||
return "", "", err
|
||||
}
|
||||
return name, "", nil
|
||||
}
|
||||
if strings.HasPrefix(url, "github.com/") {
|
||||
ghurl := url
|
||||
url = fmt.Sprintf("https://%s/archive/master.tar.gz", ghurl)
|
||||
logrus.Debugf("resolving url %q to %q", ghurl, url)
|
||||
subdir = path.Base(ghurl) + "-master"
|
||||
}
|
||||
if strings.HasPrefix(url, "http://") || strings.HasPrefix(url, "https://") {
|
||||
err = downloadToDirectory(url, name)
|
||||
if err != nil {
|
||||
if err2 := os.RemoveAll(name); err2 != nil {
|
||||
logrus.Debugf("error removing temporary directory %q: %v", name, err2)
|
||||
}
|
||||
return "", subdir, err
|
||||
}
|
||||
return name, subdir, nil
|
||||
}
|
||||
if url == "-" {
|
||||
err = stdinToDirectory(name)
|
||||
if err != nil {
|
||||
if err2 := os.RemoveAll(name); err2 != nil {
|
||||
logrus.Debugf("error removing temporary directory %q: %v", name, err2)
|
||||
}
|
||||
return "", subdir, err
|
||||
}
|
||||
logrus.Debugf("Build context is at %q", name)
|
||||
return name, subdir, nil
|
||||
}
|
||||
logrus.Debugf("don't know how to retrieve %q", url)
|
||||
if err2 := os.Remove(name); err2 != nil {
|
||||
logrus.Debugf("error removing temporary directory %q: %v", name, err2)
|
||||
}
|
||||
return "", "", errors.Errorf("unreachable code reached")
|
||||
}
|
||||
|
||||
// InitReexec is a wrapper for buildah.InitReexec(). It should be called at
|
||||
// the start of main(), and if it returns true, main() should return
|
||||
// immediately.
|
||||
|
|
3
vendor/github.com/containers/buildah/import.go
generated
vendored
3
vendor/github.com/containers/buildah/import.go
generated
vendored
|
@ -3,6 +3,7 @@ package buildah
|
|||
import (
|
||||
"context"
|
||||
|
||||
"github.com/containers/buildah/define"
|
||||
"github.com/containers/buildah/docker"
|
||||
"github.com/containers/buildah/util"
|
||||
"github.com/containers/image/v5/image"
|
||||
|
@ -93,7 +94,7 @@ func importBuilderDataFromImage(ctx context.Context, store storage.Store, system
|
|||
ImageAnnotations: map[string]string{},
|
||||
ImageCreatedBy: "",
|
||||
NamespaceOptions: defaultNamespaceOptions,
|
||||
IDMappingOptions: IDMappingOptions{
|
||||
IDMappingOptions: define.IDMappingOptions{
|
||||
HostUIDMapping: len(uidmap) == 0,
|
||||
HostGIDMapping: len(uidmap) == 0,
|
||||
UIDMap: uidmap,
|
||||
|
|
47
vendor/github.com/containers/buildah/new.go
generated
vendored
47
vendor/github.com/containers/buildah/new.go
generated
vendored
|
@ -4,8 +4,10 @@ import (
|
|||
"context"
|
||||
"fmt"
|
||||
"math/rand"
|
||||
"runtime"
|
||||
"strings"
|
||||
|
||||
"github.com/containers/buildah/define"
|
||||
"github.com/containers/buildah/util"
|
||||
"github.com/containers/image/v5/docker"
|
||||
"github.com/containers/image/v5/image"
|
||||
|
@ -86,7 +88,7 @@ func imageNamePrefix(imageName string) string {
|
|||
return prefix
|
||||
}
|
||||
|
||||
func newContainerIDMappingOptions(idmapOptions *IDMappingOptions) storage.IDMappingOptions {
|
||||
func newContainerIDMappingOptions(idmapOptions *define.IDMappingOptions) storage.IDMappingOptions {
|
||||
var options storage.IDMappingOptions
|
||||
if idmapOptions != nil {
|
||||
options.HostUIDMapping = idmapOptions.HostUIDMapping
|
||||
|
@ -126,6 +128,34 @@ func resolveLocalImage(systemContext *types.SystemContext, store storage.Store,
|
|||
return nil, "", "", nil, nil
|
||||
}
|
||||
|
||||
func imageMatch(ctx context.Context, ref types.ImageReference, systemContext *types.SystemContext) bool {
|
||||
img, err := ref.NewImage(ctx, systemContext)
|
||||
if err != nil {
|
||||
logrus.Warnf("Failed to create newImage in imageMatch: %v", err)
|
||||
return false
|
||||
}
|
||||
defer img.Close()
|
||||
data, err := img.Inspect(ctx)
|
||||
if err != nil {
|
||||
logrus.Warnf("Failed to inspect img %s: %v", ref, err)
|
||||
return false
|
||||
}
|
||||
os := systemContext.OSChoice
|
||||
if os == "" {
|
||||
os = runtime.GOOS
|
||||
}
|
||||
arch := systemContext.ArchitectureChoice
|
||||
if arch == "" {
|
||||
arch = runtime.GOARCH
|
||||
}
|
||||
if os == data.Os && arch == data.Architecture {
|
||||
if systemContext.VariantChoice == "" || systemContext.VariantChoice == data.Variant {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func resolveImage(ctx context.Context, systemContext *types.SystemContext, store storage.Store, options BuilderOptions) (types.ImageReference, string, *storage.Image, error) {
|
||||
if systemContext == nil {
|
||||
systemContext = &types.SystemContext{}
|
||||
|
@ -157,11 +187,11 @@ func resolveImage(ctx context.Context, systemContext *types.SystemContext, store
|
|||
return localImageRef, localImageRef.Transport().Name(), localImage, nil
|
||||
}
|
||||
|
||||
if options.PullPolicy == PullNever || options.PullPolicy == PullIfMissing {
|
||||
if localImage != nil {
|
||||
if options.PullPolicy == define.PullNever || options.PullPolicy == define.PullIfMissing {
|
||||
if localImage != nil && imageMatch(ctx, localImageRef, systemContext) {
|
||||
return localImageRef, localImageRef.Transport().Name(), localImage, nil
|
||||
}
|
||||
if options.PullPolicy == PullNever {
|
||||
if options.PullPolicy == define.PullNever {
|
||||
return nil, "", nil, errors.Errorf("pull policy is %q but %q could not be found locally", "never", options.FromImage)
|
||||
}
|
||||
}
|
||||
|
@ -183,7 +213,7 @@ func resolveImage(ctx context.Context, systemContext *types.SystemContext, store
|
|||
// localImage`).
|
||||
if desc := resolved.Description(); len(desc) > 0 {
|
||||
logrus.Debug(desc)
|
||||
if !(options.PullPolicy == PullIfNewer && localImage != nil) {
|
||||
if !(options.PullPolicy == define.PullIfNewer && localImage != nil) {
|
||||
if options.ReportWriter != nil {
|
||||
if _, err := options.ReportWriter.Write([]byte(desc + "\n")); err != nil {
|
||||
return nil, "", nil, err
|
||||
|
@ -206,7 +236,7 @@ func resolveImage(ctx context.Context, systemContext *types.SystemContext, store
|
|||
// If there's a local image, the `pullCandidate` is considered
|
||||
// to be newer if its time stamp differs from the local one.
|
||||
// Otherwise, we don't pull and skip it.
|
||||
if options.PullPolicy == PullIfNewer && localImage != nil {
|
||||
if options.PullPolicy == define.PullIfNewer && localImage != nil {
|
||||
remoteImage, err := ref.NewImage(ctx, systemContext)
|
||||
if err != nil {
|
||||
logrus.Debugf("unable to remote-inspect image %q: %v", pullCandidate.Value.String(), err)
|
||||
|
@ -249,7 +279,7 @@ func resolveImage(ctx context.Context, systemContext *types.SystemContext, store
|
|||
|
||||
// If we were looking for a newer image but could not find one, return
|
||||
// the local image if present.
|
||||
if options.PullPolicy == PullIfNewer && localImage != nil {
|
||||
if options.PullPolicy == define.PullIfNewer && localImage != nil {
|
||||
return localImageRef, localImageRef.Transport().Name(), localImage, nil
|
||||
}
|
||||
|
||||
|
@ -359,6 +389,7 @@ func newBuilder(ctx context.Context, store storage.Store, options BuilderOptions
|
|||
coptions := storage.ContainerOptions{
|
||||
LabelOpts: options.CommonBuildOpts.LabelOpts,
|
||||
IDMappingOptions: newContainerIDMappingOptions(options.IDMappingOptions),
|
||||
Volatile: true,
|
||||
}
|
||||
container, err = store.CreateContainer("", []string{tmpName}, imageID, "", "", &coptions)
|
||||
if err == nil {
|
||||
|
@ -407,7 +438,7 @@ func newBuilder(ctx context.Context, store storage.Store, options BuilderOptions
|
|||
ConfigureNetwork: options.ConfigureNetwork,
|
||||
CNIPluginPath: options.CNIPluginPath,
|
||||
CNIConfigDir: options.CNIConfigDir,
|
||||
IDMappingOptions: IDMappingOptions{
|
||||
IDMappingOptions: define.IDMappingOptions{
|
||||
HostUIDMapping: len(uidmap) == 0,
|
||||
HostGIDMapping: len(uidmap) == 0,
|
||||
UIDMap: uidmap,
|
||||
|
|
56
vendor/github.com/containers/buildah/pkg/chrootuser/user_linux.go
generated
vendored
56
vendor/github.com/containers/buildah/pkg/chrootuser/user_linux.go
generated
vendored
|
@ -15,7 +15,6 @@ import (
|
|||
"sync"
|
||||
|
||||
"github.com/containers/storage/pkg/reexec"
|
||||
"github.com/sirupsen/logrus"
|
||||
"golang.org/x/sys/unix"
|
||||
)
|
||||
|
||||
|
@ -92,36 +91,13 @@ type lookupGroupEntry struct {
|
|||
user string
|
||||
}
|
||||
|
||||
func readWholeLine(rc *bufio.Reader) ([]byte, error) {
|
||||
line, isPrefix, err := rc.ReadLine()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for isPrefix {
|
||||
// We didn't get a whole line. Keep reading chunks until we find an end of line, and discard them.
|
||||
for isPrefix {
|
||||
logrus.Debugf("discarding partial line %q", string(line))
|
||||
_, isPrefix, err = rc.ReadLine()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
// That last read was the end of a line, so now we try to read the (beginning of?) the next line.
|
||||
line, isPrefix, err = rc.ReadLine()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
return line, nil
|
||||
}
|
||||
|
||||
func parseNextPasswd(rc *bufio.Reader) *lookupPasswdEntry {
|
||||
line, err := readWholeLine(rc)
|
||||
if err != nil {
|
||||
func parseNextPasswd(rc *bufio.Scanner) *lookupPasswdEntry {
|
||||
if !rc.Scan() {
|
||||
return nil
|
||||
}
|
||||
fields := strings.Split(string(line), ":")
|
||||
if len(fields) < 7 {
|
||||
line := rc.Text()
|
||||
fields := strings.Split(line, ":")
|
||||
if len(fields) != 7 {
|
||||
return nil
|
||||
}
|
||||
uid, err := strconv.ParseUint(fields[2], 10, 32)
|
||||
|
@ -140,13 +116,13 @@ func parseNextPasswd(rc *bufio.Reader) *lookupPasswdEntry {
|
|||
}
|
||||
}
|
||||
|
||||
func parseNextGroup(rc *bufio.Reader) *lookupGroupEntry {
|
||||
line, err := readWholeLine(rc)
|
||||
if err != nil {
|
||||
func parseNextGroup(rc *bufio.Scanner) *lookupGroupEntry {
|
||||
if !rc.Scan() {
|
||||
return nil
|
||||
}
|
||||
fields := strings.Split(string(line), ":")
|
||||
if len(fields) < 4 {
|
||||
line := rc.Text()
|
||||
fields := strings.Split(line, ":")
|
||||
if len(fields) != 4 {
|
||||
return nil
|
||||
}
|
||||
gid, err := strconv.ParseUint(fields[2], 10, 32)
|
||||
|
@ -168,7 +144,7 @@ func lookupUserInContainer(rootdir, username string) (uid uint64, gid uint64, er
|
|||
defer func() {
|
||||
_ = cmd.Wait()
|
||||
}()
|
||||
rc := bufio.NewReader(f)
|
||||
rc := bufio.NewScanner(f)
|
||||
defer f.Close()
|
||||
|
||||
lookupUser.Lock()
|
||||
|
@ -194,7 +170,7 @@ func lookupGroupForUIDInContainer(rootdir string, userid uint64) (username strin
|
|||
defer func() {
|
||||
_ = cmd.Wait()
|
||||
}()
|
||||
rc := bufio.NewReader(f)
|
||||
rc := bufio.NewScanner(f)
|
||||
defer f.Close()
|
||||
|
||||
lookupUser.Lock()
|
||||
|
@ -226,7 +202,7 @@ func lookupAdditionalGroupsForUIDInContainer(rootdir string, userid uint64) (gid
|
|||
defer func() {
|
||||
_ = cmd.Wait()
|
||||
}()
|
||||
rc := bufio.NewReader(f)
|
||||
rc := bufio.NewScanner(f)
|
||||
defer f.Close()
|
||||
|
||||
lookupGroup.Lock()
|
||||
|
@ -250,7 +226,7 @@ func lookupGroupInContainer(rootdir, groupname string) (gid uint64, err error) {
|
|||
defer func() {
|
||||
_ = cmd.Wait()
|
||||
}()
|
||||
rc := bufio.NewReader(f)
|
||||
rc := bufio.NewScanner(f)
|
||||
defer f.Close()
|
||||
|
||||
lookupGroup.Lock()
|
||||
|
@ -276,7 +252,7 @@ func lookupUIDInContainer(rootdir string, uid uint64) (string, uint64, error) {
|
|||
defer func() {
|
||||
_ = cmd.Wait()
|
||||
}()
|
||||
rc := bufio.NewReader(f)
|
||||
rc := bufio.NewScanner(f)
|
||||
defer f.Close()
|
||||
|
||||
lookupUser.Lock()
|
||||
|
@ -302,7 +278,7 @@ func lookupHomedirInContainer(rootdir string, uid uint64) (string, error) {
|
|||
defer func() {
|
||||
_ = cmd.Wait()
|
||||
}()
|
||||
rc := bufio.NewReader(f)
|
||||
rc := bufio.NewScanner(f)
|
||||
defer f.Close()
|
||||
|
||||
lookupUser.Lock()
|
||||
|
|
14
vendor/github.com/containers/buildah/pkg/cli/common.go
generated
vendored
14
vendor/github.com/containers/buildah/pkg/cli/common.go
generated
vendored
|
@ -10,11 +10,9 @@ import (
|
|||
"runtime"
|
||||
"strings"
|
||||
|
||||
"github.com/containers/buildah"
|
||||
"github.com/containers/buildah/define"
|
||||
"github.com/containers/buildah/pkg/completion"
|
||||
"github.com/containers/buildah/pkg/parse"
|
||||
"github.com/containers/buildah/util"
|
||||
"github.com/containers/common/pkg/auth"
|
||||
commonComp "github.com/containers/common/pkg/completion"
|
||||
"github.com/containers/common/pkg/config"
|
||||
"github.com/containers/storage/pkg/unshare"
|
||||
|
@ -143,8 +141,8 @@ func GetNameSpaceFlags(flags *NameSpaceResults) pflag.FlagSet {
|
|||
fs := pflag.FlagSet{}
|
||||
fs.StringVar(&flags.IPC, string(specs.IPCNamespace), "", "'private', `path` of IPC namespace to join, or 'host'")
|
||||
fs.StringVar(&flags.Network, string(specs.NetworkNamespace), "", "'private', 'none', 'ns:path' of network namespace to join, or 'host'")
|
||||
fs.StringVar(&flags.CNIConfigDir, "cni-config-dir", util.DefaultCNIConfigDir, "`directory` of CNI configuration files")
|
||||
fs.StringVar(&flags.CNIPlugInPath, "cni-plugin-path", util.DefaultCNIPluginPath, "`path` of CNI network plugins")
|
||||
fs.StringVar(&flags.CNIConfigDir, "cni-config-dir", define.DefaultCNIConfigDir, "`directory` of CNI configuration files")
|
||||
fs.StringVar(&flags.CNIPlugInPath, "cni-plugin-path", define.DefaultCNIPluginPath, "`path` of CNI network plugins")
|
||||
fs.StringVar(&flags.PID, string(specs.PIDNamespace), "", "private, `path` of PID namespace to join, or 'host'")
|
||||
fs.StringVar(&flags.UTS, string(specs.UTSNamespace), "", "private, :`path` of UTS namespace to join, or 'host'")
|
||||
return fs
|
||||
|
@ -177,7 +175,7 @@ func GetBudFlags(flags *BudResults) pflag.FlagSet {
|
|||
fs := pflag.FlagSet{}
|
||||
fs.String("arch", runtime.GOARCH, "set the ARCH of the image to the provided value instead of the architecture of the host")
|
||||
fs.StringArrayVar(&flags.Annotation, "annotation", []string{}, "Set metadata for an image (default [])")
|
||||
fs.StringVar(&flags.Authfile, "authfile", auth.GetDefaultAuthFile(), "path of the authentication file.")
|
||||
fs.StringVar(&flags.Authfile, "authfile", "", "path of the authentication file.")
|
||||
fs.StringArrayVar(&flags.BuildArg, "build-arg", []string{}, "`argument=value` to supply to the builder")
|
||||
fs.StringVar(&flags.CacheFrom, "cache-from", "", "Images to utilise as potential cache sources. The build process does not currently support caching so this is a NOOP.")
|
||||
fs.StringVar(&flags.CertDir, "cert-dir", "", "use certificates at the specified path to access the registry")
|
||||
|
@ -361,7 +359,7 @@ func DefaultFormat() string {
|
|||
if format != "" {
|
||||
return format
|
||||
}
|
||||
return buildah.OCI
|
||||
return define.OCI
|
||||
}
|
||||
|
||||
// DefaultIsolation returns the default image format
|
||||
|
@ -373,7 +371,7 @@ func DefaultIsolation() string {
|
|||
if unshare.IsRootless() {
|
||||
return "rootless"
|
||||
}
|
||||
return buildah.OCI
|
||||
return define.OCI
|
||||
}
|
||||
|
||||
// DefaultHistory returns the default add-history setting
|
||||
|
|
62
vendor/github.com/containers/buildah/pkg/parse/parse.go
generated
vendored
62
vendor/github.com/containers/buildah/pkg/parse/parse.go
generated
vendored
|
@ -14,7 +14,7 @@ import (
|
|||
"strings"
|
||||
"unicode"
|
||||
|
||||
"github.com/containers/buildah"
|
||||
"github.com/containers/buildah/define"
|
||||
"github.com/containers/image/v5/types"
|
||||
"github.com/containers/storage/pkg/idtools"
|
||||
"github.com/containers/storage/pkg/unshare"
|
||||
|
@ -45,7 +45,7 @@ var (
|
|||
)
|
||||
|
||||
// CommonBuildOptions parses the build options from the bud cli
|
||||
func CommonBuildOptions(c *cobra.Command) (*buildah.CommonBuildOptions, error) {
|
||||
func CommonBuildOptions(c *cobra.Command) (*define.CommonBuildOptions, error) {
|
||||
var (
|
||||
memoryLimit int64
|
||||
memorySwap int64
|
||||
|
@ -125,7 +125,7 @@ func CommonBuildOptions(c *cobra.Command) (*buildah.CommonBuildOptions, error) {
|
|||
ulimit, _ = c.Flags().GetStringSlice("ulimit")
|
||||
}
|
||||
|
||||
commonOpts := &buildah.CommonBuildOptions{
|
||||
commonOpts := &define.CommonBuildOptions{
|
||||
AddHost: addHost,
|
||||
CPUPeriod: cpuPeriod,
|
||||
CPUQuota: cpuQuota,
|
||||
|
@ -150,7 +150,7 @@ func CommonBuildOptions(c *cobra.Command) (*buildah.CommonBuildOptions, error) {
|
|||
return commonOpts, nil
|
||||
}
|
||||
|
||||
func parseSecurityOpts(securityOpts []string, commonOpts *buildah.CommonBuildOptions) error {
|
||||
func parseSecurityOpts(securityOpts []string, commonOpts *define.CommonBuildOptions) error {
|
||||
for _, opt := range securityOpts {
|
||||
if opt == "no-new-privileges" {
|
||||
return errors.Errorf("no-new-privileges is not supported")
|
||||
|
@ -611,7 +611,7 @@ func SystemContextFromOptions(c *cobra.Command) (*types.SystemContext, error) {
|
|||
if err == nil && c.Flag("registries-conf-dir").Changed {
|
||||
ctx.RegistriesDirPath = regConfDir
|
||||
}
|
||||
ctx.DockerRegistryUserAgent = fmt.Sprintf("Buildah/%s", buildah.Version)
|
||||
ctx.DockerRegistryUserAgent = fmt.Sprintf("Buildah/%s", define.Version)
|
||||
if c.Flag("os") != nil && c.Flag("os").Changed {
|
||||
if os, err := c.Flags().GetString("os"); err == nil {
|
||||
ctx.OSChoice = os
|
||||
|
@ -740,7 +740,7 @@ func getDockerAuth(creds string) (*types.DockerAuthConfig, error) {
|
|||
}
|
||||
|
||||
// IDMappingOptions parses the build options related to user namespaces and ID mapping.
|
||||
func IDMappingOptions(c *cobra.Command, isolation buildah.Isolation) (usernsOptions buildah.NamespaceOptions, idmapOptions *buildah.IDMappingOptions, err error) {
|
||||
func IDMappingOptions(c *cobra.Command, isolation define.Isolation) (usernsOptions define.NamespaceOptions, idmapOptions *define.IDMappingOptions, err error) {
|
||||
user := c.Flag("userns-uid-map-user").Value.String()
|
||||
group := c.Flag("userns-gid-map-group").Value.String()
|
||||
// If only the user or group was specified, use the same value for the
|
||||
|
@ -815,7 +815,7 @@ func IDMappingOptions(c *cobra.Command, isolation buildah.Isolation) (usernsOpti
|
|||
|
||||
// By default, having mappings configured means we use a user
|
||||
// namespace. Otherwise, we don't.
|
||||
usernsOption := buildah.NamespaceOption{
|
||||
usernsOption := define.NamespaceOption{
|
||||
Name: string(specs.UserNamespace),
|
||||
Host: len(uidmap) == 0 && len(gidmap) == 0,
|
||||
}
|
||||
|
@ -837,11 +837,11 @@ func IDMappingOptions(c *cobra.Command, isolation buildah.Isolation) (usernsOpti
|
|||
usernsOption.Path = how
|
||||
}
|
||||
}
|
||||
usernsOptions = buildah.NamespaceOptions{usernsOption}
|
||||
usernsOptions = define.NamespaceOptions{usernsOption}
|
||||
|
||||
usernetwork := c.Flags().Lookup("network")
|
||||
if usernetwork != nil && !usernetwork.Changed {
|
||||
usernsOptions = append(usernsOptions, buildah.NamespaceOption{
|
||||
usernsOptions = append(usernsOptions, define.NamespaceOption{
|
||||
Name: string(specs.NetworkNamespace),
|
||||
Host: usernsOption.Host,
|
||||
})
|
||||
|
@ -851,7 +851,7 @@ func IDMappingOptions(c *cobra.Command, isolation buildah.Isolation) (usernsOpti
|
|||
if (len(uidmap) != 0 || len(gidmap) != 0) && usernsOption.Host {
|
||||
return nil, nil, errors.Errorf("can not specify ID mappings while using host's user namespace")
|
||||
}
|
||||
return usernsOptions, &buildah.IDMappingOptions{
|
||||
return usernsOptions, &define.IDMappingOptions{
|
||||
HostUIDMapping: usernsOption.Host,
|
||||
HostGIDMapping: usernsOption.Host,
|
||||
UIDMap: uidmap,
|
||||
|
@ -886,9 +886,9 @@ func parseIDMap(spec []string) (m [][3]uint32, err error) {
|
|||
}
|
||||
|
||||
// NamespaceOptions parses the build options for all namespaces except for user namespace.
|
||||
func NamespaceOptions(c *cobra.Command) (namespaceOptions buildah.NamespaceOptions, networkPolicy buildah.NetworkConfigurationPolicy, err error) {
|
||||
options := make(buildah.NamespaceOptions, 0, 7)
|
||||
policy := buildah.NetworkDefault
|
||||
func NamespaceOptions(c *cobra.Command) (namespaceOptions define.NamespaceOptions, networkPolicy define.NetworkConfigurationPolicy, err error) {
|
||||
options := make(define.NamespaceOptions, 0, 7)
|
||||
policy := define.NetworkDefault
|
||||
for _, what := range []string{string(specs.IPCNamespace), "network", string(specs.PIDNamespace), string(specs.UTSNamespace)} {
|
||||
if c.Flags().Lookup(what) != nil && c.Flag(what).Changed {
|
||||
how := c.Flag(what).Value.String()
|
||||
|
@ -899,33 +899,33 @@ func NamespaceOptions(c *cobra.Command) (namespaceOptions buildah.NamespaceOptio
|
|||
switch how {
|
||||
case "", "container", "private":
|
||||
logrus.Debugf("setting %q namespace to %q", what, "")
|
||||
options.AddOrReplace(buildah.NamespaceOption{
|
||||
options.AddOrReplace(define.NamespaceOption{
|
||||
Name: what,
|
||||
})
|
||||
case "host":
|
||||
logrus.Debugf("setting %q namespace to host", what)
|
||||
options.AddOrReplace(buildah.NamespaceOption{
|
||||
options.AddOrReplace(define.NamespaceOption{
|
||||
Name: what,
|
||||
Host: true,
|
||||
})
|
||||
default:
|
||||
if what == string(specs.NetworkNamespace) {
|
||||
if how == "none" {
|
||||
options.AddOrReplace(buildah.NamespaceOption{
|
||||
options.AddOrReplace(define.NamespaceOption{
|
||||
Name: what,
|
||||
})
|
||||
policy = buildah.NetworkDisabled
|
||||
policy = define.NetworkDisabled
|
||||
logrus.Debugf("setting network to disabled")
|
||||
break
|
||||
}
|
||||
}
|
||||
how = strings.TrimPrefix(how, "ns:")
|
||||
if _, err := os.Stat(how); err != nil {
|
||||
return nil, buildah.NetworkDefault, errors.Wrapf(err, "error checking for %s namespace", what)
|
||||
return nil, define.NetworkDefault, errors.Wrapf(err, "error checking for %s namespace", what)
|
||||
}
|
||||
policy = buildah.NetworkEnabled
|
||||
policy = define.NetworkEnabled
|
||||
logrus.Debugf("setting %q namespace to %q", what, how)
|
||||
options.AddOrReplace(buildah.NamespaceOption{
|
||||
options.AddOrReplace(define.NamespaceOption{
|
||||
Name: what,
|
||||
Path: how,
|
||||
})
|
||||
|
@ -935,36 +935,36 @@ func NamespaceOptions(c *cobra.Command) (namespaceOptions buildah.NamespaceOptio
|
|||
return options, policy, nil
|
||||
}
|
||||
|
||||
func defaultIsolation() (buildah.Isolation, error) {
|
||||
func defaultIsolation() (define.Isolation, error) {
|
||||
isolation, isSet := os.LookupEnv("BUILDAH_ISOLATION")
|
||||
if isSet {
|
||||
switch strings.ToLower(isolation) {
|
||||
case "oci":
|
||||
return buildah.IsolationOCI, nil
|
||||
return define.IsolationOCI, nil
|
||||
case "rootless":
|
||||
return buildah.IsolationOCIRootless, nil
|
||||
return define.IsolationOCIRootless, nil
|
||||
case "chroot":
|
||||
return buildah.IsolationChroot, nil
|
||||
return define.IsolationChroot, nil
|
||||
default:
|
||||
return 0, errors.Errorf("unrecognized $BUILDAH_ISOLATION value %q", isolation)
|
||||
}
|
||||
}
|
||||
if unshare.IsRootless() {
|
||||
return buildah.IsolationOCIRootless, nil
|
||||
return define.IsolationOCIRootless, nil
|
||||
}
|
||||
return buildah.IsolationDefault, nil
|
||||
return define.IsolationDefault, nil
|
||||
}
|
||||
|
||||
// IsolationOption parses the --isolation flag.
|
||||
func IsolationOption(isolation string) (buildah.Isolation, error) {
|
||||
func IsolationOption(isolation string) (define.Isolation, error) {
|
||||
if isolation != "" {
|
||||
switch strings.ToLower(isolation) {
|
||||
case "oci":
|
||||
return buildah.IsolationOCI, nil
|
||||
case "oci", "default":
|
||||
return define.IsolationOCI, nil
|
||||
case "rootless":
|
||||
return buildah.IsolationOCIRootless, nil
|
||||
return define.IsolationOCIRootless, nil
|
||||
case "chroot":
|
||||
return buildah.IsolationChroot, nil
|
||||
return define.IsolationChroot, nil
|
||||
default:
|
||||
return 0, errors.Errorf("unrecognized isolation type %q", isolation)
|
||||
}
|
||||
|
|
8
vendor/github.com/containers/buildah/pkg/parse/parse_unix.go
generated
vendored
8
vendor/github.com/containers/buildah/pkg/parse/parse_unix.go
generated
vendored
|
@ -6,14 +6,14 @@ import (
|
|||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/containers/buildah/define"
|
||||
"github.com/containers/storage/pkg/unshare"
|
||||
"github.com/opencontainers/runc/libcontainer/configs"
|
||||
"github.com/opencontainers/runc/libcontainer/devices"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
func DeviceFromPath(device string) ([]configs.Device, error) {
|
||||
var devs []configs.Device
|
||||
func DeviceFromPath(device string) (define.ContainerDevices, error) {
|
||||
var devs define.ContainerDevices
|
||||
src, dst, permissions, err := Device(device)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
@ -44,7 +44,7 @@ func DeviceFromPath(device string) ([]configs.Device, error) {
|
|||
}
|
||||
for _, d := range srcDevices {
|
||||
d.Path = filepath.Join(dst, filepath.Base(d.Path))
|
||||
d.Permissions = configs.DevicePermissions(permissions)
|
||||
d.Permissions = devices.Permissions(permissions)
|
||||
devs = append(devs, *d)
|
||||
}
|
||||
return devs, nil
|
||||
|
|
6
vendor/github.com/containers/buildah/pkg/parse/parse_unsupported.go
generated
vendored
6
vendor/github.com/containers/buildah/pkg/parse/parse_unsupported.go
generated
vendored
|
@ -3,7 +3,7 @@
|
|||
package parse
|
||||
|
||||
import (
|
||||
"github.com/containers/buildah"
|
||||
"github.com/containers/buildah/define"
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
|
@ -11,6 +11,6 @@ func getDefaultProcessLimits() []string {
|
|||
return []string{}
|
||||
}
|
||||
|
||||
func DeviceFromPath(device string) (buildah.ContainerDevices, error) {
|
||||
return buildah.ContainerDevices{}, errors.Errorf("devices not supported")
|
||||
func DeviceFromPath(device string) (define.ContainerDevices, error) {
|
||||
return nil, errors.Errorf("devices not supported")
|
||||
}
|
||||
|
|
3
vendor/github.com/containers/buildah/pull.go
generated
vendored
3
vendor/github.com/containers/buildah/pull.go
generated
vendored
|
@ -6,6 +6,7 @@ import (
|
|||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/containers/buildah/define"
|
||||
"github.com/containers/buildah/pkg/blobcache"
|
||||
"github.com/containers/image/v5/directory"
|
||||
"github.com/containers/image/v5/docker"
|
||||
|
@ -61,7 +62,7 @@ type PullOptions struct {
|
|||
// encrypted if non-nil. If nil, it does not attempt to decrypt an image.
|
||||
OciDecryptConfig *encconfig.DecryptConfig
|
||||
// PullPolicy takes the value PullIfMissing, PullAlways, PullIfNewer, or PullNever.
|
||||
PullPolicy PullPolicy
|
||||
PullPolicy define.PullPolicy
|
||||
}
|
||||
|
||||
func localImageNameForReference(ctx context.Context, store storage.Store, srcRef types.ImageReference) (string, error) {
|
||||
|
|
22
vendor/github.com/containers/buildah/release.sh
generated
vendored
22
vendor/github.com/containers/buildah/release.sh
generated
vendored
|
@ -18,7 +18,7 @@ LAST_TAG=$(git describe --tags --abbrev=0)
|
|||
write_go_version()
|
||||
{
|
||||
LOCAL_VERSION="$1"
|
||||
sed -i "s/^\(.*Version = \"\).*/\1${LOCAL_VERSION}\"/" buildah.go
|
||||
sed -i "s/^\(.*Version = \"\).*/\1${LOCAL_VERSION}\"/" define/types.go
|
||||
}
|
||||
|
||||
write_spec_version()
|
||||
|
@ -27,6 +27,22 @@ write_spec_version()
|
|||
sed -i "s/^\(Version: *\).*/\1${LOCAL_VERSION}/" contrib/rpm/buildah.spec
|
||||
}
|
||||
|
||||
write_spec_changelog()
|
||||
{
|
||||
sed '/\*.*-dev-1/d' -i ./contrib/rpm/buildah.spec
|
||||
VERSION=$1
|
||||
date=$(date "+%a %b %d, %Y")
|
||||
name=$(getent passwd $USERNAME | cut -d ':' -f 5)
|
||||
echo "* ${date} ${name} <${USER}@redhat.com> ${VERSION}-1" >.changelog.txt
|
||||
if [[ "${VERSION}" != *-dev ]]; then
|
||||
git log --no-merges --format='- %s' "${LAST_TAG}..HEAD" >>.changelog.txt
|
||||
else
|
||||
echo "" >>.changelog.txt
|
||||
fi
|
||||
sed '/^%changelog.*/r .changelog.txt' -i ./contrib/rpm/buildah.spec
|
||||
rm -f .changelog.txt
|
||||
}
|
||||
|
||||
write_makefile_epoch()
|
||||
{
|
||||
LOCAL_EPOCH="$1"
|
||||
|
@ -46,6 +62,7 @@ release_commit()
|
|||
{
|
||||
write_go_version "${VERSION}" &&
|
||||
write_spec_version "${VERSION}" &&
|
||||
write_spec_changelog "${VERSION}" &&
|
||||
write_changelog &&
|
||||
git commit -asm "Bump to v${VERSION}"
|
||||
}
|
||||
|
@ -53,7 +70,8 @@ release_commit()
|
|||
dev_version_commit()
|
||||
{
|
||||
write_go_version "${NEXT_VERSION}-dev" &&
|
||||
write_spec_version "${NEXT_VERSION}" &&
|
||||
write_spec_version "${NEXT_VERSION}-dev" &&
|
||||
write_spec_changelog "${NEXT_VERSION}-dev" &&
|
||||
git commit -asm "Bump to v${NEXT_VERSION}-dev"
|
||||
}
|
||||
|
||||
|
|
91
vendor/github.com/containers/buildah/run.go
generated
vendored
91
vendor/github.com/containers/buildah/run.go
generated
vendored
|
@ -4,12 +4,13 @@ import (
|
|||
"fmt"
|
||||
"io"
|
||||
|
||||
"github.com/containers/buildah/define"
|
||||
"github.com/opencontainers/runtime-spec/specs-go"
|
||||
)
|
||||
|
||||
const (
|
||||
// runUsingRuntimeCommand is a command we use as a key for reexec
|
||||
runUsingRuntimeCommand = Package + "-oci-runtime"
|
||||
runUsingRuntimeCommand = define.Package + "-oci-runtime"
|
||||
)
|
||||
|
||||
// TerminalPolicy takes the value DefaultTerminal, WithoutTerminal, or WithTerminal.
|
||||
|
@ -41,74 +42,38 @@ func (t TerminalPolicy) String() string {
|
|||
}
|
||||
|
||||
// NamespaceOption controls how we set up a namespace when launching processes.
|
||||
type NamespaceOption struct {
|
||||
// Name specifies the type of namespace, typically matching one of the
|
||||
// ...Namespace constants defined in
|
||||
// github.com/opencontainers/runtime-spec/specs-go.
|
||||
Name string
|
||||
// Host is used to force our processes to use the host's namespace of
|
||||
// this type.
|
||||
Host bool
|
||||
// Path is the path of the namespace to attach our process to, if Host
|
||||
// is not set. If Host is not set and Path is also empty, a new
|
||||
// namespace will be created for the process that we're starting.
|
||||
// If Name is specs.NetworkNamespace, if Path doesn't look like an
|
||||
// absolute path, it is treated as a comma-separated list of CNI
|
||||
// configuration names which will be selected from among all of the CNI
|
||||
// network configurations which we find.
|
||||
Path string
|
||||
}
|
||||
type NamespaceOption = define.NamespaceOption
|
||||
|
||||
// NamespaceOptions provides some helper methods for a slice of NamespaceOption
|
||||
// structs.
|
||||
type NamespaceOptions []NamespaceOption
|
||||
type NamespaceOptions = define.NamespaceOptions
|
||||
|
||||
// IDMappingOptions controls how we set up UID/GID mapping when we set up a
|
||||
// user namespace.
|
||||
type IDMappingOptions struct {
|
||||
HostUIDMapping bool
|
||||
HostGIDMapping bool
|
||||
UIDMap []specs.LinuxIDMapping
|
||||
GIDMap []specs.LinuxIDMapping
|
||||
}
|
||||
type IDMappingOptions = define.IDMappingOptions
|
||||
|
||||
// Isolation provides a way to specify whether we're supposed to use a proper
|
||||
// OCI runtime, or some other method for running commands.
|
||||
type Isolation int
|
||||
type Isolation = define.Isolation
|
||||
|
||||
const (
|
||||
// IsolationDefault is whatever we think will work best.
|
||||
IsolationDefault Isolation = iota
|
||||
IsolationDefault = define.IsolationDefault
|
||||
// IsolationOCI is a proper OCI runtime.
|
||||
IsolationOCI
|
||||
IsolationOCI = define.IsolationOCI
|
||||
// IsolationChroot is a more chroot-like environment: less isolation,
|
||||
// but with fewer requirements.
|
||||
IsolationChroot
|
||||
IsolationChroot = define.IsolationChroot
|
||||
// IsolationOCIRootless is a proper OCI runtime in rootless mode.
|
||||
IsolationOCIRootless
|
||||
IsolationOCIRootless = define.IsolationOCIRootless
|
||||
)
|
||||
|
||||
// String converts a Isolation into a string.
|
||||
func (i Isolation) String() string {
|
||||
switch i {
|
||||
case IsolationDefault:
|
||||
return "IsolationDefault"
|
||||
case IsolationOCI:
|
||||
return "IsolationOCI"
|
||||
case IsolationChroot:
|
||||
return "IsolationChroot"
|
||||
case IsolationOCIRootless:
|
||||
return "IsolationOCIRootless"
|
||||
}
|
||||
return fmt.Sprintf("unrecognized isolation type %d", i)
|
||||
}
|
||||
|
||||
// RunOptions can be used to alter how a command is run in the container.
|
||||
type RunOptions struct {
|
||||
// Hostname is the hostname we set for the running container.
|
||||
Hostname string
|
||||
// Isolation is either IsolationDefault, IsolationOCI, IsolationChroot, or IsolationOCIRootless.
|
||||
Isolation Isolation
|
||||
Isolation define.Isolation
|
||||
// Runtime is the name of the runtime to run. It should accept the
|
||||
// same arguments that runc does, and produce similar output.
|
||||
Runtime string
|
||||
|
@ -131,13 +96,13 @@ type RunOptions struct {
|
|||
// Entrypoint is an override for the configured entry point.
|
||||
Entrypoint []string
|
||||
// NamespaceOptions controls how we set up the namespaces for the process.
|
||||
NamespaceOptions NamespaceOptions
|
||||
NamespaceOptions define.NamespaceOptions
|
||||
// ConfigureNetwork controls whether or not network interfaces and
|
||||
// routing are configured for a new network namespace (i.e., when not
|
||||
// joining another's namespace and not just using the host's
|
||||
// namespace), effectively deciding whether or not the process has a
|
||||
// usable network.
|
||||
ConfigureNetwork NetworkConfigurationPolicy
|
||||
ConfigureNetwork define.NetworkConfigurationPolicy
|
||||
// CNIPluginPath is the location of CNI plugin helpers, if they should be
|
||||
// run from a location other than the default location.
|
||||
CNIPluginPath string
|
||||
|
@ -168,33 +133,5 @@ type RunOptions struct {
|
|||
// lists, it will be dropped.
|
||||
DropCapabilities []string
|
||||
// Devices are the additional devices to add to the containers
|
||||
Devices ContainerDevices
|
||||
}
|
||||
|
||||
// Find the configuration for the namespace of the given type. If there are
|
||||
// duplicates, find the _last_ one of the type, since we assume it was appended
|
||||
// more recently.
|
||||
func (n *NamespaceOptions) Find(namespace string) *NamespaceOption {
|
||||
for i := range *n {
|
||||
j := len(*n) - 1 - i
|
||||
if (*n)[j].Name == namespace {
|
||||
return &((*n)[j])
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// AddOrReplace either adds or replaces the configuration for a given namespace.
|
||||
func (n *NamespaceOptions) AddOrReplace(options ...NamespaceOption) {
|
||||
nextOption:
|
||||
for _, option := range options {
|
||||
for i := range *n {
|
||||
j := len(*n) - 1 - i
|
||||
if (*n)[j].Name == option.Name {
|
||||
(*n)[j] = option
|
||||
continue nextOption
|
||||
}
|
||||
}
|
||||
*n = append(*n, option)
|
||||
}
|
||||
Devices define.ContainerDevices
|
||||
}
|
||||
|
|
106
vendor/github.com/containers/buildah/run_linux.go
generated
vendored
106
vendor/github.com/containers/buildah/run_linux.go
generated
vendored
|
@ -24,9 +24,11 @@ import (
|
|||
"github.com/containers/buildah/bind"
|
||||
"github.com/containers/buildah/chroot"
|
||||
"github.com/containers/buildah/copier"
|
||||
"github.com/containers/buildah/define"
|
||||
"github.com/containers/buildah/pkg/overlay"
|
||||
"github.com/containers/buildah/util"
|
||||
"github.com/containers/common/pkg/capabilities"
|
||||
"github.com/containers/common/pkg/chown"
|
||||
"github.com/containers/common/pkg/config"
|
||||
"github.com/containers/common/pkg/subscriptions"
|
||||
"github.com/containers/storage/pkg/idtools"
|
||||
|
@ -38,7 +40,6 @@ import (
|
|||
"github.com/docker/libnetwork/resolvconf"
|
||||
"github.com/docker/libnetwork/types"
|
||||
"github.com/opencontainers/go-digest"
|
||||
"github.com/opencontainers/runc/libcontainer/configs"
|
||||
"github.com/opencontainers/runtime-spec/specs-go"
|
||||
spec "github.com/opencontainers/runtime-spec/specs-go"
|
||||
"github.com/opencontainers/runtime-tools/generate"
|
||||
|
@ -50,7 +51,7 @@ import (
|
|||
)
|
||||
|
||||
// ContainerDevices is an alias for a slice of github.com/opencontainers/runc/libcontainer/configs.Device structures.
|
||||
type ContainerDevices = []configs.Device
|
||||
type ContainerDevices define.ContainerDevices
|
||||
|
||||
func setChildProcess() error {
|
||||
if err := unix.Prctl(unix.PR_SET_CHILD_SUBREAPER, uintptr(1), 0, 0, 0); err != nil {
|
||||
|
@ -62,7 +63,7 @@ func setChildProcess() error {
|
|||
|
||||
// Run runs the specified command in the container's root filesystem.
|
||||
func (b *Builder) Run(command []string, options RunOptions) error {
|
||||
p, err := ioutil.TempDir("", Package)
|
||||
p, err := ioutil.TempDir("", define.Package)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -86,10 +87,10 @@ func (b *Builder) Run(command []string, options RunOptions) error {
|
|||
g := &gp
|
||||
|
||||
isolation := options.Isolation
|
||||
if isolation == IsolationDefault {
|
||||
if isolation == define.IsolationDefault {
|
||||
isolation = b.Isolation
|
||||
if isolation == IsolationDefault {
|
||||
isolation = IsolationOCI
|
||||
if isolation == define.IsolationDefault {
|
||||
isolation = define.IsolationOCI
|
||||
}
|
||||
}
|
||||
if err := checkAndOverrideIsolationOptions(isolation, &options); err != nil {
|
||||
|
@ -199,7 +200,7 @@ func (b *Builder) Run(command []string, options RunOptions) error {
|
|||
return err
|
||||
}
|
||||
// Only bind /etc/hosts if there's a network
|
||||
if options.ConfigureNetwork != NetworkDisabled {
|
||||
if options.ConfigureNetwork != define.NetworkDisabled {
|
||||
bindFiles["/etc/hosts"] = hostFile
|
||||
}
|
||||
}
|
||||
|
@ -210,7 +211,7 @@ func (b *Builder) Run(command []string, options RunOptions) error {
|
|||
return err
|
||||
}
|
||||
// Only bind /etc/resolv.conf if there's a network
|
||||
if options.ConfigureNetwork != NetworkDisabled {
|
||||
if options.ConfigureNetwork != define.NetworkDisabled {
|
||||
bindFiles["/etc/resolv.conf"] = resolvFile
|
||||
}
|
||||
}
|
||||
|
@ -233,7 +234,7 @@ id=%q
|
|||
image=%q
|
||||
imageid=%q
|
||||
rootless=%d
|
||||
`, Version, b.Container, b.ContainerID, b.FromImage, b.FromImageID, rootless)
|
||||
`, define.Version, b.Container, b.ContainerID, b.FromImage, b.FromImageID, rootless)
|
||||
|
||||
if err = ioutils.AtomicWriteFile(containerenvPath, []byte(containerenv), 0755); err != nil {
|
||||
return err
|
||||
|
@ -254,25 +255,25 @@ rootless=%d
|
|||
if options.CNIConfigDir == "" {
|
||||
options.CNIConfigDir = b.CNIConfigDir
|
||||
if b.CNIConfigDir == "" {
|
||||
options.CNIConfigDir = util.DefaultCNIConfigDir
|
||||
options.CNIConfigDir = define.DefaultCNIConfigDir
|
||||
}
|
||||
}
|
||||
if options.CNIPluginPath == "" {
|
||||
options.CNIPluginPath = b.CNIPluginPath
|
||||
if b.CNIPluginPath == "" {
|
||||
options.CNIPluginPath = util.DefaultCNIPluginPath
|
||||
options.CNIPluginPath = define.DefaultCNIPluginPath
|
||||
}
|
||||
}
|
||||
|
||||
switch isolation {
|
||||
case IsolationOCI:
|
||||
case define.IsolationOCI:
|
||||
var moreCreateArgs []string
|
||||
if options.NoPivot {
|
||||
moreCreateArgs = []string{"--no-pivot"}
|
||||
} else {
|
||||
moreCreateArgs = nil
|
||||
}
|
||||
err = b.runUsingRuntimeSubproc(isolation, options, configureNetwork, configureNetworks, moreCreateArgs, spec, mountPoint, path, Package+"-"+filepath.Base(path))
|
||||
err = b.runUsingRuntimeSubproc(isolation, options, configureNetwork, configureNetworks, moreCreateArgs, spec, mountPoint, path, define.Package+"-"+filepath.Base(path))
|
||||
case IsolationChroot:
|
||||
err = chroot.RunUsingChroot(spec, path, homeDir, options.Stdin, options.Stdout, options.Stderr)
|
||||
case IsolationOCIRootless:
|
||||
|
@ -283,14 +284,14 @@ rootless=%d
|
|||
if err := setupRootlessSpecChanges(spec, path, b.CommonBuildOpts.ShmSize); err != nil {
|
||||
return err
|
||||
}
|
||||
err = b.runUsingRuntimeSubproc(isolation, options, configureNetwork, configureNetworks, moreCreateArgs, spec, mountPoint, path, Package+"-"+filepath.Base(path))
|
||||
err = b.runUsingRuntimeSubproc(isolation, options, configureNetwork, configureNetworks, moreCreateArgs, spec, mountPoint, path, define.Package+"-"+filepath.Base(path))
|
||||
default:
|
||||
err = errors.Errorf("don't know how to run this command")
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func addCommonOptsToSpec(commonOpts *CommonBuildOptions, g *generate.Generator) error {
|
||||
func addCommonOptsToSpec(commonOpts *define.CommonBuildOptions, g *generate.Generator) error {
|
||||
// Resources - CPU
|
||||
if commonOpts.CPUPeriod != 0 {
|
||||
g.SetLinuxResourcesCPUPeriod(commonOpts.CPUPeriod)
|
||||
|
@ -392,7 +393,7 @@ func runSetupBuiltinVolumes(mountLabel, mountPoint, containerDir string, builtin
|
|||
return mounts, nil
|
||||
}
|
||||
|
||||
func (b *Builder) setupMounts(mountPoint string, spec *specs.Spec, bundlePath string, optionMounts []specs.Mount, bindFiles map[string]string, builtinVolumes, volumeMounts []string, shmSize string, namespaceOptions NamespaceOptions) error {
|
||||
func (b *Builder) setupMounts(mountPoint string, spec *specs.Spec, bundlePath string, optionMounts []specs.Mount, bindFiles map[string]string, builtinVolumes, volumeMounts []string, shmSize string, namespaceOptions define.NamespaceOptions) error {
|
||||
// Start building a new list of mounts.
|
||||
var mounts []specs.Mount
|
||||
haveMount := func(destination string) bool {
|
||||
|
@ -534,7 +535,7 @@ func (b *Builder) setupMounts(mountPoint string, spec *specs.Spec, bundlePath st
|
|||
}
|
||||
|
||||
// addNetworkConfig copies files from host and sets them up to bind mount into container
|
||||
func (b *Builder) addNetworkConfig(rdir, hostPath string, chownOpts *idtools.IDPair, dnsServers, dnsSearch, dnsOptions []string, namespaceOptions NamespaceOptions) (string, error) {
|
||||
func (b *Builder) addNetworkConfig(rdir, hostPath string, chownOpts *idtools.IDPair, dnsServers, dnsSearch, dnsOptions []string, namespaceOptions define.NamespaceOptions) (string, error) {
|
||||
stat, err := os.Stat(hostPath)
|
||||
if err != nil {
|
||||
return "", err
|
||||
|
@ -677,7 +678,7 @@ func setupTerminal(g *generate.Generator, terminalPolicy TerminalPolicy, termina
|
|||
}
|
||||
}
|
||||
|
||||
func runUsingRuntime(isolation Isolation, options RunOptions, configureNetwork bool, configureNetworks, moreCreateArgs []string, spec *specs.Spec, bundlePath, containerName string) (wstatus unix.WaitStatus, err error) {
|
||||
func runUsingRuntime(isolation define.Isolation, options RunOptions, configureNetwork bool, configureNetworks, moreCreateArgs []string, spec *specs.Spec, bundlePath, containerName string) (wstatus unix.WaitStatus, err error) {
|
||||
// Lock the caller to a single OS-level thread.
|
||||
runtime.LockOSThread()
|
||||
|
||||
|
@ -1039,7 +1040,7 @@ func setupRootlessNetwork(pid int) (teardown func(), err error) {
|
|||
}, nil
|
||||
}
|
||||
|
||||
func runConfigureNetwork(isolation Isolation, options RunOptions, configureNetworks []string, pid int, containerName string, command []string) (teardown func(), err error) {
|
||||
func runConfigureNetwork(isolation define.Isolation, options RunOptions, configureNetworks []string, pid int, containerName string, command []string) (teardown func(), err error) {
|
||||
var netconf, undo []*libcni.NetworkConfigList
|
||||
|
||||
if isolation == IsolationOCIRootless {
|
||||
|
@ -1503,7 +1504,7 @@ func runUsingRuntimeMain() {
|
|||
os.Exit(1)
|
||||
}
|
||||
|
||||
func setupNamespaces(g *generate.Generator, namespaceOptions NamespaceOptions, idmapOptions IDMappingOptions, policy NetworkConfigurationPolicy) (configureNetwork bool, configureNetworks []string, configureUTS bool, err error) {
|
||||
func setupNamespaces(g *generate.Generator, namespaceOptions define.NamespaceOptions, idmapOptions define.IDMappingOptions, policy define.NetworkConfigurationPolicy) (configureNetwork bool, configureNetworks []string, configureUTS bool, err error) {
|
||||
// Set namespace options in the container configuration.
|
||||
configureUserns := false
|
||||
specifiedNetwork := false
|
||||
|
@ -1522,7 +1523,7 @@ func setupNamespaces(g *generate.Generator, namespaceOptions NamespaceOptions, i
|
|||
configureNetworks = strings.Split(namespaceOption.Path, ",")
|
||||
namespaceOption.Path = ""
|
||||
}
|
||||
configureNetwork = (policy != NetworkDisabled)
|
||||
configureNetwork = (policy != define.NetworkDisabled)
|
||||
}
|
||||
case string(specs.UTSNamespace):
|
||||
configureUTS = false
|
||||
|
@ -1571,7 +1572,7 @@ func setupNamespaces(g *generate.Generator, namespaceOptions NamespaceOptions, i
|
|||
if err := g.AddOrReplaceLinuxNamespace(string(specs.NetworkNamespace), ""); err != nil {
|
||||
return false, nil, false, errors.Wrapf(err, "error adding new %q namespace for run", string(specs.NetworkNamespace))
|
||||
}
|
||||
configureNetwork = (policy != NetworkDisabled)
|
||||
configureNetwork = (policy != define.NetworkDisabled)
|
||||
}
|
||||
} else {
|
||||
if err := g.RemoveLinuxNamespace(string(specs.UserNamespace)); err != nil {
|
||||
|
@ -1584,7 +1585,7 @@ func setupNamespaces(g *generate.Generator, namespaceOptions NamespaceOptions, i
|
|||
}
|
||||
}
|
||||
if configureNetwork && !unshare.IsRootless() {
|
||||
for name, val := range util.DefaultNetworkSysctl {
|
||||
for name, val := range define.DefaultNetworkSysctl {
|
||||
// Check that the sysctl we are adding is actually supported
|
||||
// by the kernel
|
||||
p := filepath.Join("/proc/sys", strings.Replace(name, ".", "/", -1))
|
||||
|
@ -1739,7 +1740,7 @@ func (b *Builder) runSetupVolumeMounts(mountLabel string, volumeMounts []string,
|
|||
}
|
||||
}
|
||||
if foundU {
|
||||
if err := chownSourceVolume(host, processUID, processGID); err != nil {
|
||||
if err := chown.ChangeHostPathOwnership(host, true, processUID, processGID); err != nil {
|
||||
return specs.Mount{}, err
|
||||
}
|
||||
}
|
||||
|
@ -1762,7 +1763,7 @@ func (b *Builder) runSetupVolumeMounts(mountLabel string, volumeMounts []string,
|
|||
|
||||
// If chown true, add correct ownership to the overlay temp directories.
|
||||
if foundU {
|
||||
if err := chownSourceVolume(contentDir, processUID, processGID); err != nil {
|
||||
if err := chown.ChangeHostPathOwnership(contentDir, true, processUID, processGID); err != nil {
|
||||
return specs.Mount{}, err
|
||||
}
|
||||
}
|
||||
|
@ -1810,39 +1811,6 @@ func (b *Builder) runSetupVolumeMounts(mountLabel string, volumeMounts []string,
|
|||
return mounts, nil
|
||||
}
|
||||
|
||||
// chownSourceVolume changes the ownership of a volume source directory or file within the host.
|
||||
func chownSourceVolume(path string, UID, GID int) error {
|
||||
fi, err := os.Lstat(path)
|
||||
if err != nil {
|
||||
// Skip if path does not exist
|
||||
if os.IsNotExist(err) {
|
||||
logrus.Debugf("error returning file info of %q: %v", path, err)
|
||||
return nil
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
currentUID := int(fi.Sys().(*syscall.Stat_t).Uid)
|
||||
currentGID := int(fi.Sys().(*syscall.Stat_t).Gid)
|
||||
|
||||
if UID != currentUID || GID != currentGID {
|
||||
err := filepath.Walk(path, func(filePath string, f os.FileInfo, err error) error {
|
||||
return os.Lchown(filePath, UID, GID)
|
||||
})
|
||||
|
||||
if err != nil {
|
||||
// Skip if path does not exist
|
||||
if os.IsNotExist(err) {
|
||||
logrus.Debugf("error changing the uid and gid of %q: %v", path, err)
|
||||
return nil
|
||||
}
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func setupMaskedPaths(g *generate.Generator) {
|
||||
for _, mp := range []string{
|
||||
"/proc/acpi",
|
||||
|
@ -1999,7 +1967,7 @@ func getDNSIP(dnsServers []string) (dns []net.IP, err error) {
|
|||
|
||||
func (b *Builder) configureUIDGID(g *generate.Generator, mountPoint string, options RunOptions) (string, error) {
|
||||
// Set the user UID/GID/supplemental group list/capabilities lists.
|
||||
user, homeDir, err := b.user(mountPoint, options.User)
|
||||
user, homeDir, err := b.userForRun(mountPoint, options.User)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
@ -2116,7 +2084,7 @@ func setupRootlessSpecChanges(spec *specs.Spec, bundleDir string, shmSize string
|
|||
return nil
|
||||
}
|
||||
|
||||
func (b *Builder) runUsingRuntimeSubproc(isolation Isolation, options RunOptions, configureNetwork bool, configureNetworks, moreCreateArgs []string, spec *specs.Spec, rootPath, bundlePath, containerName string) (err error) {
|
||||
func (b *Builder) runUsingRuntimeSubproc(isolation define.Isolation, options RunOptions, configureNetwork bool, configureNetworks, moreCreateArgs []string, spec *specs.Spec, rootPath, bundlePath, containerName string) (err error) {
|
||||
var confwg sync.WaitGroup
|
||||
config, conferr := json.Marshal(runUsingRuntimeSubprocOptions{
|
||||
Options: options,
|
||||
|
@ -2176,13 +2144,13 @@ func (b *Builder) runUsingRuntimeSubproc(isolation Isolation, options RunOptions
|
|||
return err
|
||||
}
|
||||
|
||||
func checkAndOverrideIsolationOptions(isolation Isolation, options *RunOptions) error {
|
||||
func checkAndOverrideIsolationOptions(isolation define.Isolation, options *RunOptions) error {
|
||||
switch isolation {
|
||||
case IsolationOCIRootless:
|
||||
if ns := options.NamespaceOptions.Find(string(specs.IPCNamespace)); ns == nil || ns.Host {
|
||||
logrus.Debugf("Forcing use of an IPC namespace.")
|
||||
}
|
||||
options.NamespaceOptions.AddOrReplace(NamespaceOption{Name: string(specs.IPCNamespace)})
|
||||
options.NamespaceOptions.AddOrReplace(define.NamespaceOption{Name: string(specs.IPCNamespace)})
|
||||
_, err := exec.LookPath("slirp4netns")
|
||||
hostNetworking := err != nil
|
||||
networkNamespacePath := ""
|
||||
|
@ -2194,7 +2162,7 @@ func checkAndOverrideIsolationOptions(isolation Isolation, options *RunOptions)
|
|||
networkNamespacePath = ""
|
||||
}
|
||||
}
|
||||
options.NamespaceOptions.AddOrReplace(NamespaceOption{
|
||||
options.NamespaceOptions.AddOrReplace(define.NamespaceOption{
|
||||
Name: string(specs.NetworkNamespace),
|
||||
Host: hostNetworking,
|
||||
Path: networkNamespacePath,
|
||||
|
@ -2202,11 +2170,11 @@ func checkAndOverrideIsolationOptions(isolation Isolation, options *RunOptions)
|
|||
if ns := options.NamespaceOptions.Find(string(specs.PIDNamespace)); ns == nil || ns.Host {
|
||||
logrus.Debugf("Forcing use of a PID namespace.")
|
||||
}
|
||||
options.NamespaceOptions.AddOrReplace(NamespaceOption{Name: string(specs.PIDNamespace), Host: false})
|
||||
options.NamespaceOptions.AddOrReplace(define.NamespaceOption{Name: string(specs.PIDNamespace), Host: false})
|
||||
if ns := options.NamespaceOptions.Find(string(specs.UserNamespace)); ns == nil || ns.Host {
|
||||
logrus.Debugf("Forcing use of a user namespace.")
|
||||
}
|
||||
options.NamespaceOptions.AddOrReplace(NamespaceOption{Name: string(specs.UserNamespace)})
|
||||
options.NamespaceOptions.AddOrReplace(define.NamespaceOption{Name: string(specs.UserNamespace)})
|
||||
case IsolationOCI:
|
||||
pidns := options.NamespaceOptions.Find(string(specs.PIDNamespace))
|
||||
userns := options.NamespaceOptions.Find(string(specs.UserNamespace))
|
||||
|
@ -2219,8 +2187,8 @@ func checkAndOverrideIsolationOptions(isolation Isolation, options *RunOptions)
|
|||
|
||||
// DefaultNamespaceOptions returns the default namespace settings from the
|
||||
// runtime-tools generator library.
|
||||
func DefaultNamespaceOptions() (NamespaceOptions, error) {
|
||||
options := NamespaceOptions{
|
||||
func DefaultNamespaceOptions() (define.NamespaceOptions, error) {
|
||||
options := define.NamespaceOptions{
|
||||
{Name: string(specs.CgroupNamespace), Host: true},
|
||||
{Name: string(specs.IPCNamespace), Host: true},
|
||||
{Name: string(specs.MountNamespace), Host: true},
|
||||
|
@ -2236,7 +2204,7 @@ func DefaultNamespaceOptions() (NamespaceOptions, error) {
|
|||
spec := g.Config
|
||||
if spec.Linux != nil {
|
||||
for _, ns := range spec.Linux.Namespaces {
|
||||
options.AddOrReplace(NamespaceOption{
|
||||
options.AddOrReplace(define.NamespaceOption{
|
||||
Name: string(ns.Type),
|
||||
Path: ns.Path,
|
||||
})
|
||||
|
@ -2263,7 +2231,7 @@ type runUsingRuntimeSubprocOptions struct {
|
|||
ConfigureNetworks []string
|
||||
MoreCreateArgs []string
|
||||
ContainerName string
|
||||
Isolation Isolation
|
||||
Isolation define.Isolation
|
||||
}
|
||||
|
||||
func init() {
|
||||
|
|
3
vendor/github.com/containers/buildah/run_unsupported.go
generated
vendored
3
vendor/github.com/containers/buildah/run_unsupported.go
generated
vendored
|
@ -6,9 +6,6 @@ import (
|
|||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
// ContainerDevices is currently not implemented.
|
||||
type ContainerDevices = []struct{}
|
||||
|
||||
func setChildProcess() error {
|
||||
return errors.New("function not supported on non-linux systems")
|
||||
}
|
||||
|
|
33
vendor/github.com/containers/buildah/util/types.go
generated
vendored
33
vendor/github.com/containers/buildah/util/types.go
generated
vendored
|
@ -1,35 +1,24 @@
|
|||
package util
|
||||
|
||||
import (
|
||||
"github.com/containers/buildah/define"
|
||||
)
|
||||
|
||||
const (
|
||||
// Deprecated: Default runtime should come from containers.conf
|
||||
DefaultRuntime = "runc"
|
||||
// DefaultRuntime if containers.conf fails.
|
||||
DefaultRuntime = define.DefaultRuntime
|
||||
// DefaultCNIPluginPath is the default location of CNI plugin helpers.
|
||||
DefaultCNIPluginPath = "/usr/libexec/cni:/opt/cni/bin"
|
||||
DefaultCNIPluginPath = define.DefaultCNIPluginPath
|
||||
// DefaultCNIConfigDir is the default location of CNI configuration files.
|
||||
DefaultCNIConfigDir = "/etc/cni/net.d"
|
||||
DefaultCNIConfigDir = define.DefaultCNIConfigDir
|
||||
)
|
||||
|
||||
var (
|
||||
// DefaultCapabilities is the list of capabilities which we grant by
|
||||
// default to containers which are running under UID 0.
|
||||
DefaultCapabilities = []string{
|
||||
"CAP_AUDIT_WRITE",
|
||||
"CAP_CHOWN",
|
||||
"CAP_DAC_OVERRIDE",
|
||||
"CAP_FOWNER",
|
||||
"CAP_FSETID",
|
||||
"CAP_KILL",
|
||||
"CAP_MKNOD",
|
||||
"CAP_NET_BIND_SERVICE",
|
||||
"CAP_SETFCAP",
|
||||
"CAP_SETGID",
|
||||
"CAP_SETPCAP",
|
||||
"CAP_SETUID",
|
||||
"CAP_SYS_CHROOT",
|
||||
}
|
||||
DefaultCapabilities = define.DefaultCapabilities
|
||||
|
||||
// DefaultNetworkSysctl is the list of Kernel parameters which we
|
||||
// grant by default to containers which are running under UID 0.
|
||||
DefaultNetworkSysctl = map[string]string{
|
||||
"net.ipv4.ping_group_range": "0 0",
|
||||
}
|
||||
DefaultNetworkSysctl = define.DefaultNetworkSysctl
|
||||
)
|
||||
|
|
3
vendor/github.com/containers/buildah/util/util.go
generated
vendored
3
vendor/github.com/containers/buildah/util/util.go
generated
vendored
|
@ -10,6 +10,7 @@ import (
|
|||
"sync"
|
||||
"syscall"
|
||||
|
||||
"github.com/containers/buildah/define"
|
||||
"github.com/containers/common/pkg/config"
|
||||
"github.com/containers/image/v5/docker/reference"
|
||||
"github.com/containers/image/v5/pkg/shortnames"
|
||||
|
@ -280,7 +281,7 @@ func Runtime() string {
|
|||
conf, err := config.Default()
|
||||
if err != nil {
|
||||
logrus.Warnf("Error loading container config when searching for local runtime: %v", err)
|
||||
return DefaultRuntime
|
||||
return define.DefaultRuntime
|
||||
}
|
||||
return conf.Engine.OCIRuntime
|
||||
}
|
||||
|
|
10
vendor/github.com/docker/docker/api/swagger.yaml
generated
vendored
10
vendor/github.com/docker/docker/api/swagger.yaml
generated
vendored
|
@ -560,7 +560,7 @@ definitions:
|
|||
format: "int64"
|
||||
minimum: 0
|
||||
maximum: 100
|
||||
NanoCPUs:
|
||||
NanoCpus:
|
||||
description: "CPU quota in units of 10<sup>-9</sup> CPUs."
|
||||
type: "integer"
|
||||
format: "int64"
|
||||
|
@ -1274,7 +1274,7 @@ definitions:
|
|||
type: "object"
|
||||
properties:
|
||||
Bridge:
|
||||
description: Name of the network'a bridge (for example, `docker0`).
|
||||
description: Name of the network's bridge (for example, `docker0`).
|
||||
type: "string"
|
||||
example: "docker0"
|
||||
SandboxID:
|
||||
|
@ -5466,7 +5466,7 @@ paths:
|
|||
MemorySwap: 0
|
||||
MemoryReservation: 0
|
||||
KernelMemory: 0
|
||||
NanoCPUs: 500000
|
||||
NanoCpus: 500000
|
||||
CpuPercent: 80
|
||||
CpuShares: 512
|
||||
CpuPeriod: 100000
|
||||
|
@ -7310,7 +7310,7 @@ paths:
|
|||
|
||||
|
||||
For example, the build arg `FOO=bar` would become `{"FOO":"bar"}` in JSON. This would result in the
|
||||
the query parameter `buildargs={"FOO":"bar"}`. Note that `{"FOO":"bar"}` should be URI component encoded.
|
||||
query parameter `buildargs={"FOO":"bar"}`. Note that `{"FOO":"bar"}` should be URI component encoded.
|
||||
|
||||
|
||||
[Read more about the buildargs instruction.](https://docs.docker.com/engine/reference/builder/#arg)
|
||||
|
@ -10050,7 +10050,7 @@ paths:
|
|||
description: |
|
||||
Address or interface to use for data path traffic (format:
|
||||
`<ip|interface>`), for example, `192.168.1.1`, or an interface,
|
||||
like `eth0`. If `DataPathAddr` is unspecified, the same addres
|
||||
like `eth0`. If `DataPathAddr` is unspecified, the same address
|
||||
as `AdvertiseAddr` is used.
|
||||
|
||||
The `DataPathAddr` specifies the address that global scope
|
||||
|
|
2
vendor/github.com/docker/docker/client/build_cancel.go
generated
vendored
2
vendor/github.com/docker/docker/client/build_cancel.go
generated
vendored
|
@ -5,7 +5,7 @@ import (
|
|||
"net/url"
|
||||
)
|
||||
|
||||
// BuildCancel requests the daemon to cancel ongoing build request
|
||||
// BuildCancel requests the daemon to cancel the ongoing build request.
|
||||
func (cli *Client) BuildCancel(ctx context.Context, id string) error {
|
||||
query := url.Values{}
|
||||
query.Set("id", id)
|
||||
|
|
2
vendor/github.com/docker/docker/client/config_create.go
generated
vendored
2
vendor/github.com/docker/docker/client/config_create.go
generated
vendored
|
@ -8,7 +8,7 @@ import (
|
|||
"github.com/docker/docker/api/types/swarm"
|
||||
)
|
||||
|
||||
// ConfigCreate creates a new Config.
|
||||
// ConfigCreate creates a new config.
|
||||
func (cli *Client) ConfigCreate(ctx context.Context, config swarm.ConfigSpec) (types.ConfigCreateResponse, error) {
|
||||
var response types.ConfigCreateResponse
|
||||
if err := cli.NewVersionError("1.30", "config create"); err != nil {
|
||||
|
|
2
vendor/github.com/docker/docker/client/config_remove.go
generated
vendored
2
vendor/github.com/docker/docker/client/config_remove.go
generated
vendored
|
@ -2,7 +2,7 @@ package client // import "github.com/docker/docker/client"
|
|||
|
||||
import "context"
|
||||
|
||||
// ConfigRemove removes a Config.
|
||||
// ConfigRemove removes a config.
|
||||
func (cli *Client) ConfigRemove(ctx context.Context, id string) error {
|
||||
if err := cli.NewVersionError("1.30", "config remove"); err != nil {
|
||||
return err
|
||||
|
|
2
vendor/github.com/docker/docker/client/config_update.go
generated
vendored
2
vendor/github.com/docker/docker/client/config_update.go
generated
vendored
|
@ -8,7 +8,7 @@ import (
|
|||
"github.com/docker/docker/api/types/swarm"
|
||||
)
|
||||
|
||||
// ConfigUpdate attempts to update a Config
|
||||
// ConfigUpdate attempts to update a config
|
||||
func (cli *Client) ConfigUpdate(ctx context.Context, id string, version swarm.Version, config swarm.ConfigSpec) error {
|
||||
if err := cli.NewVersionError("1.30", "config update"); err != nil {
|
||||
return err
|
||||
|
|
2
vendor/github.com/docker/docker/client/container_commit.go
generated
vendored
2
vendor/github.com/docker/docker/client/container_commit.go
generated
vendored
|
@ -10,7 +10,7 @@ import (
|
|||
"github.com/docker/docker/api/types"
|
||||
)
|
||||
|
||||
// ContainerCommit applies changes into a container and creates a new tagged image.
|
||||
// ContainerCommit applies changes to a container and creates a new tagged image.
|
||||
func (cli *Client) ContainerCommit(ctx context.Context, container string, options types.ContainerCommitOptions) (types.IDResponse, error) {
|
||||
var repository, tag string
|
||||
if options.Reference != "" {
|
||||
|
|
2
vendor/github.com/docker/docker/client/container_copy.go
generated
vendored
2
vendor/github.com/docker/docker/client/container_copy.go
generated
vendored
|
@ -14,7 +14,7 @@ import (
|
|||
"github.com/docker/docker/api/types"
|
||||
)
|
||||
|
||||
// ContainerStatPath returns Stat information about a path inside the container filesystem.
|
||||
// ContainerStatPath returns stat information about a path inside the container filesystem.
|
||||
func (cli *Client) ContainerStatPath(ctx context.Context, containerID, path string) (types.ContainerPathStat, error) {
|
||||
query := url.Values{}
|
||||
query.Set("path", filepath.ToSlash(path)) // Normalize the paths used in the API.
|
||||
|
|
2
vendor/github.com/docker/docker/client/container_create.go
generated
vendored
2
vendor/github.com/docker/docker/client/container_create.go
generated
vendored
|
@ -19,7 +19,7 @@ type configWrapper struct {
|
|||
Platform *specs.Platform
|
||||
}
|
||||
|
||||
// ContainerCreate creates a new container based in the given configuration.
|
||||
// ContainerCreate creates a new container based on the given configuration.
|
||||
// It can be associated with a name, but it's not mandatory.
|
||||
func (cli *Client) ContainerCreate(ctx context.Context, config *container.Config, hostConfig *container.HostConfig, networkingConfig *network.NetworkingConfig, platform *specs.Platform, containerName string) (container.ContainerCreateCreatedBody, error) {
|
||||
var response container.ContainerCreateCreatedBody
|
||||
|
|
2
vendor/github.com/docker/docker/client/container_restart.go
generated
vendored
2
vendor/github.com/docker/docker/client/container_restart.go
generated
vendored
|
@ -9,7 +9,7 @@ import (
|
|||
)
|
||||
|
||||
// ContainerRestart stops and starts a container again.
|
||||
// It makes the daemon to wait for the container to be up again for
|
||||
// It makes the daemon wait for the container to be up again for
|
||||
// a specific amount of time, given the timeout.
|
||||
func (cli *Client) ContainerRestart(ctx context.Context, containerID string, timeout *time.Duration) error {
|
||||
query := url.Values{}
|
||||
|
|
2
vendor/github.com/docker/docker/client/container_update.go
generated
vendored
2
vendor/github.com/docker/docker/client/container_update.go
generated
vendored
|
@ -7,7 +7,7 @@ import (
|
|||
"github.com/docker/docker/api/types/container"
|
||||
)
|
||||
|
||||
// ContainerUpdate updates resources of a container
|
||||
// ContainerUpdate updates the resources of a container.
|
||||
func (cli *Client) ContainerUpdate(ctx context.Context, containerID string, updateConfig container.UpdateConfig) (container.ContainerUpdateOKBody, error) {
|
||||
var response container.ContainerUpdateOKBody
|
||||
serverResp, err := cli.post(ctx, "/containers/"+containerID+"/update", nil, updateConfig, nil)
|
||||
|
|
2
vendor/github.com/docker/docker/client/distribution_inspect.go
generated
vendored
2
vendor/github.com/docker/docker/client/distribution_inspect.go
generated
vendored
|
@ -8,7 +8,7 @@ import (
|
|||
registrytypes "github.com/docker/docker/api/types/registry"
|
||||
)
|
||||
|
||||
// DistributionInspect returns the image digest with full Manifest
|
||||
// DistributionInspect returns the image digest with the full manifest.
|
||||
func (cli *Client) DistributionInspect(ctx context.Context, image, encodedRegistryAuth string) (registrytypes.DistributionInspect, error) {
|
||||
// Contact the registry to retrieve digest and platform information
|
||||
var distributionInspect registrytypes.DistributionInspect
|
||||
|
|
4
vendor/github.com/docker/docker/client/image_build.go
generated
vendored
4
vendor/github.com/docker/docker/client/image_build.go
generated
vendored
|
@ -14,8 +14,8 @@ import (
|
|||
"github.com/docker/docker/api/types/container"
|
||||
)
|
||||
|
||||
// ImageBuild sends request to the daemon to build images.
|
||||
// The Body in the response implement an io.ReadCloser and it's up to the caller to
|
||||
// ImageBuild sends a request to the daemon to build images.
|
||||
// The Body in the response implements an io.ReadCloser and it's up to the caller to
|
||||
// close it.
|
||||
func (cli *Client) ImageBuild(ctx context.Context, buildContext io.Reader, options types.ImageBuildOptions) (types.ImageBuildResponse, error) {
|
||||
query, err := cli.imageBuildOptionsToQuery(options)
|
||||
|
|
2
vendor/github.com/docker/docker/client/image_create.go
generated
vendored
2
vendor/github.com/docker/docker/client/image_create.go
generated
vendored
|
@ -10,7 +10,7 @@ import (
|
|||
"github.com/docker/docker/api/types"
|
||||
)
|
||||
|
||||
// ImageCreate creates a new image based in the parent options.
|
||||
// ImageCreate creates a new image based on the parent options.
|
||||
// It returns the JSON content in the response body.
|
||||
func (cli *Client) ImageCreate(ctx context.Context, parentReference string, options types.ImageCreateOptions) (io.ReadCloser, error) {
|
||||
ref, err := reference.ParseNormalizedNamed(parentReference)
|
||||
|
|
2
vendor/github.com/docker/docker/client/image_import.go
generated
vendored
2
vendor/github.com/docker/docker/client/image_import.go
generated
vendored
|
@ -10,7 +10,7 @@ import (
|
|||
"github.com/docker/docker/api/types"
|
||||
)
|
||||
|
||||
// ImageImport creates a new image based in the source options.
|
||||
// ImageImport creates a new image based on the source options.
|
||||
// It returns the JSON content in the response body.
|
||||
func (cli *Client) ImageImport(ctx context.Context, source types.ImageImportSource, ref string, options types.ImageImportOptions) (io.ReadCloser, error) {
|
||||
if ref != "" {
|
||||
|
|
2
vendor/github.com/docker/docker/client/image_search.go
generated
vendored
2
vendor/github.com/docker/docker/client/image_search.go
generated
vendored
|
@ -12,7 +12,7 @@ import (
|
|||
"github.com/docker/docker/errdefs"
|
||||
)
|
||||
|
||||
// ImageSearch makes the docker host to search by a term in a remote registry.
|
||||
// ImageSearch makes the docker host search by a term in a remote registry.
|
||||
// The list of results is not sorted in any fashion.
|
||||
func (cli *Client) ImageSearch(ctx context.Context, term string, options types.ImageSearchOptions) ([]registry.SearchResult, error) {
|
||||
var results []registry.SearchResult
|
||||
|
|
2
vendor/github.com/docker/docker/client/secret_create.go
generated
vendored
2
vendor/github.com/docker/docker/client/secret_create.go
generated
vendored
|
@ -8,7 +8,7 @@ import (
|
|||
"github.com/docker/docker/api/types/swarm"
|
||||
)
|
||||
|
||||
// SecretCreate creates a new Secret.
|
||||
// SecretCreate creates a new secret.
|
||||
func (cli *Client) SecretCreate(ctx context.Context, secret swarm.SecretSpec) (types.SecretCreateResponse, error) {
|
||||
var response types.SecretCreateResponse
|
||||
if err := cli.NewVersionError("1.25", "secret create"); err != nil {
|
||||
|
|
2
vendor/github.com/docker/docker/client/secret_remove.go
generated
vendored
2
vendor/github.com/docker/docker/client/secret_remove.go
generated
vendored
|
@ -2,7 +2,7 @@ package client // import "github.com/docker/docker/client"
|
|||
|
||||
import "context"
|
||||
|
||||
// SecretRemove removes a Secret.
|
||||
// SecretRemove removes a secret.
|
||||
func (cli *Client) SecretRemove(ctx context.Context, id string) error {
|
||||
if err := cli.NewVersionError("1.25", "secret remove"); err != nil {
|
||||
return err
|
||||
|
|
2
vendor/github.com/docker/docker/client/secret_update.go
generated
vendored
2
vendor/github.com/docker/docker/client/secret_update.go
generated
vendored
|
@ -8,7 +8,7 @@ import (
|
|||
"github.com/docker/docker/api/types/swarm"
|
||||
)
|
||||
|
||||
// SecretUpdate attempts to update a Secret
|
||||
// SecretUpdate attempts to update a secret.
|
||||
func (cli *Client) SecretUpdate(ctx context.Context, id string, version swarm.Version, secret swarm.SecretSpec) error {
|
||||
if err := cli.NewVersionError("1.25", "secret update"); err != nil {
|
||||
return err
|
||||
|
|
2
vendor/github.com/docker/docker/client/service_create.go
generated
vendored
2
vendor/github.com/docker/docker/client/service_create.go
generated
vendored
|
@ -13,7 +13,7 @@ import (
|
|||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
// ServiceCreate creates a new Service.
|
||||
// ServiceCreate creates a new service.
|
||||
func (cli *Client) ServiceCreate(ctx context.Context, service swarm.ServiceSpec, options types.ServiceCreateOptions) (types.ServiceCreateResponse, error) {
|
||||
var response types.ServiceCreateResponse
|
||||
headers := map[string][]string{
|
||||
|
|
2
vendor/github.com/docker/docker/client/task_inspect.go
generated
vendored
2
vendor/github.com/docker/docker/client/task_inspect.go
generated
vendored
|
@ -9,7 +9,7 @@ import (
|
|||
"github.com/docker/docker/api/types/swarm"
|
||||
)
|
||||
|
||||
// TaskInspectWithRaw returns the task information and its raw representation..
|
||||
// TaskInspectWithRaw returns the task information and its raw representation.
|
||||
func (cli *Client) TaskInspectWithRaw(ctx context.Context, taskID string) (swarm.Task, []byte, error) {
|
||||
if taskID == "" {
|
||||
return swarm.Task{}, nil, objectNotFoundError{object: "task", id: taskID}
|
||||
|
|
52
vendor/github.com/docker/docker/errdefs/helpers.go
generated
vendored
52
vendor/github.com/docker/docker/errdefs/helpers.go
generated
vendored
|
@ -10,6 +10,10 @@ func (e errNotFound) Cause() error {
|
|||
return e.error
|
||||
}
|
||||
|
||||
func (e errNotFound) Unwrap() error {
|
||||
return e.error
|
||||
}
|
||||
|
||||
// NotFound is a helper to create an error of the class with the same name from any error type
|
||||
func NotFound(err error) error {
|
||||
if err == nil || IsNotFound(err) {
|
||||
|
@ -26,6 +30,10 @@ func (e errInvalidParameter) Cause() error {
|
|||
return e.error
|
||||
}
|
||||
|
||||
func (e errInvalidParameter) Unwrap() error {
|
||||
return e.error
|
||||
}
|
||||
|
||||
// InvalidParameter is a helper to create an error of the class with the same name from any error type
|
||||
func InvalidParameter(err error) error {
|
||||
if err == nil || IsInvalidParameter(err) {
|
||||
|
@ -42,6 +50,10 @@ func (e errConflict) Cause() error {
|
|||
return e.error
|
||||
}
|
||||
|
||||
func (e errConflict) Unwrap() error {
|
||||
return e.error
|
||||
}
|
||||
|
||||
// Conflict is a helper to create an error of the class with the same name from any error type
|
||||
func Conflict(err error) error {
|
||||
if err == nil || IsConflict(err) {
|
||||
|
@ -58,6 +70,10 @@ func (e errUnauthorized) Cause() error {
|
|||
return e.error
|
||||
}
|
||||
|
||||
func (e errUnauthorized) Unwrap() error {
|
||||
return e.error
|
||||
}
|
||||
|
||||
// Unauthorized is a helper to create an error of the class with the same name from any error type
|
||||
func Unauthorized(err error) error {
|
||||
if err == nil || IsUnauthorized(err) {
|
||||
|
@ -74,6 +90,10 @@ func (e errUnavailable) Cause() error {
|
|||
return e.error
|
||||
}
|
||||
|
||||
func (e errUnavailable) Unwrap() error {
|
||||
return e.error
|
||||
}
|
||||
|
||||
// Unavailable is a helper to create an error of the class with the same name from any error type
|
||||
func Unavailable(err error) error {
|
||||
if err == nil || IsUnavailable(err) {
|
||||
|
@ -90,6 +110,10 @@ func (e errForbidden) Cause() error {
|
|||
return e.error
|
||||
}
|
||||
|
||||
func (e errForbidden) Unwrap() error {
|
||||
return e.error
|
||||
}
|
||||
|
||||
// Forbidden is a helper to create an error of the class with the same name from any error type
|
||||
func Forbidden(err error) error {
|
||||
if err == nil || IsForbidden(err) {
|
||||
|
@ -106,6 +130,10 @@ func (e errSystem) Cause() error {
|
|||
return e.error
|
||||
}
|
||||
|
||||
func (e errSystem) Unwrap() error {
|
||||
return e.error
|
||||
}
|
||||
|
||||
// System is a helper to create an error of the class with the same name from any error type
|
||||
func System(err error) error {
|
||||
if err == nil || IsSystem(err) {
|
||||
|
@ -122,6 +150,10 @@ func (e errNotModified) Cause() error {
|
|||
return e.error
|
||||
}
|
||||
|
||||
func (e errNotModified) Unwrap() error {
|
||||
return e.error
|
||||
}
|
||||
|
||||
// NotModified is a helper to create an error of the class with the same name from any error type
|
||||
func NotModified(err error) error {
|
||||
if err == nil || IsNotModified(err) {
|
||||
|
@ -138,6 +170,10 @@ func (e errNotImplemented) Cause() error {
|
|||
return e.error
|
||||
}
|
||||
|
||||
func (e errNotImplemented) Unwrap() error {
|
||||
return e.error
|
||||
}
|
||||
|
||||
// NotImplemented is a helper to create an error of the class with the same name from any error type
|
||||
func NotImplemented(err error) error {
|
||||
if err == nil || IsNotImplemented(err) {
|
||||
|
@ -154,6 +190,10 @@ func (e errUnknown) Cause() error {
|
|||
return e.error
|
||||
}
|
||||
|
||||
func (e errUnknown) Unwrap() error {
|
||||
return e.error
|
||||
}
|
||||
|
||||
// Unknown is a helper to create an error of the class with the same name from any error type
|
||||
func Unknown(err error) error {
|
||||
if err == nil || IsUnknown(err) {
|
||||
|
@ -170,6 +210,10 @@ func (e errCancelled) Cause() error {
|
|||
return e.error
|
||||
}
|
||||
|
||||
func (e errCancelled) Unwrap() error {
|
||||
return e.error
|
||||
}
|
||||
|
||||
// Cancelled is a helper to create an error of the class with the same name from any error type
|
||||
func Cancelled(err error) error {
|
||||
if err == nil || IsCancelled(err) {
|
||||
|
@ -186,6 +230,10 @@ func (e errDeadline) Cause() error {
|
|||
return e.error
|
||||
}
|
||||
|
||||
func (e errDeadline) Unwrap() error {
|
||||
return e.error
|
||||
}
|
||||
|
||||
// Deadline is a helper to create an error of the class with the same name from any error type
|
||||
func Deadline(err error) error {
|
||||
if err == nil || IsDeadline(err) {
|
||||
|
@ -202,6 +250,10 @@ func (e errDataLoss) Cause() error {
|
|||
return e.error
|
||||
}
|
||||
|
||||
func (e errDataLoss) Unwrap() error {
|
||||
return e.error
|
||||
}
|
||||
|
||||
// DataLoss is a helper to create an error of the class with the same name from any error type
|
||||
func DataLoss(err error) error {
|
||||
if err == nil || IsDataLoss(err) {
|
||||
|
|
24
vendor/github.com/docker/docker/pkg/archive/archive.go
generated
vendored
24
vendor/github.com/docker/docker/pkg/archive/archive.go
generated
vendored
|
@ -11,7 +11,6 @@ import (
|
|||
"io"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path/filepath"
|
||||
"runtime"
|
||||
"strconv"
|
||||
|
@ -25,6 +24,7 @@ import (
|
|||
"github.com/docker/docker/pkg/pools"
|
||||
"github.com/docker/docker/pkg/system"
|
||||
"github.com/sirupsen/logrus"
|
||||
exec "golang.org/x/sys/execabs"
|
||||
)
|
||||
|
||||
type (
|
||||
|
@ -402,10 +402,24 @@ func fillGo18FileTypeBits(mode int64, fi os.FileInfo) int64 {
|
|||
// ReadSecurityXattrToTarHeader reads security.capability xattr from filesystem
|
||||
// to a tar header
|
||||
func ReadSecurityXattrToTarHeader(path string, hdr *tar.Header) error {
|
||||
const (
|
||||
// Values based on linux/include/uapi/linux/capability.h
|
||||
xattrCapsSz2 = 20
|
||||
versionOffset = 3
|
||||
vfsCapRevision2 = 2
|
||||
vfsCapRevision3 = 3
|
||||
)
|
||||
capability, _ := system.Lgetxattr(path, "security.capability")
|
||||
if capability != nil {
|
||||
length := len(capability)
|
||||
if capability[versionOffset] == vfsCapRevision3 {
|
||||
// Convert VFS_CAP_REVISION_3 to VFS_CAP_REVISION_2 as root UID makes no
|
||||
// sense outside the user namespace the archive is built in.
|
||||
capability[versionOffset] = vfsCapRevision2
|
||||
length = xattrCapsSz2
|
||||
}
|
||||
hdr.Xattrs = make(map[string]string)
|
||||
hdr.Xattrs["security.capability"] = string(capability)
|
||||
hdr.Xattrs["security.capability"] = string(capability[:length])
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
@ -917,6 +931,12 @@ loop:
|
|||
return err
|
||||
}
|
||||
|
||||
// ignore XGlobalHeader early to avoid creating parent directories for them
|
||||
if hdr.Typeflag == tar.TypeXGlobalHeader {
|
||||
logrus.Debugf("PAX Global Extended Headers found for %s and ignored", hdr.Name)
|
||||
continue
|
||||
}
|
||||
|
||||
// Normalize name, for safety and for a simple is-root check
|
||||
// This keeps "../" as-is, but normalizes "/../" to "/". Or Windows:
|
||||
// This keeps "..\" as-is, but normalizes "\..\" to "\".
|
||||
|
|
12
vendor/github.com/docker/docker/pkg/archive/archive_unix.go
generated
vendored
12
vendor/github.com/docker/docker/pkg/archive/archive_unix.go
generated
vendored
|
@ -81,11 +81,6 @@ func getFileUIDGID(stat interface{}) (idtools.Identity, error) {
|
|||
// handleTarTypeBlockCharFifo is an OS-specific helper function used by
|
||||
// createTarFile to handle the following types of header: Block; Char; Fifo
|
||||
func handleTarTypeBlockCharFifo(hdr *tar.Header, path string) error {
|
||||
if sys.RunningInUserNS() {
|
||||
// cannot create a device if running in user namespace
|
||||
return nil
|
||||
}
|
||||
|
||||
mode := uint32(hdr.Mode & 07777)
|
||||
switch hdr.Typeflag {
|
||||
case tar.TypeBlock:
|
||||
|
@ -96,7 +91,12 @@ func handleTarTypeBlockCharFifo(hdr *tar.Header, path string) error {
|
|||
mode |= unix.S_IFIFO
|
||||
}
|
||||
|
||||
return system.Mknod(path, mode, int(system.Mkdev(hdr.Devmajor, hdr.Devminor)))
|
||||
err := system.Mknod(path, mode, int(system.Mkdev(hdr.Devmajor, hdr.Devminor)))
|
||||
if errors.Is(err, syscall.EPERM) && sys.RunningInUserNS() {
|
||||
// In most cases, cannot create a device if running in user namespace
|
||||
err = nil
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func handleLChmod(hdr *tar.Header, path string, hdrInfo os.FileInfo) error {
|
||||
|
|
11
vendor/github.com/docker/docker/pkg/idtools/idtools.go
generated
vendored
11
vendor/github.com/docker/docker/pkg/idtools/idtools.go
generated
vendored
|
@ -35,13 +35,13 @@ const (
|
|||
|
||||
// MkdirAllAndChown creates a directory (include any along the path) and then modifies
|
||||
// ownership to the requested uid/gid. If the directory already exists, this
|
||||
// function will still change ownership to the requested uid/gid pair.
|
||||
// function will still change ownership and permissions.
|
||||
func MkdirAllAndChown(path string, mode os.FileMode, owner Identity) error {
|
||||
return mkdirAs(path, mode, owner, true, true)
|
||||
}
|
||||
|
||||
// MkdirAndChown creates a directory and then modifies ownership to the requested uid/gid.
|
||||
// If the directory already exists, this function still changes ownership.
|
||||
// If the directory already exists, this function still changes ownership and permissions.
|
||||
// Note that unlike os.Mkdir(), this function does not return IsExist error
|
||||
// in case path already exists.
|
||||
func MkdirAndChown(path string, mode os.FileMode, owner Identity) error {
|
||||
|
@ -50,7 +50,7 @@ func MkdirAndChown(path string, mode os.FileMode, owner Identity) error {
|
|||
|
||||
// MkdirAllAndChownNew creates a directory (include any along the path) and then modifies
|
||||
// ownership ONLY of newly created directories to the requested uid/gid. If the
|
||||
// directories along the path exist, no change of ownership will be performed
|
||||
// directories along the path exist, no change of ownership or permissions will be performed
|
||||
func MkdirAllAndChownNew(path string, mode os.FileMode, owner Identity) error {
|
||||
return mkdirAs(path, mode, owner, true, false)
|
||||
}
|
||||
|
@ -234,3 +234,8 @@ func parseSubidFile(path, username string) (ranges, error) {
|
|||
|
||||
return rangeList, s.Err()
|
||||
}
|
||||
|
||||
// CurrentIdentity returns the identity of the current process
|
||||
func CurrentIdentity() Identity {
|
||||
return Identity{UID: os.Getuid(), GID: os.Getegid()}
|
||||
}
|
||||
|
|
77
vendor/github.com/docker/docker/pkg/idtools/idtools_unix.go
generated
vendored
77
vendor/github.com/docker/docker/pkg/idtools/idtools_unix.go
generated
vendored
|
@ -40,7 +40,7 @@ func mkdirAs(path string, mode os.FileMode, owner Identity, mkAll, chownExisting
|
|||
}
|
||||
|
||||
// short-circuit--we were called with an existing directory and chown was requested
|
||||
return lazyChown(path, owner.UID, owner.GID, stat)
|
||||
return setPermissions(path, mode, owner.UID, owner.GID, stat)
|
||||
}
|
||||
|
||||
if os.IsNotExist(err) {
|
||||
|
@ -71,7 +71,7 @@ func mkdirAs(path string, mode os.FileMode, owner Identity, mkAll, chownExisting
|
|||
// even if it existed, we will chown the requested path + any subpaths that
|
||||
// didn't exist when we called MkdirAll
|
||||
for _, pathComponent := range paths {
|
||||
if err := lazyChown(pathComponent, owner.UID, owner.GID, nil); err != nil {
|
||||
if err := setPermissions(pathComponent, mode, owner.UID, owner.GID, nil); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
@ -213,10 +213,11 @@ func callGetent(database, key string) (io.Reader, error) {
|
|||
return bytes.NewReader(out), nil
|
||||
}
|
||||
|
||||
// lazyChown performs a chown only if the uid/gid don't match what's requested
|
||||
// setPermissions performs a chown/chmod only if the uid/gid don't match what's requested
|
||||
// Normally a Chown is a no-op if uid/gid match, but in some cases this can still cause an error, e.g. if the
|
||||
// dir is on an NFS share, so don't call chown unless we absolutely must.
|
||||
func lazyChown(p string, uid, gid int, stat *system.StatT) error {
|
||||
// Likewise for setting permissions.
|
||||
func setPermissions(p string, mode os.FileMode, uid, gid int, stat *system.StatT) error {
|
||||
if stat == nil {
|
||||
var err error
|
||||
stat, err = system.Stat(p)
|
||||
|
@ -224,6 +225,11 @@ func lazyChown(p string, uid, gid int, stat *system.StatT) error {
|
|||
return err
|
||||
}
|
||||
}
|
||||
if os.FileMode(stat.Mode()).Perm() != mode.Perm() {
|
||||
if err := os.Chmod(p, mode.Perm()); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if stat.UID() == uint32(uid) && stat.GID() == uint32(gid) {
|
||||
return nil
|
||||
}
|
||||
|
@ -239,38 +245,51 @@ func NewIdentityMapping(name string) (*IdentityMapping, error) {
|
|||
return nil, fmt.Errorf("Could not get user for username %s: %v", name, err)
|
||||
}
|
||||
|
||||
uid := strconv.Itoa(usr.Uid)
|
||||
|
||||
subuidRangesWithUserName, err := parseSubuid(name)
|
||||
subuidRanges, err := lookupSubUIDRanges(usr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
subgidRangesWithUserName, err := parseSubgid(name)
|
||||
subgidRanges, err := lookupSubGIDRanges(usr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
subuidRangesWithUID, err := parseSubuid(uid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
subgidRangesWithUID, err := parseSubgid(uid)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
subuidRanges := append(subuidRangesWithUserName, subuidRangesWithUID...)
|
||||
subgidRanges := append(subgidRangesWithUserName, subgidRangesWithUID...)
|
||||
|
||||
if len(subuidRanges) == 0 {
|
||||
return nil, errors.Errorf("no subuid ranges found for user %q", name)
|
||||
}
|
||||
if len(subgidRanges) == 0 {
|
||||
return nil, errors.Errorf("no subgid ranges found for user %q", name)
|
||||
}
|
||||
|
||||
return &IdentityMapping{
|
||||
uids: createIDMap(subuidRanges),
|
||||
gids: createIDMap(subgidRanges),
|
||||
uids: subuidRanges,
|
||||
gids: subgidRanges,
|
||||
}, nil
|
||||
}
|
||||
|
||||
func lookupSubUIDRanges(usr user.User) ([]IDMap, error) {
|
||||
rangeList, err := parseSubuid(strconv.Itoa(usr.Uid))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(rangeList) == 0 {
|
||||
rangeList, err = parseSubuid(usr.Name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
if len(rangeList) == 0 {
|
||||
return nil, errors.Errorf("no subuid ranges found for user %q", usr.Name)
|
||||
}
|
||||
return createIDMap(rangeList), nil
|
||||
}
|
||||
|
||||
func lookupSubGIDRanges(usr user.User) ([]IDMap, error) {
|
||||
rangeList, err := parseSubgid(strconv.Itoa(usr.Uid))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if len(rangeList) == 0 {
|
||||
rangeList, err = parseSubgid(usr.Name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
if len(rangeList) == 0 {
|
||||
return nil, errors.Errorf("no subgid ranges found for user %q", usr.Name)
|
||||
}
|
||||
return createIDMap(rangeList), nil
|
||||
}
|
||||
|
|
38
vendor/github.com/fsouza/go-dockerclient/.golangci.yaml
generated
vendored
38
vendor/github.com/fsouza/go-dockerclient/.golangci.yaml
generated
vendored
|
@ -1,38 +1,8 @@
|
|||
run:
|
||||
deadline: 5m
|
||||
|
||||
skip-dirs:
|
||||
- internal
|
||||
|
||||
issues:
|
||||
exclude-rules:
|
||||
- path: _test\.go
|
||||
linters:
|
||||
- bodyclose
|
||||
- goconst
|
||||
- gosec
|
||||
- scopelint
|
||||
- path: testing[/\\].+\.go
|
||||
linters:
|
||||
- gosec
|
||||
- noctx
|
||||
|
||||
linters:
|
||||
enable-all: true
|
||||
disable:
|
||||
- dupl
|
||||
- errcheck
|
||||
- funlen
|
||||
- gochecknoglobals
|
||||
- gocognit
|
||||
- goconst
|
||||
- gocritic
|
||||
- godot
|
||||
- goerr113
|
||||
- gofumpt
|
||||
- gomnd
|
||||
- lll
|
||||
- nestif
|
||||
- nlreturn
|
||||
- testpackage
|
||||
- wsl
|
||||
disable-all: true
|
||||
enable:
|
||||
- gofmt
|
||||
- goimports
|
||||
|
|
3
vendor/github.com/fsouza/go-dockerclient/AUTHORS
generated
vendored
3
vendor/github.com/fsouza/go-dockerclient/AUTHORS
generated
vendored
|
@ -37,6 +37,7 @@ Cássio Botaro
|
|||
Cesar Wong
|
||||
Cezar Sa Espinola
|
||||
Changping Chen
|
||||
Charles Teinturier
|
||||
Cheah Chu Yeow
|
||||
cheneydeng
|
||||
Chris Bednarski
|
||||
|
@ -157,6 +158,7 @@ Phil Lu
|
|||
Philippe Lafoucrière
|
||||
Radek Simko
|
||||
Rafe Colton
|
||||
Randy Fay
|
||||
Raphaël Pinson
|
||||
Reed Allman
|
||||
RJ Catalano
|
||||
|
@ -171,6 +173,7 @@ Sami Wagiaalla
|
|||
Samuel Archambault
|
||||
Samuel Karp
|
||||
Sebastian Borza
|
||||
Sergey Ponomarev
|
||||
Seth Jennings
|
||||
Shane Xie
|
||||
Silas Sewell
|
||||
|
|
2
vendor/github.com/fsouza/go-dockerclient/LICENSE
generated
vendored
2
vendor/github.com/fsouza/go-dockerclient/LICENSE
generated
vendored
|
@ -1,4 +1,4 @@
|
|||
Copyright (c) 2013-2020, go-dockerclient authors
|
||||
Copyright (c) 2013-2021, go-dockerclient authors
|
||||
All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
|
|
27
vendor/github.com/fsouza/go-dockerclient/Makefile
generated
vendored
27
vendor/github.com/fsouza/go-dockerclient/Makefile
generated
vendored
|
@ -1,27 +1,30 @@
|
|||
.PHONY: \
|
||||
all \
|
||||
lint \
|
||||
pretest \
|
||||
test \
|
||||
integration
|
||||
|
||||
|
||||
ifeq "$(strip $(shell go env GOARCH))" "amd64"
|
||||
RACE_FLAG := -race
|
||||
endif
|
||||
|
||||
all: test
|
||||
.PHONY: test
|
||||
test: pretest gotest
|
||||
|
||||
lint:
|
||||
.PHONY: golangci-lint
|
||||
golangci-lint:
|
||||
cd /tmp && GO111MODULE=on go get github.com/golangci/golangci-lint/cmd/golangci-lint@latest
|
||||
golangci-lint run
|
||||
|
||||
.PHONY: staticcheck
|
||||
staticcheck:
|
||||
cd /tmp && GO111MODULE=on go get honnef.co/go/tools/cmd/staticcheck@master
|
||||
staticcheck ./...
|
||||
|
||||
.PHONY: lint
|
||||
lint: golangci-lint staticcheck
|
||||
|
||||
.PHONY: pretest
|
||||
pretest: lint
|
||||
|
||||
.PHONY: gotest
|
||||
gotest:
|
||||
go test $(RACE_FLAG) -vet all ./...
|
||||
|
||||
test: pretest gotest
|
||||
|
||||
.PHONY: integration
|
||||
integration:
|
||||
go test -tags docker_integration -run TestIntegration -v
|
||||
|
|
100
vendor/github.com/fsouza/go-dockerclient/auth.go
generated
vendored
100
vendor/github.com/fsouza/go-dockerclient/auth.go
generated
vendored
|
@ -13,6 +13,7 @@ import (
|
|||
"io/ioutil"
|
||||
"net/http"
|
||||
"os"
|
||||
"os/exec"
|
||||
"path"
|
||||
"strings"
|
||||
)
|
||||
|
@ -283,3 +284,102 @@ func (c *Client) AuthCheck(conf *AuthConfiguration) (AuthStatus, error) {
|
|||
}
|
||||
return authStatus, nil
|
||||
}
|
||||
|
||||
// helperCredentials represents credentials commit from an helper
|
||||
type helperCredentials struct {
|
||||
Username string `json:"Username,omitempty"`
|
||||
Secret string `json:"Secret,omitempty"`
|
||||
}
|
||||
|
||||
// NewAuthConfigurationsFromCredsHelpers returns AuthConfigurations from
|
||||
// installed credentials helpers
|
||||
func NewAuthConfigurationsFromCredsHelpers(registry string) (*AuthConfiguration, error) {
|
||||
// Load docker configuration file in order to find a possible helper provider
|
||||
pathsToTry := cfgPaths(os.Getenv("DOCKER_CONFIG"), os.Getenv("HOME"))
|
||||
if len(pathsToTry) < 1 {
|
||||
return nil, errors.New("no docker configuration found")
|
||||
}
|
||||
|
||||
provider, err := getHelperProviderFromDockerCfg(pathsToTry, registry)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
c, err := getCredentialsFromHelper(provider, registry)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
creds := new(AuthConfiguration)
|
||||
creds.Username = c.Username
|
||||
creds.Password = c.Secret
|
||||
return creds, nil
|
||||
}
|
||||
|
||||
func getHelperProviderFromDockerCfg(pathsToTry []string, registry string) (string, error) {
|
||||
for _, path := range pathsToTry {
|
||||
content, err := ioutil.ReadFile(path)
|
||||
if err != nil {
|
||||
// if we can't read the file keep going
|
||||
continue
|
||||
}
|
||||
|
||||
provider, err := parseCredsDockerConfig(content, registry)
|
||||
if err != nil {
|
||||
continue
|
||||
}
|
||||
if provider != "" {
|
||||
return provider, nil
|
||||
}
|
||||
}
|
||||
return "", errors.New("no docker credentials provider found")
|
||||
}
|
||||
|
||||
func parseCredsDockerConfig(config []byte, registry string) (string, error) {
|
||||
creds := struct {
|
||||
CredsStore string `json:"credsStore,omitempty"`
|
||||
CredHelpers map[string]string `json:"credHelpers,omitempty"`
|
||||
}{}
|
||||
err := json.Unmarshal(config, &creds)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
provider, ok := creds.CredHelpers[registry]
|
||||
if ok {
|
||||
return provider, nil
|
||||
}
|
||||
return creds.CredsStore, nil
|
||||
}
|
||||
|
||||
// Run and parse the found credential helper
|
||||
func getCredentialsFromHelper(provider string, registry string) (*helperCredentials, error) {
|
||||
helpercreds, err := runDockerCredentialsHelper(provider, registry)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
c := new(helperCredentials)
|
||||
err = json.Unmarshal(helpercreds, c)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return c, nil
|
||||
}
|
||||
|
||||
func runDockerCredentialsHelper(provider string, registry string) ([]byte, error) {
|
||||
cmd := exec.Command("docker-credential-"+provider, "get")
|
||||
|
||||
var stdout bytes.Buffer
|
||||
|
||||
cmd.Stdin = bytes.NewBuffer([]byte(registry))
|
||||
cmd.Stdout = &stdout
|
||||
|
||||
err := cmd.Run()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return stdout.Bytes(), nil
|
||||
}
|
||||
|
|
7
vendor/github.com/fsouza/go-dockerclient/client.go
generated
vendored
7
vendor/github.com/fsouza/go-dockerclient/client.go
generated
vendored
|
@ -777,10 +777,9 @@ func (c *Client) hijack(method, path string, hijackOptions hijackOptions) (Close
|
|||
errs := make(chan error, 1)
|
||||
quit := make(chan struct{})
|
||||
go func() {
|
||||
//nolint:staticcheck
|
||||
//lint:ignore SA1019 the alternative doesn't quite work, so keep using the deprecated thing.
|
||||
clientconn := httputil.NewClientConn(dial, nil)
|
||||
defer clientconn.Close()
|
||||
//nolint:bodyclose
|
||||
clientconn.Do(req)
|
||||
if hijackOptions.success != nil {
|
||||
hijackOptions.success <- struct{}{}
|
||||
|
@ -959,7 +958,6 @@ func queryString(opts interface{}) string {
|
|||
}
|
||||
|
||||
func addQueryStringValue(items url.Values, key string, v reflect.Value) bool {
|
||||
//nolint:exhaustive
|
||||
switch v.Kind() {
|
||||
case reflect.Bool:
|
||||
if v.Bool() {
|
||||
|
@ -1059,7 +1057,8 @@ func parseEndpoint(endpoint string, tls bool) (*url.URL, error) {
|
|||
case "http", "https", "tcp":
|
||||
_, port, err := net.SplitHostPort(u.Host)
|
||||
if err != nil {
|
||||
if e, ok := err.(*net.AddrError); ok {
|
||||
var e *net.AddrError
|
||||
if errors.As(err, &e) {
|
||||
if e.Err == "missing port in address" {
|
||||
return u, nil
|
||||
}
|
||||
|
|
1
vendor/github.com/fsouza/go-dockerclient/client_windows.go
generated
vendored
1
vendor/github.com/fsouza/go-dockerclient/client_windows.go
generated
vendored
|
@ -32,7 +32,6 @@ func (c *Client) initializeNativeClient(trFunc func() *http.Transport) {
|
|||
return
|
||||
}
|
||||
namedPipePath := c.endpointURL.Path
|
||||
//nolint:unparam
|
||||
dialFunc := func(_, addr string) (net.Conn, error) {
|
||||
timeout := namedPipeConnectTimeout
|
||||
return winio.DialPipe(namedPipePath, &timeout)
|
||||
|
|
4
vendor/github.com/fsouza/go-dockerclient/container_changes.go
generated
vendored
4
vendor/github.com/fsouza/go-dockerclient/container_changes.go
generated
vendored
|
@ -2,6 +2,7 @@ package docker
|
|||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
|
@ -12,7 +13,8 @@ func (c *Client) ContainerChanges(id string) ([]Change, error) {
|
|||
path := "/containers/" + id + "/changes"
|
||||
resp, err := c.do(http.MethodGet, path, doOptions{})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return nil, &NoSuchContainer{ID: id}
|
||||
}
|
||||
return nil, err
|
||||
|
|
4
vendor/github.com/fsouza/go-dockerclient/container_commit.go
generated
vendored
4
vendor/github.com/fsouza/go-dockerclient/container_commit.go
generated
vendored
|
@ -3,6 +3,7 @@ package docker
|
|||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
|
@ -30,7 +31,8 @@ func (c *Client) CommitContainer(opts CommitContainerOptions) (*Image, error) {
|
|||
context: opts.Context,
|
||||
})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return nil, &NoSuchContainer{ID: opts.Container}
|
||||
}
|
||||
return nil, err
|
||||
|
|
3
vendor/github.com/fsouza/go-dockerclient/container_copy.go
generated
vendored
3
vendor/github.com/fsouza/go-dockerclient/container_copy.go
generated
vendored
|
@ -38,7 +38,8 @@ func (c *Client) CopyFromContainer(opts CopyFromContainerOptions) error {
|
|||
context: opts.Context,
|
||||
})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return &NoSuchContainer{ID: opts.Container}
|
||||
}
|
||||
return err
|
||||
|
|
3
vendor/github.com/fsouza/go-dockerclient/container_create.go
generated
vendored
3
vendor/github.com/fsouza/go-dockerclient/container_create.go
generated
vendored
|
@ -49,7 +49,8 @@ func (c *Client) CreateContainer(opts CreateContainerOptions) (*Container, error
|
|||
},
|
||||
)
|
||||
|
||||
if e, ok := err.(*Error); ok {
|
||||
var e *Error
|
||||
if errors.As(err, &e) {
|
||||
if e.Status == http.StatusNotFound && strings.Contains(e.Message, "No such image") {
|
||||
return nil, ErrNoSuchImage
|
||||
}
|
||||
|
|
5
vendor/github.com/fsouza/go-dockerclient/container_inspect.go
generated
vendored
5
vendor/github.com/fsouza/go-dockerclient/container_inspect.go
generated
vendored
|
@ -3,6 +3,7 @@ package docker
|
|||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
|
@ -17,7 +18,6 @@ func (c *Client) InspectContainer(id string) (*Container, error) {
|
|||
// The context object can be used to cancel the inspect request.
|
||||
//
|
||||
// Deprecated: Use InspectContainerWithOptions instead.
|
||||
//nolint:golint
|
||||
func (c *Client) InspectContainerWithContext(id string, ctx context.Context) (*Container, error) {
|
||||
return c.InspectContainerWithOptions(InspectContainerOptions{ID: id, Context: ctx})
|
||||
}
|
||||
|
@ -31,7 +31,8 @@ func (c *Client) InspectContainerWithOptions(opts InspectContainerOptions) (*Con
|
|||
context: opts.Context,
|
||||
})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return nil, &NoSuchContainer{ID: opts.ID}
|
||||
}
|
||||
return nil, err
|
||||
|
|
5
vendor/github.com/fsouza/go-dockerclient/container_kill.go
generated
vendored
5
vendor/github.com/fsouza/go-dockerclient/container_kill.go
generated
vendored
|
@ -2,6 +2,7 @@ package docker
|
|||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
|
@ -27,8 +28,8 @@ func (c *Client) KillContainer(opts KillContainerOptions) error {
|
|||
path := "/containers/" + opts.ID + "/kill" + "?" + queryString(opts)
|
||||
resp, err := c.do(http.MethodPost, path, doOptions{context: opts.Context})
|
||||
if err != nil {
|
||||
e, ok := err.(*Error)
|
||||
if !ok {
|
||||
var e *Error
|
||||
if !errors.As(err, &e) {
|
||||
return err
|
||||
}
|
||||
switch e.Status {
|
||||
|
|
4
vendor/github.com/fsouza/go-dockerclient/container_pause.go
generated
vendored
4
vendor/github.com/fsouza/go-dockerclient/container_pause.go
generated
vendored
|
@ -1,6 +1,7 @@
|
|||
package docker
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
)
|
||||
|
@ -12,7 +13,8 @@ func (c *Client) PauseContainer(id string) error {
|
|||
path := fmt.Sprintf("/containers/%s/pause", id)
|
||||
resp, err := c.do(http.MethodPost, path, doOptions{})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return &NoSuchContainer{ID: id}
|
||||
}
|
||||
return err
|
||||
|
|
4
vendor/github.com/fsouza/go-dockerclient/container_remove.go
generated
vendored
4
vendor/github.com/fsouza/go-dockerclient/container_remove.go
generated
vendored
|
@ -2,6 +2,7 @@ package docker
|
|||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
|
@ -29,7 +30,8 @@ func (c *Client) RemoveContainer(opts RemoveContainerOptions) error {
|
|||
path := "/containers/" + opts.ID + "?" + queryString(opts)
|
||||
resp, err := c.do(http.MethodDelete, path, doOptions{context: opts.Context})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return &NoSuchContainer{ID: opts.ID}
|
||||
}
|
||||
return err
|
||||
|
|
4
vendor/github.com/fsouza/go-dockerclient/container_restart.go
generated
vendored
4
vendor/github.com/fsouza/go-dockerclient/container_restart.go
generated
vendored
|
@ -1,6 +1,7 @@
|
|||
package docker
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
)
|
||||
|
@ -52,7 +53,8 @@ func (c *Client) RestartContainer(id string, timeout uint) error {
|
|||
path := fmt.Sprintf("/containers/%s/restart?t=%d", id, timeout)
|
||||
resp, err := c.do(http.MethodPost, path, doOptions{})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return &NoSuchContainer{ID: id}
|
||||
}
|
||||
return err
|
||||
|
|
5
vendor/github.com/fsouza/go-dockerclient/container_start.go
generated
vendored
5
vendor/github.com/fsouza/go-dockerclient/container_start.go
generated
vendored
|
@ -2,6 +2,7 @@ package docker
|
|||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
|
@ -27,7 +28,6 @@ func (c *Client) StartContainer(id string, hostConfig *HostConfig) error {
|
|||
// API 1.24 or greater.
|
||||
//
|
||||
// See https://goo.gl/fbOSZy for more details.
|
||||
//nolint:golint
|
||||
func (c *Client) StartContainerWithContext(id string, hostConfig *HostConfig, ctx context.Context) error {
|
||||
return c.startContainer(id, hostConfig, doOptions{context: ctx})
|
||||
}
|
||||
|
@ -43,7 +43,8 @@ func (c *Client) startContainer(id string, hostConfig *HostConfig, opts doOption
|
|||
}
|
||||
resp, err := c.do(http.MethodPost, path, opts)
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return &NoSuchContainer{ID: id, Err: err}
|
||||
}
|
||||
return err
|
||||
|
|
7
vendor/github.com/fsouza/go-dockerclient/container_stats.go
generated
vendored
7
vendor/github.com/fsouza/go-dockerclient/container_stats.go
generated
vendored
|
@ -3,6 +3,7 @@ package docker
|
|||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"net/http"
|
||||
|
@ -175,8 +176,8 @@ func (c *Client) Stats(opts StatsOptions) (retErr error) {
|
|||
reqSent: reqSent,
|
||||
})
|
||||
if err != nil {
|
||||
dockerError, ok := err.(*Error)
|
||||
if ok {
|
||||
var dockerError *Error
|
||||
if errors.As(err, &dockerError) {
|
||||
if dockerError.Status == http.StatusNotFound {
|
||||
err = &NoSuchContainer{ID: opts.ID}
|
||||
}
|
||||
|
@ -203,7 +204,7 @@ func (c *Client) Stats(opts StatsOptions) (retErr error) {
|
|||
decoder := json.NewDecoder(readCloser)
|
||||
stats := new(Stats)
|
||||
<-reqSent
|
||||
for err := decoder.Decode(stats); err != io.EOF; err = decoder.Decode(stats) {
|
||||
for err := decoder.Decode(stats); !errors.Is(err, io.EOF); err = decoder.Decode(stats) {
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
5
vendor/github.com/fsouza/go-dockerclient/container_stop.go
generated
vendored
5
vendor/github.com/fsouza/go-dockerclient/container_stop.go
generated
vendored
|
@ -2,6 +2,7 @@ package docker
|
|||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
)
|
||||
|
@ -19,7 +20,6 @@ func (c *Client) StopContainer(id string, timeout uint) error {
|
|||
// container request.
|
||||
//
|
||||
// See https://goo.gl/R9dZcV for more details.
|
||||
//nolint:golint
|
||||
func (c *Client) StopContainerWithContext(id string, timeout uint, ctx context.Context) error {
|
||||
return c.stopContainer(id, timeout, doOptions{context: ctx})
|
||||
}
|
||||
|
@ -28,7 +28,8 @@ func (c *Client) stopContainer(id string, timeout uint, opts doOptions) error {
|
|||
path := fmt.Sprintf("/containers/%s/stop?t=%d", id, timeout)
|
||||
resp, err := c.do(http.MethodPost, path, opts)
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return &NoSuchContainer{ID: id}
|
||||
}
|
||||
return err
|
||||
|
|
4
vendor/github.com/fsouza/go-dockerclient/container_top.go
generated
vendored
4
vendor/github.com/fsouza/go-dockerclient/container_top.go
generated
vendored
|
@ -2,6 +2,7 @@ package docker
|
|||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
)
|
||||
|
@ -27,7 +28,8 @@ func (c *Client) TopContainer(id string, psArgs string) (TopResult, error) {
|
|||
path := fmt.Sprintf("/containers/%s/top%s", id, args)
|
||||
resp, err := c.do(http.MethodGet, path, doOptions{})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return result, &NoSuchContainer{ID: id}
|
||||
}
|
||||
return result, err
|
||||
|
|
4
vendor/github.com/fsouza/go-dockerclient/container_unpause.go
generated
vendored
4
vendor/github.com/fsouza/go-dockerclient/container_unpause.go
generated
vendored
|
@ -1,6 +1,7 @@
|
|||
package docker
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"net/http"
|
||||
)
|
||||
|
@ -12,7 +13,8 @@ func (c *Client) UnpauseContainer(id string) error {
|
|||
path := fmt.Sprintf("/containers/%s/unpause", id)
|
||||
resp, err := c.do(http.MethodPost, path, doOptions{})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return &NoSuchContainer{ID: id}
|
||||
}
|
||||
return err
|
||||
|
|
5
vendor/github.com/fsouza/go-dockerclient/container_wait.go
generated
vendored
5
vendor/github.com/fsouza/go-dockerclient/container_wait.go
generated
vendored
|
@ -3,6 +3,7 @@ package docker
|
|||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
|
@ -19,7 +20,6 @@ func (c *Client) WaitContainer(id string) (int, error) {
|
|||
// inspect request.
|
||||
//
|
||||
// See https://goo.gl/4AGweZ for more details.
|
||||
//nolint:golint
|
||||
func (c *Client) WaitContainerWithContext(id string, ctx context.Context) (int, error) {
|
||||
return c.waitContainer(id, doOptions{context: ctx})
|
||||
}
|
||||
|
@ -27,7 +27,8 @@ func (c *Client) WaitContainerWithContext(id string, ctx context.Context) (int,
|
|||
func (c *Client) waitContainer(id string, opts doOptions) (int, error) {
|
||||
resp, err := c.do(http.MethodPost, "/containers/"+id+"/wait", opts)
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return 0, &NoSuchContainer{ID: id}
|
||||
}
|
||||
return 0, err
|
||||
|
|
79
vendor/github.com/fsouza/go-dockerclient/event.go
generated
vendored
79
vendor/github.com/fsouza/go-dockerclient/event.go
generated
vendored
|
@ -7,17 +7,48 @@ package docker
|
|||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"math"
|
||||
"net"
|
||||
"net/http"
|
||||
"net/http/httputil"
|
||||
"strconv"
|
||||
"sync"
|
||||
"sync/atomic"
|
||||
"time"
|
||||
)
|
||||
|
||||
// EventsOptions to filter events
|
||||
// See https://docs.docker.com/engine/api/v1.41/#operation/SystemEvents for more details.
|
||||
type EventsOptions struct {
|
||||
// Show events created since this timestamp then stream new events.
|
||||
Since string
|
||||
|
||||
// Show events created until this timestamp then stop streaming.
|
||||
Until string
|
||||
|
||||
// Filter for events. For example:
|
||||
// map[string][]string{"type": {"container"}, "event": {"start", "die"}}
|
||||
// will return events when container was started and stopped or killed
|
||||
//
|
||||
// Available filters:
|
||||
// config=<string> config name or ID
|
||||
// container=<string> container name or ID
|
||||
// daemon=<string> daemon name or ID
|
||||
// event=<string> event type
|
||||
// image=<string> image name or ID
|
||||
// label=<string> image or container label
|
||||
// network=<string> network name or ID
|
||||
// node=<string> node ID
|
||||
// plugin= plugin name or ID
|
||||
// scope= local or swarm
|
||||
// secret=<string> secret name or ID
|
||||
// service=<string> service name or ID
|
||||
// type=<string> container, image, volume, network, daemon, plugin, node, service, secret or config
|
||||
// volume=<string> volume name
|
||||
Filters map[string][]string
|
||||
}
|
||||
|
||||
// APIEvents represents events coming from the Docker API
|
||||
// The fields in the Docker API changed in API version 1.22, and
|
||||
// events for more than images and containers are now fired off.
|
||||
|
@ -93,9 +124,17 @@ var (
|
|||
//
|
||||
// The parameter is a channel through which events will be sent.
|
||||
func (c *Client) AddEventListener(listener chan<- *APIEvents) error {
|
||||
return c.AddEventListenerWithOptions(EventsOptions{}, listener)
|
||||
}
|
||||
|
||||
// AddEventListener adds a new listener to container events in the Docker API.
|
||||
// See https://docs.docker.com/engine/api/v1.41/#operation/SystemEvents for more details.
|
||||
//
|
||||
// The listener parameter is a channel through which events will be sent.
|
||||
func (c *Client) AddEventListenerWithOptions(options EventsOptions, listener chan<- *APIEvents) error {
|
||||
var err error
|
||||
if !c.eventMonitor.isEnabled() {
|
||||
err = c.eventMonitor.enableEventMonitoring(c)
|
||||
err = c.eventMonitor.enableEventMonitoring(c, options)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
@ -165,7 +204,7 @@ func listenerExists(a chan<- *APIEvents, list *[]chan<- *APIEvents) bool {
|
|||
return false
|
||||
}
|
||||
|
||||
func (eventState *eventMonitoringState) enableEventMonitoring(c *Client) error {
|
||||
func (eventState *eventMonitoringState) enableEventMonitoring(c *Client, opts EventsOptions) error {
|
||||
eventState.Lock()
|
||||
defer eventState.Unlock()
|
||||
if !eventState.enabled {
|
||||
|
@ -173,7 +212,7 @@ func (eventState *eventMonitoringState) enableEventMonitoring(c *Client) error {
|
|||
atomic.StoreInt64(&eventState.lastSeen, 0)
|
||||
eventState.C = make(chan *APIEvents, 100)
|
||||
eventState.errC = make(chan error, 1)
|
||||
go eventState.monitorEvents(c)
|
||||
go eventState.monitorEvents(c, opts)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
@ -193,7 +232,7 @@ func (eventState *eventMonitoringState) disableEventMonitoring() {
|
|||
}
|
||||
}
|
||||
|
||||
func (eventState *eventMonitoringState) monitorEvents(c *Client) {
|
||||
func (eventState *eventMonitoringState) monitorEvents(c *Client, opts EventsOptions) {
|
||||
const (
|
||||
noListenersTimeout = 5 * time.Second
|
||||
noListenersInterval = 10 * time.Millisecond
|
||||
|
@ -213,7 +252,7 @@ func (eventState *eventMonitoringState) monitorEvents(c *Client) {
|
|||
return
|
||||
}
|
||||
|
||||
if err = eventState.connectWithRetry(c); err != nil {
|
||||
if err = eventState.connectWithRetry(c, opts); err != nil {
|
||||
// terminate if connect failed
|
||||
eventState.disableEventMonitoring()
|
||||
return
|
||||
|
@ -232,11 +271,11 @@ func (eventState *eventMonitoringState) monitorEvents(c *Client) {
|
|||
eventState.updateLastSeen(ev)
|
||||
eventState.sendEvent(ev)
|
||||
case err = <-eventState.errC:
|
||||
if err == ErrNoListeners {
|
||||
if errors.Is(err, ErrNoListeners) {
|
||||
eventState.disableEventMonitoring()
|
||||
return
|
||||
} else if err != nil {
|
||||
defer func() { go eventState.monitorEvents(c) }()
|
||||
defer func() { go eventState.monitorEvents(c, opts) }()
|
||||
return
|
||||
}
|
||||
case <-timeout:
|
||||
|
@ -245,13 +284,13 @@ func (eventState *eventMonitoringState) monitorEvents(c *Client) {
|
|||
}
|
||||
}
|
||||
|
||||
func (eventState *eventMonitoringState) connectWithRetry(c *Client) error {
|
||||
func (eventState *eventMonitoringState) connectWithRetry(c *Client, opts EventsOptions) error {
|
||||
var retries int
|
||||
eventState.RLock()
|
||||
eventChan := eventState.C
|
||||
errChan := eventState.errC
|
||||
eventState.RUnlock()
|
||||
err := c.eventHijack(atomic.LoadInt64(&eventState.lastSeen), eventChan, errChan)
|
||||
err := c.eventHijack(opts, atomic.LoadInt64(&eventState.lastSeen), eventChan, errChan)
|
||||
for ; err != nil && retries < maxMonitorConnRetries; retries++ {
|
||||
waitTime := int64(retryInitialWaitTime * math.Pow(2, float64(retries)))
|
||||
time.Sleep(time.Duration(waitTime) * time.Millisecond)
|
||||
|
@ -259,7 +298,7 @@ func (eventState *eventMonitoringState) connectWithRetry(c *Client) error {
|
|||
eventChan = eventState.C
|
||||
errChan = eventState.errC
|
||||
eventState.RUnlock()
|
||||
err = c.eventHijack(atomic.LoadInt64(&eventState.lastSeen), eventChan, errChan)
|
||||
err = c.eventHijack(opts, atomic.LoadInt64(&eventState.lastSeen), eventChan, errChan)
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
@ -304,11 +343,12 @@ func (eventState *eventMonitoringState) updateLastSeen(e *APIEvents) {
|
|||
}
|
||||
}
|
||||
|
||||
func (c *Client) eventHijack(startTime int64, eventChan chan *APIEvents, errChan chan error) error {
|
||||
uri := "/events"
|
||||
func (c *Client) eventHijack(opts EventsOptions, startTime int64, eventChan chan *APIEvents, errChan chan error) error {
|
||||
// on reconnect override initial Since with last event seen time
|
||||
if startTime != 0 {
|
||||
uri += fmt.Sprintf("?since=%d", startTime)
|
||||
opts.Since = strconv.FormatInt(startTime, 10)
|
||||
}
|
||||
uri := "/events?" + queryString(opts)
|
||||
protocol := c.endpointURL.Scheme
|
||||
address := c.endpointURL.Path
|
||||
if protocol != "unix" && protocol != "npipe" {
|
||||
|
@ -329,16 +369,17 @@ func (c *Client) eventHijack(startTime int64, eventChan chan *APIEvents, errChan
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
conn := httputil.NewClientConn(dial, nil) //nolint:staticcheck
|
||||
req, err := http.NewRequest(http.MethodGet, uri, nil) //nolint:noctx
|
||||
//lint:ignore SA1019 the alternative doesn't quite work, so keep using the deprecated thing.
|
||||
conn := httputil.NewClientConn(dial, nil)
|
||||
req, err := http.NewRequest(http.MethodGet, uri, nil)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
res, err := conn.Do(req) //nolint:bodyclose
|
||||
res, err := conn.Do(req)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
//nolint:staticcheck
|
||||
//lint:ignore SA1019 the alternative doesn't quite work, so keep using the deprecated thing.
|
||||
go func(res *http.Response, conn *httputil.ClientConn) {
|
||||
defer conn.Close()
|
||||
defer res.Body.Close()
|
||||
|
@ -346,7 +387,7 @@ func (c *Client) eventHijack(startTime int64, eventChan chan *APIEvents, errChan
|
|||
for {
|
||||
var event APIEvents
|
||||
if err = decoder.Decode(&event); err != nil {
|
||||
if err == io.EOF || err == io.ErrUnexpectedEOF {
|
||||
if errors.Is(err, io.EOF) || errors.Is(err, io.ErrUnexpectedEOF) {
|
||||
c.eventMonitor.RLock()
|
||||
if c.eventMonitor.enabled && c.eventMonitor.C == eventChan {
|
||||
// Signal that we're exiting.
|
||||
|
|
12
vendor/github.com/fsouza/go-dockerclient/exec.go
generated
vendored
12
vendor/github.com/fsouza/go-dockerclient/exec.go
generated
vendored
|
@ -44,6 +44,9 @@ type CreateExecOptions struct {
|
|||
//
|
||||
// See https://goo.gl/60TeBP for more details
|
||||
func (c *Client) CreateExec(opts CreateExecOptions) (*Exec, error) {
|
||||
if c.serverAPIVersion == nil {
|
||||
c.checkAPIVersion()
|
||||
}
|
||||
if len(opts.Env) > 0 && c.serverAPIVersion.LessThan(apiVersion125) {
|
||||
return nil, errors.New("exec configuration Env is only supported in API#1.25 and above")
|
||||
}
|
||||
|
@ -53,7 +56,8 @@ func (c *Client) CreateExec(opts CreateExecOptions) (*Exec, error) {
|
|||
path := fmt.Sprintf("/containers/%s/exec", opts.Container)
|
||||
resp, err := c.do(http.MethodPost, path, doOptions{data: opts, context: opts.Context})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return nil, &NoSuchContainer{ID: opts.Container}
|
||||
}
|
||||
return nil, err
|
||||
|
@ -122,7 +126,8 @@ func (c *Client) StartExecNonBlocking(id string, opts StartExecOptions) (CloseWa
|
|||
if opts.Detach {
|
||||
resp, err := c.do(http.MethodPost, path, doOptions{data: opts, context: opts.Context})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return nil, &NoSuchExec{ID: id}
|
||||
}
|
||||
return nil, err
|
||||
|
@ -195,7 +200,8 @@ func (c *Client) InspectExec(id string) (*ExecInspect, error) {
|
|||
path := fmt.Sprintf("/exec/%s/json", id)
|
||||
resp, err := c.do(http.MethodGet, path, doOptions{})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return nil, &NoSuchExec{ID: id}
|
||||
}
|
||||
return nil, err
|
||||
|
|
26
vendor/github.com/fsouza/go-dockerclient/go.mod
generated
vendored
26
vendor/github.com/fsouza/go-dockerclient/go.mod
generated
vendored
|
@ -1,24 +1,24 @@
|
|||
module github.com/fsouza/go-dockerclient
|
||||
|
||||
go 1.14
|
||||
go 1.15
|
||||
|
||||
require (
|
||||
github.com/Microsoft/go-winio v0.4.15-0.20200113171025-3fe6c5262873
|
||||
github.com/Microsoft/hcsshim v0.8.9 // indirect
|
||||
github.com/containerd/containerd v1.3.4 // indirect
|
||||
github.com/containerd/continuity v0.0.0-20200413184840-d3ef23f19fbb // indirect
|
||||
github.com/docker/distribution v2.7.1+incompatible // indirect
|
||||
github.com/docker/docker v17.12.0-ce-rc1.0.20200505174321-1655290016ac+incompatible
|
||||
github.com/Microsoft/go-winio v0.4.16
|
||||
github.com/Microsoft/hcsshim v0.8.14 // indirect
|
||||
github.com/containerd/containerd v1.4.3 // indirect
|
||||
github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e // indirect
|
||||
github.com/docker/docker v20.10.3-0.20210216175712-646072ed6524+incompatible
|
||||
github.com/docker/go-connections v0.4.0 // indirect
|
||||
github.com/docker/go-units v0.4.0
|
||||
github.com/google/go-cmp v0.5.2
|
||||
github.com/gogo/protobuf v1.3.2 // indirect
|
||||
github.com/google/go-cmp v0.5.5
|
||||
github.com/gorilla/mux v1.8.0
|
||||
github.com/moby/sys/mount v0.1.0 // indirect
|
||||
github.com/moby/term v0.0.0-20200429084858-129dac9f73f6 // indirect
|
||||
github.com/moby/sys/mount v0.2.0 // indirect
|
||||
github.com/moby/term v0.0.0-20201216013528-df9cb8a40635 // indirect
|
||||
github.com/morikuni/aec v1.0.0 // indirect
|
||||
github.com/opencontainers/image-spec v1.0.1 // indirect
|
||||
github.com/opencontainers/runc v0.1.1 // indirect
|
||||
golang.org/x/crypto v0.0.0-20200429183012-4b2356b1ed79
|
||||
google.golang.org/grpc v1.29.1 // indirect
|
||||
gotest.tools/v3 v3.0.2 // indirect
|
||||
golang.org/x/sys v0.0.0-20210216224549-f992740a1bac // indirect
|
||||
golang.org/x/term v0.0.0-20201113234701-d7a72108b828
|
||||
gotest.tools/v3 v3.0.3 // indirect
|
||||
)
|
||||
|
|
180
vendor/github.com/fsouza/go-dockerclient/go.sum
generated
vendored
180
vendor/github.com/fsouza/go-dockerclient/go.sum
generated
vendored
|
@ -3,186 +3,163 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMT
|
|||
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8=
|
||||
github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8=
|
||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||
github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5 h1:ygIc8M6trr62pF5DucadTWGdEB4mEyvzi0e2nbcmcyA=
|
||||
github.com/Microsoft/go-winio v0.4.15-0.20190919025122-fc70bd9a86b5/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw=
|
||||
github.com/Microsoft/go-winio v0.4.15-0.20200113171025-3fe6c5262873 h1:93nQ7k53GjoMQ07HVP8g6Zj1fQZDDj7Xy2VkNNtvX8o=
|
||||
github.com/Microsoft/go-winio v0.4.15-0.20200113171025-3fe6c5262873/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw=
|
||||
github.com/Microsoft/hcsshim v0.8.9 h1:VrfodqvztU8YSOvygU+DN1BGaSGxmrNfqOv5oOuX2Bk=
|
||||
github.com/Microsoft/hcsshim v0.8.9/go.mod h1:5692vkUqntj1idxauYlpoINNKeqCiG6Sg38RRsjT5y8=
|
||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||
github.com/Microsoft/go-winio v0.4.16-0.20201130162521-d1ffc52c7331/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0=
|
||||
github.com/Microsoft/go-winio v0.4.16 h1:FtSW/jqD+l4ba5iPBj9CODVtgfYAD8w2wS923g/cFDk=
|
||||
github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0=
|
||||
github.com/Microsoft/hcsshim v0.8.14 h1:lbPVK25c1cu5xTLITwpUcxoA9vKrKErASPYygvouJns=
|
||||
github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2ow3VK6a9Lg=
|
||||
github.com/cilium/ebpf v0.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg=
|
||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
||||
github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f h1:tSNMc+rJDfmYntojat8lljbt1mgKNpTxUZJsSzJ9Y1s=
|
||||
github.com/containerd/cgroups v0.0.0-20190919134610-bf292b21730f/go.mod h1:OApqhQ4XNSNC13gXIwDjhOQxjWa/NxkwZXJ1EvqT0ko=
|
||||
github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59 h1:qWj4qVYZ95vLWwqyNJCQg7rDsG5wPdze0UaPolH7DUk=
|
||||
github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM=
|
||||
github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw=
|
||||
github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
|
||||
github.com/containerd/containerd v1.3.4 h1:3o0smo5SKY7H6AJCmJhsnCjR2/V2T8VmiHt7seN2/kI=
|
||||
github.com/containerd/containerd v1.3.4/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
|
||||
github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc h1:TP+534wVlf61smEIq1nwLLAjQVEK2EADoW3CX9AuT+8=
|
||||
github.com/containerd/containerd v1.4.3 h1:ijQT13JedHSHrQGWFcGEwzcNKrAGIiZ+jSD5QQG07SY=
|
||||
github.com/containerd/containerd v1.4.3/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
|
||||
github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y=
|
||||
github.com/containerd/continuity v0.0.0-20200413184840-d3ef23f19fbb h1:nXPkFq8X1a9ycY3GYQpFNxHh3j2JgY7zDZfq2EXMIzk=
|
||||
github.com/containerd/continuity v0.0.0-20200413184840-d3ef23f19fbb/go.mod h1:Dq467ZllaHgAtVp4p1xUQWBrFXR9s/wyoTpG8zOJGkY=
|
||||
github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448 h1:PUD50EuOMkXVcpBIA/R95d56duJR9VxhwncsFbNnxW4=
|
||||
github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e h1:6JKvHHt396/qabvMhnhUZvWaHZzfVfldxE60TK8YLhg=
|
||||
github.com/containerd/continuity v0.0.0-20210208174643-50096c924a4e/go.mod h1:EXlVlkqNba9rJe3j7w3Xa924itAMLgZH4UD/Q4PExuQ=
|
||||
github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI=
|
||||
github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0=
|
||||
github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de h1:dlfGmNcE3jDAecLqwKPMNX6nk2qh1c1Vg1/YTzpOOF4=
|
||||
github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o=
|
||||
github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd h1:JNn81o/xG+8NEo3bC/vx9pbi/g2WI8mtP2/nXzu297Y=
|
||||
github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc=
|
||||
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
||||
github.com/creack/pty v1.1.9 h1:uDmaGzcdjhF4i/plgjmEsriH11Y0o7RKapEf/LDaM3w=
|
||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||
github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||
github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw=
|
||||
github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||
github.com/docker/distribution v2.7.1+incompatible h1:a5mlkVzth6W5A4fOsS3D2EO5BUmsJpcB+cRlLU7cSug=
|
||||
github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||
github.com/docker/docker v17.12.0-ce-rc1.0.20200505174321-1655290016ac+incompatible h1:ZxJX4ZSNg1LORBsStUojbrLfkrE3Ut122XhzyZnN110=
|
||||
github.com/docker/docker v17.12.0-ce-rc1.0.20200505174321-1655290016ac+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||
github.com/docker/docker v20.10.3-0.20210216175712-646072ed6524+incompatible h1:Yu2uGErhwEoOT/OxAFe+/SiJCqRLs+pgcS5XKrDXnG4=
|
||||
github.com/docker/docker v20.10.3-0.20210216175712-646072ed6524+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||
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-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw=
|
||||
github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
|
||||
github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
|
||||
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
|
||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||
github.com/godbus/dbus v0.0.0-20190422162347-ade71ed3457e/go.mod h1:bBOAhwG1umN6/6ZUMtDFBMQR8jRg9O75tm9K00oMsK4=
|
||||
github.com/gogo/protobuf v1.2.1 h1:/s5zKNz0uPFCZ5hddgPdo2TK2TVrUNMn0OOX8/aZMTE=
|
||||
github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4=
|
||||
github.com/gogo/protobuf v1.3.1 h1:DqDEcV5aeaTmdFBePNpYsp3FlcVH/2ISVVM9Qf8PSls=
|
||||
github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
|
||||
github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||
github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
|
||||
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
|
||||
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
|
||||
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
|
||||
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I=
|
||||
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
|
||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
||||
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
|
||||
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.4.1 h1:/exdXoGamhu5ONeUJH0deniYLWYvQwW66yvlfiiKTu0=
|
||||
github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
|
||||
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.1 h1:JFrFEBb2xKufg6XkJsJr+WbKb4FQlURi5RUcBveYu9k=
|
||||
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=
|
||||
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/gorilla/mux v1.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc=
|
||||
github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
|
||||
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
|
||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
|
||||
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
|
||||
github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU=
|
||||
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
|
||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
||||
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
||||
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
|
||||
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
|
||||
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/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=
|
||||
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/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
|
||||
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
|
||||
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
|
||||
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
|
||||
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
|
||||
github.com/moby/sys/mount v0.1.0 h1:Ytx78EatgFKtrqZ0BvJ0UtJE472ZvawVmil6pIfuCCU=
|
||||
github.com/moby/sys/mount v0.1.0/go.mod h1:FVQFLDRWwyBjDTBNQXDlWnSFREqOo3OKX9aqhmeoo74=
|
||||
github.com/moby/sys/mountinfo v0.1.0 h1:r8vMRbMAFEAfiNptYVokP+nfxPJzvRuia5e2vzXtENo=
|
||||
github.com/moby/sys/mountinfo v0.1.0/go.mod h1:w2t2Avltqx8vE7gX5l+QiBKxODu2TX0+Syr3h52Tw4o=
|
||||
github.com/moby/term v0.0.0-20200429084858-129dac9f73f6 h1:3Y9aosU6S5Bo8GYH0s+t1ej4m30GuUKvQ3c9ZLqdL28=
|
||||
github.com/moby/term v0.0.0-20200429084858-129dac9f73f6/go.mod h1:or9wGItza1sRcM4Wd3dIv8DsFHYQuFsMHEdxUIlUxms=
|
||||
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/mountinfo v0.4.0 h1:1KInV3Huv18akCu58V7lzNlt+jFmqlu1EaErnEHE/VM=
|
||||
github.com/moby/sys/mountinfo v0.4.0/go.mod h1:rEr8tzG/lsIZHBtN/JjGG+LMYx9eXgW2JI+6q0qou+A=
|
||||
github.com/moby/term v0.0.0-20201216013528-df9cb8a40635 h1:rzf0wL0CHVc8CEsgyygG0Mn9CNCCPZqOPaz8RiiHYQk=
|
||||
github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc=
|
||||
github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
|
||||
github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
|
||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
||||
github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
|
||||
github.com/opencontainers/go-digest v1.0.0-rc1 h1:WzifXhOVOEOuFYOJAW6aQqW0TooG2iki3E3Ii+WN7gQ=
|
||||
github.com/opencontainers/go-digest v1.0.0-rc1/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s=
|
||||
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
|
||||
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
|
||||
github.com/opencontainers/image-spec v1.0.1 h1:JMemWkRwHx4Zj+fVxWoMCFm/8sYGGrUVojFA6h/TRcI=
|
||||
github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
|
||||
github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
|
||||
github.com/opencontainers/runc v0.1.1 h1:GlxAyO6x8rfZYN9Tt0Kti5a/cP41iuiO2yYT0IJGY8Y=
|
||||
github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U=
|
||||
github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700 h1:eNUVfm/RFLIi1G7flU5/ZRTHvd4kcVuzfRnL6OFlzCI=
|
||||
github.com/opencontainers/runtime-spec v0.1.2-0.20190507144316-5b71a03e2700/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
||||
github.com/pkg/errors v0.8.1-0.20171018195549-f15c970de5b7/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
|
||||
github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
||||
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
|
||||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
|
||||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||
github.com/sirupsen/logrus v1.0.4-0.20170822132746-89742aefa4b2/go.mod h1:pMByvHTf9Beacp5x1UXfOR9xyW/9antXMhjMPG0dEzc=
|
||||
github.com/sirupsen/logrus v1.4.1 h1:GL2rEmy6nsikmW0r8opw9JIRScdMF5hA8cOYLH7In1k=
|
||||
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
||||
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
|
||||
github.com/sirupsen/logrus v1.4.2 h1:SPIRibHv4MatM3XXNO2BJeFLZwZ2LvZgfQ5+UNI2im4=
|
||||
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
||||
github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM=
|
||||
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
||||
github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ=
|
||||
github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
|
||||
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
|
||||
github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
|
||||
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
|
||||
github.com/urfave/cli v0.0.0-20171014202726-7bc6a0acffa5/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
|
||||
github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
go.opencensus.io v0.22.0 h1:C9hSCOW830chIVkdja34wa6Ky+IzWllkUinR+BtRZd4=
|
||||
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
|
||||
golang.org/x/crypto v0.0.0-20171113213409-9f005a07e0d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20200429183012-4b2356b1ed79 h1:IaQbIIB2X/Mp/DKctl6ROxz1KyMlKp4uyvL6+kQ7C88=
|
||||
golang.org/x/crypto v0.0.0-20200429183012-4b2356b1ed79/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
||||
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09 h1:KaQtG+aDELoNmXYas3TVkGNYRuq8JQ1aa7LJt8EXVyo=
|
||||
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20191004110552-13f9640d40b9 h1:rjwSpXsdiK0dV8/Naq3kAw9ymfAeJIyd0upUIElB+lI=
|
||||
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
|
||||
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=
|
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9 h1:SQFwaSi55rU7vdNs9Yr0Z324VNlrF+0wMqRXT4St8ck=
|
||||
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190514135907-3a4b5fb9f71f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3 h1:7TYNF4UdlohbFwpNH04CoPMp1cHUZgO1Ebq5r2hIjfo=
|
||||
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527 h1:uYVVQ9WP/Ds2ROhcaGPeIdVq0RIXVLwsHlnvJ+cT1So=
|
||||
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200120151820-655fe14d7479/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200909081042-eff7692f9009/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200922070232-aee5d888a860/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210216224549-f992740a1bac h1:9glrpwtNjBYgRpb67AZJKHfzj1stG/8BL5H7In2oTC4=
|
||||
golang.org/x/sys v0.0.0-20210216224549-f992740a1bac/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/term v0.0.0-20201113234701-d7a72108b828 h1:htWEtQEuEVJ4tU/Ngx7Cd/4Q7e3A5Up1owgyBtVsTwk=
|
||||
golang.org/x/term v0.0.0-20201113234701-d7a72108b828/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
|
||||
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
|
||||
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
|
@ -190,39 +167,32 @@ golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3
|
|||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||
golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
|
||||
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
|
||||
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
|
||||
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb h1:i1Ppqkc3WQXikh8bXiwHqAN5Rv3/qDCcRk0/Otx73BY=
|
||||
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
||||
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
|
||||
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55 h1:gSJIx1SDwno+2ElGhA4+qG2zF97qiUzTM+rQ0klBOcE=
|
||||
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
|
||||
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||
google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
|
||||
google.golang.org/grpc v1.29.1 h1:EC2SB8S04d2r73uptxphDSUG+kTKVgjRPF+N3xpxRB4=
|
||||
google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
|
||||
gopkg.in/airbrake/gobrake.v2 v2.0.9/go.mod h1:/h5ZAUhDkGaJfjzjKLSjv6zCL6O0LLBxU4K+aSYdM/U=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
|
||||
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
||||
gopkg.in/gemnasium/logrus-airbrake-hook.v2 v2.1.2/go.mod h1:Xk6kEKp8OKb+X14hQBKWaSkCsqBpgog8nAV2xsGOxlo=
|
||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
||||
gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
|
||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
|
||||
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
|
||||
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
|
||||
gotest.tools/v3 v3.0.2 h1:kG1BFyqVHuQoVQiR1bWGnfz/fmHvvuiSPIV7rvl360E=
|
||||
gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk=
|
||||
gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0=
|
||||
gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8=
|
||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
|
|
13
vendor/github.com/fsouza/go-dockerclient/image.go
generated
vendored
13
vendor/github.com/fsouza/go-dockerclient/image.go
generated
vendored
|
@ -138,7 +138,8 @@ type ImageHistory struct {
|
|||
func (c *Client) ImageHistory(name string) ([]ImageHistory, error) {
|
||||
resp, err := c.do(http.MethodGet, "/images/"+name+"/history", doOptions{})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return nil, ErrNoSuchImage
|
||||
}
|
||||
return nil, err
|
||||
|
@ -157,7 +158,8 @@ func (c *Client) ImageHistory(name string) ([]ImageHistory, error) {
|
|||
func (c *Client) RemoveImage(name string) error {
|
||||
resp, err := c.do(http.MethodDelete, "/images/"+name, doOptions{})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return ErrNoSuchImage
|
||||
}
|
||||
return err
|
||||
|
@ -184,7 +186,8 @@ func (c *Client) RemoveImageExtended(name string, opts RemoveImageOptions) error
|
|||
uri := fmt.Sprintf("/images/%s?%s", name, queryString(&opts))
|
||||
resp, err := c.do(http.MethodDelete, uri, doOptions{context: opts.Context})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return ErrNoSuchImage
|
||||
}
|
||||
return err
|
||||
|
@ -199,7 +202,8 @@ func (c *Client) RemoveImageExtended(name string, opts RemoveImageOptions) error
|
|||
func (c *Client) InspectImage(name string) (*Image, error) {
|
||||
resp, err := c.do(http.MethodGet, "/images/"+name+"/json", doOptions{})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return nil, ErrNoSuchImage
|
||||
}
|
||||
return nil, err
|
||||
|
@ -323,7 +327,6 @@ func (c *Client) PullImage(opts PullImageOptions, auth AuthConfiguration) error
|
|||
return c.createImage(&opts, headers, nil, opts.OutputStream, opts.RawJSONStream, opts.InactivityTimeout, opts.Context)
|
||||
}
|
||||
|
||||
//nolint:golint
|
||||
func (c *Client) createImage(opts interface{}, headers map[string]string, in io.Reader, w io.Writer, rawJSONStream bool, timeout time.Duration, context context.Context) error {
|
||||
url, err := c.getPath("/images/create", opts)
|
||||
if err != nil {
|
||||
|
|
1
vendor/github.com/fsouza/go-dockerclient/misc.go
generated
vendored
1
vendor/github.com/fsouza/go-dockerclient/misc.go
generated
vendored
|
@ -38,7 +38,6 @@ func (c *Client) VersionWithContext(ctx context.Context) (*Env, error) {
|
|||
// DockerInfo contains information about the Docker server
|
||||
//
|
||||
// See https://goo.gl/bHUoz9 for more details.
|
||||
//nolint:golint
|
||||
type DockerInfo struct {
|
||||
ID string
|
||||
Containers int
|
||||
|
|
12
vendor/github.com/fsouza/go-dockerclient/network.go
generated
vendored
12
vendor/github.com/fsouza/go-dockerclient/network.go
generated
vendored
|
@ -94,7 +94,8 @@ func (c *Client) NetworkInfo(id string) (*Network, error) {
|
|||
path := "/networks/" + id
|
||||
resp, err := c.do(http.MethodGet, path, doOptions{})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return nil, &NoSuchNetwork{ID: id}
|
||||
}
|
||||
return nil, err
|
||||
|
@ -195,7 +196,8 @@ func (c *Client) CreateNetwork(opts CreateNetworkOptions) (*Network, error) {
|
|||
func (c *Client) RemoveNetwork(id string) error {
|
||||
resp, err := c.do(http.MethodDelete, "/networks/"+id, doOptions{})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return &NoSuchNetwork{ID: id}
|
||||
}
|
||||
return err
|
||||
|
@ -258,7 +260,8 @@ func (c *Client) ConnectNetwork(id string, opts NetworkConnectionOptions) error
|
|||
context: opts.Context,
|
||||
})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return &NoSuchNetworkOrContainer{NetworkID: id, ContainerID: opts.Container}
|
||||
}
|
||||
return err
|
||||
|
@ -274,7 +277,8 @@ func (c *Client) ConnectNetwork(id string, opts NetworkConnectionOptions) error
|
|||
func (c *Client) DisconnectNetwork(id string, opts NetworkConnectionOptions) error {
|
||||
resp, err := c.do(http.MethodPost, "/networks/"+id+"/disconnect", doOptions{data: opts})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return &NoSuchNetworkOrContainer{NetworkID: id, ContainerID: opts.Container}
|
||||
}
|
||||
return err
|
||||
|
|
13
vendor/github.com/fsouza/go-dockerclient/plugin.go
generated
vendored
13
vendor/github.com/fsouza/go-dockerclient/plugin.go
generated
vendored
|
@ -7,6 +7,7 @@ package docker
|
|||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
)
|
||||
|
@ -207,7 +208,6 @@ func (c *Client) ListFilteredPlugins(opts ListFilteredPluginsOptions) ([]PluginD
|
|||
// GetPluginPrivileges returns pluginPrivileges or an error.
|
||||
//
|
||||
// See https://goo.gl/C4t7Tz for more details.
|
||||
//nolint:golint
|
||||
func (c *Client) GetPluginPrivileges(remote string, ctx context.Context) ([]PluginPrivilege, error) {
|
||||
return c.GetPluginPrivilegesWithOptions(
|
||||
GetPluginPrivilegesOptions{
|
||||
|
@ -228,7 +228,6 @@ type GetPluginPrivilegesOptions struct {
|
|||
// GetPluginPrivilegesWithOptions returns pluginPrivileges or an error.
|
||||
//
|
||||
// See https://goo.gl/C4t7Tz for more details.
|
||||
//nolint:golint
|
||||
func (c *Client) GetPluginPrivilegesWithOptions(opts GetPluginPrivilegesOptions) ([]PluginPrivilege, error) {
|
||||
headers, err := headersWithAuth(opts.Auth)
|
||||
if err != nil {
|
||||
|
@ -254,13 +253,13 @@ func (c *Client) GetPluginPrivilegesWithOptions(opts GetPluginPrivilegesOptions)
|
|||
// InspectPlugins returns a pluginDetail or an error.
|
||||
//
|
||||
// See https://goo.gl/C4t7Tz for more details.
|
||||
//nolint:golint
|
||||
func (c *Client) InspectPlugins(name string, ctx context.Context) (*PluginDetail, error) {
|
||||
resp, err := c.do(http.MethodGet, "/plugins/"+name+"/json", doOptions{
|
||||
context: ctx,
|
||||
})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return nil, &NoSuchPlugin{ID: name}
|
||||
}
|
||||
return nil, err
|
||||
|
@ -291,7 +290,8 @@ func (c *Client) RemovePlugin(opts RemovePluginOptions) (*PluginDetail, error) {
|
|||
path := "/plugins/" + opts.Name + "?" + queryString(opts)
|
||||
resp, err := c.do(http.MethodDelete, path, doOptions{context: opts.Context})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return nil, &NoSuchPlugin{ID: opts.Name}
|
||||
}
|
||||
return nil, err
|
||||
|
@ -437,7 +437,8 @@ func (c *Client) ConfigurePlugin(opts ConfigurePluginOptions) error {
|
|||
context: opts.Context,
|
||||
})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return &NoSuchPlugin{ID: opts.Name}
|
||||
}
|
||||
return err
|
||||
|
|
15
vendor/github.com/fsouza/go-dockerclient/swarm.go
generated
vendored
15
vendor/github.com/fsouza/go-dockerclient/swarm.go
generated
vendored
|
@ -42,7 +42,8 @@ func (c *Client) InitSwarm(opts InitSwarmOptions) (string, error) {
|
|||
context: opts.Context,
|
||||
})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && (e.Status == http.StatusNotAcceptable || e.Status == http.StatusServiceUnavailable) {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && (e.Status == http.StatusNotAcceptable || e.Status == http.StatusServiceUnavailable) {
|
||||
return "", ErrNodeAlreadyInSwarm
|
||||
}
|
||||
return "", err
|
||||
|
@ -72,7 +73,8 @@ func (c *Client) JoinSwarm(opts JoinSwarmOptions) error {
|
|||
context: opts.Context,
|
||||
})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && (e.Status == http.StatusNotAcceptable || e.Status == http.StatusServiceUnavailable) {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && (e.Status == http.StatusNotAcceptable || e.Status == http.StatusServiceUnavailable) {
|
||||
return ErrNodeAlreadyInSwarm
|
||||
}
|
||||
}
|
||||
|
@ -97,7 +99,8 @@ func (c *Client) LeaveSwarm(opts LeaveSwarmOptions) error {
|
|||
context: opts.Context,
|
||||
})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && (e.Status == http.StatusNotAcceptable || e.Status == http.StatusServiceUnavailable) {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && (e.Status == http.StatusNotAcceptable || e.Status == http.StatusServiceUnavailable) {
|
||||
return ErrNodeNotInSwarm
|
||||
}
|
||||
}
|
||||
|
@ -129,7 +132,8 @@ func (c *Client) UpdateSwarm(opts UpdateSwarmOptions) error {
|
|||
context: opts.Context,
|
||||
})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && (e.Status == http.StatusNotAcceptable || e.Status == http.StatusServiceUnavailable) {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && (e.Status == http.StatusNotAcceptable || e.Status == http.StatusServiceUnavailable) {
|
||||
return ErrNodeNotInSwarm
|
||||
}
|
||||
}
|
||||
|
@ -145,7 +149,8 @@ func (c *Client) InspectSwarm(ctx context.Context) (swarm.Swarm, error) {
|
|||
context: ctx,
|
||||
})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && (e.Status == http.StatusNotAcceptable || e.Status == http.StatusServiceUnavailable) {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && (e.Status == http.StatusNotAcceptable || e.Status == http.StatusServiceUnavailable) {
|
||||
return response, ErrNodeNotInSwarm
|
||||
}
|
||||
return response, err
|
||||
|
|
10
vendor/github.com/fsouza/go-dockerclient/swarm_configs.go
generated
vendored
10
vendor/github.com/fsouza/go-dockerclient/swarm_configs.go
generated
vendored
|
@ -7,6 +7,7 @@ package docker
|
|||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strconv"
|
||||
|
@ -78,7 +79,8 @@ func (c *Client) RemoveConfig(opts RemoveConfigOptions) error {
|
|||
path := "/configs/" + opts.ID
|
||||
resp, err := c.do(http.MethodDelete, path, doOptions{context: opts.Context})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return &NoSuchConfig{ID: opts.ID}
|
||||
}
|
||||
return err
|
||||
|
@ -116,7 +118,8 @@ func (c *Client) UpdateConfig(id string, opts UpdateConfigOptions) error {
|
|||
context: opts.Context,
|
||||
})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return &NoSuchConfig{ID: id}
|
||||
}
|
||||
return err
|
||||
|
@ -132,7 +135,8 @@ func (c *Client) InspectConfig(id string) (*swarm.Config, error) {
|
|||
path := "/configs/" + id
|
||||
resp, err := c.do(http.MethodGet, path, doOptions{})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return nil, &NoSuchConfig{ID: id}
|
||||
}
|
||||
return nil, err
|
||||
|
|
10
vendor/github.com/fsouza/go-dockerclient/swarm_node.go
generated
vendored
10
vendor/github.com/fsouza/go-dockerclient/swarm_node.go
generated
vendored
|
@ -7,6 +7,7 @@ package docker
|
|||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"strconv"
|
||||
|
@ -58,7 +59,8 @@ func (c *Client) ListNodes(opts ListNodesOptions) ([]swarm.Node, error) {
|
|||
func (c *Client) InspectNode(id string) (*swarm.Node, error) {
|
||||
resp, err := c.do(http.MethodGet, "/nodes/"+id, doOptions{})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return nil, &NoSuchNode{ID: id}
|
||||
}
|
||||
return nil, err
|
||||
|
@ -93,7 +95,8 @@ func (c *Client) UpdateNode(id string, opts UpdateNodeOptions) error {
|
|||
data: opts.NodeSpec,
|
||||
})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return &NoSuchNode{ID: id}
|
||||
}
|
||||
return err
|
||||
|
@ -120,7 +123,8 @@ func (c *Client) RemoveNode(opts RemoveNodeOptions) error {
|
|||
path := "/nodes/" + opts.ID + "?" + params.Encode()
|
||||
resp, err := c.do(http.MethodDelete, path, doOptions{context: opts.Context})
|
||||
if err != nil {
|
||||
if e, ok := err.(*Error); ok && e.Status == http.StatusNotFound {
|
||||
var e *Error
|
||||
if errors.As(err, &e) && e.Status == http.StatusNotFound {
|
||||
return &NoSuchNode{ID: opts.ID}
|
||||
}
|
||||
return err
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue