Commit graph

4320 commits

Author SHA1 Message Date
Karthik Elango
a6ea3325a0 start filter flag changes
Tying filtering logic for podman stop and start to same place in getContainersAndInputByContext() to reduce code redundancy

Signed-off-by: Karthik Elango <kelango@redhat.com>
2022-08-10 16:46:05 -04:00
Paul Holzinger
bd3e36040a podman generate systemd --new: allow -h hostname
podman run/create can accept `-h <hostname>` as argument. When parsing
flags -h throws an help requested error from pflag. To prevent this
error we have to define the help flag.

Fixes #15124

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-08-10 16:46:05 -04:00
Paul Holzinger
c5c0efc95a podman generate systemd: handle --sdnotify correctly
When a container was created with `--sdnotify value` we would remove
this arg instead of using it like with `--sdnotfiy=value`.

Also when the arg is set to ignore we should force conmon in order to
make the resulting Type=notify units work.

Fixes #15052

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-08-10 16:46:05 -04:00
Jason T. Greene
8b9e5fb085 Use 8k buffer to help clients w/ broken parsing
Signed-off-by: Jason T. Greene <jason.greene@redhat.com>
2022-08-10 16:46:05 -04:00
Daniel J Walsh
7efd81cb8d With --rm option remove container if podman run fails
Fixes https://github.com/containers/podman/issues/15049

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>

<MH: Fixed cherry-pick conflicts>

Signed-off-by: Matthew Heon <mheon@redhat.com>
2022-08-10 16:46:05 -04:00
Toshiki Sonoda
b7feafcb06 Fix: manifest push --rm removes a correct manifest list
This bug is reproduced when we execute the following command:

1. podman manifest add <manifest list> <images exist on local storage>
2. podman manifest push --rm <manifest list> dir:<directory>

If pushing succeeds, it is expected to remove only a manifest list.
However, manifest list remains on local storage and images are removed.

This commit fixes `podman manifest push --rm` to remove only a manifest list.

And, supports `manifest push --rm option` in remote environment,
like host environment.

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

Signed-off-by: Toshiki Sonoda <sonoda.toshiki@fujitsu.com>
2022-08-10 16:46:05 -04:00
Aditya R
9b0a1fa752 build: implement --cache-to,--cache-from and --cache-ttl
[NO NEW TESTS NEEDED]
[NO TESTS NEEDED]

Signed-off-by: Aditya R <arajan@redhat.com>
2022-08-10 16:46:04 -04:00
Gerard Braad
6beb3f208f Fixes #15154 Change order when config and connections are written
When the break out or the WSL environment fails to start, the config
and connections should not be written. Placing them at the end of the
provisioning step will mitigate the issue.

[NO NEW TESTS NEEDED]

Signed-off-by: Gerard Braad <me@gbraad.nl>
2022-08-08 16:15:28 -04:00
Jason T. Greene
eab03100f7 Add support, and default to rootless w/WSL prompt
Also force installation to use WSL2 to prevent accidental usage of WSL1

Signed-off-by: Jason T. Greene <jason.greene@redhat.com>
2022-08-08 16:15:28 -04:00
Jason T. Greene
f826ed5846 Disable F36 service that is incompat with WSL kern
(requires psi)

Signed-off-by: Jason T. Greene <jason.greene@redhat.com>
2022-08-08 16:15:28 -04:00
Miloslav Trmač
5c95c0920f Add support for creating sigstore signatures, and providing passphrases
- Allow creating sigstore signatures via --sign-by-sigstore-private-key .
  Like existing --sign-by, it does not work remote (in this case
  because we would have to copy the private key to the server).
- Allow passing a passphrase (which is mandatory for sigstore private keys)
  via --sign-passphrase-file; if it is not provided, prompt interactively.
- Also, use that passphrase for --sign-by as well, allowing non-interactive
  GPG use. (But --sign-passphrase-file can only be used with _one of_
  --sign-by and --sign-by-sigstore-private-key.)

Note that unlike the existing code, (podman build) does not yet
implement sigstore (I'm not sure why it needs to, it seems not to
push images?) because Buildah does not expose the feature yet.

Also, (podman image sign) was not extended to support sigstore.

The test for this follows existing (podman image sign) tests
and doesn't work rootless; that could be improved by exposing
a registries.d override option.

The test for push is getting large; I didn't want to
start yet another registry container, but that would be an
alternative.  In the future, Ginkgo's Ordered/BeforeAll
would allow starting a registry once and using it for two
tests.

Signed-off-by: Miloslav Trmač <mitr@redhat.com>
2022-08-02 16:52:56 +02:00
Miloslav Trmač
eacee60c83 Update c/common to an unreleased version
... to get https://github.com/containers/common/pull/1106 .

