From c37589f503913ac85622cc9110e2eb983b1b38f3 Mon Sep 17 00:00:00 2001 From: Daniel J Walsh Date: Wed, 13 Mar 2019 17:17:07 -0400 Subject: Set blob cache directory based on GraphDriver Currently in rootless containers, we end up not using the blob cache. We also don't store the blob cache based on the users specified graph storage. This change will cause the cache directory to be stored with the rest of the containe images. While doing this patch, I found that we had duplicated GetSystemContext in two places in libpod. I cleaned this up. Signed-off-by: Daniel J Walsh --- cmd/podman/login.go | 4 ++-- cmd/podman/logout.go | 4 ++-- cmd/podman/pull.go | 3 +-- libpod/common/common.go | 15 --------------- libpod/image/image.go | 5 +++-- libpod/image/pull.go | 2 ++ libpod/image/search.go | 3 +-- 7 files changed, 11 insertions(+), 25 deletions(-) diff --git a/cmd/podman/login.go b/cmd/podman/login.go index 4e96b43cb..8a1687278 100644 --- a/cmd/podman/login.go +++ b/cmd/podman/login.go @@ -10,7 +10,7 @@ import ( "github.com/containers/image/pkg/docker/config" "github.com/containers/image/types" "github.com/containers/libpod/cmd/podman/cliconfig" - "github.com/containers/libpod/libpod/common" + "github.com/containers/libpod/libpod/image" "github.com/pkg/errors" "github.com/spf13/cobra" "golang.org/x/crypto/ssh/terminal" @@ -64,7 +64,7 @@ func loginCmd(c *cliconfig.LoginValues) error { server := registryFromFullName(scrubServer(args[0])) authfile := getAuthFile(c.Authfile) - sc := common.GetSystemContext("", authfile, false) + sc := image.GetSystemContext("", authfile, false) if c.Flag("tls-verify").Changed { sc.DockerInsecureSkipTLSVerify = types.NewOptionalBool(!c.TlsVerify) } diff --git a/cmd/podman/logout.go b/cmd/podman/logout.go index 268e6b44c..069153e0b 100644 --- a/cmd/podman/logout.go +++ b/cmd/podman/logout.go @@ -5,7 +5,7 @@ import ( "github.com/containers/image/pkg/docker/config" "github.com/containers/libpod/cmd/podman/cliconfig" - "github.com/containers/libpod/libpod/common" + "github.com/containers/libpod/libpod/image" "github.com/pkg/errors" "github.com/spf13/cobra" ) @@ -54,7 +54,7 @@ func logoutCmd(c *cliconfig.LogoutValues) error { } authfile := getAuthFile(c.Authfile) - sc := common.GetSystemContext("", authfile, false) + sc := image.GetSystemContext("", authfile, false) if c.All { if err := config.RemoveAllAuthentication(sc); err != nil { diff --git a/cmd/podman/pull.go b/cmd/podman/pull.go index 8888c5e28..eeb9f3ff3 100644 --- a/cmd/podman/pull.go +++ b/cmd/podman/pull.go @@ -11,7 +11,6 @@ import ( "github.com/containers/image/transports/alltransports" "github.com/containers/image/types" "github.com/containers/libpod/cmd/podman/cliconfig" - "github.com/containers/libpod/libpod/common" image2 "github.com/containers/libpod/libpod/image" "github.com/containers/libpod/pkg/adapter" "github.com/containers/libpod/pkg/util" @@ -127,7 +126,7 @@ func pullCmd(c *cliconfig.PullValues) error { } else { authfile := getAuthFile(c.String("authfile")) spec := image - systemContext := common.GetSystemContext("", authfile, false) + systemContext := image2.GetSystemContext("", authfile, false) srcRef, err := alltransports.ParseImageName(spec) if err != nil { dockerTransport := "docker://" diff --git a/libpod/common/common.go b/libpod/common/common.go index 5d10bee36..93a736af2 100644 --- a/libpod/common/common.go +++ b/libpod/common/common.go @@ -1,20 +1,5 @@ package common -import ( - "github.com/containers/image/types" -) - -// GetSystemContext Constructs a new containers/image/types.SystemContext{} struct from the given signaturePolicy path -func GetSystemContext(signaturePolicyPath, authFilePath string, forceCompress bool) *types.SystemContext { - sc := &types.SystemContext{} - if signaturePolicyPath != "" { - sc.SignaturePolicyPath = signaturePolicyPath - } - sc.AuthFilePath = authFilePath - sc.DirForceCompress = forceCompress - return sc -} - // IsTrue determines whether the given string equals "true" func IsTrue(str string) bool { return str == "true" diff --git a/libpod/image/image.go b/libpod/image/image.go index f79bc3dc2..4862bf1d6 100644 --- a/libpod/image/image.go +++ b/libpod/image/image.go @@ -6,6 +6,7 @@ import ( "fmt" "io" "os" + "path/filepath" "strings" "syscall" "time" @@ -22,7 +23,6 @@ import ( "github.com/containers/image/transports" "github.com/containers/image/transports/alltransports" "github.com/containers/image/types" - "github.com/containers/libpod/libpod/common" "github.com/containers/libpod/libpod/driver" "github.com/containers/libpod/libpod/events" "github.com/containers/libpod/pkg/inspect" @@ -548,6 +548,7 @@ func (i *Image) PushImageToHeuristicDestination(ctx context.Context, destination // PushImageToReference pushes the given image to a location described by the given path func (i *Image) PushImageToReference(ctx context.Context, dest types.ImageReference, manifestMIMEType, authFile, signaturePolicyPath string, writer io.Writer, forceCompress bool, signingOptions SigningOptions, dockerRegistryOptions *DockerRegistryOptions, additionalDockerArchiveTags []reference.NamedTagged) error { sc := GetSystemContext(signaturePolicyPath, authFile, forceCompress) + sc.BlobInfoCacheDir = filepath.Join(i.imageruntime.store.GraphRoot(), "cache") policyContext, err := getPolicyContext(sc) if err != nil { @@ -909,7 +910,7 @@ func (ir *Runtime) Import(ctx context.Context, path, reference string, writer io return nil, errors.Wrapf(err, "error updating image config") } - sc := common.GetSystemContext("", "", false) + sc := GetSystemContext("", "", false) // if reference not given, get the image digest if reference == "" { diff --git a/libpod/image/pull.go b/libpod/image/pull.go index a3b716e65..5a0706b07 100644 --- a/libpod/image/pull.go +++ b/libpod/image/pull.go @@ -4,6 +4,7 @@ import ( "context" "fmt" "io" + "path/filepath" "strings" cp "github.com/containers/image/copy" @@ -204,6 +205,7 @@ func (ir *Runtime) pullImageFromHeuristicSource(ctx context.Context, inputName s var goal *pullGoal sc := GetSystemContext(signaturePolicyPath, authfile, false) + sc.BlobInfoCacheDir = filepath.Join(ir.store.GraphRoot(), "cache") srcRef, err := alltransports.ParseImageName(inputName) if err != nil { // could be trying to pull from registry with short name diff --git a/libpod/image/search.go b/libpod/image/search.go index 212eff00b..2c66ce284 100644 --- a/libpod/image/search.go +++ b/libpod/image/search.go @@ -9,7 +9,6 @@ import ( "github.com/containers/image/docker" "github.com/containers/image/types" - "github.com/containers/libpod/libpod/common" sysreg "github.com/containers/libpod/pkg/registries" "github.com/fatih/camelcase" "github.com/pkg/errors" @@ -157,7 +156,7 @@ func searchImageInRegistry(term string, registry string, options SearchOptions) limit = options.Limit } - sc := common.GetSystemContext("", options.Authfile, false) + sc := GetSystemContext("", options.Authfile, false) sc.DockerInsecureSkipTLSVerify = options.InsecureSkipTLSVerify // FIXME: Set this more globally. Probably no reason not to have it in // every types.SystemContext, and to compute the value just once in one -- cgit v1.2.3-54-g00ecf From 6b0ac2301beb3c9cfbb8af89e9964465a890fd22 Mon Sep 17 00:00:00 2001 From: Daniel J Walsh Date: Thu, 28 Mar 2019 20:00:29 -0400 Subject: Cleanup image2 -> image for imports Remove references to image2 in source code. Makes the code slightly more readable. Signed-off-by: Daniel J Walsh --- cmd/podman/play_kube.go | 8 ++++---- cmd/podman/pull.go | 26 +++++++++++++------------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/cmd/podman/play_kube.go b/cmd/podman/play_kube.go index 10221a339..e9f0acaa1 100644 --- a/cmd/podman/play_kube.go +++ b/cmd/podman/play_kube.go @@ -13,7 +13,7 @@ import ( "github.com/containers/libpod/cmd/podman/libpodruntime" "github.com/containers/libpod/cmd/podman/shared" "github.com/containers/libpod/libpod" - image2 "github.com/containers/libpod/libpod/image" + "github.com/containers/libpod/libpod/image" ns "github.com/containers/libpod/pkg/namespaces" "github.com/containers/libpod/pkg/rootless" "github.com/containers/libpod/pkg/spec" @@ -145,7 +145,7 @@ func playKubeYAMLCmd(c *cliconfig.KubePlayValues) error { writer = os.Stderr } - dockerRegistryOptions := image2.DockerRegistryOptions{ + dockerRegistryOptions := image.DockerRegistryOptions{ DockerRegistryCreds: registryCreds, DockerCertPath: c.CertDir, } @@ -183,7 +183,7 @@ func playKubeYAMLCmd(c *cliconfig.KubePlayValues) error { } for _, container := range podYAML.Spec.Containers { - newImage, err := runtime.ImageRuntime().New(ctx, container.Image, c.SignaturePolicy, c.Authfile, writer, &dockerRegistryOptions, image2.SigningOptions{}, false, nil) + newImage, err := runtime.ImageRuntime().New(ctx, container.Image, c.SignaturePolicy, c.Authfile, writer, &dockerRegistryOptions, image.SigningOptions{}, false, nil) if err != nil { return err } @@ -232,7 +232,7 @@ func getPodPorts(containers []v1.Container) []ocicni.PortMapping { } // kubeContainerToCreateConfig takes a v1.Container and returns a createconfig describing a container -func kubeContainerToCreateConfig(ctx context.Context, containerYAML v1.Container, runtime *libpod.Runtime, newImage *image2.Image, namespaces map[string]string, volumes map[string]string) (*createconfig.CreateConfig, error) { +func kubeContainerToCreateConfig(ctx context.Context, containerYAML v1.Container, runtime *libpod.Runtime, newImage *image.Image, namespaces map[string]string, volumes map[string]string) (*createconfig.CreateConfig, error) { var ( containerConfig createconfig.CreateConfig envs map[string]string diff --git a/cmd/podman/pull.go b/cmd/podman/pull.go index eeb9f3ff3..2aac28642 100644 --- a/cmd/podman/pull.go +++ b/cmd/podman/pull.go @@ -11,7 +11,7 @@ import ( "github.com/containers/image/transports/alltransports" "github.com/containers/image/types" "github.com/containers/libpod/cmd/podman/cliconfig" - image2 "github.com/containers/libpod/libpod/image" + "github.com/containers/libpod/libpod/image" "github.com/containers/libpod/pkg/adapter" "github.com/containers/libpod/pkg/util" opentracing "github.com/opentracing/opentracing-go" @@ -85,7 +85,7 @@ func pullCmd(c *cliconfig.PullValues) error { } } ctx := getContext() - image := args[0] + img := args[0] var registryCreds *types.DockerAuthConfig @@ -104,7 +104,7 @@ func pullCmd(c *cliconfig.PullValues) error { writer = os.Stderr } - dockerRegistryOptions := image2.DockerRegistryOptions{ + dockerRegistryOptions := image.DockerRegistryOptions{ DockerRegistryCreds: registryCreds, DockerCertPath: c.CertDir, } @@ -113,20 +113,20 @@ func pullCmd(c *cliconfig.PullValues) error { } // Possible for docker-archive to have multiple tags, so use LoadFromArchiveReference instead - if strings.HasPrefix(image, dockerarchive.Transport.Name()+":") { - srcRef, err := alltransports.ParseImageName(image) + if strings.HasPrefix(img, dockerarchive.Transport.Name()+":") { + srcRef, err := alltransports.ParseImageName(img) if err != nil { - return errors.Wrapf(err, "error parsing %q", image) + return errors.Wrapf(err, "error parsing %q", img) } newImage, err := runtime.LoadFromArchiveReference(getContext(), srcRef, c.SignaturePolicy, writer) if err != nil { - return errors.Wrapf(err, "error pulling image from %q", image) + return errors.Wrapf(err, "error pulling image from %q", img) } fmt.Println(newImage[0].ID()) } else { authfile := getAuthFile(c.String("authfile")) - spec := image - systemContext := image2.GetSystemContext("", authfile, false) + spec := img + systemContext := image.GetSystemContext("", authfile, false) srcRef, err := alltransports.ParseImageName(spec) if err != nil { dockerTransport := "docker://" @@ -134,7 +134,7 @@ func pullCmd(c *cliconfig.PullValues) error { spec = dockerTransport + spec srcRef2, err2 := alltransports.ParseImageName(spec) if err2 != nil { - return errors.Wrapf(err2, "error parsing image name %q", image) + return errors.Wrapf(err2, "error parsing image name %q", img) } srcRef = srcRef2 } @@ -157,7 +157,7 @@ func pullCmd(c *cliconfig.PullValues) error { var foundIDs []string foundImage := true for _, name := range names { - newImage, err := runtime.New(getContext(), name, c.String("signature-policy"), authfile, writer, &dockerRegistryOptions, image2.SigningOptions{}, true, nil) + newImage, err := runtime.New(getContext(), name, c.String("signature-policy"), authfile, writer, &dockerRegistryOptions, image.SigningOptions{}, true, nil) if err != nil { println(errors.Wrapf(err, "error pulling image %q", name)) foundImage = false @@ -166,7 +166,7 @@ func pullCmd(c *cliconfig.PullValues) error { foundIDs = append(foundIDs, newImage.ID()) } if len(names) == 1 && !foundImage { - return errors.Wrapf(err, "error pulling image %q", image) + return errors.Wrapf(err, "error pulling image %q", img) } if len(names) > 1 { fmt.Println("Pulled Images:") @@ -174,6 +174,6 @@ func pullCmd(c *cliconfig.PullValues) error { for _, id := range foundIDs { fmt.Println(id) } - } // end else if strings.HasPrefix(image, dockerarchive.Transport.Name()+":") + } // end else if strings.HasPrefix(img, dockerarchive.Transport.Name()+":") return nil } -- cgit v1.2.3-54-g00ecf