summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com>2020-08-30 13:02:41 -0400
committerGitHub <noreply@github.com>2020-08-30 13:02:41 -0400
commitd87e26ec76ef849f734e461ed158c0d252135eac (patch)
tree31e947a4fa4fc9561b9d367852ec99cdf95a8886
parent3ae1cd806c9125e48af08368e488ea39cd28256d (diff)
parentb64d29bdf2d6aa9fe402ab2b54cc888fe1e4eb62 (diff)
downloadpodman-d87e26ec76ef849f734e461ed158c0d252135eac.tar.gz
podman-d87e26ec76ef849f734e461ed158c0d252135eac.tar.bz2
podman-d87e26ec76ef849f734e461ed158c0d252135eac.zip
Merge pull request #7502 from Luap99/v2.0-remote
V2.0: Futher --remote flag backports
-rw-r--r--cmd/podman/registry/remote.go29
-rw-r--r--test/system/001-basic.bats31
-rw-r--r--test/system/070-build.bats17
-rw-r--r--test/system/075-exec.bats2
-rw-r--r--test/utils/utils.go4
5 files changed, 70 insertions, 13 deletions
diff --git a/cmd/podman/registry/remote.go b/cmd/podman/registry/remote.go
index 006a1b900..217652ec0 100644
--- a/cmd/podman/registry/remote.go
+++ b/cmd/podman/registry/remote.go
@@ -5,22 +5,25 @@ import (
"sync"
"github.com/containers/libpod/v2/pkg/domain/entities"
- "github.com/spf13/cobra"
+ "github.com/spf13/pflag"
)
-var (
- // Was --remote given on command line
- remoteOverride bool
- remoteSync sync.Once
-)
+// Value for --remote given on command line
+var remoteFromCLI = struct {
+ Value bool
+ sync sync.Once
+}{}
-// IsRemote returns true if podman was built to run remote
-// Use in init() functions as a initialization check
+// IsRemote returns true if podman was built to run remote or --remote flag given on CLI
+// Use in init() functions as an initialization check
func IsRemote() bool {
- remoteSync.Do(func() {
- remote := &cobra.Command{}
- remote.Flags().BoolVarP(&remoteOverride, "remote", "r", false, "")
- _ = remote.ParseFlags(os.Args)
+ remoteFromCLI.sync.Do(func() {
+ fs := pflag.NewFlagSet("remote", pflag.ContinueOnError)
+ fs.ParseErrorsWhitelist.UnknownFlags = true
+ fs.Usage = func() {}
+ fs.SetInterspersed(false)
+ fs.BoolVarP(&remoteFromCLI.Value, "remote", "r", false, "")
+ _ = fs.Parse(os.Args[1:])
})
- return podmanOptions.EngineMode == entities.TunnelMode || remoteOverride
+ return podmanOptions.EngineMode == entities.TunnelMode || remoteFromCLI.Value
}
diff --git a/test/system/001-basic.bats b/test/system/001-basic.bats
index b12836b9e..a5a3324fb 100644
--- a/test/system/001-basic.bats
+++ b/test/system/001-basic.bats
@@ -38,6 +38,37 @@ function setup() {
run_podman pull $IMAGE
}
+# PR #7212: allow --remote anywhere before subcommand, not just as 1st flag
+@test "podman-remote : really is remote, works as --remote option" {
+ if ! is_remote; then
+ skip "only applicable on podman-remote"
+ fi
+
+ # First things first: make sure our podman-remote actually is remote!
+ run_podman version
+ is "$output" ".*Server:" "the given podman path really contacts a server"
+
+ # $PODMAN may be a space-separated string, e.g. if we include a --url.
+ # Split it into its components; remove "-remote" from the command path;
+ # and preserve any other args if present.
+ local -a podman_as_array=($PODMAN)
+ local podman_path=${podman_as_array[0]}
+ local podman_non_remote=${podman_path%%-remote}
+ local -a podman_args=("${podman_as_array[@]:1}")
+
+ # This always worked: running "podman --remote ..."
+ PODMAN="${podman_non_remote} --remote ${podman_args[@]}" run_podman version
+ is "$output" ".*Server:" "podman --remote: contacts server"
+
+ # This was failing: "podman --foo --bar --remote".
+ PODMAN="${podman_non_remote} --tmpdir /var/tmp --log-level=error ${podman_args[@]} --remote" run_podman version
+ is "$output" ".*Server:" "podman [flags] --remote: contacts server"
+
+ # ...but no matter what, --remote is never allowed after subcommand
+ PODMAN="${podman_non_remote} ${podman_args[@]}" run_podman 125 version --remote
+ is "$output" "Error: unknown flag: --remote" "podman version --remote"
+}
+
# This is for development only; it's intended to make sure our timeout
# in run_podman continues to work. This test should never run in production
# because it will, by definition, fail.
diff --git a/test/system/070-build.bats b/test/system/070-build.bats
index bdc05a172..7dd1077ae 100644
--- a/test/system/070-build.bats
+++ b/test/system/070-build.bats
@@ -164,6 +164,7 @@ EOF
# cd to the dir, so we test relative paths (important for podman-remote)
cd $PODMAN_TMPDIR
run_podman build -t build_test -f build-test/Containerfile build-test
+ local iid="${lines[-1]}"
# Run without args - should run the above script. Verify its output.
export MYENV2="$s_env2"
@@ -231,6 +232,22 @@ Labels.$label_name | $label_value
run_podman run --rm build_test stat -c'%u:%g:%N' /a/b/c/myfile
is "$output" "4:5:/a/b/c/myfile" "file in volume is chowned"
+ # Hey, as long as we have an image with lots of layers, let's
+ # confirm that 'image tree' works as expected
+ run_podman image tree build_test
+ is "${lines[0]}" "Image ID: ${iid:0:12}" \
+ "image tree: first line"
+ is "${lines[1]}" "Tags: \[localhost/build_test:latest]" \
+ "image tree: second line"
+ is "${lines[2]}" "Size: [0-9.]\+[kM]B" \
+ "image tree: third line"
+ is "${lines[3]}" "Image Layers" \
+ "image tree: fourth line"
+ is "${lines[4]}" "... ID: [0-9a-f]\{12\} Size: .* Top Layer of: \[$IMAGE]" \
+ "image tree: first layer line"
+ is "${lines[-1]}" "... ID: [0-9a-f]\{12\} Size: .* Top Layer of: \[localhost/build_test:latest]" \
+ "image tree: last layer line"
+
# Clean up
run_podman rmi -f build_test
}
diff --git a/test/system/075-exec.bats b/test/system/075-exec.bats
index f53a22a3f..6c72a0eab 100644
--- a/test/system/075-exec.bats
+++ b/test/system/075-exec.bats
@@ -6,6 +6,8 @@
load helpers
@test "podman exec - basic test" {
+ skip_if_remote "FIXME: pending #7241"
+
rand_filename=$(random_string 20)
rand_content=$(random_string 50)
diff --git a/test/utils/utils.go b/test/utils/utils.go
index 0597cd292..20e185fc1 100644
--- a/test/utils/utils.go
+++ b/test/utils/utils.go
@@ -207,6 +207,10 @@ func WaitContainerReady(p PodmanTestCommon, id string, expStr string, timeout in
// OutputToString formats session output to string
func (s *PodmanSession) OutputToString() string {
+ if s == nil || s.Out == nil || s.Out.Contents() == nil {
+ return ""
+ }
+
fields := strings.Fields(string(s.Out.Contents()))
return strings.Join(fields, " ")
}