Signed-off-by: Miloslav Trmač <mitr@redhat.com>
2022-08-02 16:52:56 +02:00
Christophe Fergeau
c3e0f8ebef machine: Fix check which is always true
Before making / mutable/immutable, podman-machine checks if the mount is
being done in /home or /mnt. However the current check is always going
to be true:
```
!strings.HasPrefix(mount.Target, "/home") || !strings.HasPrefix(mount.Target, "/mnt")
```
is false when mount.Target starts with "/home" and mount.Target starts
with "/mnt", which cannot happen at the same time.

The correct check is:
```
!strings.HasPrefix(mount.Target, "/home") && !strings.HasPrefix(mount.Target, "/mnt")
```
which can also be written as:
```
!(strings.HasPrefix(mount.Target, "/home") || strings.HasPrefix(mount.Target, "/mnt"))
```

The impact is not too bad, it results in extra 'chattr -i' calls which
should be unneeded.

[NO NEW TESTS NEEDED]

Signed-off-by: Christophe Fergeau <cfergeau@redhat.com>
2022-07-26 14:45:12 -04:00
Vladimir Kochnev
e6ebfbd1e0 Set TLSVerify=true by default for API endpoints
Option defaults in API must be the same as in CLI.

```
% podman image push --help
% podman image pull --help
% podman manifest push --help
% podman image search --help
```

All of these CLI commands them have --tls-verify=true by default:
```
--tls-verify  require HTTPS and verify certificates when accessing the registry (default true)
```

As for `podman image build`, it doesn't have any means to control
`tlsVerify` parameter but it must be true by default.

Signed-off-by: Vladimir Kochnev <hashtable@yandex.ru>
2022-07-26 14:44:05 -04:00
Ed Santiago
64bc2ee97f Semiperiodoc cleanup of obsolete FIXMEs
Some refer to issues that are closed. Remove them.

Some are runc bugs that will never be fixed. Say so, and remove
the FIXME.

One (bps/iops) should probably be fixed. File an issue for it, and
update comment to include the issue# so my find-obsolete-skips script
can track it.

And one (rootless mount with a "kernel bug?" comment) is still
not fixed. Leave the skip, but add a comment documenting the symptom.

Signed-off-by: Ed Santiago <santiago@redhat.com>
2022-07-26 14:43:23 -04:00
Paul Holzinger
c4616510a2 API: libpod/create use correct default umask
Make sure containers created via API have the correct umask from
containers.conf set.

Fixes #15036

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-07-26 14:39:39 -04:00
Paul Holzinger
553a700966 compat api: always turn on network isolation for networks
Fix some network option parsing logic to use constants.
Always use the isolate option since this is what docker does.
Remove the icc option, this is different from isolate and it is not
implemented.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-07-26 14:36:20 -04:00
Paul Holzinger
aef8039d37 compat api: allow default bridge name for networks
Docker uses "bridge" as default network name so some tools expect this
to work with network list or inspect. To fix this we change "bridge" to
the podman default ("podman") name.

Fixes #14983

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-07-26 14:36:10 -04:00
Jakub Guzik
fa7e9f0f81 Compat API: unify pull/push and add missing progress info
Progress bar in JSONMessage is missing compared to docker output both in
pull and push. Additionaly, pull was not using JSONMessage while push
was using the type.
[NO NEW TESTS NEEDED]

Signed-off-by: Jakub Guzik <jguzik@redhat.com>
2022-07-26 14:27:23 -04:00
Valentin Rothberg
fde39edb9c remote push: show copy progress
`podman-remote push` has shown absolutely no progress at all. Fix that
by doing essentially the same as the remote-pull code does.

The get-free-out-of-jail-card for backwards compatibility is to let the
`quiet` parameter default to true.  Since the --quioet flag wasn't
working before either, older Podman clients do not set it.

Also add regression tests to make sure we won't regress again.

Fixes: #11554
Fixes: #14971
Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2022-07-26 14:27:07 -04:00
Paul Holzinger
1f48980af9 fix broken machine test
The memory both local and in the CI test is converted to 3822. I don't
know why this changed but I want to have this working again. For the
future we should look at a more robust solution.

Fixes #15012

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-07-26 14:24:49 -04:00
Paul Holzinger
cbcbde587d pkg/machine/e2e: do not import from cmd/podman
The same problem again as 4374038cc6.

Also fix the incorrect --format autocompletion struct.

It should be avoided to import cmd/podman/... packages from outside of
cmd/podman. This can lead in weird hard to debug import paths but also
can have negative consequences when imported in unit tests. In this case
it will set XDG_CONFIG_HOME and thus the machine tests this dir over the
tmp HOME env variable which is set at a later point. This caused machine
files to be leaked into the actual users home dir.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-07-26 14:24:43 -04:00
Paul Holzinger
69fcf04c69 fix some pkg/machine/e2e test to read stderr
Also fix the machine ssh code order to provide a better error message.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-07-26 14:24:37 -04:00
Paul Holzinger
ce790e61b1 enable linter for pkg/machine/e2e
Rename all files to _test.go and rename the package to e2e_test. This
makes the linter less strict about things like dot imports.

