Commit Graph

411 Commits

Author SHA1 Message Date
OpenShift Merge Robot 94969a063a
Merge pull request #19768 from chnrxn/patch-1
/_ping handler: return OSType http header
2023-08-29 13:25:18 +02:00
OpenShift Merge Robot 8bda49608f
Merge pull request #19696 from Luap99/api-stream-format
api docs: document stream format
2023-08-28 19:43:24 +02:00
chnrxn 1b45fd7239 /_ping handler: return OSType http header
The docker client expects to read the OSType header from the `/_ping` response in order to determine the OS type of the server, for example, when running `docker run --device=/dev/fuse ...`

https://github.com/moby/moby/blob/master/client/ping.go#L57

Signed-off-by: chnrxn <cohawk@yahoo.com>
2023-08-28 22:28:16 +08:00
OpenShift Merge Robot 584c1e70d0
Merge pull request #19704 from rhatdan/timeout
Set StopTimeout for compat API if not set by client
2023-08-25 05:28:26 -04:00
Daniel J Walsh f32e954b8a
Set StopTimeout for service-container started under podman kube play
Fixes: https://github.com/containers/podman/issues/19139

Service containers are defaulting to 0 seconds for Timeout rather then
the settings in containers.conf.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2023-08-24 13:24:41 -04:00
Daniel J Walsh d2ec127c13
Set StopTimeout for compat API if not set by client
Currently containers created via DOCKER API without specifying
StopTimeout are defaulting to 0 seconds. This change should
default them to setting in containers.conf normally 10 seconds.

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

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2023-08-24 13:24:41 -04:00
Paul Holzinger 7c9c969815
API attach: return vnd.docker.multiplexed-stream header
The attach API used to always return the Content-Type
`vnd.docker.raw-stream`, however docker api v1.42 added the
`vnd.docker.multiplexed-stream` type when no tty was used.

Follow suit and return the same header for docker api v1.42 and libpod
v4.7.0. This technically allows clients to make a small optimization as
they no longer need to inspect the container to see if they get a raw or
multiplexed stream.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2023-08-24 16:22:28 +02:00
Valentin Rothberg 60e58f0594 test/apiv2/60-auth.at: use `doesnotexists.podman.io`
`exist.io` actually does exist and is not under our control.  To prevent
flakes, change it to something on `podman.io`.

Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2023-08-24 16:22:02 +02:00
renovate[bot] 6a3f09e8a7
Update dependency setuptools to ~=68.1.0
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-08-15 20:35:31 +00:00
Matej Vasek f33b01b731 fix: Docker API compatible bool deserialization
In Docker anything but "", "0", "no", "false", "none" (ignoring case) is considered to be true.

Signed-off-by: Matej Vasek <mvasek@redhat.com>
2023-08-14 15:09:14 +02:00
Matej Vasek 4cb2d48ca4 Revert "compat,build: pull must accept string"
This reverts commit 5b148a0a68.

Reverting to treating the `pull` query parameter as a boolean.
Because of deceiving Docker API documentation it was assumed that the
parameter is pull-policy, however that is not true. Docker does treat
`pull` as a boolean. What is interesting is that Docker indeed accepts
strings like `always` or `never` however Docekr both of these strings
treat as `true`, not as pull-policy. As matter of the fact it seems
there is no such a thing as pull-policy in Docker.

More context https://github.com/containers/podman/issues/17778#issuecomment-1673931925

Signed-off-by: Matej Vasek <mvasek@redhat.com>
2023-08-14 15:01:53 +02:00
Daniel J Walsh 1e54539432
Add support for passing container stop timeout as -1 (infinite)
Compat api for containers/stop should take -1 value

Add support for `podman stop --time -1`
Add support for `podman restart --time -1`
Add support for `podman rm --time -1`
Add support for `podman pod stop --time -1`
Add support for `podman pod rm --time -1`
Add support for `podman volume rm --time -1`
Add support for `podman network rm --time -1`

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

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2023-08-04 08:36:45 -04:00
Valentin Rothberg f2794f9a82 API: kill: return 409 on invalid state
If the container isn't running, make sure to return 409 as specified in
the Docker API [1] and the Podman reference.

