Add configuration options to local transfer service
Signed-off-by: Tony Fang <nhfang@amazon.com>
This commit is contained in:
@@ -22,6 +22,9 @@ import (
|
||||
"os"
|
||||
"time"
|
||||
|
||||
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
||||
"github.com/urfave/cli"
|
||||
|
||||
"github.com/containerd/containerd"
|
||||
"github.com/containerd/containerd/cmd/ctr/commands"
|
||||
"github.com/containerd/containerd/images/archive"
|
||||
@@ -30,7 +33,6 @@ import (
|
||||
tarchive "github.com/containerd/containerd/pkg/transfer/archive"
|
||||
"github.com/containerd/containerd/pkg/transfer/image"
|
||||
"github.com/containerd/containerd/platforms"
|
||||
"github.com/urfave/cli"
|
||||
)
|
||||
|
||||
var importCommand = cli.Command{
|
||||
@@ -127,9 +129,34 @@ If foobar.tar contains an OCI ref named "latest" and anonymous ref "sha256:deadb
|
||||
opts = append(opts, image.WithNamedPrefix(prefix, overwrite))
|
||||
}
|
||||
|
||||
// TODO: Add platform options
|
||||
var platSpec ocispec.Platform
|
||||
//Only when all-platforms not specified, we will check platform value
|
||||
//Implicitly if the platforms is empty, it means all-platforms
|
||||
if !context.Bool("all-platforms") {
|
||||
//If platform specified, use that one, if not use default
|
||||
if platform := context.String("platform"); platform != "" {
|
||||
platSpec, err = platforms.Parse(platform)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
platSpec = platforms.DefaultSpec()
|
||||
}
|
||||
opts = append(opts, image.WithPlatforms(platSpec))
|
||||
}
|
||||
|
||||
// TODO: Add unpack options
|
||||
if !context.Bool("no-unpack") {
|
||||
snapshotter := context.String("snapshotter")
|
||||
//If OS field is not empty, it means platSpec was updated in the above block
|
||||
//i.e all-platforms was not specified
|
||||
if platSpec.OS != "" {
|
||||
opts = append(opts, image.WithUnpack(platSpec, snapshotter))
|
||||
} else {
|
||||
//empty spec means all platforms
|
||||
var emptySpec ocispec.Platform
|
||||
opts = append(opts, image.WithUnpack(emptySpec, snapshotter))
|
||||
}
|
||||
}
|
||||
|
||||
is := image.NewStore(context.String("index-name"), opts...)
|
||||
|
||||
|
||||
@@ -32,6 +32,7 @@ import (
|
||||
"github.com/containerd/containerd/pkg/progress"
|
||||
"github.com/containerd/containerd/pkg/transfer"
|
||||
"github.com/containerd/containerd/pkg/transfer/image"
|
||||
"github.com/containerd/containerd/pkg/transfer/registry"
|
||||
"github.com/containerd/containerd/platforms"
|
||||
"github.com/opencontainers/image-spec/identity"
|
||||
ocispec "github.com/opencontainers/image-spec/specs-go/v1"
|
||||
@@ -112,6 +113,11 @@ command. As part of this process, we do the following:
|
||||
p = append(p, platforms.DefaultSpec())
|
||||
}
|
||||
sopts = append(sopts, image.WithPlatforms(p...))
|
||||
|
||||
//set unpack configuration
|
||||
for _, platform := range p {
|
||||
sopts = append(sopts, image.WithUnpack(platform, context.String("snapshotter")))
|
||||
}
|
||||
}
|
||||
// TODO: Support unpack for all platforms..?
|
||||
// Pass in a *?
|
||||
@@ -125,7 +131,7 @@ command. As part of this process, we do the following:
|
||||
sopts = append(sopts, image.WithAllMetadata)
|
||||
}
|
||||
|
||||
reg := image.NewOCIRegistry(ref, nil, ch)
|
||||
reg := registry.NewOCIRegistry(ref, nil, ch)
|
||||
is := image.NewStore(ref, sopts...)
|
||||
|
||||
pf, done := ProgressHandler(ctx, os.Stdout)
|
||||
|
||||
@@ -34,6 +34,7 @@ import (
|
||||
"github.com/containerd/containerd/pkg/progress"
|
||||
"github.com/containerd/containerd/pkg/transfer"
|
||||
"github.com/containerd/containerd/pkg/transfer/image"
|
||||
"github.com/containerd/containerd/pkg/transfer/registry"
|
||||
"github.com/containerd/containerd/platforms"
|
||||
"github.com/containerd/containerd/remotes"
|
||||
"github.com/containerd/containerd/remotes/docker"
|
||||
@@ -103,7 +104,7 @@ var pushCommand = cli.Command{
|
||||
if local == "" {
|
||||
local = ref
|
||||
}
|
||||
reg := image.NewOCIRegistry(ref, nil, ch)
|
||||
reg := registry.NewOCIRegistry(ref, nil, ch)
|
||||
is := image.NewStore(local)
|
||||
|
||||
pf, done := ProgressHandler(ctx, os.Stdout)
|
||||
|
||||
@@ -32,7 +32,7 @@ import (
|
||||
|
||||
"github.com/containerd/console"
|
||||
"github.com/containerd/containerd/log"
|
||||
"github.com/containerd/containerd/pkg/transfer/image"
|
||||
"github.com/containerd/containerd/pkg/transfer/registry"
|
||||
"github.com/containerd/containerd/remotes"
|
||||
"github.com/containerd/containerd/remotes/docker"
|
||||
"github.com/containerd/containerd/remotes/docker/config"
|
||||
@@ -218,7 +218,7 @@ type staticCredentials struct {
|
||||
}
|
||||
|
||||
// NewStaticCredentials gets credentials from passing in cli context
|
||||
func NewStaticCredentials(ctx gocontext.Context, clicontext *cli.Context, ref string) (image.CredentialHelper, error) {
|
||||
func NewStaticCredentials(ctx gocontext.Context, clicontext *cli.Context, ref string) (registry.CredentialHelper, error) {
|
||||
username := clicontext.String("user")
|
||||
var secret string
|
||||
if i := strings.IndexByte(username, ':'); i > 0 {
|
||||
@@ -248,12 +248,12 @@ func NewStaticCredentials(ctx gocontext.Context, clicontext *cli.Context, ref st
|
||||
}, nil
|
||||
}
|
||||
|
||||
func (sc *staticCredentials) GetCredentials(ctx gocontext.Context, ref, host string) (image.Credentials, error) {
|
||||
func (sc *staticCredentials) GetCredentials(ctx gocontext.Context, ref, host string) (registry.Credentials, error) {
|
||||
if ref == sc.ref {
|
||||
return image.Credentials{
|
||||
return registry.Credentials{
|
||||
Username: sc.username,
|
||||
Secret: sc.secret,
|
||||
}, nil
|
||||
}
|
||||
return image.Credentials{}, nil
|
||||
return registry.Credentials{}, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user