summaryrefslogtreecommitdiff
path: root/cmd/podman
diff options
context:
space:
mode:
authorOpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com>2019-10-29 20:58:51 +0100
committerGitHub <noreply@github.com>2019-10-29 20:58:51 +0100
commite7540d0406c49b22de245246d16ebc6e1778df37 (patch)
treed25a5f8d259d19f2c0017d9987e93d065e577f89 /cmd/podman
parent5918f3a5f1d11862fbaaca94ff25f1d9cc1309e2 (diff)
parent66c126d6dee178f96f8a120f13372802d46ea9b5 (diff)
downloadpodman-e7540d0406c49b22de245246d16ebc6e1778df37.tar.gz
podman-e7540d0406c49b22de245246d16ebc6e1778df37.tar.bz2
podman-e7540d0406c49b22de245246d16ebc6e1778df37.zip
Merge pull request #4310 from nalind/manifest-lists
Move to containers/image v5, support manifest lists
Diffstat (limited to 'cmd/podman')
-rw-r--r--cmd/podman/build.go7
-rw-r--r--cmd/podman/cliconfig/config.go2
-rw-r--r--cmd/podman/common.go10
-rw-r--r--cmd/podman/images.go30
-rw-r--r--cmd/podman/login.go17
-rw-r--r--cmd/podman/logout.go4
-rw-r--r--cmd/podman/pull.go14
-rw-r--r--cmd/podman/push.go6
-rw-r--r--cmd/podman/runlabel.go2
-rw-r--r--cmd/podman/search.go2
-rw-r--r--cmd/podman/shared/container.go2
-rw-r--r--cmd/podman/shared/create.go26
-rw-r--r--cmd/podman/shared/intermediate.go2
-rw-r--r--cmd/podman/shared/intermediate_varlink.go4
-rw-r--r--cmd/podman/sign.go6
-rw-r--r--cmd/podman/varlink/io.podman.varlink5
16 files changed, 88 insertions, 51 deletions
diff --git a/cmd/podman/build.go b/cmd/podman/build.go
index f4efea544..e9ebc50aa 100644
--- a/cmd/podman/build.go
+++ b/cmd/podman/build.go
@@ -9,6 +9,7 @@ import (
"github.com/containers/buildah"
"github.com/containers/buildah/imagebuildah"
buildahcli "github.com/containers/buildah/pkg/cli"
+ "github.com/containers/image/v5/types"
"github.com/containers/libpod/cmd/podman/cliconfig"
"github.com/containers/libpod/libpod"
"github.com/containers/libpod/pkg/adapter"
@@ -360,7 +361,11 @@ func buildCmd(c *cliconfig.BuildValues) error {
RuntimeArgs: runtimeFlags,
SignaturePolicyPath: c.SignaturePolicy,
Squash: c.Squash,
- Target: c.Target,
+ SystemContext: &types.SystemContext{
+ OSChoice: c.OverrideOS,
+ ArchitectureChoice: c.OverrideArch,
+ },
+ Target: c.Target,
}
return runtime.Build(getContext(), c, options, containerfiles)
}
diff --git a/cmd/podman/cliconfig/config.go b/cmd/podman/cliconfig/config.go
index 86258a543..1bb5fa30c 100644
--- a/cmd/podman/cliconfig/config.go
+++ b/cmd/podman/cliconfig/config.go
@@ -431,6 +431,8 @@ type PullValues struct {
Authfile string
CertDir string
Creds string
+ OverrideArch string
+ OverrideOS string
Quiet bool
SignaturePolicy string
TlsVerify bool
diff --git a/cmd/podman/common.go b/cmd/podman/common.go
index e93586b62..33a848553 100644
--- a/cmd/podman/common.go
+++ b/cmd/podman/common.go
@@ -371,6 +371,16 @@ func getCreateFlags(c *cliconfig.PodmanCommand) {
"Tune the host's OOM preferences (-1000 to 1000)",
)
createFlags.String(
+ "override-arch", "",
+ "use `ARCH` instead of the architecture of the machine for choosing images",
+ )
+ markFlagHidden(createFlags, "override-arch")
+ createFlags.String(
+ "override-os", "",
+ "use `OS` instead of the running OS for choosing images",
+ )
+ markFlagHidden(createFlags, "override-os")
+ createFlags.String(
"pid", "",
"PID namespace to use",
)
diff --git a/cmd/podman/images.go b/cmd/podman/images.go
index e363fa3bb..6157fda2a 100644
--- a/cmd/podman/images.go
+++ b/cmd/podman/images.go
@@ -27,6 +27,7 @@ type imagesTemplateParams struct {
Tag string
ID string
Digest digest.Digest
+ Digests []digest.Digest
Created string
CreatedTime time.Time
Size string
@@ -34,12 +35,13 @@ type imagesTemplateParams struct {
}
type imagesJSONParams struct {
- ID string `json:"id"`
- Name []string `json:"names"`
- Digest digest.Digest `json:"digest"`
- Created time.Time `json:"created"`
- Size *uint64 `json:"size"`
- ReadOnly bool `json:"readonly"`
+ ID string `json:"id"`
+ Name []string `json:"names"`
+ Digest digest.Digest `json:"digest"`
+ Digests []digest.Digest `json:"digests"`
+ Created time.Time `json:"created"`
+ Size *uint64 `json:"size"`
+ ReadOnly bool `json:"readonly"`
}
type imagesOptions struct {
@@ -204,9 +206,9 @@ func (i imagesOptions) setOutputFormat() string {
if i.quiet {
return formats.IDString
}
- format := "table {{.Repository}}\t{{.Tag}}\t"
+ format := "table {{.Repository}}\t{{if .Tag}}{{.Tag}}{{else}}<none>{{end}}\t"
if i.noHeading {
- format = "{{.Repository}}\t{{.Tag}}\t"
+ format = "{{.Repository}}\t{{if .Tag}}{{.Tag}}{{else}}<none>{{end}}\t"
}
if i.digests {
format += "{{.Digest}}\t"
@@ -268,7 +270,7 @@ func getImagesTemplateOutput(ctx context.Context, images []*adapter.ContainerIma
imageID = shortID(img.ID())
}
- // get all specified repo:tag pairs and print them separately
+ // get all specified repo:tag and repo@digest pairs and print them separately
repopairs, err := image.ReposToMap(img.Names())
if err != nil {
logrus.Errorf("error finding tag/digest for %s", img.ID())
@@ -285,11 +287,17 @@ func getImagesTemplateOutput(ctx context.Context, images []*adapter.ContainerIma
lastNumIdx := strings.LastIndexFunc(sizeStr, unicode.IsNumber)
sizeStr = sizeStr[:lastNumIdx+1] + " " + sizeStr[lastNumIdx+1:]
}
+ var imageDigest digest.Digest
+ if len(tag) == 71 && strings.HasPrefix(tag, "sha256:") {
+ imageDigest = digest.Digest(tag)
+ tag = ""
+ }
params := imagesTemplateParams{
Repository: repo,
Tag: tag,
ID: imageID,
- Digest: img.Digest(),
+ Digest: imageDigest,
+ Digests: img.Digests(),
CreatedTime: createdTime,
Created: units.HumanDuration(time.Since(createdTime)) + " ago",
Size: sizeStr,
@@ -299,7 +307,6 @@ func getImagesTemplateOutput(ctx context.Context, images []*adapter.ContainerIma
if opts.quiet { // Show only one image ID when quiet
break outer
}
-
}
}
}
@@ -321,6 +328,7 @@ func getImagesJSONOutput(ctx context.Context, images []*adapter.ContainerImage)
ID: img.ID(),
Name: img.Names(),
Digest: img.Digest(),
+ Digests: img.Digests(),
Created: img.Created(),
Size: size,
ReadOnly: img.IsReadOnly(),
diff --git a/cmd/podman/login.go b/cmd/podman/login.go
index 96b4ac2a2..f91366eac 100644
--- a/cmd/podman/login.go
+++ b/cmd/podman/login.go
@@ -6,14 +6,15 @@ import (
"os"
"strings"
- "github.com/containers/image/v4/docker"
- "github.com/containers/image/v4/pkg/docker/config"
- "github.com/containers/image/v4/types"
+ "github.com/containers/image/v5/docker"
+ "github.com/containers/image/v5/pkg/docker/config"
+ "github.com/containers/image/v5/types"
"github.com/containers/libpod/cmd/podman/cliconfig"
"github.com/containers/libpod/cmd/podman/shared"
"github.com/containers/libpod/libpod/image"
"github.com/docker/docker-credential-helpers/credentials"
"github.com/pkg/errors"
+ "github.com/sirupsen/logrus"
"github.com/spf13/cobra"
"golang.org/x/crypto/ssh/terminal"
)
@@ -134,15 +135,15 @@ func loginCmd(c *cliconfig.LoginValues) error {
return err
}
}
- switch err {
- case nil:
+ if err == nil {
fmt.Println("Login Succeeded!")
return nil
- case docker.ErrUnauthorizedForCredentials:
+ }
+ if unauthorizedError, ok := err.(docker.ErrUnauthorizedForCredentials); ok {
+ logrus.Debugf("error logging into %q: %v", server, unauthorizedError)
return errors.Errorf("error logging into %q: invalid username/password", server)
- default:
- return errors.Wrapf(err, "error authenticating creds for %q", server)
}
+ return errors.Wrapf(err, "error authenticating creds for %q", server)
}
// getUserAndPass gets the username and password from STDIN if not given
diff --git a/cmd/podman/logout.go b/cmd/podman/logout.go
index 6d6db4b41..ef3452afe 100644
--- a/cmd/podman/logout.go
+++ b/cmd/podman/logout.go
@@ -3,8 +3,8 @@ package main
import (
"fmt"
- "github.com/containers/image/v4/docker"
- "github.com/containers/image/v4/pkg/docker/config"
+ "github.com/containers/image/v5/docker"
+ "github.com/containers/image/v5/pkg/docker/config"
"github.com/containers/libpod/cmd/podman/cliconfig"
"github.com/containers/libpod/cmd/podman/shared"
"github.com/containers/libpod/libpod/image"
diff --git a/cmd/podman/pull.go b/cmd/podman/pull.go
index f8a658297..d64793147 100644
--- a/cmd/podman/pull.go
+++ b/cmd/podman/pull.go
@@ -6,10 +6,10 @@ import (
"os"
"strings"
- "github.com/containers/image/v4/docker"
- dockerarchive "github.com/containers/image/v4/docker/archive"
- "github.com/containers/image/v4/transports/alltransports"
- "github.com/containers/image/v4/types"
+ "github.com/containers/image/v5/docker"
+ dockerarchive "github.com/containers/image/v5/docker/archive"
+ "github.com/containers/image/v5/transports/alltransports"
+ "github.com/containers/image/v5/types"
"github.com/containers/libpod/cmd/podman/cliconfig"
"github.com/containers/libpod/cmd/podman/shared"
"github.com/containers/libpod/libpod/image"
@@ -54,6 +54,10 @@ func init() {
flags.BoolVar(&pullCommand.AllTags, "all-tags", false, "All tagged images in the repository will be pulled")
flags.StringVar(&pullCommand.Creds, "creds", "", "`Credentials` (USERNAME:PASSWORD) to use for authenticating to a registry")
flags.BoolVarP(&pullCommand.Quiet, "quiet", "q", false, "Suppress output information when pulling images")
+ flags.StringVar(&pullCommand.OverrideArch, "override-arch", "", "use `ARCH` instead of the architecture of the machine for choosing images")
+ markFlagHidden(flags, "override-arch")
+ flags.StringVar(&pullCommand.OverrideOS, "override-os", "", "use `OS` instead of the running OS for choosing images")
+ markFlagHidden(flags, "override-os")
// Disabled flags for the remote client
if !remote {
flags.StringVar(&pullCommand.Authfile, "authfile", shared.GetAuthFile(""), "Path of the authentication file. Use REGISTRY_AUTH_FILE environment variable to override")
@@ -122,6 +126,8 @@ func pullCmd(c *cliconfig.PullValues) (retError error) {
dockerRegistryOptions := image.DockerRegistryOptions{
DockerRegistryCreds: registryCreds,
DockerCertPath: c.CertDir,
+ OSChoice: c.OverrideOS,
+ ArchitectureChoice: c.OverrideArch,
}
if c.IsSet("tls-verify") {
dockerRegistryOptions.DockerInsecureSkipTLSVerify = types.NewOptionalBool(!c.TlsVerify)
diff --git a/cmd/podman/push.go b/cmd/podman/push.go
index 36c4988a1..0fdfb6202 100644
--- a/cmd/podman/push.go
+++ b/cmd/podman/push.go
@@ -6,9 +6,9 @@ import (
"os"
"strings"
- "github.com/containers/image/v4/directory"
- "github.com/containers/image/v4/manifest"
- "github.com/containers/image/v4/types"
+ "github.com/containers/image/v5/directory"
+ "github.com/containers/image/v5/manifest"
+ "github.com/containers/image/v5/types"
"github.com/containers/libpod/cmd/podman/cliconfig"
"github.com/containers/libpod/cmd/podman/shared"
"github.com/containers/libpod/libpod/image"
diff --git a/cmd/podman/runlabel.go b/cmd/podman/runlabel.go
index 0369612b9..7359bc0c7 100644
--- a/cmd/podman/runlabel.go
+++ b/cmd/podman/runlabel.go
@@ -6,7 +6,7 @@ import (
"os"
"strings"
- "github.com/containers/image/v4/types"
+ "github.com/containers/image/v5/types"
"github.com/containers/libpod/cmd/podman/cliconfig"
"github.com/containers/libpod/cmd/podman/libpodruntime"
"github.com/containers/libpod/cmd/podman/shared"
diff --git a/cmd/podman/search.go b/cmd/podman/search.go
index 9dad69297..cdcb30a59 100644
--- a/cmd/podman/search.go
+++ b/cmd/podman/search.go
@@ -5,7 +5,7 @@ import (
"strings"
"github.com/containers/buildah/pkg/formats"
- "github.com/containers/image/v4/types"
+ "github.com/containers/image/v5/types"
"github.com/containers/libpod/cmd/podman/cliconfig"
"github.com/containers/libpod/cmd/podman/shared"
"github.com/containers/libpod/libpod/image"
diff --git a/cmd/podman/shared/container.go b/cmd/podman/shared/container.go
index 15bbb46d2..bc64d63a9 100644
--- a/cmd/podman/shared/container.go
+++ b/cmd/podman/shared/container.go
@@ -13,7 +13,7 @@ import (
"sync"
"time"
- "github.com/containers/image/v4/types"
+ "github.com/containers/image/v5/types"
"github.com/containers/libpod/libpod"
"github.com/containers/libpod/libpod/define"
"github.com/containers/libpod/libpod/image"
diff --git a/cmd/podman/shared/create.go b/cmd/podman/shared/create.go
index bf9410b72..dc343e694 100644
--- a/cmd/podman/shared/create.go
+++ b/cmd/podman/shared/create.go
@@ -12,7 +12,7 @@ import (
"syscall"
"time"
- "github.com/containers/image/v4/manifest"
+ "github.com/containers/image/v5/manifest"
"github.com/containers/libpod/cmd/podman/shared/parse"
"github.com/containers/libpod/libpod"
"github.com/containers/libpod/libpod/image"
@@ -89,7 +89,12 @@ func CreateContainer(ctx context.Context, c *GenericCLIResults, runtime *libpod.
return nil, nil, err
}
- newImage, err := runtime.ImageRuntime().New(ctx, name, rtc.SignaturePolicyPath, GetAuthFile(c.String("authfile")), writer, nil, image.SigningOptions{}, nil, pullType)
+ dockerRegistryOptions := image.DockerRegistryOptions{
+ OSChoice: c.String("override-os"),
+ ArchitectureChoice: c.String("override-arch"),
+ }
+
+ newImage, err := runtime.ImageRuntime().New(ctx, name, rtc.SignaturePolicyPath, GetAuthFile(c.String("authfile")), writer, &dockerRegistryOptions, image.SigningOptions{}, nil, pullType)
if err != nil {
return nil, nil, err
}
@@ -246,19 +251,10 @@ func parseSecurityOpt(config *cc.CreateConfig, securityOpts []string, runtime *l
}
if config.SeccompProfilePath == "" {
- if _, err := os.Stat(libpod.SeccompOverridePath); err == nil {
- config.SeccompProfilePath = libpod.SeccompOverridePath
- } else {
- if !os.IsNotExist(err) {
- return errors.Wrapf(err, "can't check if %q exists", libpod.SeccompOverridePath)
- }
- if _, err := os.Stat(libpod.SeccompDefaultPath); err != nil {
- if !os.IsNotExist(err) {
- return errors.Wrapf(err, "can't check if %q exists", libpod.SeccompDefaultPath)
- }
- } else {
- config.SeccompProfilePath = libpod.SeccompDefaultPath
- }
+ var err error
+ config.SeccompProfilePath, err = libpod.DefaultSeccompPath()
+ if err != nil {
+ return err
}
}
config.LabelOpts = labelOpts
diff --git a/cmd/podman/shared/intermediate.go b/cmd/podman/shared/intermediate.go
index 0f71dc087..bc12bd2a5 100644
--- a/cmd/podman/shared/intermediate.go
+++ b/cmd/podman/shared/intermediate.go
@@ -428,6 +428,8 @@ func NewIntermediateLayer(c *cliconfig.PodmanCommand, remote bool) GenericCLIRes
m["no-hosts"] = newCRBool(c, "no-hosts")
m["oom-kill-disable"] = newCRBool(c, "oom-kill-disable")
m["oom-score-adj"] = newCRInt(c, "oom-score-adj")
+ m["override-arch"] = newCRString(c, "override-arch")
+ m["override-os"] = newCRString(c, "override-os")
m["pid"] = newCRString(c, "pid")
m["pids-limit"] = newCRInt64(c, "pids-limit")
m["pod"] = newCRString(c, "pod")
diff --git a/cmd/podman/shared/intermediate_varlink.go b/cmd/podman/shared/intermediate_varlink.go
index c95470a72..89bd52324 100644
--- a/cmd/podman/shared/intermediate_varlink.go
+++ b/cmd/podman/shared/intermediate_varlink.go
@@ -131,6 +131,8 @@ func (g GenericCLIResults) MakeVarlink() iopodman.Create {
Network: StringToPtr(g.Find("network")),
OomKillDisable: BoolToPtr(g.Find("oom-kill-disable")),
OomScoreAdj: AnyIntToInt64Ptr(g.Find("oom-score-adj")),
+ OverrideOS: StringToPtr(g.Find("override-os")),
+ OverrideArch: StringToPtr(g.Find("override-arch")),
Pid: StringToPtr(g.Find("pid")),
PidsLimit: AnyIntToInt64Ptr(g.Find("pids-limit")),
Pod: StringToPtr(g.Find("pod")),
@@ -389,6 +391,8 @@ func VarlinkCreateToGeneric(opts iopodman.Create) GenericCLIResults {
m["no-hosts"] = boolFromVarlink(opts.NoHosts, "no-hosts", false)
m["oom-kill-disable"] = boolFromVarlink(opts.OomKillDisable, "oon-kill-disable", false)
m["oom-score-adj"] = intFromVarlink(opts.OomScoreAdj, "oom-score-adj", nil)
+ m["override-os"] = stringFromVarlink(opts.OverrideOS, "override-os", nil)
+ m["override-arch"] = stringFromVarlink(opts.OverrideArch, "override-arch", nil)
m["pid"] = stringFromVarlink(opts.Pid, "pid", nil)
m["pids-limit"] = int64FromVarlink(opts.PidsLimit, "pids-limit", nil)
m["pod"] = stringFromVarlink(opts.Pod, "pod", nil)
diff --git a/cmd/podman/sign.go b/cmd/podman/sign.go
index b6e82ba0b..bc909b64e 100644
--- a/cmd/podman/sign.go
+++ b/cmd/podman/sign.go
@@ -8,9 +8,9 @@ import (
"strconv"
"strings"
- "github.com/containers/image/v4/signature"
- "github.com/containers/image/v4/transports"
- "github.com/containers/image/v4/transports/alltransports"
+ "github.com/containers/image/v5/signature"
+ "github.com/containers/image/v5/transports"
+ "github.com/containers/image/v5/transports/alltransports"
"github.com/containers/libpod/cmd/podman/cliconfig"
"github.com/containers/libpod/cmd/podman/libpodruntime"
"github.com/containers/libpod/libpod/image"
diff --git a/cmd/podman/varlink/io.podman.varlink b/cmd/podman/varlink/io.podman.varlink
index dca366bc5..f9339fccb 100644
--- a/cmd/podman/varlink/io.podman.varlink
+++ b/cmd/podman/varlink/io.podman.varlink
@@ -58,7 +58,8 @@ type VolumeRemoveOpts (
type Image (
id: string,
- digest: string,
+ digest: string,
+ digests: []string,
parentId: string,
repoTags: []string,
repoDigests: []string,
@@ -342,6 +343,8 @@ type Create (
noHosts: ?bool,
oomKillDisable: ?bool,
oomScoreAdj: ?int,
+ overrideArch: ?string,
+ overrideOS: ?string,
pid: ?string,
pidsLimit: ?int,
pod: ?string,