aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xAPI.md2
-rw-r--r--cmd/podman/varlink/io.podman.varlink4
-rw-r--r--pkg/adapter/containers_remote.go2
-rw-r--r--pkg/varlinkapi/containers.go15
-rw-r--r--test/e2e/exec_test.go4
5 files changed, 17 insertions, 10 deletions
diff --git a/API.md b/API.md
index 31bffeb16..71d09fed8 100755
--- a/API.md
+++ b/API.md
@@ -1591,6 +1591,8 @@ user [?string](#?string)
workdir [?string](#?string)
env [?[]string](#?[]string)
+
+detachKeys [?string](#?string)
### <a name="Image"></a>type Image
diff --git a/cmd/podman/varlink/io.podman.varlink b/cmd/podman/varlink/io.podman.varlink
index cc66e7df0..f5f3250f7 100644
--- a/cmd/podman/varlink/io.podman.varlink
+++ b/cmd/podman/varlink/io.podman.varlink
@@ -514,7 +514,9 @@ type ExecOpts(
# workdir to run command in container
workdir: ?string,
# slice of keyword=value environment variables
- env: ?[]string
+ env: ?[]string,
+ # string of detach keys
+ detachKeys: ?string
)
# GetVersion returns version and build information of the podman service
diff --git a/pkg/adapter/containers_remote.go b/pkg/adapter/containers_remote.go
index 7fce30378..3b1b80315 100644
--- a/pkg/adapter/containers_remote.go
+++ b/pkg/adapter/containers_remote.go
@@ -1017,7 +1017,6 @@ func (r *LocalRuntime) ExecContainer(ctx context.Context, cli *cliconfig.ExecVal
// Check if we are attached to a terminal. If we are, generate resize
// events, and set the terminal to raw mode
- // TODO FIXME tty
if haveTerminal && cli.Tty {
cancel, oldTermState, err := handleTerminalAttach(ctx, resize)
if err != nil {
@@ -1038,6 +1037,7 @@ func (r *LocalRuntime) ExecContainer(ctx context.Context, cli *cliconfig.ExecVal
User: &cli.User,
Workdir: &cli.Workdir,
Env: &envs,
+ DetachKeys: &cli.DetachKeys,
}
inputStream := os.Stdin
diff --git a/pkg/varlinkapi/containers.go b/pkg/varlinkapi/containers.go
index fa17bed84..97eb36014 100644
--- a/pkg/varlinkapi/containers.go
+++ b/pkg/varlinkapi/containers.go
@@ -782,6 +782,9 @@ func (i *LibpodAPI) ExecContainer(call iopodman.VarlinkCall, opts iopodman.ExecO
fmt.Sprintf("exec requires a running container, %s is %s", ctr.ID(), state.String()))
}
+ // ACK the client upgrade request
+ call.ReplyExecContainer()
+
envs := []string{}
if opts.Env != nil {
envs = *opts.Env
@@ -796,8 +799,11 @@ func (i *LibpodAPI) ExecContainer(call iopodman.VarlinkCall, opts iopodman.ExecO
if opts.Workdir != nil {
workDir = *opts.Workdir
}
- // ACK the client upgrade request
- call.ReplyExecContainer()
+
+ var detachKeys string
+ if opts.DetachKeys != nil {
+ detachKeys = *opts.DetachKeys
+ }
resizeChan := make(chan remotecommand.TerminalSize)
@@ -818,11 +824,10 @@ func (i *LibpodAPI) ExecContainer(call iopodman.VarlinkCall, opts iopodman.ExecO
}
}()
- // TODO FIXME detach keys
go func() {
- ec, err := ctr.Exec(opts.Tty, opts.Privileged, envs, opts.Cmd, user, workDir, streams, 0, resizeChan, "")
+ ec, err := ctr.Exec(opts.Tty, opts.Privileged, envs, opts.Cmd, user, workDir, streams, 0, resizeChan, detachKeys)
if err != nil {
- logrus.Errorf("ExecContainer Exec err %s, %s\n", err.Error(), errors.Cause(err).Error())
+ logrus.Errorf(err.Error())
}
ecErrChan <- ExitCodeError{
uint32(ec),
diff --git a/test/e2e/exec_test.go b/test/e2e/exec_test.go
index bd4fb7aad..6cf78a25c 100644
--- a/test/e2e/exec_test.go
+++ b/test/e2e/exec_test.go
@@ -77,8 +77,6 @@ var _ = Describe("Podman exec", func() {
})
It("podman exec environment test", func() {
- // passing environment variables is not supported in the remote client
- SkipIfRemote()
setup := podmanTest.RunTopContainer("test1")
setup.WaitWithDefaultTimeout()
Expect(setup.ExitCode()).To(Equal(0))
@@ -110,8 +108,8 @@ var _ = Describe("Podman exec", func() {
match, _ := session.GrepString("BAR")
Expect(match).Should(BeTrue())
os.Unsetenv("FOO")
-
})
+
It("podman exec exit code", func() {
setup := podmanTest.RunTopContainer("test1")
setup.WaitWithDefaultTimeout()