Commit Graph

80 Commits

Author SHA1 Message Date
Matthew Heon
e0d9404634 Enable detached exec for remote
The biggest obstacle here was cleanup - we needed a way to remove
detached exec sessions after they exited, but there's no way to
tell if an exec session will be attached or detached when it's
created, and that's when we must add the exit command that would
do the removal. The solution was adding a delay to the exit
command (5 minutes), which gives sufficient time for attached
exec sessions to retrieve the exit code of the session after it
exits, but still guarantees that they will be removed, even for
detached sessions. This requires Conmon 2.0.17, which has the new
`--exit-delay` flag.

As part of the exit command rework, we can drop the hack we were
using to clean up exec sessions (remove them as part of inspect).
This is a lot cleaner, and I'm a lot happier about it.

Otherwise, this is just plumbing - we need a bindings call for
detached exec, and that needed to be added to the tunnel mode
backend for entities.

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
2020-06-02 15:30:42 -04:00
Jhon Honce
670f7c271f Add invalid value to error message
Signed-off-by: Jhon Honce <jhonce@redhat.com>
2020-06-01 09:23:10 -07:00
Peter Hunt
339ffd8ade specgen: fix segfault
we should not access the devices without checking if the resources are there

Signed-off-by: Peter Hunt <pehunt@redhat.com>
2020-05-27 14:52:17 -04:00
Daniel J Walsh
e41089244b Attempt to turn on build_without_cgo tests
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2020-05-22 12:56:19 -04:00
Daniel J Walsh
2e7d2c2f47 Start testing with cross compilation
Add missing man page links for podman-image-search and
podman-image-diff

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2020-05-21 11:58:15 -04:00
Matthew Heon
6b9e9610d8 Enable cleanup processes for detached exec
The cleanup command creation logic is made public as part of this
and wired such that we can call it both within SpecGen (to make
container exit commands) and from the ABI detached exec handler.
Exit commands are presently only used for detached exec, but
theoretically could be turned on for all exec sessions if we
wanted (I'm declining to do this because of potential overhead).

I also forgot to copy the exit command from the exec config into
the ExecOptions struct used by the OCI runtime, so it was not
being added.

There are also two significant bugfixes for exec in here. One is
for updating the status of running exec sessions - this was
always failing as I had coded it to remove the exit file *before*
reading it, instead of after (oops). The second was that removing
a running exec session would always fail because I inverted the
check to see if it was running.

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
2020-05-20 16:11:05 -04:00
Matthew Heon
26f48139ce Add remaining annotations for podman inspect
This should finish support for `podman inspect` in APIv2.

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
2020-05-08 14:45:32 -04:00
Matthew Heon
7989e422b4 Fix podman pod create --infra=false
We were accidentally setting incorrect defaults for the network
namespace for rootless `pod create` when infra containers were
not being created. This should resolve that issue.

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
2020-05-08 13:25:41 -04:00
OpenShift Merge Robot
13db0f2b61 Merge pull request #6118 from baude/v2bindingsenforce
set binding tests to required
2020-05-08 17:57:10 +02:00
Brent Baude
a4c607cc71 set binding tests to required
some small fix ups for binding tests and then make them required.

update containers-common

V2 bindings tests were failing because of changes introduced in commit
a2ad5bb.

Fix some typos.

Signed-off-by: Lokesh Mandvekar <lsm5@fedoraproject.org>

in the case where the specgen attribute for Env and Labels are nil, we should should then make the map IF we have labels and envs that need to be added.

Signed-off-by: Brent Baude <bbaude@redhat.com>
2020-05-08 09:05:37 -05:00
Matthew Heon
2d68dc776d Fix parsing of --network for podman pod create
Interpreting CNI networks was a bit broken, and it was causing
rootless `podman pod create` to fail. Also, we were missing the
`--net` alias for `--network`, so add that.

Fixes #6119

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
2020-05-07 17:58:50 -04:00
Giuseppe Scrivano
99bdafba99 podman: split env variables in env and overrides
There are three different priorities for applying env variables:

1) environment/config file environment variables
2) image's config
3) user overrides (--env)

The third kind are known to the client, while the default config and image's
config is handled by the backend.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2020-05-07 14:16:50 -04:00
Valentin Rothberg
f269be3a31 add {generate,play} kube
Add the `podman generate kube` and `podman play kube` command.  The code
has largely been copied from Podman v1 but restructured to not leak the
K8s core API into the (remote) client.

Both commands are added in the same commit to allow for enabling the
tests at the same time.

