Commit Graph

6320 Commits

Author SHA1 Message Date
openshift-merge-bot[bot]
2015137eee Merge pull request #23367 from rhatdan/codespell
Run codespell on source
2024-07-23 23:11:32 +00:00
Arthur Sengileyev
71d6e2fbaf Add utility to convert VMFile to URL for UNIX sockets
This adds generic utility to convert file system path into URL structure.
Instead of string manipulation it uses URL parsing and building routines.
Appending absolute path to `unix:///` URL out of the box correctly
handles URL format on Windows platform, where filepath should be prepended
by additional `/` before drive letter.

Signed-off-by: Arthur Sengileyev <arthur.sengileyev@gmail.com>
2024-07-23 16:41:24 +03:00
Daniel J Walsh
7768cf235e Run codespell on source
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2024-07-23 07:28:23 -04:00
openshift-merge-bot[bot]
34e8c1e762 Merge pull request #23354 from rhatdan/quadlet
Add support for StopSignal in quadlet .container files
2024-07-22 15:20:11 +00:00
Daniel J Walsh
0ecd6fa59f Add support for StopSignal in quadlet .container files
Fixes: https://github.com/containers/podman/issues/23050

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2024-07-22 06:43:45 -04:00
Paul Holzinger
55b6e4c3e8 podman pod stats: fix race when ctr process exits
Like commit 55749af0c7 but for podman *pod* stats not the normal podman
stats. We must ignore ErrCtrStopped here as well as this will happen
when the container process exited.

While at it remove a useless argument from the function as it was always
nil and restructure the logic flow to make it easier to read.

Fixes #23334

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-07-22 10:30:42 +02:00
openshift-merge-bot[bot]
003527fedc Merge pull request #23254 from arixmkii/disable-mounts
Implement disable default mounts via command line
2024-07-21 10:49:17 +00:00
Paul Holzinger
55749af0c7 podman stats: fix race when ctr process exists
stats read from the cgroup, and in order to know the cgroup we check the
pid for the cgroup. However there is a window where the pid exited and
podman did not yet updated its internal state. In this case the code
returns ErrCtrStopped so we should ignore this error as well.

Fixes #23334

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-07-19 13:21:34 +02:00
openshift-merge-bot[bot]
8a53e8eb67 Merge pull request #23323 from Luap99/machine-decompress-empty
pkg/machine/compression: skip decompress bar for empty file
2024-07-18 17:51:11 +00:00
openshift-merge-bot[bot]
164ecb2b5e Merge pull request #23325 from Luap99/ps-pod-err
podman ps: fix racy pod name query
2024-07-18 17:48:26 +00:00
openshift-merge-bot[bot]
9f873256b6 Merge pull request #23316 from umohnani8/farm-fix
Fix name for builder in farm connection
2024-07-18 17:26:24 +00:00
Paul Holzinger
182224defb podman pod stats: fix pod rm race
If a pod is removed when calling podman pod stats there is a race where
the command might fail with no such pod. This is not a user error, like
the ps/ls command skip it and move to the next one.

Fixes #23327

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-07-18 17:48:21 +02:00
Paul Holzinger
e1caf80e81 podman ps: fix racy pod name query
The pod name was queried without holding the container lock, thus it was
possible that the pod was deleted in the meantime and podman just failed
with "no such pod" as the errors.Is() check matched the wrong error.

Move it into the locked code this should prevent anyone from removing
the pod while the container is part of it. Also fix the returned error,
there is no reason to special case one specific error just wrap any error
here so callers at least know where it happened. However this is not
good enough because the batch doesn't update the state which means it
see everything before the container was locked. In this case it might be
possible the ctr and pod was already removed so let the caller skip both
ctr and pod removed errors.

Fixes #23282

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-07-18 17:34:26 +02:00
openshift-merge-bot[bot]
22cf2b42d4 Merge pull request #23305 from Luap99/auto-update-race
podman auto-update/system df: fix ErrNoSuchCtr/Volume race
2024-07-18 11:31:46 +00:00
Paul Holzinger
f630eebcfa pkg/machine/compression: skip decompress bar for empty file
When the file is empty it is possible our code panics as bar.ProxyReader
returns nil when the bar is finished which is the case for 0 size as it
doesn't have to read anything from there. However as this happens on
different goroutines it is race and most of the time still works.

