mirror of
https://github.com/containers/podman
synced 2024-10-19 16:54:07 +00:00
Fixes for load and other system tests
Signed-off-by: Brent Baude <bbaude@redhat.com>
This commit is contained in:
parent
465b4bc563
commit
90ead05903
|
@ -2,6 +2,7 @@ package containers
|
|||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/containers/libpod/cmd/podmanV2/parse"
|
||||
|
@ -54,9 +55,13 @@ func kill(cmd *cobra.Command, args []string) error {
|
|||
)
|
||||
// Check if the signalString provided by the user is valid
|
||||
// Invalid signals will return err
|
||||
if _, err = signal.ParseSignalNameOrNumber(killOptions.Signal); err != nil {
|
||||
sig, err := signal.ParseSignalNameOrNumber(killOptions.Signal)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if sig < 1 || sig > 64 {
|
||||
return errors.New("valid signals are 1 through 64")
|
||||
}
|
||||
responses, err := registry.ContainerEngine().ContainerKill(context.Background(), args, killOptions)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
|
@ -70,7 +70,7 @@ func wait(cmd *cobra.Command, args []string) error {
|
|||
}
|
||||
for _, r := range responses {
|
||||
if r.Error == nil {
|
||||
fmt.Println(r.Id)
|
||||
fmt.Println(r.ExitCode)
|
||||
} else {
|
||||
errs = append(errs, r.Error)
|
||||
}
|
||||
|
|
|
@ -3,11 +3,18 @@ package images
|
|||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"os"
|
||||
|
||||
"github.com/containers/image/v5/docker/reference"
|
||||
"github.com/containers/libpod/cmd/podmanV2/parse"
|
||||
"github.com/containers/libpod/cmd/podmanV2/registry"
|
||||
"github.com/containers/libpod/libpod/image"
|
||||
"github.com/containers/libpod/pkg/domain/entities"
|
||||
"github.com/containers/libpod/pkg/util"
|
||||
"github.com/pkg/errors"
|
||||
"github.com/spf13/cobra"
|
||||
"golang.org/x/crypto/ssh/terminal"
|
||||
)
|
||||
|
||||
var (
|
||||
|
@ -46,11 +53,40 @@ func init() {
|
|||
|
||||
func load(cmd *cobra.Command, args []string) error {
|
||||
if len(args) > 0 {
|
||||
repo, err := image.NormalizedTag(args[0])
|
||||
ref, err := reference.Parse(args[0])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
loadOpts.Name = repo.Name()
|
||||
if t, ok := ref.(reference.Tagged); ok {
|
||||
loadOpts.Tag = t.Tag()
|
||||
} else {
|
||||
loadOpts.Tag = "latest"
|
||||
}
|
||||
if r, ok := ref.(reference.Named); ok {
|
||||
fmt.Println(r.Name())
|
||||
loadOpts.Name = r.Name()
|
||||
}
|
||||
}
|
||||
if len(loadOpts.Input) > 0 {
|
||||
if err := parse.ValidateFileName(loadOpts.Input); err != nil {
|
||||
return err
|
||||
}
|
||||
} else {
|
||||
if terminal.IsTerminal(int(os.Stdin.Fd())) {
|
||||
return errors.Errorf("cannot read from terminal. Use command-line redirection or the --input flag.")
|
||||
}
|
||||
outFile, err := ioutil.TempFile(util.Tmpdir(), "podman")
|
||||
if err != nil {
|
||||
return errors.Errorf("error creating file %v", err)
|
||||
}
|
||||
defer os.Remove(outFile.Name())
|
||||
defer outFile.Close()
|
||||
|
||||
_, err = io.Copy(outFile, os.Stdin)
|
||||
if err != nil {
|
||||
return errors.Errorf("error copying file %v", err)
|
||||
}
|
||||
loadOpts.Input = outFile.Name()
|
||||
}
|
||||
response, err := registry.ImageEngine().Load(context.Background(), loadOpts)
|
||||
if err != nil {
|
||||
|
|
|
@ -9,11 +9,12 @@ import (
|
|||
var (
|
||||
tagDescription = "Adds one or more additional names to locally-stored image."
|
||||
tagCommand = &cobra.Command{
|
||||
Use: "tag [flags] IMAGE TARGET_NAME [TARGET_NAME...]",
|
||||
Short: "Add an additional name to a local image",
|
||||
Long: tagDescription,
|
||||
RunE: tag,
|
||||
Args: cobra.MinimumNArgs(2),
|
||||
Use: "tag [flags] IMAGE TARGET_NAME [TARGET_NAME...]",
|
||||
Short: "Add an additional name to a local image",
|
||||
Long: tagDescription,
|
||||
RunE: tag,
|
||||
PreRunE: preRunE,
|
||||
Args: cobra.MinimumNArgs(2),
|
||||
Example: `podman tag 0e3bbc2 fedora:latest
|
||||
podman tag imageID:latest myNewImage:newTag
|
||||
podman tag httpd myregistryhost:5000/fedora/httpd:v2`,
|
||||
|
|
|
@ -123,6 +123,21 @@ func create(cmd *cobra.Command, args []string) error {
|
|||
}
|
||||
}
|
||||
|
||||
if !createOptions.Infra {
|
||||
if cmd.Flag("infra-command").Changed {
|
||||
return errors.New("cannot set infra-command without an infra container")
|
||||
}
|
||||
createOptions.InfraCommand = ""
|
||||
if cmd.Flag("infra-image").Changed {
|
||||
return errors.New("cannot set infra-image without an infra container")
|
||||
}
|
||||
createOptions.InfraImage = ""
|
||||
if cmd.Flag("share").Changed {
|
||||
return errors.New("cannot set share namespaces without an infra container")
|
||||
}
|
||||
createOptions.Share = nil
|
||||
}
|
||||
|
||||
response, err := registry.ContainerEngine().PodCreate(context.Background(), createOptions)
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package entities
|
||||
|
||||
import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/containers/libpod/libpod"
|
||||
|
@ -121,7 +122,9 @@ func (p PodCreateOptions) ToPodSpecGen(s *specgen.PodSpecGenerator) {
|
|||
s.Hostname = p.Hostname
|
||||
s.Labels = p.Labels
|
||||
s.NoInfra = !p.Infra
|
||||
s.InfraCommand = []string{p.InfraCommand}
|
||||
if len(p.InfraCommand) > 0 {
|
||||
s.InfraCommand = strings.Split(p.InfraCommand, " ")
|
||||
}
|
||||
s.InfraImage = p.InfraImage
|
||||
s.SharedNamespaces = p.Share
|
||||
|
||||
|
|
|
@ -394,8 +394,10 @@ func (ir *ImageEngine) Load(ctx context.Context, opts entities.ImageLoadOptions)
|
|||
if err != nil {
|
||||
return nil, errors.Wrap(err, "image loaded but no additional tags were created")
|
||||
}
|
||||
if err := newImage.TagImage(opts.Name); err != nil {
|
||||
return nil, errors.Wrapf(err, "error adding %q to image %q", opts.Name, newImage.InputName)
|
||||
if len(opts.Name) > 0 {
|
||||
if err := newImage.TagImage(fmt.Sprintf("%s:%s", opts.Name, opts.Tag)); err != nil {
|
||||
return nil, errors.Wrapf(err, "error adding %q to image %q", opts.Name, newImage.InputName)
|
||||
}
|
||||
}
|
||||
return &entities.ImageLoadReport{Name: name}, nil
|
||||
}
|
||||
|
|
|
@ -129,14 +129,15 @@ func StopCatch(sigc chan os.Signal) {
|
|||
// ParseSignalNameOrNumber translates a string to a valid syscall signal. Input
|
||||
// can be a name or number representation i.e. "KILL" "9"
|
||||
func ParseSignalNameOrNumber(rawSignal string) (syscall.Signal, error) {
|
||||
s, err := ParseSignal(rawSignal)
|
||||
basename := strings.TrimPrefix(rawSignal, "-")
|
||||
s, err := ParseSignal(basename)
|
||||
if err == nil {
|
||||
return s, nil
|
||||
}
|
||||
for k, v := range signalMap {
|
||||
if k == strings.ToUpper(rawSignal) {
|
||||
if k == strings.ToUpper(basename) {
|
||||
return v, nil
|
||||
}
|
||||
}
|
||||
return -1, fmt.Errorf("invalid signal: %s", rawSignal)
|
||||
return -1, fmt.Errorf("invalid signal: %s", basename)
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ func (p *PodSpecGenerator) validate() error {
|
|||
return exclusivePodOptions("NoInfra", "InfraImage")
|
||||
}
|
||||
if len(p.SharedNamespaces) > 0 {
|
||||
return exclusivePodOptions("NoInfo", "SharedNamespaces")
|
||||
return exclusivePodOptions("NoInfra", "SharedNamespaces")
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ load helpers
|
|||
#
|
||||
# initialize, read image ID and name
|
||||
get_iid_and_name() {
|
||||
run_podman images --format '{{.ID}} {{.Repository}}:{{.Tag}}'
|
||||
run_podman images -a --format '{{.ID}} {{.Repository}}:{{.Tag}}'
|
||||
read iid img_name < <(echo "$output")
|
||||
|
||||
archive=$PODMAN_TMPDIR/myimage-$(random_string 8).tar
|
||||
|
@ -18,7 +18,7 @@ get_iid_and_name() {
|
|||
|
||||
# Simple verification of image ID and name
|
||||
verify_iid_and_name() {
|
||||
run_podman images --format '{{.ID}} {{.Repository}}:{{.Tag}}'
|
||||
run_podman images -a --format '{{.ID}} {{.Repository}}:{{.Tag}}'
|
||||
read new_iid new_img_name < <(echo "$output")
|
||||
|
||||
# Verify
|
||||
|
|
Loading…
Reference in a new issue