15655 Commits

Author SHA1 Message Date
3b10c1b78a Use Regexp in volume ls --filter name
Signed-off-by: Boaz Shuster <boaz.shuster.github@gmail.com>
2022-06-27 21:34:39 +03:00
aada13f244 volume: new options [no]copy
add two new options to the volume create command: copy and nocopy.

When nocopy is specified, the files from the container image are not
copied up to the volume.

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

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2022-06-27 20:22:20 +02:00
a4094530bc volume: drop TODO comment
the two operations are equivalent since securejoin.SecureJoin() has
solved the symlinks.  Prefer the Lstat version though to make sure
symlinks are never resolved and we do not end up using a path on the
host.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2022-06-27 20:22:20 +02:00
443a2afdb5 volumes: switch order of checks
avoid any I/O operation on the volume if the source directory is empty.

This is useful on network file systems (since CAP_DAC_OVERRIDE is not
honored) where the root user might not have enough privileges to
perform an I/O operation on the NFS mount but the user running inside
the container has.

[NO NEW TESTS NEEDED] it needs a setup with a network file system

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2022-06-27 20:22:20 +02:00
28e2a604b4 vendor: update containers/common
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2022-06-27 20:22:20 +02:00
9c4b8a29b0 Merge pull request #14713 from Luap99/volume-plugin
add podman volume reload to sync volume plugins
2022-06-27 17:55:19 +00:00
278afae1de Merge pull request #14705 from jakecorrenti/show-health-status-event
Show Health Status events
2022-06-27 17:49:27 +00:00
ed2afb2059 Merge pull request #14732 from dfr/criu
Add missing criu symbols to criu_unsupported.go
2022-06-27 17:47:06 +00:00
99f68898c0 reveal machine error, ignore false state
This PR covers two edge cases discovered by fiddling with machine
manually.  It is possible (like after a manual cleanup of a machine)
that a leftover qemu socket file can indicate the prescense of a machine
running.

Also, reveal the error of a Exec.Command by wrapping the generic error
around what was in stderr.

[NO NEW TESTS NEEDED]

Signed-off-by: Brent Baude <bbaude@redhat.com>
2022-06-27 12:40:15 -05:00
c29c6adf96 Merge pull request #14744 from giuseppe/fix-go-sum
go.sum: run make vendor
2022-06-27 16:54:49 +00:00
9cb93c6f90 go.sum: run make vendor
The CI is currently broken.  Update go.sum.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2022-06-27 18:16:00 +02:00
465c54829e Merge pull request #14733 from dfr/unix-signal
Implement CatchAll and StopCatch in signal_unix.go
2022-06-27 15:58:34 +00:00
088665d2cf Merge pull request #14654 from cdoern/cgroup
podman cgroup enhancement
2022-06-27 15:14:20 +00:00
0c1a3b70f5 Show Health Status events
Previously, health status events were not being generated at all. Both
the API and `podman events` will generate health_status events.

```
{"status":"health_status","id":"ae498ac3aa6c63db8b69a37583a6eae1a9cefbdbdbeeadcf8e1d66d745f0df63","from":"localhost/healthcheck-demo:latest","Type":"container","Action":"health_status","Actor":{"ID":"ae498ac3aa6c63db8b69a37583a6eae1a9cefbdbdbeeadcf8e1d66d745f0df63","Attributes":{"containerExitCode":"0","image":"localhost/healthcheck-demo:latest","io.buildah.version":"1.26.1","maintainer":"NGINX Docker Maintainers \u003cdocker-maint@nginx.com\u003e","name":"healthcheck-demo"}},"scope":"local","time":1656082205,"timeNano":1656082205882271276,"HealthStatus":"healthy"}
```
```
2022-06-24 11:06:04.886238493 -0400 EDT container health_status ae498ac3aa6c63db8b69a37583a6eae1a9cefbdbdbeeadcf8e1d66d745f0df63 (image=localhost/healthcheck-demo:latest, name=healthcheck-demo, health_status=healthy, io.buildah.version=1.26.1, maintainer=NGINX Docker Maintainers <docker-maint@nginx.com>)
```

Signed-off-by: Jake Correnti <jcorrenti13@gmail.com>
2022-06-27 10:44:53 -04:00
8806606ca2 Merge pull request #14725 from Luap99/port-range-flake
Fix "podman run port forward range" flake
2022-06-27 13:42:58 +00:00
386ea49cf5 Show starting state when machine is starting
Currently podman machine list never shows the starting state.

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

