Commit Graph

6499 Commits

Author SHA1 Message Date
Paul Holzinger
71f1f52894 only read ssh_config for non machine connections
For machine we know we have all the info we need so there is no reason
to read and parse another file.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-11-14 18:29:22 +01:00
Paul Holzinger
cbb2820a7e ssh_config: allow IdentityFile file with tilde
The ssh_config can contain a path with ~/ to refer to the home dir like
done on shells. Handle that special case and resolve the path correctly
so it can be used.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-11-14 18:26:55 +01:00
Paul Holzinger
a7120b50b1 ssh_config: do not overwrite values from config file
When we alreadty get a full URL with user, port and identity then we
should not read the config file just to overwrite them with wrong
values. This is a bad regression for user using * wildcard in their
ssh_config as it makes podman machine unusable.

Fixes: #24567
Fixes: e523734ab6 ("Add support for ssh_config for connection")

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-11-14 18:26:33 +01:00
Paul Holzinger
8a5ec2c505 connection: ignore errors when parsing ssh_config
The new ssh_Config feature doesn't work on my system because the lib
fails to parse configs using Match[1]. However Fedora and RHEL based
distros seem to ship /etc/ssh/ssh_config.d/50-redhat.conf which contains
a Match line thus it always fails to parse and never uses the proper
values from my home dir config.

[1] https://github.com/kevinburke/ssh_config/issues/6

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-11-14 16:17:50 +01:00
openshift-merge-bot[bot]
5dbb567db6 Merge pull request #24321 from gaufde/main
Fix for podman machine init not creating necessary JSON file when an ignition-path is passed
2024-11-14 11:25:16 +00:00
openshift-merge-bot[bot]
fa5e3b6e94 Merge pull request #24535 from M1cha/network-driver-options
add support for driver-specific options during container creation
2024-11-14 09:29:44 +00:00
openshift-merge-bot[bot]
ecaf9bf515 Merge pull request #24525 from Luap99/lint
update golangci-lint to v1.62.0
2024-11-13 21:47:38 +00:00
Michael Zimmermann
315e7412e8 add support for driver-specific options during container creation
This way has a huge disadvantage: The user will not see an error when he
uses a non-existent option. Another disadvantage is, that if we add more
options within podman, they might collide with the names chosen by
plugins. Such issues might be hard to debug.
The advantage is that the usage is very nice:
--network bridge:opt1=val1,opt2=val2.

Alternatively, we could put this behind `opt=`, which is harder to use,
but would solve all issues above:
--network bridge:opt=opt1=val1,opt=opt2=val2

Signed-off-by: Michael Zimmermann <sigmaepsilon92@gmail.com>
2024-11-13 18:14:58 +01:00
Graceson Aufderheide
34a15ae300 fix podman machine init --ignition-path
Fix the issue where podman machine init does not create
all the necessary machine files when ignition-path is used. Fixes: #23544

Signed-off-by: Graceson Aufderheide <gracesonphoto@gmail.com>
2024-11-12 17:56:43 -07:00
Matt Heon
8a192c8403 Add subpath support to volumes in --mount option
All the backend work was done a while back for image volumes, so
this is effectively just plumbing the option in for volumes in
the parser logic. We do need to change the return type of the
volume parser as it only worked on spec.Mount before (which does
not have subpath support, so we'd have to pass it as an option
and parse it again) but that is cleaner than the alternative.

Fixes #20661

Signed-off-by: Matt Heon <mheon@redhat.com>
2024-11-12 09:13:16 -05:00
Paul Holzinger
9eca92d625 update golangci-lint to v1.62.0
- fix issues found by recvcheck
- skip k8s files from recvcheck
- remove two removed linters gomnd and execinquery

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-11-11 14:21:17 +01:00
Paul Holzinger
40534d352e pkg/machine/e2e: remove dead code
This function is not used, we pull actual container images for testing
now. This allows us to remove github.com/coreos/stream-metadata-go.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-11-08 12:02:37 +01:00
openshift-merge-bot[bot]
f8ac02d44e Merge pull request #24277 from mi4r/dev/mi4r/ImagesImportFix
api: Move close function in condition body
2024-11-07 13:18:24 +00:00
openshift-merge-bot[bot]
cbb5d7f14b Merge pull request #24394 from vyasgun/pr/gvproxy080
Update gvproxy to v0.8.0 and disable ssh port forwarding on wsl
2024-11-07 12:20:14 +00:00
Tigran Sogomonian
9f5bbecb95 api: Add error check
Add error check during tmpfile close.

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Signed-off-by: Tigran Sogomonian <tsogomonian@astralinux.ru>
2024-11-07 14:53:15 +03:00
openshift-merge-bot[bot]
aac206e9c5 Merge pull request #24412 from Sativarsainath-26/network-events
Fix: To print create and remove network in podman events
2024-11-06 18:33:18 +00:00
openshift-merge-bot[bot]
e0cd12ea8c Merge pull request #24473 from rhatdan/kube
AdditionalSupport for SubPath volume mounts
2024-11-06 15:42:41 +00:00
Daniel J Walsh
6346a11b09 AdditionalSupport for SubPath volume mounts
Add support for inspecting Mounts which include SubPaths.