To fix this simply skip the progress bar setup for empty files.

While at it fix the deprecated argument in the tests.

Fixes #23281

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-07-18 13:23:00 +02:00
Paul Holzinger
46f4044893 podman system df: fix fix ErrNoSuchCtr/Volume race
When a container or volume is removed during the loop this is not a
problem and we should just skip it as it is not a user bug and just a
normal race.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-07-18 10:52:25 +02:00
Paul Holzinger
1413a28409 podman auto-update: fix ErrNoSuchCtr race
If a container is removed during the loop we should just ignore it. No
reason to log this as error to the user.

Fixes #23279

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-07-18 10:52:12 +02:00
Urvashi Mohnani
02c094425f Fix name for builder in farm connection
Ensure that the map of builders we create links the
builder name and not the farm name to the image engine
of that node. This was a regression introduced during the
farm conf rework.

Signed-off-by: Urvashi Mohnani <umohnani@redhat.com>
2024-07-17 22:31:48 -04:00
benniekiss
3c52ef43f5 Expand drop-in search paths
* top-level (pod.d)
* truncated (unit-.container.d)

Signed-off-by: Bennie Milburn-Town <63211101+benniekiss@users.noreply.github.com>
2024-07-17 17:43:02 -04:00
Daniel J Walsh
1ec3edd3f6 Do not crash on invalid filters
Vendor in latest containers/common
Fixes #23120

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2024-07-17 10:44:55 -04:00
openshift-merge-bot[bot]
e225cae781 Merge pull request #23145 from afbjorklund/remove-machine-volume-driver
Remove the unused machine volume-driver
2024-07-15 20:36:19 +00:00
Arthur Sengileyev
d26f0ca90f Implement disable default mounts via command line
Signed-off-by: Arthur Sengileyev <arthur.sengileyev@gmail.com>
2024-07-15 15:27:19 +03:00
openshift-merge-bot[bot]
2f673aa8f7 Merge pull request #23258 from Luap99/start-error
fix race conditions in start/attach logic
2024-07-15 12:11:56 +00:00
Félix Saparelli
54fce37968 Add NetworkAlias= support to quadlet
Adds a `NetworkAlias=` key to both .container and .pod quadlet files,
which translates to the `--network-alias` option to `podman run` and
`podman pod create` respectively. Can be repeated multiple times.

Signed-off-by: Félix Saparelli <felix@passcod.name>
2024-07-15 16:39:25 +12:00
Paul Holzinger
3280da0500 fix race conditions in start/attach logic
The current code did something like this:
lock()
getState()
unlock()

if state != running
  lock()
  getState() == running -> error
  unlock()

This of course is wrong because between the first unlock() and second
lock() call another process could have modified the state. This meant
that sometimes you would get a weird error on start because the internal
setup errored as the container was already running.

In general any state check without holding the lock is incorrect and
will result in race conditions. As such refactor the code to combine
both StartAndAttach and Attach() into one function that can handle both.
With that we can move the running check into the locked code.

Also use typed error for this specific error case then the callers can
check and ignore the specific error when needed. This also allows us to
fix races in the compat API that did a similar racy state check.

This commit changes slightly how we output the result, previously a
start on already running container would never print the id/name of the
container which is confusing and sort of breaks idempotence. Now it will
include the output except when --all is used. Then it only reports the
ids that were actually started.

Fixes #23246

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-07-12 15:11:34 +02:00
Paul Holzinger
04fb77efe2 swagger: exlude new docker network types
The new docker types have conflicting swagger:model names, there is both
network.CreateResponse and container.CreateResponse. However both have
a different fields (Warning and Warnings) and both are marked as
required. The swagger generate sees both and somehow merges them but
then only shows fields from one type but at the same time list all
fields as required. This causes the swagger validation to fail:
- "Warning" is present in required but not defined as property in definition "CreateResponse"