[NO NEW TESTS NEEDED]

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2022-06-27 09:27:46 -04:00
1022ea36dd Merge pull request #14687 from cdoern/vols
podman run/create -v relative filepath support
2022-06-27 12:35:10 +00:00
cc86315455 Merge pull request #14695 from boaz0/closes_14682
Fix machine list: --format implies --noheading
2022-06-27 12:30:11 +00:00
157a966ae8 Merge pull request #14665 from Luap99/machine-now
podman machine init --now: respect proxy envs
2022-06-27 12:27:28 +00:00
66c62eb968 Implement CatchAll and StopCatch in signal_common.go
This is part of a set of changes to port podman to the FreeBSD platform.
The pkg/signal parts are needed to enable ABI mode on FreeBSD. No tests
are needed here because it should be a functional no-op for linux.

[NO NEW TESTS NEEDED]

Signed-off-by: Doug Rabson <dfr@rabson.org>
2022-06-27 13:27:12 +01:00
345778ece0 Fix "podman run port forward range" flake
The test must ensure that all ports in the range are free not just
the first. This flakes often because port 5355 is always in use by
systemd-resolved on fedora.

Fixes #14716

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-06-27 14:25:24 +02:00
c8cb7a2b99 Merge pull request #14724 from containers/dependabot/go_modules/github.com/stretchr/testify-1.7.5
Bump github.com/stretchr/testify from 1.7.4 to 1.7.5
2022-06-27 12:20:51 +00:00
4c5788bac6 Fix spelling of GetCriuVersion
Signed-off-by: Doug Rabson <dfr@rabson.org>
2022-06-27 12:57:44 +01:00
5902905970 Add missing criu symbols to criu_unsupported.go
[NO NEW TESTS NEEDED]

Signed-off-by: Doug Rabson <dfr@rabson.org>
2022-06-27 12:57:44 +01:00
3176b3fe01 Merge pull request #14685 from mheon/gitlab
Followon to #14559
2022-06-27 10:58:10 +00:00
324435a648 Merge pull request #14703 from cdoern/connection
fix system connection and scp testing
2022-06-25 13:07:13 +00:00
2792e598c7 podman cgroup enhancement
currently, setting any sort of resource limit in a pod does nothing. With the newly refactored creation process in c/common, podman ca now set resources at a pod level
meaning that resource related flags can now be exposed to podman pod create.

cgroupfs and systemd are both supported with varying completion. cgroupfs is a much simpler process and one that is virtually complete for all resource types, the flags now just need to be added. systemd on the other hand
has to be handeled via the dbus api meaning that the limits need to be passed as recognized properties to systemd. The properties added so far are the ones that podman pod create supports as well as `cpuset-mems` as this will
be the next flag I work on.

Signed-off-by: Charlie Doern <cdoern@redhat.com>
2022-06-24 15:39:15 -04:00
95707a08bf Merge pull request #14726 from cevich/podmanimage_docs
[CI:DOCS] Minor update to podmanimage upstream docs
2022-06-24 16:08:12 +00:00
09754d21d0 [CI:DOCS] Minor update to podmanimage upstream docs
Add a reference to where/how podman is compiled for the 'upstream'
flavored image.