Handle SubPaths for kubernetes image volumes.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2024-11-06 10:10:26 -05:00
Gunjan Vyas
4e8d2dd726 wsl-e2e: Add a test to ensure port 2222 is free with usermode networking
Signed-off-by: Gunjan Vyas <vyasgun20@gmail.com>
2024-11-06 18:40:25 +05:30
Paul Holzinger
9a0c0b2eef volume ls: fix race that caused it to fail
If volume ls was called while another volume was removed at the right
time it could have failed with "no such volume" as we did not ignore
such error during listing. As we list things and this no longer exists
the correct thing is to ignore the error and continue like we do with
containers, pods, etc...

This was pretty easy to reproduce with these two commands running in
different terminals:
while :; do bin/podman volume create test && bin/podman volume rm test || break; done
while :; do bin/podman volume ls || break ; done

I have a slight feeling that this might solve #23913 but I am not to
sure there so I am not adding a Fixes here.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-11-06 12:28:52 +01:00
Gunjan Vyas
9cb80d1856 gvproxy: Disable port-forwarding on WSL
This commit disables ssh port forwarding on WSL by passing -1 to the -ssh-port flag of gvproxy. Port forwarding is not required on WSL and disabling it prevents port conflict with CRC.

Fixes: https://github.com/containers/podman/issues/20327

Signed-off-by: Gunjan Vyas <vyasgun20@gmail.com>
2024-11-06 15:44:13 +05:30
openshift-merge-bot[bot]
a358d83ce9 Merge pull request #24437 from lambinoo/feat-split-pod-container-start-24401
Add key to control if a container can get started by its pod
2024-11-05 15:04:16 +00:00
Sainath Sativar
c23d9c6f23 Log network creation and removal events in Podman
This commit resolves an issue where network creation and removal events were not being logged in `podman events`. A new function has been introduced in the `events` package to ensure consistent logging of network lifecycle events. This update will allow users to track network operations more effectively through the event log, improving visibility and aiding in debugging network-related issues.

Fixes: #24032
Signed-off-by: Sainath Sativar <Sativar.sainath@gmail.com>
2024-11-05 11:58:47 +00:00
Farya L. Maerten
2597eeae70 Add key to control if a container can get started by its pod
By default today, the container is always started if its pod is also
started. This prevents to create custom with systemd where containers in
a pod could be started through their `[Install]` section.

We add a key `StartWithPod=`, enabled by default, that enables one to
disable that behavior.

This prevents the pod service from changing the state of the container
service.

Fixes #24401

Signed-off-by: Farya L. Maerten <me@ltow.me>
2024-11-05 08:39:23 +01:00
Daniel J Walsh
c6be5a6684 Honor users requests in quadlet files
Fixes: https://github.com/containers/podman/issues/24322

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2024-11-04 15:08:26 -05:00
openshift-merge-bot[bot]
0f25d9ee15 Merge pull request #24406 from Luap99/event-api-response
fix API issue about missing the status code in the events and logs endpoints
2024-11-04 18:54:14 +00:00
Ygal Blum
dbfc8cccda Quadlet - support image file based mount in container file
Signed-off-by: Ygal Blum <ygal.blum@gmail.com>
2024-11-01 16:20:23 -04:00
Paul Holzinger
e6d987882e API: container logs flush status code
API clients expect the status code quickly otherwise they can time out.
If we do not flush we may not write the header immediately and only when
futher logs are send.

