mirror of
https://github.com/linuxkit/linuxkit.git
synced 2025-07-21 10:09:07 +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/containerd/containerd/reference"
|
||||||
"github.com/google/go-containerregistry/pkg/name"
|
"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/mutate"
|
||||||
"github.com/google/go-containerregistry/pkg/v1/tarball"
|
"github.com/google/go-containerregistry/pkg/v1/tarball"
|
||||||
lktspec "github.com/linuxkit/linuxkit/src/cmd/linuxkit/spec"
|
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
|
// 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()
|
imageName := c.ref.String()
|
||||||
|
saveName := imageName
|
||||||
refName, err := name.ParseReference(imageName)
|
if overrideName != "" {
|
||||||
|
saveName = overrideName
|
||||||
|
}
|
||||||
|
refName, err := name.ParseReference(saveName)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("error parsing image name: %v", err)
|
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")
|
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")
|
outfile := fs.String("outfile", "", "Path to file to save output, '-' for stdout")
|
||||||
format := fs.String("format", "oci", "export format, one of 'oci', 'filesystem'")
|
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 {
|
if err := fs.Parse(args); err != nil {
|
||||||
log.Fatal("Unable to parse args")
|
log.Fatal("Unable to parse args")
|
||||||
@ -49,7 +50,11 @@ func cacheExport(args []string) {
|
|||||||
var reader io.ReadCloser
|
var reader io.ReadCloser
|
||||||
switch *format {
|
switch *format {
|
||||||
case "oci":
|
case "oci":
|
||||||
reader, err = src.V1TarReader()
|
fullTagName := fullname
|
||||||
|
if *tagName != "" {
|
||||||
|
fullTagName = util.ReferenceExpand(*tagName)
|
||||||
|
}
|
||||||
|
reader, err = src.V1TarReader(fullTagName)
|
||||||
case "filesystem":
|
case "filesystem":
|
||||||
reader, err = src.TarReader()
|
reader, err = src.TarReader()
|
||||||
default:
|
default:
|
||||||
|
@ -6,7 +6,7 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
|
|
||||||
"github.com/containerd/containerd/reference"
|
"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"
|
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
|
// V1TarReader return an io.ReadCloser to read the save of the image
|
||||||
func (d ImageSource) V1TarReader() (io.ReadCloser, error) {
|
func (d ImageSource) V1TarReader(overrideName string) (io.ReadCloser, error) {
|
||||||
return Save(d.ref.String())
|
saveName := d.ref.String()
|
||||||
|
if overrideName != "" {
|
||||||
|
saveName = overrideName
|
||||||
|
}
|
||||||
|
return Save(saveName)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Descriptor return the descriptor of the image.
|
// Descriptor return the descriptor of the image.
|
||||||
|
@ -352,7 +352,7 @@ func (p Pkg) Build(bos ...BuildOpt) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
cacheSource := c.NewSource(&archRef, platform.Architecture, desc)
|
cacheSource := c.NewSource(&archRef, platform.Architecture, desc)
|
||||||
reader, err := cacheSource.V1TarReader()
|
reader, err := cacheSource.V1TarReader("")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("unable to get reader from cache: %v", err)
|
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) {
|
func (c cacheMockerSource) TarReader() (io.ReadCloser, error) {
|
||||||
return nil, errors.New("unsupported")
|
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()]
|
_, found := c.c.images[c.ref.String()]
|
||||||
if !found {
|
if !found {
|
||||||
return nil, fmt.Errorf("no image found with ref: %s", c.ref.String())
|
return nil, fmt.Errorf("no image found with ref: %s", c.ref.String())
|
||||||
|
@ -3,7 +3,7 @@ package spec
|
|||||||
import (
|
import (
|
||||||
"io"
|
"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"
|
imagespec "github.com/opencontainers/image-spec/specs-go/v1"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -12,10 +12,10 @@ import (
|
|||||||
type ImageSource interface {
|
type ImageSource interface {
|
||||||
// Config get the config for the image
|
// Config get the config for the image
|
||||||
Config() (imagespec.ImageConfig, error)
|
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)
|
TarReader() (io.ReadCloser, error)
|
||||||
// Descriptor get the v1.Descriptor of the image
|
// Descriptor get the v1.Descriptor of the image
|
||||||
Descriptor() *v1.Descriptor
|
Descriptor() *v1.Descriptor
|
||||||
// V1TarReader get the image as v1 tarball, also compatibel with `docker load`
|
// 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() (io.ReadCloser, error)
|
V1TarReader(overrideName string) (io.ReadCloser, error)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user