To work around that we exlcude the netwok types from the swagger
generation which makes it work again. Looking at the final type info in
the browser it still shows the type onfo on the compat network endpints
so it doesn't even loose any valuable information AFAICS.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-07-12 14:19:37 +02:00
Paul Holzinger
e24367aa14 update to docker 27
Fixes compile issues with new docker changes, then fix all the new
depreciation warnings.
Also there seem to be larger pre-existing problems with the
/containers/json API output as the HostConfig field seems to be missing
but I don't have time to deal with that currently.

Note this does not include changes for the new docker API 1.46.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-07-12 14:00:29 +02:00
Ed Santiago
dd1bcabae9 CI: use local registry, part 2 of 3: fix tests
This commit gets tests working under the new local-registry system:

  * amend a few image names, mostly just sticking to a consistent
    list of those images in our registry cache. Mostly minor
    tag updates.

  * trickier: pull_test: change some error messages, and remove
    a test that's now a NOP. Basically, with a local (unprotected)
    registry we always get "404 manifest unknown"; with a real
    registry we'll get "403 I can't tell you".

  * trickiest: seccomp_test: build our own images at run time,
    with our desired labels. Until now we've been pulling
    prebuilt images, but those will not copy to the local
    cache registry. Something about v1? Anyhow, I gave up
    trying to cache them, and the workaround is straightforward.

Also took the liberty of strengthening a few error-message checks

Signed-off-by: Ed Santiago <santiago@redhat.com>
2024-07-11 04:39:45 -06:00
Colin Walters
4336c5a4f5 containers/attach: Note bug around goroutine leak
See:

- https://github.com/containers/podman-bootc/pull/59#issuecomment-2216051946
- https://github.com/containers/podman-bootc/pull/61

Sorry for not trying to fix this, but I am not aware of
a remotely straightforward way to do so.

Signed-off-by: Colin Walters <walters@verbum.org>
2024-07-09 11:55:18 -04:00
openshift-merge-bot[bot]
dad2d17e1c Merge pull request #23223 from baude/libkrundoc
add libkrun test docs
2024-07-09 14:45:51 +00:00
Brent Baude
6f6e0e7126 add libkrun test docs
add how to run the machine tests on macos with libkrun to the quick test readme.

Signed-off-by: Brent Baude <bbaude@redhat.com>
2024-07-09 08:54:09 -05:00
Paul Holzinger
336c45f68e pkg/machine/e2e: run debug command only for macos
The commands only make sense on macos so do not clutter the logs on
linux/windows with the output.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-07-09 13:14:42 +02:00
Paul Holzinger
a2c83cb0fd SetupRootless(): only reexec when needed
We should never try to reexxec when we are already root with
CAP_SYS_ADMIN. The code contained a bug when --cgroups=disabled is used
as it tried to perfom a reexec even when it was not needed.

Fixes: 900e29549a ("libpod: do not move podman with --cgroups=disabled")

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-07-08 13:39:15 +02:00
Paul Holzinger
3350cd3eed pkg/rootless: simplify reexec for container code
The code currently tried to avoid joining the userns from conmon
directly and rather joined to only read the pid file and then send this
back to use so we could join the userns. From the comment this was done
because we could not read the pid file. However this is no longer true
as of commit 49eb5af301 and file is no always owned by the real user.

This means we can just remove this special logic and join the namespace
directly there. A test has been added to check the rejoin logic with a
custom uidmapping.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-07-08 13:28:31 +02:00
Paul Holzinger
5e3d821814 pkg/machine/e2e: print tests timings at the end
Makes it easier to see which tests are slow.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-07-05 15:28:33 +02:00
Paul Holzinger
527c0f0bfa pkg/machine/e2e: run debug commands after init
To debug the slow machine init command. Let's see the disk image size.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-07-05 15:28:33 +02:00
Paul Holzinger
ada4e1a8c1 pkg/machine/e2e: improve timeout handling
In case of timeouts actually log the command again and make sure to send
SIGABRT to the process as go will create a useful stack strace where we
can see where things are hanging. It also kill the process unlike the
default Eventually().Should(Exit()) call the leaves the process around.

The output will be captured by default in the log so we just see the
stack trace there.