Fixes #23712

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-11-01 18:54:13 +01:00
Paul Holzinger
768ad8653a rework event code to improve API errors
One of the problems with the Events() API was that you had to call it in
a new goroutine. This meant the the error returned by it had to be read
back via a second channel. This cuased other bugs in the past but here
the biggest problem is that basic errors such as invalid since/until
options were not directly returned to the caller.
It meant in the API we were not able to write http code 200 quickly
because we always waited for the first event or error from the
channels. This in turn made some clients not happy as they assume the
server hangs on time out if no such events are generated.

To fix this we resturcture the entire event flow. First we spawn the
goroutine inside the eventer Read() function so not all the callers have
to. Then we can return the basic error quickly without the goroutine.
The caller then checks the error like any normal function and the API
can use this one to decide which status code to return.
Second we now return errors/event in one channel then the callers can
decide to ignore or log them which makes it a bit more clear.

Fixes c46884aa93 ("podman events: check for an error after we finish reading events")
Fixes #23712

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-11-01 18:54:13 +01:00
openshift-merge-bot[bot]
5751154e54 Merge pull request #23847 from afbjorklund/ssh-config-main
Add support for ssh_config for connection
2024-10-30 14:41:55 +00:00
Anders F Björklund
b455f94ca8 Add default remote socket path if empty
Signed-off-by: Anders F Björklund <anders.f.bjorklund@gmail.com>
2024-10-30 14:44:44 +01:00
Anders F Björklund
48a8a9c22c Use current user if no user specified
Signed-off-by: Anders F Björklund <anders.f.bjorklund@gmail.com>
2024-10-30 14:44:44 +01:00
Anders F Björklund
e523734ab6 Add support for ssh_config for connection
Signed-off-by: Anders F Björklund <anders.f.bjorklund@gmail.com>
2024-10-30 14:44:44 +01:00
Paul Holzinger
ce24ab0683 pkg/machine/e2e: remove debug
Nobody is looking into this anyway and it just clutters the logs and
will cause confusion for readers. If some day someone wants to fix the
macos IO bugs they can add this back.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-10-29 13:50:05 +01:00
openshift-merge-bot[bot]
f4227e887c Merge pull request #24275 from Luap99/wait-condition
libpod API: only return exit code without conditions
2024-10-22 10:53:12 +00:00
Radostin Stoyanov
642b61a091 Enable pod restore with crun
`CRRuntimeSupportsPodCheckpointRestore()` is used to check if the current
container runtime (e.g., runc or crun) can restore a container into an
existing Pod. It does this by processing output message to check if the
`--lsm-mount-context` option is supported.  This option was recently
added to crun [1], however, crun and runc have slightly different output
messages:

