3297 Commits

Author SHA1 Message Date
811cce5a8a libpod: store network status when userns is used
When a container with a userns is created the network setup is special.
Normally the netns is setup before the oci runtime container is created,
however with a userns the container is created first and then the network
is setup. In the second case we never saved the container state
afterwards. Because of it, podman inspect would not show the network info
and network teardown will not happen.

This worked with local podman  because there was a save() call later in the
code path which then also saved the network status. But in the podman API
code path this save never happened thus all containers started via API had
this problem.

Fixes #14465

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-06-07 14:35:07 +02:00
1ada01a038 Merge pull request #14499 from giuseppe/make-error-clearer
runtime: make error clearer
2022-06-07 03:53:13 -04:00
2a0d896b36 runtime: make error clearer
make the error clearer and state that images created by other tools
might not be visible to Podman when it overrides the graph driver.

Closes: https://github.com/containers/podman/issues/13970

[NO NEW TESTS NEEDED]

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2022-06-06 22:08:16 +02:00
aadae49ad3 overlay-volumes: add support for non-volatile upperdir,workdir for anonymous volumes
Similar feature was added for named overlay volumes here: https://github.com/containers/podman/pull/12712
Following PR just mimics similar feature for anonymous volumes.

Often users want their anonymous overlayed volumes to be `non-volatile` in nature
that means that same `upper` dir can be re-used by one or more
containers but overall of nature of volumes still have to be overlay
so work done is still on a overlay not on the actual volume.

Following PR adds support for more advanced options i.e custom `workdir`
and `upperdir` for overlayed volumes. So that users can re-use `workdir`
and `upperdir` across new containers as well.

Usage

```console
podman run -it -v /some/path:/data:O,upperdir=/path/persistant/upper,workdir=/path/persistant/work alpine sh
```

Signed-off-by: Aditya R <arajan@redhat.com>
2022-06-06 18:58:42 +05:30
8c0e033f27 Merge pull request #14477 from Luap99/partial-logs
podman logs k8s-file: do not reassemble partial log lines
2022-06-03 18:06:58 -04:00
81f228b20a Merge pull request #14466 from mheon/fix_9075
Improve robustness of `podman system reset`
2022-06-03 17:54:57 -04:00
259c79963f Improve robustness of podman system reset
Firstly, reset is now managed by the runtime itself as a part of
initialization. This ensures that it can be used even with
runtimes that would otherwise fail to be created - most notably,
when the user has changed a core path
(runroot/root/tmpdir/staticdir).

Secondly, we now attempt a best-effort removal even if the store
completely fails to be configured.

Third, we now hold the alive lock for the entire reset operation.
This ensures that no other Podman process can start while we are
running a system reset, and removes any possibility of a race
where a user tries to create containers or pull images while we
are trying to perform a reset.

[NO NEW TESTS NEEDED] we do not test reset last I checked.

Fixes #9075

Signed-off-by: Matthew Heon <mheon@redhat.com>
2022-06-03 12:54:08 -04:00
2414586662 podman logs k8s-file: do not reassemble partial log lines
The backend should not convert partial lines to full log lines. While
this works for most cases it cannot work when the last line is partial
since it will just be lost. The frontend logic can already display
partial lines correctly. The journald driver also works correctly since
it does not such conversion.

Fixes #14458

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-06-03 15:01:23 +02:00
95888735e3 Merge pull request #14384 from mheon/move_attach
Move Attach under the OCI Runtime interface
2022-06-02 14:20:25 -04:00
e60c41657b Merge pull request #14395 from vrothberg/healthcheck-fix
healthcheck: wait for systemd operations
2022-06-02 05:26:07 -04:00
a208bfaa52 Merge pull request #14421 from Luap99/stats
podman stats: work with network connect/disconnect
2022-06-02 04:26:04 -04:00
205c8c071e fix podman container restore without CreateNetNS
When a container does not use the default podman netns, for example
--network none or --network ns:/path a restore would fail because the
specgen check validates that c.config.StaticMAC is nil but the
unmarshaller sets it to an empty slice.

While we could make the check use len() > 0 I feel like it is more
common to check with != nil for ip and mac addresses.
Adding omitempty tag makes the json marshal/unmarshal work correctly.
This should not cause any issues.