[1] https://docs.docker.com/engine/api/v1.43/#tag/Container/operation/ContainerKill

Fixes: #19368
Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2023-07-31 11:17:58 +02:00
OpenShift Merge Robot bb72016f58
Merge pull request #19066 from Luap99/ps
top: do not depend on ps(1) in container
2023-07-14 13:17:59 +02:00
OpenShift Merge Robot eb2bf7a075
Merge pull request #19183 from eriksjolund/add_missing_return
Add missing return after utils.InternalServerError()
2023-07-13 15:53:48 +02:00
Matt Heon 2b2c4453f1 Fix container errors not being sent via pod removal API
When I reworked pod removal to provide more detailed errors
(including per-container errors, not just a single multierror
with all errors squashed), I made it part of the struct returned
by the REST API and assumed that would be enough to get errors
through to clients. Unfortunately, in case of an overarching
error removing the pod (as any error with any container would
cause), we don't send the response struct that would include the
container errors - we just send a standardized REST error. We
could work around this with custom, potentially backwards
incompatible error handling for the REST pod delete endpoint, or
we could just do what was done before, and package up all the
errors in a multierror to send to the other side. Of those
options, the multierror seems far simpler.

Fixes #19159

Signed-off-by: Matt Heon <mheon@redhat.com>
2023-07-12 14:50:15 -04:00
Erik Sjölund 6ec261e7ac Add missing return after utils.InternalServerError()
Signed-off-by: Erik Sjölund <erik.sjolund@gmail.com>
2023-07-12 20:47:16 +02:00
Daniel J Walsh 0dcfe6e069
Run codespell on code
Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2023-07-11 16:44:22 -04:00
Paul Holzinger 597ebeb60f
top: do not depend on ps(1) in container
This ended up more complicated then expected. Lets start first with the
problem to show why I am doing this:

Currently we simply execute ps(1) in the container. This has some
drawbacks. First, obviously you need to have ps(1) in the container
image. That is no always the case especially in small images. Second,
even if you do it will often be only busybox's ps which supports far
less options.

Now we also have psgo which is used by default but that only supports a
small subset of ps(1) options. Implementing all options there is way to
much work.

Docker on the other hand executes ps(1) directly on the host and tries
to filter pids with `-q` an option which is not supported by busybox's
ps and conflicts with other ps(1) arguments. That means they fall back
to full ps(1) on the host and then filter based on the pid in the
output. This is kinda ugly and fails short because users can modify the
ps output and it may not even include the pid in the output which causes
an error.

So every solution has a different drawback, but what if we can combine
them somehow?! This commit tries exactly that.

We use ps(1) from the host and execute that in the container's pid
namespace.
There are some security concerns that must be addressed:
- mount the executable paths for ps and podman itself readonly to
  prevent the container from overwriting it via /proc/self/exe.
- set NO_NEW_PRIVS, SET_DUMPABLE and PDEATHSIG
- close all non std fds to prevent leaking files in that the caller had
  open
- unset all environment variables to not leak any into the contianer

Technically this could be a breaking change if somebody does not
have ps on the host and only in the container but I find that very
unlikely, we still have the exec in container fallback.

Because this can be insecure when the contianer has CAP_SYS_PTRACE we
still only use the podman exec version in that case.

This updates the docs accordingly, note that podman pod top never falls
back to executing ps in the container as this makes no sense with
multiple containers so I fixed the docs there as well.

Fixes #19001
Fixes https://bugzilla.redhat.com/show_bug.cgi?id=2215572

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2023-07-10 13:32:55 +02:00
Paul Holzinger d0505d6bac
pkg/api: top return error to client
Wait before sending status code 200 for the first top call and if that
fails return a proper error code.

This was leading to some confusion in [1] because podman just reported
200 but did not wirte anything back.