```
$ crun restore--lsm-mount-contextt
restore: option '--lsm-mount-context' requires an argument
Try `restore --help' or `restore --usage' for more information.
```

```
$ runc restore --lsm-mount-context
ERRO[0000] flag needs an argument: -lsm-mount-context
```

This patch updates the function to support both runtimes.

[1] https://github.com/containers/crun/pull/1578

Signed-off-by: Radostin Stoyanov <rstoyanov@fedoraproject.org>
2024-10-21 17:37:20 +01:00
Paul Holzinger
67e0fa8b89 quadlet: add default network dependencies to all units
There is no good reason for the special case, kube and pod units
definitely need it. Volume and network units maybe not but for
consistency we add it there as well. This makes the docs much easier to
write and understand for users as the behavior will not differ.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-10-18 14:01:22 +02:00
Paul Holzinger
57b022782b quadlet: ensure user units wait for the network
As documented in the issue there is no way to wait for system units from
the user session[1]. This causes problems for rootless quadlet units as
they might be started before the network is fully up. TWhile this was
always the case and thus was never really noticed the main thing that
trigger a bunch of errors was the switch to pasta.

Pasta requires the network to be fully up in order to correctly select
the right "template" interface based on the routes. If it cannot find a
suitable interface it just fails and we cannot start the container
understandingly leading to a lot of frustration from users.

As there is no sign of any movement on the systemd issue we work around
here by using our own user unit that check if the system session
network-online.target it ready.

Now for testing it is a bit complicated. While we do now correctly test
the root and rootless generator since commit ada75c0bb8 the resulting
Wants/After= lines differ between them and there is no logic in the
testfiles themself to say if root/rootless to match specifics. One idea
was to use `assert-key-is-rootless/root` but that seemed like more
duplication for little reason so use a regex and allow both to make it
pass always. To still have some test coverage add a check in the system
test to ask systemd if we did indeed have the right depdendencies where
we can check for exact root/rootless name match.

[1] https://github.com/systemd/systemd/issues/3312

Fixes #22197

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-10-18 11:43:48 +02:00
Paul Holzinger
9c6b1e20a3 quadlet: do not reject RemapUsers=keep-id as root
This is simply wrong, as of commit de63ad7044 --userns=keep-id is also
allowed as root.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-10-17 15:53:10 +02:00
openshift-merge-bot[bot]
27d73b0cd0 Merge pull request #24289 from ThaddeusTreloar/fix/hyperv-powershell-path-sanitise
Added escaping to invoked powershell command for hyperv stubber.
2024-10-16 10:26:21 +00:00
openshift-merge-bot[bot]
bd1abf05bb Merge pull request #24284 from zackattackz/slices-clone
use slices.Clone instead of assignment
2024-10-16 07:14:34 +00:00
ThaddeusTreloar
1227f19393 Added escaping to invoked powershell command for hyperv stubber.
Signed-off-by: ThaddeusTreloar <thaddeus.treloar@protonmail.com>
2024-10-16 13:16:39 +11:00
openshift-merge-bot[bot]
a38eaa5b31 Merge pull request #24240 from zackattackz/scp-opts
scp: add option types
2024-10-15 21:54:38 +00:00
Zachary Hanham
b7b2ef48e8 use slices.Clone instead of assignment
Fixes #24267

This commit replaces a potentially unsafe slice-assignment with a call to `slices.Clone`.

This could prevent a bug where `saveCommand` and `loadCommand` could end up sharing an underlying array if `parentFlags` has a cap > it's len.

Signed-off-by: Zachary Hanham <z.hanham00@gmail.com>
2024-10-15 14:14:46 -04:00
Paul Holzinger
768aaadca1 libpod API: only return exit code without conditions
The special handling to return the exit code after the container has
been removed should only be done if there are no special conditions
requested. If a user asked for running or nay other state returning the
exit code immediately with a success response is just wrong. We only
want to allow that so the remote client can fetch the exit code without
races.

Fixes b3829a2932 ("libpod API: make wait endpoint better against rm races")

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2024-10-15 18:31:36 +02:00
Tigran Sogomonian
c05987ddd3 api: Replace close function in condition body
The close is replaced in the body of the error condition.

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Signed-off-by: Tigran Sogomonian <tsogomonian@astralinux.ru>
2024-10-15 17:00:47 +03:00
Zachary Hanham
feb46513f0 scp: add option types
Prior to this commit, many scp functions existed without option structs, which would make extending functionality (adding new options) impossible without breaking changes, or without adding redundant wrapper functions.

This commit adds in new option types for various scp related functions, and changes those functions' signatures to use the new options.

This commit also modifies the `ImageEngine.Scp()` function's interface to use the new opts.

The commit also renames the existing `ImageScpOptions` entity type to `ScpTransferImageOptions`. This is because the previous `ImageScpOptions` was inaccurate, as it is not the actual options for `ImageEngine.Scp()`. `ImageEngine.Scp()` should instead receive `ImageScpOptions`.

This commit should not change any behavior, however it will break the existing functions' signatures.

Signed-off-by: Zachary Hanham <z.hanham00@gmail.com>
2024-10-14 21:46:55 -04:00
openshift-merge-bot[bot]
3fbae8e28e Merge pull request #24259 from emakrushin/containers
Unlock mutex before returning from function
2024-10-14 21:09:26 +00:00
Егор Макрушин
06b470d79b Unlock mutex before returning from function
mapMutex is initialized in the ContainerRm function and cannot be released from outside,
thus unlock mutex before returning from function.

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Signed-off-by: Егор Макрушин <emakrushin@astralinux.ru>
2024-10-14 18:22:42 +03:00
Eric Curtin
94dcf76eb2 Make error messages more descriptive
Recently was trying to start podman machine with krunkit and got:

Error: krunkit exited unexpectedly with exit code 1

which isn't very descriptive. Although this doesn't solve the
issue, it increases the debugability of this error.

Signed-off-by: Eric Curtin <ecurtin@redhat.com>
2024-10-14 13:59:38 +01:00