Add some unused nolint directives to silence some warnings, these can be
used to find untested options so someone could add tests for them.

Fixes #14996

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-07-26 14:24:30 -04:00
Jason T. Greene
2350ef9dd4 Fix potential leak on mid-stream read error
Signed-off-by: Jason T. Greene <jason.greene@redhat.com>
2022-07-26 13:49:22 -04:00
Aditya R
73ecc5a4bd pkg,libpod: remove pkg/hooks and use hooks from c/common
PR https://github.com/containers/common/pull/1071 moved `pkg/hooks` to
`c/common` hence remove that from podman and use `pkg/hooks` from
`c/common`

[NO NEW TESTS NEEDED]
[NO TESTS NEEDED]

Signed-off-by: Aditya R <arajan@redhat.com>
2022-07-26 13:48:10 -04:00
Ashley Cui
d151edeeaf Fix machine test
DownloadVMImage takes an extra argument.

Signed-off-by: Ashley Cui <acui@redhat.com>
2022-07-26 13:44:08 -04:00
Urvashi Mohnani
c3c07ed09e Update init ctr default for play kube
Update the init container type default to once instead
of always to match k8s behavior.
Add a new annotation that can be used to change the init
ctr type in the kube yaml.

Signed-off-by: Urvashi Mohnani <umohnani@redhat.com>
2022-07-26 13:39:20 -04:00
Toshiki Sonoda
de8d2cc944 "pod pause/unpause/stop" append "report.Errs" to "reports"
There is a possibility that podman does not output expected error message.
(e.g. When pause rootless cgroups v1 container on host)
This problem is solved by appending `report.Errs` to `reports` before `continue`.

[NO NEW TESTS NEEDED]

Signed-off-by: Toshiki Sonoda <sonoda.toshiki@fujitsu.com>
2022-07-26 13:37:56 -04:00
Jason T. Greene
d2e2756a4c Print rootfs download as a specific version on Win
- Also save the file using this convention.
- Change the general pull mechanism to print the local file
  as opposed to the remote to enable this - no change in
  observed behavior on mac

Signed-off-by: Jason T. Greene <jason.greene@redhat.com>
2022-07-26 13:35:56 -04:00
Ashley Cui
17dbce2fb0 Clean up cached machine images
When initing machines, we download a machine image, and uncompress and
copy the image for the actual vm image. When a user constantly pulls new
machines, there may be a buildup of old, unused machine images. This
commit cleans ups the unused cached images.

Changes:
- If the machine is pulled from a URL or from the FCOS releases, we pull
  them into XDG_DATA_HOME/containers/podman/machine/vmType/cache
- Cache cleanups only happen if there is a cache miss, and we need to
  pull a new image