Move some exports from `cmd/podman/common` to the appropriate places in
the backend to avoid circular dependencies.

Move definitions of label annotations to `libpod/define` and set the
security-opt labels in the frontend to make kube tests pass.

Implement rest endpoints, bindings and the tunnel interface.

Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
2020-05-06 17:08:22 +02:00
Matthew Heon
f7c3cfde77 Add small fixes for 'podman run' from diffing inspect
To try and identify differences between Podman v1.9 and master,
I ran a series of `podman run` commands with various flags
through each, then inspecting the resulting containers and diffed
the inspect JSON between each. This identified a number of issues
which are fixed in this PR.

In order of discovery:
- Podman v2 gave short names for images, where Podman v1 gave the
  fully-qualified name. Simple enough fix (get image tags and use
  the first one if they're available)
- The --restart flag was not being parsed correctly when a number
  of retries was specified. Parsing has been corrected.
- The -m flag was not setting the swap limit (simple fix to set
  swap in that case if it's not explicitly set by the user)
- The --cpus flag was completely nonfunctional (wired in its
  logic)

Tests have been added for all of these to catch future
regressions.

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
2020-05-05 20:21:01 -04:00
Matthew Heon
7ac3d906b5 Rework port parsing to support --expose and -P
As part of this, make a major change to the type we use to
represent port mappings in SpecGen (from using existing OCICNI
structs to using our own custom one). This struct has the
advantage of supporting ranges, massively reducing traffic over
the wire for Podman commands using them (for example, the
`podman run -p 5000-6000` command will now send only one struct
instead of 1000). This struct also allows us to easily validate
which ports are in use, and which are not, which is necessary for
--expose.

Once we have parsed the ports from the new struct, we can produce
an accurate map including all currently requested ports, and use
that to determine what ports need to be exposed (some requested
exposed ports may already be included in a mapping from --publish
and will be ignored) and what open ports on the host we can map
them to.

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
2020-05-04 20:57:27 -04:00
Daniel J Walsh
97fcbfcbec cgroupsns was not following containers.conf
Implement ParseCgroupsNamespace to handle defaults.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2020-05-01 15:00:33 -04:00
Daniel J Walsh
4a2765c498 Properly handle default capabilities listed in containers.conf
If user/admin specifies a different list of default capabilties
we need to honor these.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2020-05-01 15:00:26 -04:00
Daniel J Walsh
730fbc7628 Properly handle containers.conf devices
We need to add the default devices listed in containers.conf

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2020-05-01 15:00:26 -04:00
OpenShift Merge Robot
49107a5a2e Merge pull request #6004 from rhatdan/ulimits
Set up ulimits for rootless containers.
2020-05-01 15:58:24 +02:00
Giuseppe Scrivano
c11cff4542 cmd, podman: do not override entrypoint if unset
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-04-30 11:33:34 +02:00
Giuseppe Scrivano
65d7f22720 cmd, podman: handle --pod new:POD
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-04-30 11:33:33 +02:00
Giuseppe Scrivano
b8db112436 specgen: honor slirp4netns
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-04-29 12:13:05 +02:00
Valentin Rothberg
b2414b580e generate systemd
Implement `podman generate systemd` for Podman v2 and enable associated
tests.

Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
2020-04-29 07:22:18 +02:00
OpenShift Merge Robot
23be7b5049 Merge pull request #6024 from baude/v2checkmediatypew
check image media/manifest type for healthchecks
2020-04-28 19:21:50 +02:00
Brent Baude
a255075fe8 check image media/manifest type for healthchecks
before looking up a healthcheck in an image, check to make sure it is a dockerv2schema image.

Signed-off-by: Brent Baude <bbaude@redhat.com>
2020-04-28 11:49:58 -05:00
Giuseppe Scrivano
a9aa9e2f78 pkg, specgen: do not hardcode user=0 in the config if not specified
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-04-28 15:25:59 +02:00
Daniel J Walsh
51585fffdd Set up ulimits for rootless containers.
Currently we are setting the maximum limits for rootful podman containers,
no reason not to set them by default for rootless users as well

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2020-04-28 08:09:39 -04:00
OpenShift Merge Robot
f6f7172494 Merge pull request #6000 from mheon/volume_backend_flags
Add support for volumes-from, image volumes, init
2020-04-27 21:53:37 +02:00
Matthew Heon
67ec4e1d27 Improve Entrypoint and Command support
We should not be overwriting the Specgen's Command and Entrypoint
when building the final command to pass in the OCI spec. Both of
these will be provided to Libpod for use in `podman inspect` and
committing containers, and both must be set to the user's input,
not overwritten by the image if unset.

Fix this by moving command generation into OCI spec generation
and not modifying the SpecGenerator when we do so.

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
2020-04-27 13:13:21 -04:00
Matthew Heon
02671a103f Add support for volumes-from, image volumes, init
This should complete Podmanv2's support for volume-related flags.
Most code was sourced from the old pkg/spec implementation with
modifications to account for the split between frontend flags
(volume, mount, tmpfs) and the backend flags implemented here.

Also enables tests for podman run with volumes

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
2020-04-27 13:13:21 -04:00
Giuseppe Scrivano
d227d44fd6 namespaces: accept pod namespace
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-04-27 17:08:52 +02:00
OpenShift Merge Robot
fdf64f0c66 Merge pull request #5994 from giuseppe/fix-healthchecks
v2, podman: fix healthchecks
2020-04-27 15:40:24 +02:00
Giuseppe Scrivano
c2f77a281f specgen: relax test to accept default network
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-04-27 13:12:19 +02:00
Giuseppe Scrivano
adb10783d9 spec, pod: honor --dns
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-04-27 12:58:02 +02:00
Giuseppe Scrivano
1cd484e13f specgen: read healthchecks from the image
if there is no healthcheck configuration specified, read it from the
image.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-04-27 11:22:27 +02:00
OpenShift Merge Robot
2afe579c06 Merge pull request #5971 from giuseppe/fix-userns-tests
v2, podman: fix and enable all run_userns_test.go tests
2020-04-24 22:39:26 +02:00
OpenShift Merge Robot
3c3adac528 Merge pull request #5967 from giuseppe/run-test-fixes
v2, tests: fix various run_test.go failures
2020-04-24 17:46:20 +02:00
Matthew Heon
b1552d9124 Do not join pod namespaces without an infra ctr
We do not want to join pod namespaces if no infra container is
present. A pod may claim it shares namespaces without an infra
container (I'll take an action item to fix that - it really
should not be allowed), which was tripping up our default
namespace code and forcing us to try and join the namespaces of
the nonexistant infra container.

Signed-off-by: Matthew Heon <mheon@redhat.com>
2020-04-24 09:44:51 -04:00
Giuseppe Scrivano
64d8b4eebb podman: implement userns=keep-id
add missing implementation for userns=keep-id and enable the user
namespaces tests.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-04-24 15:03:50 +02:00
Giuseppe Scrivano
a3acc4f977 podman: add support for --rootfs
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-04-24 12:56:20 +02:00
Giuseppe Scrivano
23d431f0bf specgen: fix error message
the check is correct but the error message was stating the opposite.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-04-24 10:49:18 +02:00
Giuseppe Scrivano
36039a38ea create: move validate after setting default ns
validate the configuration only after we set the default namespaces.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-04-24 10:48:40 +02:00
Giuseppe Scrivano
48530acbd9 podman: handle namespaces specified on the CLI
and handle differently the user namespace as it supports additional
options.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-04-23 18:05:03 +02:00
Giuseppe Scrivano
d98b6f4232 pkg: fix shmsize error message
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-04-23 18:05:01 +02:00
Matthew Heon
b4a4338dfe Enable basic volumes support in Podmanv2
This enables the --volume, --mount, and --tmpfs flags in
Podmanv2. It does not enable init-related flags, image volumes,
and --volumes-from.

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
2020-04-22 14:24:12 -04:00
Matthew Heon
1cd2b746d0 Modify namespace generation code for specgen
Namespaces have now been changed to properly handle all cases.
Spec handling code for namespaces was consolidated in a single
function.

Still missing:
- Image ports
- Pod namespaces likely still broken in Podmanv2

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
2020-04-21 14:38:52 -04:00
OpenShift Merge Robot
1ed849f2d1 Merge pull request #5921 from baude/v2imageep
add entrypoint from image where needed
2020-04-21 11:23:21 -04:00
OpenShift Merge Robot
a2541bf133 Merge pull request #5912 from giuseppe/v2-rlimits
v2, pkg: implement rlimits
2020-04-21 11:17:35 -04:00
Brent Baude
224a5ce51e add entrypoint from image where needed
if the image specifies both the image and entrypoint, we need to account for that and preprend the entrypoint to the command.  this only happens if no user command and entrypoint were supplied.

Signed-off-by: Brent Baude <bbaude@redhat.com>
2020-04-21 09:15:21 -05:00
OpenShift Merge Robot
08823e7383 Merge pull request #5913 from rhatdan/v2
More fixes for podman create tests
2020-04-21 07:54:39 -04:00