Fixes #14389

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-05-31 16:49:40 +02:00
16e8b2f32e podman stats: work with network connect/disconnect
Hardcoding the interface name is a bad idea. We have no control over the
actual interface name since the user can change it.

The correct thing is to read them from the network status. Since the
contianer can have more than one interface we have to add the RX/TX
values. The other values are currently not used.

For podman 5.0 we should change it so that the API can return the
statistics per interface and the client should sum the TX/RX for the
command output. This is what docker is doing.

Fixes #13824

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-05-31 15:31:07 +02:00
a550af260a Merge pull request #14383 from jwhonce/wip/info_todo
Add Authorization field to Plugins for Info
2022-05-27 10:55:35 -04:00
f23ae4d660 healthcheck: wait for systemd operations
Make sure to wait for the systemd operations to finish when
starting/stopping healtcheck timers and services.  Also make
sure to stop the timer before the service to avoid a race
with the timer.

[NO NEW TESTS NEEDED] since it is a non-functional change and existing
tests are expected to pass.

Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2022-05-27 13:10:35 +02:00
8efdbf5c4c Add API support for NoOverwriteDirNonDir
Update method signatures and structs to pass option to buildah code

```release-note
NONE
```

[NO NEW TESTS NEEDED]

Signed-off-by: Jhon Honce <jhonce@redhat.com>
2022-05-26 16:31:15 -07:00
e13c5f3a9e Refactor populating uptime
Refactor populating uptime field to use standard library parsing and
math for populating the hour, minute, seconds fields.

Note: the go-humanize package does not cover time.Duration just
time.time.

```release-note
NONE
```

[NO NEW TESTS NEEDED]

Signed-off-by: Jhon Honce <jhonce@redhat.com>
2022-05-26 15:46:04 -07:00
ea1a8e2432 Move Attach under the OCI Runtime interface
With conmon-rs on the horizon, we need to disentangle Libpod from
legacy Conmon to the greatest extent possible. There are
definitely opportunities for codesharing between the two, but we
have to assume the implementations will be largely disjoint given
the different architectures.

Fortunately, most of the work has already been done in the past.
The conmon-managed OCI runtime mostly sits behind an interface,
with a few exceptions - the most notable of those being attach.
This PR thus moves Attach behind the interface, to ensure that we
can have attach implementations that don't use our existing unix
socket streaming if necessary.

Still to-do is conmon cleanup. There's a lot of code that removes
Conmon-specific files, or kills the Conmon PID, and all of it
will need to be refactored behind the interface.

[NO NEW TESTS NEEDED] Just moving some things around.

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
2022-05-26 14:57:08 -04:00
d730f2b254 Add Authorixation field to Plugins for Info
The Authorization field lists the plugins for granting access to the
Docker daemon. This field will always be nil for Podman as there is no
daemon. The field is included for compatibility.

```release-note
NONE
```

[NO NEW TESTS NEEDED]

Signed-off-by: Jhon Honce <jhonce@redhat.com>
2022-05-26 11:15:48 -07:00
8c781416b8 Fix swagger model of InspectPodResponse
`net.IP` gets marshalled as `string` and not `[]uint8`

[NO TESTS NEEDED]
[NO NEW TESTS NEEDED]

Signed-off-by: Jakob Ahrer <jakob@ahrer.dev>
2022-05-26 16:34:05 +02:00
271f58f142 Merge pull request #14369 from mheon/fixmes_2
Remove more FIXMEs
2022-05-26 06:07:40 -04:00
badf76e172 Remove more FIXMEs
Mostly, just removing the comments. These either have been done,
or are no longer a good idea.

No code changes. [NO NEW TESTS NEEDED] as such.

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
2022-05-25 14:10:02 -04:00
9fcfea7643 First batch of resolutions to FIXMEs
Most of these are no longer relevant, just drop the comments.

Most notable change: allow `podman kill` on paused containers.
Works just fine when I test it.