[1] https://bugzilla.redhat.com/show_bug.cgi?id=2215572

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2023-06-23 16:48:57 +02:00
Valentin Rothberg 63dfe842bb compat API create/pull: fix error handling
Make sure that the create endpoint does not always return 200 even in
case of a failure.  Some of the code had to be massaged since encoding a
report implies sending a 200.

Fixes: #15828
Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2023-06-21 16:37:27 +02:00
Valentin Rothberg d545418945 compat API push: fix error handling
Make sure that the push endpoint does not always return 200 even in case
of a push failure.  Some of the code had to be massaged since encoding a
report implies sending a 200.

Fixes: #18751
Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2023-06-21 16:35:55 +02:00
Valentin Rothberg f4c514bffd compat API container create: handle platform parameter
The platform parameter has been ignored such that images have been
looked up by name only.

Fixes: #18951
Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2023-06-21 14:19:23 +02:00
renovate[bot] f8f337501b
chore(deps): update dependency setuptools to v68
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-19 18:59:03 +00:00
Valentin Rothberg ed24f0b2ca remote wait: fix "removed" condition
The "removed" condition mapped to an undefined state which ultimately
rendered the wait endpoint to return an incorrect exit code.  Instead,
map "removed" to "exited" to make sure Podman returns the expected
exit code.

Fixes: #18889
Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2023-06-16 11:55:53 +02:00
renovate[bot] 44ec044c49
chore(deps): update dependency requests-mock to ~=1.11.0
Signed-off-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2023-06-08 17:01:24 +00:00
Boaz Shuster 5c7d50f08c Fix: display online_cpus in compat REST API
Signed-off-by: Boaz Shuster <boaz.shuster.github@gmail.com>
2023-05-31 07:41:30 +03:00
renovate[bot] 9969374b6b
chore(deps): update dependency requests to ~=2.31.0
Signed-off-by: Renovate Bot <bot@renovateapp.com>
2023-05-22 15:55:35 +00:00
renovate[bot] 8fbcf8bce8
chore(deps): update dependency setuptools to ~=67.8.0
Signed-off-by: Renovate Bot <bot@renovateapp.com>
2023-05-19 22:15:28 +00:00
Paul Holzinger ad8d0e57d7
compat: accept tag in /images/create?fromSrc
Accept a tag in the compat api endpoint. For the fromImage param we
already parse it but for fromSrc we did not.

Fixes #18597

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2023-05-17 16:12:19 +02:00
Aditya R 5b148a0a68
compat,build: pull must accept string
`pull` parameter in `build` must accept string just like docker.

Ref: https://docs.docker.com/engine/api/v1.42/#tag/Image/operation/ImageBuild

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

Signed-off-by: Aditya R <arajan@redhat.com>
2023-05-16 23:04:09 +05:30
renovate[bot] 773b457048
chore(deps): update dependency requests to ~=2.30.0
Signed-off-by: Renovate Bot <bot@renovateapp.com>
2023-05-04 16:51:16 +00:00
Paul Holzinger df9344ac4b
compat container create: match duplicate mounts correctly
The logic which checks for duplicated volumes here did not work
correctly because it used filepath.Clean(). However the writes to the
volDestinations map did not thus the string no longer matched when you
included a final slash for example.

So we can either call Clean() on all or no paths. I decided to call it
on no path because this is what we do right now. Just the check did it.

Fixed #18454

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2023-05-04 11:57:02 +02:00
Ed Santiago f877d7dcd0 Replace egrep/fgrep with grep -E/-F
There are days when I really, really, really hate GNU. Remember
when someone decided that 'head -1' would no longer work, and
that it was OK to break an infinite number of legacy production
scripts? Someone now decided that egrep/fgrep are deprecated,
and our CI logs (especially pr-should-include-tests) are now
filled with hundreds of warning lines, making it difficult
to find actual errors.

