summaryrefslogtreecommitdiff
path: root/cmd/kpod/push.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/kpod/push.go')
-rw-r--r--cmd/kpod/push.go43
1 files changed, 39 insertions, 4 deletions
diff --git a/cmd/kpod/push.go b/cmd/kpod/push.go
index 4f1218a08..d3d42e0ee 100644
--- a/cmd/kpod/push.go
+++ b/cmd/kpod/push.go
@@ -4,9 +4,12 @@ import (
"fmt"
"io"
"os"
+ "strings"
+ "github.com/containers/image/manifest"
"github.com/containers/image/types"
"github.com/containers/storage/pkg/archive"
+ imgspecv1 "github.com/opencontainers/image-spec/specs-go/v1"
"github.com/pkg/errors"
"github.com/projectatomic/libpod/libpod"
"github.com/projectatomic/libpod/libpod/common"
@@ -29,6 +32,14 @@ var (
Name: "cert-dir",
Usage: "`pathname` of a directory containing TLS certificates and keys",
},
+ cli.BoolFlag{
+ Name: "compress",
+ Usage: "compress tarball image layers when pushing to a directory using the 'dir' transport. (default is same compression type as source)",
+ },
+ cli.StringFlag{
+ Name: "format, f",
+ Usage: "manifest type (oci, v2s1, or v2s2) to use when pushing an image using the 'dir:' transport (default is manifest type of source)",
+ },
cli.BoolTFlag{
Name: "tls-verify",
Usage: "require HTTPS and verify certificates when contacting registries (default: true)",
@@ -75,8 +86,16 @@ func pushCmd(c *cli.Context) error {
if err := validateFlags(c, pushFlags); err != nil {
return err
}
- srcName := c.Args().Get(0)
- destName := c.Args().Get(1)
+ srcName := args[0]
+ destName := args[1]
+
+ // --compress and --format can only be used for the "dir" transport
+ splitArg := strings.SplitN(destName, ":", 2)
+ if c.IsSet("compress") || c.IsSet("format") {
+ if splitArg[0] != libpod.DirTransport {
+ return errors.Errorf("--compress and --format can be set only when pushing to a directory using the 'dir' transport")
+ }
+ }
registryCredsString := c.String("creds")
certPath := c.String("cert-dir")
@@ -112,6 +131,20 @@ func pushCmd(c *cli.Context) error {
writer = os.Stdout
}
+ var manifestType string
+ if c.IsSet("format") {
+ switch c.String("format") {
+ case "oci":
+ manifestType = imgspecv1.MediaTypeImageManifest
+ case "v2s1":
+ manifestType = manifest.DockerV2Schema1SignedMediaType
+ case "v2s2", "docker":
+ manifestType = manifest.DockerV2Schema2MediaType
+ default:
+ return fmt.Errorf("unknown format %q. Choose on of the supported formats: 'oci', 'v2s1', or 'v2s2'", c.String("format"))
+ }
+ }
+
options := libpod.CopyOptions{
Compression: archive.Uncompressed,
SignaturePolicyPath: c.String("signature-policy"),
@@ -124,8 +157,10 @@ func pushCmd(c *cli.Context) error {
RemoveSignatures: removeSignatures,
SignBy: signBy,
},
- AuthFile: c.String("authfile"),
- Writer: writer,
+ AuthFile: c.String("authfile"),
+ Writer: writer,
+ ManifestMIMEType: manifestType,
+ ForceCompress: c.Bool("compress"),
}
return runtime.PushImage(srcName, destName, options)