Signed-off-by: Matthew Heon <mheon@redhat.com>
2022-05-25 13:28:04 -04:00
dbd4ee04b8 Merge pull request #14358 from vrothberg/todo-part-2
Todo part 2
2022-05-25 10:42:23 -04:00
1dcd1c970d Merge pull request #14308 from n1hility/root-cgroup
Support running podman under a root v2 cgroup
2022-05-25 08:53:15 -04:00
c04ec104df libpod/pod_top_linux.go: s/TODO/NOTE/
As it really is a note and not a TODO item.

Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2022-05-25 12:30:19 +02:00
b19e2d6f80 events: drop TODO comment
We can evaluate a solution in case adding more events really turns into
a problem.

Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2022-05-25 12:26:43 +02:00
4a447a2133 work queue: simplify and use a wait group
Simplify the work-queue implementation by using a wait group. Once all
queued work items are done, the channel can be closed.

The system tests revealed a flake (i.e., #14351) which indicated that
the service container does not always get stopped which suggests a race
condition when queuing items.  Those items are queued in a goroutine to
prevent potential dead locks if the queue ever filled up too quickly.
The race condition in question is that if a work item queues another,
the goroutine for queuing may not be scheduled fast enough and the
runtime shuts down; it seems to happen fairly easily on the slow CI
machines.  The wait group fixes this race and allows for simplifying
the code.

Also increase the queue's buffer size to 10 to make things slightly
faster.

[NO NEW TESTS NEEDED] as we are fixing a flake.

Fixes: #14351
Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2022-05-25 10:17:46 +02:00
eea7491d6b Merge pull request #14327 from rhatdan/common
Use containers/common/pkg/util.StringToSlice
2022-05-24 13:48:50 -04:00
8af98b342d contain_top_linux.go: s/TODO/NOTE/
Change the TODO note to NOTE to actually reflect what it is:
breadcrumbs in case we want to add filtering the future.

Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2022-05-24 13:40:02 +02:00
023fe23596 Merge pull request #14321 from mheon/no_error_on_dangling
Instead of erroring, clean up after dangling IDs in DB
2022-05-23 15:10:19 -04:00
5d37d80ff9 Use containers/common/pkg/util.StringToSlice
[NO NEW TESTS NEEDED] Just code cleanup for better reuse

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2022-05-23 12:16:54 -04:00
b7dbc505b6 Instead of erroring, clean up after dangling IDs in DB
For various (mostly legacy) reasons, Podman presently maintains a
unified namespace for pods and containers - IE, we cannot have
both a pod and a container named "test" at the same time. To
implement this, we use a global database table of every pod and
container ID (and another of every pod and container name).

These entries should be added when containers/pods are added, and
removed when containers/pods are removed, with the database's
transactional integrity providing a guarantee that this is
batched with the overall removal and that the DB should remain
sane and consistent no matter what. As such, we treat a dangling
ID as a hard error that stops the use of Podman.

Unfortunately, we have someone run into this last Friday. I'm
still not certain how exactly their DB got into this state, but
without further clarification there, we can consider removing the
error and making Podman instead clean up and remove any dangling
IDs, which should restore Podman to a serviceable state. Drop an
error message if we do this, though, because people should know
that the DB is in a bad state.

[NO NEW TESTS NEEDED] it is deliberately impossible to produce a
configuration that would test this without hex-editing the DB
file.

Signed-off-by: Matthew Heon <mheon@redhat.com>
2022-05-23 11:21:15 -04:00
7d00b0ea0d Merge pull request #14281 from vrothberg/fix-14251
fix --init with /dev bind mount
2022-05-23 10:17:59 -04:00
d66288315d auto update: create an event
Create an auto-update event for each invocation, independent if images
and containers are updated or not.  Those events will be indicated in
the events already but users will now know why.

Fixes: #14283
Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2022-05-23 14:11:29 +02:00
633d5f1f8b fix --init with /dev bind mount
The init binary until now has been bind-mounted to /dev/init which
breaks when bind-mounting to /dev.  Instead mount the init to
/run/podman-init.  The reasoning for using /run is that it is already
used for other runtime data such as secrets.

Fixes: #14251
Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2022-05-23 13:59:05 +02:00
94e82121bf Support running podman under a root v2 cgroup
Signed-off-by: Jason T. Greene <jason.greene@redhat.com>
2022-05-21 09:28:52 -05:00
1916fe22a9 Merge pull request #14272 from Luap99/completion2
shell completion: use more constants in the code
2022-05-19 18:45:03 -04:00
318e95fd2a shell completion: fix podman event --filter values
The completion suggested incorrect values for `podman events --filter
type=` . It should only list types not the event status. Also make sure
to use the constants instead of duplicating the strings.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-05-19 14:04:10 +02:00
b22143267b linter: enable unconvert linter
Detects unneccessary type conversions and helps in keeping the code base
cleaner.

Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2022-05-19 13:59:15 +02:00
12964c7b93 Merge pull request #14256 from vrothberg/run-1287
k8systemd: run k8s workloads in systemd
2022-05-18 09:39:30 -04:00
4a78992ac7 Merge pull request #14258 from mheon/no_hard_error_on_exec_cleanup
Make errors on removing exec sessions nonfatal
2022-05-17 11:10:52 +02:00
e28d46b76b Merge pull request #14255 from hiredman/pr-for-14249
Don't complain about XDG_RUNTIME_DIR, Closes  #1424
2022-05-17 11:08:50 +02:00
8684d41e38 k8systemd: run k8s workloads in systemd
Support running `podman play kube` in systemd by exploiting the
previously added "service containers".  During `play kube`, a service
container is started before all the pods and containers, and is stopped
last.  The service container communicates its conmon PID via sdnotify.

Add a new systemd template to dispatch such k8s workloads.  The argument
of the template is the path to the k8s file.  Note that the path must be
escaped for systemd not to bark:

Let's assume we have a `top.yaml` file in the home directory:
```
$ escaped=$(systemd-escape ~/top.yaml)
$ systemctl --user start podman-play-kube@$escaped.service
```

Closes: https://issues.redhat.com/browse/RUN-1287
Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2022-05-17 10:18:58 +02:00
21a5ef859c Don't complain about XDG_RUNTIME_DIR, Closes #1424
Code is not directly reading XDG_RUNTIME_DIR, it is reading a value in
the state that may initially be from XDG_RUNTIME_DIR, but then is
overriden by a value from the boltdb that podman stores some state in.

XDG_RUNTIME_DIR and the RunRoot path may not have the same value, so
complaining about XDG_RUNTIME_DIR here may cause confusion when trying
to debug things.

[NO TESTS NEEDED]

Signed-off-by: Kevin Downey <hiredman@thelastcitadel.com>
2022-05-16 09:02:56 -07:00
dc435ecb22 Make errors on removing exec sessions nonfatal
Removing exec sessions is guaranteed to evict them from the DB,
but in the case of a zombie process (or similar) it may error and
block removal of the container. A subsequent run of `podman rm`
would succeed (because the exec sessions have been purged from
the DB), which is potentially confusing to users. So let's just
continue, instead of erroring out, if removing exec sessions
fails.

[NO NEW TESTS NEEDED] I wouldn't want to spawn a zombie in our
test VMs even if I could.

Fixes #14252

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
2022-05-16 10:53:11 -04:00
5b2d5c365b Robust whitespace split of cpu utilization line from /proc/stat
Signed-off-by: Sandro Casagrande <sc.casagrande@gmail.com>
2022-05-14 00:34:56 +00:00
81fc9f1dea Merge pull request #14159 from vrothberg/service-container
play kube: service container
2022-05-12 13:35:56 -04:00
03af8213ce sdnotify: send MAINPID only once
Send the main PID only once.  Previously, `(*Container).start()` and
the conmon handler sent them ~simultaneously and went into a race.

I noticed the issue while debugging a WIP PR.

Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2022-05-12 11:11:37 +02:00
840c120c21 play kube: service container
Add the notion of a "service container" to play kube.  A service
container is started before the pods in play kube and is (reverse)
linked to them.  The service container is stopped/removed *after*
all pods it is associated with are stopped/removed.

In other words, a service container tracks the entire life cycle
of a service started via `podman play kube`.  This is required to
enable `play kube` in a systemd unit file.

The service container is only used when the `--service-container`
flag is set on the CLI.  This flag has been marked as hidden as it
is not meant to be used outside the context of `play kube`.  It is
further not supported on the remote client.

The wiring with systemd will be done in a later commit.

Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2022-05-12 10:51:13 +02:00