Skip to content

Commit 4fe00b0

Browse files
authored
Use go-containerregistry image processing from container-diff (#181)
* Update to newer container-diff release/integration go-containerregistry image processing * deps
1 parent 72ff0cd commit 4fe00b0

File tree

941 files changed

+85108
-47393
lines changed

Some content is hidden

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

941 files changed

+85108
-47393
lines changed

Gopkg.lock

Lines changed: 197 additions & 124 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Gopkg.toml

Lines changed: 17 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,15 @@
1-
2-
# Gopkg.toml example
3-
#
4-
# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md
5-
# for detailed Gopkg.toml documentation.
6-
#
7-
# required = ["github.com/user/thing/cmd/thing"]
8-
# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"]
9-
#
10-
# [[constraint]]
11-
# name = "github.com/user/project"
12-
# version = "1.0.0"
13-
#
14-
# [[constraint]]
15-
# name = "github.com/user/project2"
16-
# branch = "dev"
17-
# source = "github.com/myfork/project2"
18-
#
19-
# [[override]]
20-
# name = "github.com/x/y"
21-
# version = "2.4.0"
22-
231
[prune]
242
unused-packages = true
253
non-go = true
264
go-tests = true
275

286
[[constraint]]
297
name = "github.com/GoogleContainerTools/container-diff"
30-
revision = "b2e2f7ef8897f29306877618f16f0d67d8a89094"
8+
revision = "392203e26a619b83149a9f7deb32498ee550af43"
9+
10+
[[constraint]]
11+
name = "github.com/google/go-containerregistry"
12+
revision = "eb57122f1bf944d0584c387c62c1a759c953684d"
3113

3214
[[constraint]]
3315
branch = "master"
@@ -36,3 +18,15 @@
3618
[[override]]
3719
revision = "583c0c0531f06d5278b7d917446061adc344b5cd"
3820
name = "github.com/spf13/pflag"
21+
22+
[[override]]
23+
name = "github.com/docker/libnetwork"
24+
branch = "master"
25+
26+
[[override]]
27+
name = "github.com/docker/docker"
28+
branch = "master"
29+
30+
[[override]]
31+
name = "github.com/docker/distribution"
32+
revision = "master"

pkg/drivers/tar_driver.go

Lines changed: 72 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,12 @@ import (
2121
"strings"
2222

2323
"github.com/pkg/errors"
24+
"github.com/sirupsen/logrus"
2425

2526
pkgutil "github.com/GoogleContainerTools/container-diff/pkg/util"
2627
"github.com/GoogleContainerTools/container-structure-test/pkg/types/unversioned"
28+
"github.com/google/go-containerregistry/pkg/v1"
29+
"github.com/google/go-containerregistry/pkg/v1/mutate"
2730
)
2831

2932
type TarDriver struct {
@@ -32,33 +35,32 @@ type TarDriver struct {
3235
}
3336

3437
func NewTarDriver(args DriverConfig) (Driver, error) {
35-
var prepper pkgutil.Prepper
36-
var image pkgutil.Image
37-
var err error
38-
imageName := args.Image
39-
if pkgutil.IsTar(imageName) {
40-
prepper = &pkgutil.TarPrepper{
41-
Source: imageName,
42-
}
43-
image, err = prepper.GetImage()
44-
} else {
45-
// see if image exists locally first.
46-
prepper = &pkgutil.DaemonPrepper{
47-
Source: imageName,
48-
}
49-
image, err = prepper.GetImage()
38+
if pkgutil.IsTar(args.Image) {
39+
// tar provided, so don't provide any prefix. container-diff can figure this out.
40+
image, err := pkgutil.GetImageForName(args.Image)
5041
if err != nil {
51-
// didn't find locally, try to pull from remote.
52-
prepper = &pkgutil.CloudPrepper{
53-
Source: imageName,
54-
}
55-
image, err = prepper.GetImage()
42+
return nil, errors.Wrap(err, "processing tar image reference")
5643
}
44+
return &TarDriver{
45+
Image: image,
46+
Save: args.Save,
47+
}, nil
48+
}
49+
// try the local docker daemon first
50+
image, err := pkgutil.GetImageForName("daemon://" + args.Image)
51+
if err == nil {
52+
logrus.Debugf("image found in local docker daemon")
53+
return &TarDriver{
54+
Image: image,
55+
Save: args.Save,
56+
}, nil
5757
}
5858

59+
// image not found in local daemon, so try remote.
60+
logrus.Infof("unable to retrieve image locally: %s", err)
61+
image, err = pkgutil.GetImageForName("remote://" + args.Image)
5962
if err != nil {
60-
// didn't find image anywhere; exit
61-
return nil, err
63+
return nil, errors.Wrap(err, "retrieving image")
6264
}
6365
return &TarDriver{
6466
Image: image,
@@ -73,31 +75,50 @@ func (d *TarDriver) Destroy() {
7375
}
7476

7577
func (d *TarDriver) SetEnv(envVars []unversioned.EnvVar) error {
76-
config, err := d.GetConfig()
78+
configFile, err := d.Image.Image.ConfigFile()
7779
if err != nil {
78-
return errors.Wrapf(err, "getting image config")
80+
return errors.Wrap(err, "retrieving image config")
7981
}
80-
env := config.Env
82+
config := configFile.Config
83+
env := convertSliceToMap(config.Env)
8184
for _, envVar := range envVars {
8285
env[envVar.Key] = envVar.Value
8386
}
84-
newConfig := pkgutil.ConfigObject{
85-
Entrypoint: config.Entrypoint,
86-
Cmd: config.Cmd,
87-
Volumes: d.Image.Config.Config.Volumes,
88-
Workdir: config.Workdir,
89-
ExposedPorts: d.Image.Config.Config.ExposedPorts,
90-
Labels: config.Labels,
91-
Env: convertMapToSlice(env),
87+
newConfig := v1.Config{
88+
AttachStderr: config.AttachStderr,
89+
AttachStdin: config.AttachStdin,
90+
AttachStdout: config.AttachStdout,
91+
Cmd: config.Cmd,
92+
Domainname: config.Domainname,
93+
Entrypoint: config.Entrypoint,
94+
Env: convertMapToSlice(env),
95+
Hostname: config.Hostname,
96+
Image: config.Image,
97+
Labels: config.Labels,
98+
OnBuild: config.OnBuild,
99+
OpenStdin: config.OpenStdin,
100+
StdinOnce: config.StdinOnce,
101+
Tty: config.Tty,
102+
User: config.User,
103+
Volumes: config.Volumes,
104+
WorkingDir: config.WorkingDir,
105+
ExposedPorts: config.ExposedPorts,
106+
ArgsEscaped: config.ArgsEscaped,
107+
NetworkDisabled: config.NetworkDisabled,
108+
MacAddress: config.MacAddress,
109+
StopSignal: config.StopSignal,
110+
Shell: config.Shell,
111+
}
112+
newImg, err := mutate.Config(d.Image.Image, newConfig)
113+
if err != nil {
114+
return errors.Wrap(err, "setting new config on image")
92115
}
93116
newImage := pkgutil.Image{
117+
Image: newImg,
94118
Source: d.Image.Source,
95119
FSPath: d.Image.FSPath,
96-
Type: d.Image.Type,
97-
Config: pkgutil.ConfigSchema{
98-
History: d.Image.Config.History,
99-
Config: newConfig,
100-
},
120+
Digest: d.Image.Digest,
121+
Layers: d.Image.Layers,
101122
}
102123
d.Image = newImage
103124
return nil
@@ -130,26 +151,32 @@ func (d *TarDriver) ReadDir(path string) ([]os.FileInfo, error) {
130151
}
131152

132153
func (d *TarDriver) GetConfig() (unversioned.Config, error) {
154+
configFile, err := d.Image.Image.ConfigFile()
155+
if err != nil {
156+
return unversioned.Config{}, errors.Wrap(err, "retrieving config file")
157+
}
158+
config := configFile.Config
159+
133160
// docker provides these as maps (since they can be mapped in docker run commands)
134161
// since this will never be the case when built through a dockerfile, we convert to list of strings
135162
volumes := []string{}
136-
for v := range d.Image.Config.Config.Volumes {
163+
for v := range config.Volumes {
137164
volumes = append(volumes, v)
138165
}
139166

140167
ports := []string{}
141-
for p := range d.Image.Config.Config.ExposedPorts {
168+
for p := range config.ExposedPorts {
142169
// docker always appends the protocol to the port, so this is safe
143170
ports = append(ports, strings.Split(p, "/")[0])
144171
}
145172

146173
return unversioned.Config{
147-
Env: convertSliceToMap(d.Image.Config.Config.Env),
148-
Entrypoint: d.Image.Config.Config.Entrypoint,
149-
Cmd: d.Image.Config.Config.Cmd,
174+
Env: convertSliceToMap(config.Env),
175+
Entrypoint: config.Entrypoint,
176+
Cmd: config.Cmd,
150177
Volumes: volumes,
151-
Workdir: d.Image.Config.Config.Workdir,
178+
Workdir: config.WorkingDir,
152179
ExposedPorts: ports,
153-
Labels: d.Image.Config.Config.Labels,
180+
Labels: config.Labels,
154181
}, nil
155182
}

vendor/github.com/GoogleContainerTools/container-diff/pkg/util/cloud_prepper.go

Lines changed: 0 additions & 76 deletions
This file was deleted.

0 commit comments

Comments
 (0)