And while at it bump the timout up to 10 mins, we are hitting hard
flakes in CI where machine init takes longer than 5 mins for unknown
reasons but this seems to be good enough.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-07-05 15:28:33 +02:00
openshift-merge-bot[bot]
3b07ae4557 Merge pull request #23123 from baude/libkruntest
Small fixes for testing libkrun
2024-07-02 13:28:27 +00:00
openshift-merge-bot[bot]
f5d50a68bc Merge pull request #23154 from Luap99/machine-test-connection
pkg/machine/e2e: fix broken cleanup
2024-07-02 12:14:10 +00:00
openshift-merge-bot[bot]
3a41bccf7d Merge pull request #22941 from ashley-cui/machreset
Podman machine resets all providers
2024-07-01 19:24:18 +00:00
Paul Holzinger
3c0176b2d0 pkg/machine/e2e: fix broken cleanup
Currently all podman machine rm errors in AfterEach were ignored.
This means some leaked and caused issues later on, see #22844.

To fix it first rework the logic to only remove machines when needed at
the place were they are created using DeferCleanup(), however
DeferCleanup() does not work well together with AfterEach() as it always
run AfterEach() before DeferCleanup(). As AfterEach() deletes the dir
the podman machine rm call can not be done afterwards.

As such migrate all cleanup to use DeferCleanup() and while I have to
touch this fix the code to remove the per file duplciation and define
the setup/cleanup once in the global scope.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-07-01 14:23:11 +02:00
Paul Holzinger
f84f4a9cce pkg/machine/e2e: use tmp file for connections
On linux and macos the connections are stored under the home dir by
default so it is not a problem there but on windows we first check
the APPDATA env and use this dir as config storage. This has the problem
that it is not cleaned up after each test as such connections might leak
into the following test causing failues there.

Fixes #22844

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-07-01 13:04:03 +02:00
openshift-merge-bot[bot]
672c6c8702 Merge pull request #23133 from Luap99/device-validation
specgen: parse devices even with privileged set
2024-07-01 10:47:11 +00:00
openshift-merge-bot[bot]
94ebb12bcf Merge pull request #23126 from baude/checkmem
Error when machine memory exceeds system memory
2024-07-01 10:05:14 +00:00
Paul Holzinger
83863a6863 specgen: parse devices even with privileged set
When a users asks for specific devices we should still add them and not
ignore them just because privileged adds all of them.

Most notably if you set --device /dev/null:/dev/test you expect
/dev/test in the container, however as we ignored them this was not the
case. Another side effect is that the input was not validated at at all.
This leads to confusion as descriped in the issue.

Fixes #23132

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-07-01 11:46:34 +02:00
openshift-merge-bot[bot]
f3a4f07637 Merge pull request #23130 from cfergeau/gvproxy-logs
machine: Always use --log-file with gvproxy
2024-07-01 09:26:46 +00:00
Anders F Björklund
fa75599569 Remove the unused machine volume-driver
The driver is now hardcoded again, and there can only be
one type of mounts at a time (which one changes over time)

Revert "Make it possible to select the volume driver"
This reverts commit 6630e5cf66.

Signed-off-by: Anders F Björklund <anders.f.bjorklund@gmail.com>
2024-06-30 20:25:59 +02:00
Brett Calliss
22b57d3230 feat(quadlet): log option handling
I found that Quadlet didn't currently have support for log options.
This merge allows Quadlet to handle log options and correctly
pass those values through to `podman run` for Container and Kube
types.

Syntactically consistent with existing parameters:

```ini
[Container]
Image=localhost/imagename
LogOpt=path=/var/log/container/mycontainer.json
LogOpt=size=10mb
```

Signed-off-by: Brett Calliss <brett@obligatory.email>
2024-06-30 18:21:47 +10:00
Brent Baude
786ea01a64 Error when machine memory exceeds system memory
Close loophole that would allow you to assign more memory than the
system has to a podman machine

Fixes: #18206

Signed-off-by: Brent Baude <bbaude@redhat.com>
2024-06-28 10:02:11 -05:00
Christophe Fergeau
0d0418a5bf machine: Always use --log-file with gvproxy
The logs are not verbose if `--debug` is not set, and very useful to
have if gvproxy exits unexpectedly.

Signed-off-by: Christophe Fergeau <cfergeau@redhat.com>
2024-06-28 16:05:21 +02:00