- For Fedora and FCOS, we actually use the cache, so we go through the
  cache dir and remove any images older than 2 weeks (FCOS's release cycle), on a cache miss.
- For generic files pulled from a URL, we don't actually cache, so we
  delete the pulled file immediately after creating a machine image
- For generic files from a local path, the original file will never be
  cleaned up

Note that because we cache in a different dir, this will not clean up
old images pulled before this commit.

[NO NEW TESTS NEEDED]

Signed-off-by: Ashley Cui <acui@redhat.com>
2022-07-26 13:32:33 -04:00
Ashley Cui
e473c5e4b7 Machine init: create .ssh dir if not exist
When initing a machine, we generate ssh keys in `$HOME/.ssh`. If there
is not .ssh dir, we should create it, so the init does not fail.

Signed-off-by: Ashley Cui <acui@redhat.com>
2022-07-26 13:29:40 -04:00
Karthik Elango
6d84a9952f Podman stop --filter flag
Filter flag is added for podman stop and podman --remote stop. Filtering logic is implemented in
getContainersAndInputByContext(). Start filtering can be manipulated to use this logic as well to limit redundancy.

Signed-off-by: Karthik Elango <kelango@redhat.com>
2022-07-26 13:25:36 -04:00
Sascha Grunert
a78be890ee Switch to github.com/blang/semver/v4
Switch to the latest version of the now go module compatible release.

[NO NEW TESTS NEEDED]

Signed-off-by: Sascha Grunert <sgrunert@redhat.com>
2022-07-26 13:22:46 -04:00
Gerard Braad
a5827e13cd Fixes #14698 Use prepared image for WSL2 machine init
This commit introduces a prepared image for setting up the WSL2
environment. This means that the deployment will take considerable
less time to finish (as it does not need to run an update and package
install), but also allows to rely on a cached image to re-init the
environment without the need for an internet connection.

[NO NEW TESTS NEEDED]

Signed-off-by: Gerard Braad <me@gbraad.nl>
2022-07-26 13:19:48 -04:00
Brent Baude
f7707c81a0 Fix last machine test
The list --format json test case had a typo like error.

[NO NEW TESTS NEEDED]

Signed-off-by: Brent Baude <bbaude@redhat.com>
2022-07-26 13:08:37 -04:00
Giuseppe Scrivano
35dc17bfe6 abi: create new cgroup when running in a container
if podman is running in the root cgroup, it will create a new
subcgroup and move itself there.

[NO NEW TESTS NEEDED] it needs nested podman

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

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2022-07-26 13:08:19 -04:00
Giuseppe Scrivano
7b4ebfa657 podman: always call into SetupRootless
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2022-07-26 13:08:11 -04:00
Paul Holzinger
bf269e634c podman machine: do not commit proxies into config file
qemu fails when the same `fw_cfg` options is used more than once.
Since the current logic always adds a new option on each machine load
this will fail on the second start.

We can fix this by checking if the option is already set and replace but
I think it is easier to just not commit the option in the config and add
it dynamically on start. User that hit this bug have to recreate the
machine.

[NO NEW TESTS NEEDED]

Fixes #14636
Fixes #14837

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-07-26 13:02:39 -04:00
openshift-ci[bot]
810cbf1fb9
Merge pull request #14181 from umohnani8/kube-hostname
Add ports and hostname correctly in kube yaml
2022-07-11 15:13:49 +00:00
openshift-ci[bot]
0df8c6e157
Merge pull request #14826 from sstosh/net-prune
Refactored networkPrune function
2022-07-11 12:53:59 +00:00
openshift-ci[bot]
76422ecdbb
Merge pull request #14818 from rhatdan/wait
podman wait can take multiple conditions
2022-07-11 08:06:58 +00:00
Urvashi Mohnani
81a19a568f Add ports and hostname correctly in kube yaml
If a pod is created without net sharing, allow adding
separate ports for each container to the kube yaml
and also set the pod level hostname correctly if the
uts namespace is not being shared.

Add a warning if the default namespace sharing options
have been modified by the user.

Signed-off-by: Urvashi Mohnani <umohnani@redhat.com>
2022-07-08 11:21:48 -04:00
Brent Baude
76d887c770 Fix machine tests
Catch up with regressions that have occurred since the tests were
originally written.

Signed-off-by: Brent Baude <bbaude@redhat.com>
2022-07-08 08:22:49 -05:00
Daniel J Walsh
96dd57ca50
podman wait can take multiple conditions
Podman wait should not be defaulting to just stopped.  By default
wait API waits for stopped and exited.  We should not override this on
the client side.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2022-07-08 05:26:56 -04:00
openshift-ci[bot]
6087fb2116
Merge pull request #14839 from saschagrunert/errors-pkg
pkg: switch to golang native error wrapping
2022-07-08 09:24:25 +00:00
Sascha Grunert
a46f798831
pkg: switch to golang native error wrapping
We now use the golang error wrapping format specifier `%w` instead of
the deprecated github.com/pkg/errors package.

[NO NEW TESTS NEEDED]

Signed-off-by: Sascha Grunert <sgrunert@redhat.com>
2022-07-08 08:54:47 +02:00
Toshiki Sonoda
d1754bdd4f Refactored networkPrune function
Refactored the networkPrune function to improve readability.

This commit changes the `networkPrune` function to
use the `PrintNetworkPruneResults` function.

[NO NEW TESTS NEEDED]

Signed-off-by: Toshiki Sonoda <sonoda.toshiki@fujitsu.com>
2022-07-08 08:33:20 +09:00
Paul Holzinger
61a67a07b1
pkg/machine/qemu: start VM check if qemu is alive
When trying to connect to the qemu ready socket we should check if the
qemu process is still running, if it is not we can just error out. There
is no point in retrying.
To do so we have to directly call wait with WNOHANG.

Also change StartProcess to os/exec package which is higher level and
allows us to use a buffer as qemu stderr fd.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-07-07 20:57:26 +02:00
Paul Holzinger
a26cf638e0
machine: qemu fix chardev id starting with letter
qemu need the id to start with a letter for some reason.
If this is not the case qemu will fail:
```
qemu-system-x86_64: -device virtserialport,chardev=ad053e0bb519f_ready,name=org.fedoraproject.port.0: Property 'virtserialport.chardev' can't find value 'ad053e0bb519f_ready'
er
Identifiers consist of letters, digits, '-', '.', '_', starting with a letter.
```

To fix this we just add an "a" in front of it.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-07-07 20:48:28 +02:00