Signed-off-by: Chris Evich <cevich@redhat.com>
2022-06-24 10:52:06 -04:00
4274906a80 Merge pull request #14718 from edsantiago/flake_workaround_14653
Workaround for bug 14653 (checkpoint flake)
2022-06-24 12:30:04 +00:00
041947b11a Bump github.com/stretchr/testify from 1.7.4 to 1.7.5
Bumps [github.com/stretchr/testify](https://github.com/stretchr/testify) from 1.7.4 to 1.7.5.
- [Release notes](https://github.com/stretchr/testify/releases)
- [Commits](https://github.com/stretchr/testify/compare/v1.7.4...v1.7.5)

---
updated-dependencies:
- dependency-name: github.com/stretchr/testify
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-06-24 12:09:16 +00:00
3619f0be95 Fix: Prevent OCI runtime directory remain
This bug was introduced in https://github.com/containers/podman/pull/8906.

When we use 'podman rm/restart/stop/kill etc...' command to
the container running with --rm, the OCI runtime directory
remains at /run/<runtime name> (root user) or
/run/user/<user id>/<runtime name> (rootless user).

This bug could cause other bugs.
For example, when we checkpoint the container running with
--rm (podman checkpoint --export) and restore it
(podman restore --import) with crun, error message
"Error: OCI runtime error: crun: container `<container id>`
already exists" is outputted.
This error is caused by an attempt to restore the container with
the same container ID as the remaining OCI runtime's container ID.

Therefore, I fix that the cleanupRuntime() function runs to
remove the OCI runtime directory,
even if the container has already been removed by --rm option.

Signed-off-by: Toshiki Sonoda <sonoda.toshiki@fujitsu.com>
2022-06-24 09:29:24 +09:00
a4ae22df86 Workaround for bug 14653 (checkpoint flake)
Since it may be a while before we get a true fix: add a
workaround for podman-remote checkpoint tests, in which
we pause until the 'run --rm' container is truly truly gone.

I've tried to make it as easy as possible to clean up
the workaround code once the bug is fixed.

Oh, also, remove "-it" from a podman-run. It makes no sense
and only results in nasty orange warning messages.

Signed-off-by: Ed Santiago <santiago@redhat.com>
2022-06-23 15:03:46 -06:00
491857a880 Use HaveLen instead of len in podman machine list e2e tests
Signed-off-by: Boaz Shuster <boaz.shuster.github@gmail.com>
2022-06-23 21:36:52 +03:00
f0b9e56e98 Fix machine list: --format implies --noheading
It seems like previously if --format was changed then listFlag.noHeading is changed accordingly
however printHeader is used to determine whether to print header or not.

This patch fixes that problem.

Signed-off-by: Boaz Shuster <boaz.shuster.github@gmail.com>
2022-06-23 21:36:52 +03:00
2fab7d169b add podman volume reload to sync volume plugins
Libpod requires that all volumes are stored in the libpod db. Because
volume plugins can be created outside of podman, it will not show all
available plugins. This podman volume reload command allows users to
sync the libpod db with their external volume plugins. All new volumes
from the plugin are also created in the libpod db and when a volume from
the db no longer exists it will be removed if possible.

There are some problems:
- naming conflicts, in this case we only use the first volume we found.
  This is not deterministic.
- race conditions, we have no control over the volume plugins. It is
  possible that the volumes changed while we run this command.

Fixes #14207

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-06-23 18:36:30 +02:00
6e8953abfc test/testvol: rework testvol binary
Add 4 new subcommands to the testvol binary, instead of just serving the
volume api it now also can create/list/remove plugins. This is required
to test new functionality where volumes are create outside of podman in
the plugin. Podman should then be able to pick up the new volumes.

The new testvol commands are:
- serve: serve the podman api like the the testvol command before
- create: create a volume with the given name
- list: list all volume names
- remove: remove the volume with the given name

Also make a small update to the testvol Containerfile so that it can
build correctly.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-06-23 18:36:30 +02:00
fcc25afa55 test/testvol: update container image golang to 1.18
Update the golang verion for the testvol image to the latest version
1.18. This requires us to build with GO111MODULE=off.
Use the FQDN to prevent the shortnames prompt.

Also add --network none to the podman build command to make sure we are
only using the copied deps and nothing else.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-06-23 18:36:23 +02:00
472f79f08e test/testvol: move Containerfile into testvol dir
I think it is confusion to have this Containerfile in the repo root. It
is used for the tests only so we should move it into the same dir.

Also adapt the Makefile target to use the new path and add the current
date as tag instead of using latest which can break CI easily when we
have to update the image.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-06-23 17:43:09 +02:00
0d3aa61be4 libpod: volume plugin sendRequest remove body bool
There is no need for an extra parameter if the body is set. We can just
check to interface for not nil.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-06-23 17:43:09 +02:00
ad78d239dd fix system connection and scp testing
podman image scp and podman system connection tests were querying an existing website during testing.
Change to a URL that will never exist given an improper domain extension

also just generally clean up a few things in both scp and connection testing

resolves #14699

Signed-off-by: Charlie Doern <cdoern@redhat.com>
2022-06-23 11:26:19 -04:00
3a810b8d2a Two fixes for DB exit code handling
Firstly: don't prune exit codes after a refresh - instead, clear
the table entirely. We are guaranteed that all containers are
gone after a refresh, we should not worry about exit codes given
this.

Secondly: alter the way pruning was done. We were updating the DB
by calling Update from within an existing View, and stacking an
RW transaction on top of an existing RO one seems dodgy; further,
modifying a bucket while iterating over it with ForEach is
undefined behavior.

Hopefully this will resolve our CI issues.

Signed-off-by: Matthew Heon <mheon@redhat.com>
2022-06-23 10:44:38 -04:00
30e7cbccc1 libpod: fix wait and exit-code logic
This commit addresses three intertwined bugs to fix an issue when using
Gitlab runner on Podman.  The three bug fixes are not split into
separate commits as tests won't pass otherwise; avoidable noise when
bisecting future issues.

1) Podman conflated states: even when asking to wait for the `exited`
   state, Podman returned as soon as a container transitioned to
   `stopped`.  The issues surfaced in Gitlab tests to fail [1] as
   `conmon`'s buffers have not (yet) been emptied when attaching to a
   container right after a wait.  The race window was extremely narrow,
   and I only managed to reproduce with the Gitlab runner [1] unit
   tests.

2) The clearer separation between `exited` and `stopped` revealed a race
   condition predating the changes.  If a container is configured for
   autoremoval (e.g., via `run --rm`), the "run" process competes with
   the "cleanup" process running in the background.  The window of the
   race condition was sufficiently large that the "cleanup" process has
   already removed the container and storage before the "run" process
   could read the exit code and hence waited indefinitely.

   Address the exit-code race condition by recording exit codes in the
   main libpod database.  Exit codes can now be read from a database.
   When waiting for a container to exit, Podman first waits for the
   container to transition to `exited` and will then query the database
   for its exit code. Outdated exit codes are pruned during cleanup
   (i.e., non-performance critical) and when refreshing the database
   after a reboot.  An exit code is considered outdated when it is older
   than 5 minutes.

   While the race condition predates this change, the waiting process
   has apparently always been fast enough in catching the exit code due
   to issue 1): `exited` and `stopped` were conflated.  The waiting
   process hence caught the exit code after the container transitioned
   to `stopped` but before it `exited` and got removed.

