Fixes for load and other system tests

Signed-off-by: Brent Baude <bbaude@redhat.com>
This commit is contained in:
Brent Baude 2020-04-13 10:53:24 -05:00
parent 465b4bc563
commit 90ead05903
10 changed files with 82 additions and 19 deletions

View file

@ -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

View file

@ -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)
}

View file

@ -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 {

View file

@ -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`,

View file

@ -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

View file

@ -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

View file

@ -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
}

View file

@ -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)
}

View file

@ -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")
}
}

View file

@ -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