mirror of
https://github.com/linuxkit/linuxkit.git
synced 2025-07-20 09:39:08 +00:00
Merge pull request #3818 from deitch/optional-tag
add option to override tag name when exporting
This commit is contained in:
commit
ceaeac88b6
11
src/cmd/linuxkit/cache/source.go
vendored
11
src/cmd/linuxkit/cache/source.go
vendored
@ -7,7 +7,7 @@ import (
|
||||
|
||||
"github.com/containerd/containerd/reference"
|
||||
"github.com/google/go-containerregistry/pkg/name"
|
||||
"github.com/google/go-containerregistry/pkg/v1"
|
||||
v1 "github.com/google/go-containerregistry/pkg/v1"
|
||||
"github.com/google/go-containerregistry/pkg/v1/mutate"
|
||||
"github.com/google/go-containerregistry/pkg/v1/tarball"
|
||||
lktspec "github.com/linuxkit/linuxkit/src/cmd/linuxkit/spec"
|
||||
@ -73,10 +73,13 @@ func (c ImageSource) TarReader() (io.ReadCloser, error) {
|
||||
}
|
||||
|
||||
// V1TarReader return an io.ReadCloser to read the image as a v1 tarball
|
||||
func (c ImageSource) V1TarReader() (io.ReadCloser, error) {
|
||||
func (c ImageSource) V1TarReader(overrideName string) (io.ReadCloser, error) {
|
||||
imageName := c.ref.String()
|
||||
|
||||
refName, err := name.ParseReference(imageName)
|
||||
saveName := imageName
|
||||
if overrideName != "" {
|
||||
saveName = overrideName
|
||||
}
|
||||
refName, err := name.ParseReference(saveName)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("error parsing image name: %v", err)
|
||||
}
|
||||
|
@ -19,6 +19,7 @@ func cacheExport(args []string) {
|
||||
arch := fs.String("arch", runtime.GOARCH, "Architecture to resolve an index to an image, if the provided image name is an index")
|
||||
outfile := fs.String("outfile", "", "Path to file to save output, '-' for stdout")
|
||||
format := fs.String("format", "oci", "export format, one of 'oci', 'filesystem'")
|
||||
tagName := fs.String("name", "", "override the provided image name in the exported tar file; useful only for format=oci")
|
||||
|
||||
if err := fs.Parse(args); err != nil {
|
||||
log.Fatal("Unable to parse args")
|
||||
@ -49,7 +50,11 @@ func cacheExport(args []string) {
|
||||
var reader io.ReadCloser
|
||||
switch *format {
|
||||
case "oci":
|
||||
reader, err = src.V1TarReader()
|
||||
fullTagName := fullname
|
||||
if *tagName != "" {
|
||||
fullTagName = util.ReferenceExpand(*tagName)
|
||||
}
|
||||
reader, err = src.V1TarReader(fullTagName)
|
||||
case "filesystem":
|
||||
reader, err = src.TarReader()
|
||||
default:
|
||||
|
@ -6,7 +6,7 @@ import (
|
||||
"io"
|
||||
|
||||
"github.com/containerd/containerd/reference"
|
||||
"github.com/google/go-containerregistry/pkg/v1"
|
||||
v1 "github.com/google/go-containerregistry/pkg/v1"
|
||||
imagespec "github.com/opencontainers/image-spec/specs-go/v1"
|
||||
)
|
||||
|
||||
@ -78,8 +78,12 @@ func (d ImageSource) TarReader() (io.ReadCloser, error) {
|
||||
}
|
||||
|
||||
// V1TarReader return an io.ReadCloser to read the save of the image
|
||||
func (d ImageSource) V1TarReader() (io.ReadCloser, error) {
|
||||
return Save(d.ref.String())
|
||||
func (d ImageSource) V1TarReader(overrideName string) (io.ReadCloser, error) {
|
||||
saveName := d.ref.String()
|
||||
if overrideName != "" {
|
||||
saveName = overrideName
|
||||
}
|
||||
return Save(saveName)
|
||||
}
|
||||
|
||||
// Descriptor return the descriptor of the image.
|
||||
|
@ -352,7 +352,7 @@ func (p Pkg) Build(bos ...BuildOpt) error {
|
||||
return err
|
||||
}
|
||||
cacheSource := c.NewSource(&archRef, platform.Architecture, desc)
|
||||
reader, err := cacheSource.V1TarReader()
|
||||
reader, err := cacheSource.V1TarReader("")
|
||||
if err != nil {
|
||||
return fmt.Errorf("unable to get reader from cache: %v", err)
|
||||
}
|
||||
|
@ -283,7 +283,7 @@ func (c cacheMockerSource) Config() (imagespec.ImageConfig, error) {
|
||||
func (c cacheMockerSource) TarReader() (io.ReadCloser, error) {
|
||||
return nil, errors.New("unsupported")
|
||||
}
|
||||
func (c cacheMockerSource) V1TarReader() (io.ReadCloser, error) {
|
||||
func (c cacheMockerSource) V1TarReader(overrideName string) (io.ReadCloser, error) {
|
||||
_, found := c.c.images[c.ref.String()]
|
||||
if !found {
|
||||
return nil, fmt.Errorf("no image found with ref: %s", c.ref.String())
|
||||
|
@ -3,7 +3,7 @@ package spec
|
||||
import (
|
||||
"io"
|
||||
|
||||
"github.com/google/go-containerregistry/pkg/v1"
|
||||
v1 "github.com/google/go-containerregistry/pkg/v1"
|
||||
imagespec "github.com/opencontainers/image-spec/specs-go/v1"
|
||||
)
|
||||
|
||||
@ -12,10 +12,10 @@ import (
|
||||
type ImageSource interface {
|
||||
// Config get the config for the image
|
||||
Config() (imagespec.ImageConfig, error)
|
||||
// TarReader get the flattened filesystem of the image as a tar stream/
|
||||
// TarReader get the flattened filesystem of the image as a tar stream
|
||||
TarReader() (io.ReadCloser, error)
|
||||
// Descriptor get the v1.Descriptor of the image
|
||||
Descriptor() *v1.Descriptor
|
||||
// V1TarReader get the image as v1 tarball, also compatibel with `docker load`
|
||||
V1TarReader() (io.ReadCloser, error)
|
||||
// V1TarReader get the image as v1 tarball, also compatible with `docker load`. If name arg is not "", override name of image in tarfile from default of image.
|
||||
V1TarReader(overrideName string) (io.ReadCloser, error)
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user