3) With 1) and 2), Podman is now waiting for a container to properly
   transition to the `exited` state.  Some tests did not pass after 1)
   and 2) which revealed the third bug: `conmon` was executed with its
   working directory pointing to the OCI runtime bundle of the
   container.  The changed working directory broke resolving relative
   paths in the "cleanup" process.  The "cleanup" process error'ed
   before actually cleaning up the container and waiting "main" process
   ran indefinitely - or until hitting a timeout.  Fix the issue by
   executing `conmon` with the same working directory as Podman.

Note that fixing 3) *may* address a number of issues we have seen in the
past where for *some* reason cleanup processes did not fire.

[1] https://gitlab.com/gitlab-org/gitlab-runner/-/issues/27119#note_970712864

Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>

[MH: Minor reword of commit message]

Signed-off-by: Matthew Heon <mheon@redhat.com>
2022-06-23 09:11:57 -04:00
15188dce05 conmon: silence json-file error
We should just silently fall through.  The log was flooding the
system-service logs when running Gitlab runner.

Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2022-06-23 09:11:57 -04:00
8e88abda85 Merge pull request #14608 from edsantiago/logformatter_new_url
logformatter: link to logs using Cirrus API
2022-06-22 21:20:31 +00:00
2eda547dcd podman run/create -v relative filepath support
podman currently does not support relative volume paths. Add parsing for relative paths in specgen, converting
whatever volume was given to an absolute path.

Signed-off-by: Charlie Doern <cdoern@redhat.com>
2022-06-22 16:52:16 -04:00
0d1fa2b504 Merge pull request #14658 from eriksjolund/setup_to_set_up
"setup" -> "set up" and similar
2022-06-22 20:05:58 +00:00
ef563c5a1e logformatter: link to logs using Cirrus API
One day we may use AWS for part of CI. Do you want to maintain
two separate code paths in this script for linking to artifacts
in multiple cloud providers? Can you say no? I knew you could.

Cirrus already knows the location of the artifacts and provides
a transparent mechanism for accessing them. Use it.

This PR exposed a nasty bug in our environment-variable handling:
envariables passed through to the containerized environment were
being double-space-escaped, so "FOO=a b" ended up as "FOO=a\ b"
(with a backslash), with one consequence being invalid URLs.
The solution is simple: run 'podman -e FOO', not '-e FOO=value'.

Finally, reinstate the environment-variable dump (in comments).
I had removed this in a moment of panic over leaking secrets,
but no, that doesn't happen. Exclude scary-sounding vars anyway.

Signed-off-by: Ed Santiago <santiago@redhat.com>
2022-06-22 11:26:15 -06:00
aa4279ae15 Fix spelling "setup" -> "set up" and similar
* Replace "setup", "lookup", "cleanup", "backup" with
  "set up", "look up", "clean up", "back up"
  when used as verbs. Replace also variations of those.

* Improve language in a few places.

Signed-off-by: Erik Sjölund <erik.sjolund@gmail.com>
2022-06-22 18:39:21 +02:00
ca26d44d3b Merge pull request #14688 from rhatdan/docs
[CI:DOCS] Update basic_networking.md
2022-06-22 15:47:00 +00:00