I expect that those warnings will be removed quickly after
furious community backlash, just like the 'head -1' fiasco
was quietly reverted, but ITM the warnings are annoying
so I capitulate.

Signed-off-by: Ed Santiago <santiago@redhat.com>
2023-05-03 07:32:42 -06:00
OpenShift Merge Robot 0851d6475d
Merge pull request #18345 from vrothberg/fix-18092
api: fix parsing filters
2023-05-02 17:09:53 -04:00
Valentin Rothberg 9e9bcec9ec history: correctly set tags
Requires vendoring fixes from c/common and to update the transformation
code.  Also add a test to avoid future regressions.

Fixes: #17763
Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2023-05-02 16:21:09 +02:00
Valentin Rothberg 1720042d04 api: fix parsing filters
Podman and Docker clients split the filter map slightly different, so
account for that when parsing the filters in the image-listing endpoint.

Fixes: #18092
Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2023-05-02 11:45:36 +02:00
OpenShift Merge Robot 7430d9d777
Merge pull request #18364 from containers/renovate/requests-2.x
chore(deps): update dependency requests to ~=2.29.0
2023-04-27 07:31:50 -04:00
Daniel J Walsh edaf3b4d5e
Add sha256: to images history id for docker compatibility
Fixes: https://github.com/containers/podman/issues/17762

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2023-04-26 14:38:07 -04:00
renovate[bot] ba45863753
chore(deps): update dependency requests to ~=2.29.0
Signed-off-by: Renovate Bot <bot@renovateapp.com>
2023-04-26 16:38:23 +00:00
renovate[bot] 77f86f48ef
chore(deps): update dependency setuptools to ~=67.7.0
Signed-off-by: Renovate Bot <bot@renovateapp.com>
2023-04-20 15:40:33 +00:00
Andreas Kohn b65ab52d8d compat: Translate `noprune` into ImageRemoveOptions.NoPrune
PR #15093 implemented support for NoPrune in the ImageRemoveOptions,
this PR simply brings that also to the compat API along with
regression tests.

Signed-off-by: Andreas Kohn <andreas.kohn@gmail.com>
Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2023-04-20 11:11:19 +02:00
OpenShift Merge Robot 190fb30dd1
Merge pull request #18166 from containers/renovate/setuptools-67.x
chore(deps): update dependency setuptools to v67
2023-04-19 11:10:57 -04:00
renovate[bot] 8125bab9b8
chore(deps): update dependency setuptools to v67
Signed-off-by: Renovate Bot <bot@renovateapp.com>
2023-04-19 08:46:21 +00:00
Jakob Ahrer a0204f1dd0
Add missing security options to /info response
Signed-off-by: Jakob Ahrer <jakob@ahrer.dev>
2023-04-16 18:27:16 +02:00
Daniel J Walsh 1fa4e45a95
Return title fields as a list
Podman is attempting to split the headers returned by the ps
command into a list of headers. Problem is that some headers
are multi-word, and headers are not guaranteed to be split via
a tab. This PR splits the headers bases on white space, and for
the select group of CAPS headers which are multi-word, combines
them back together.

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

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2023-04-13 11:45:40 -04:00
OpenShift Merge Robot 9333c88243
Merge pull request #18160 from containers/renovate/pyyaml-6.x
Update dependency PyYAML to v6
2023-04-12 10:28:30 -04:00
OpenShift Merge Robot f72e02a432
Merge pull request #18143 from vrothberg/auth-fix
api: auth: fix nil deref
2023-04-12 08:22:35 -04:00
renovate[bot] f312c85335
Update dependency PyYAML to v6
Signed-off-by: Renovate Bot <bot@renovateapp.com>
2023-04-12 12:09:04 +00:00
Valentin Rothberg b4cfc727be api: auth: fix nil deref
By pulling in the fixes from c/common.  Add regression tests to make
sure it's not happening another time.  The error messages are not
ideal and should probably be optimized in the `/auth` endpoints directly
but it's already an improvement over a nil deref.

Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2023-04-12 11:27:35 +02:00