Commit Graph

363 Commits

Author SHA1 Message Date
openshift-ci[bot] 4df6122aaa
Merge pull request #14904 from giuseppe/move-to-subcgroup-in-a-container
abi: create new cgroup when running in a container
2022-07-13 09:10:57 +00:00
Giuseppe Scrivano 7b4afbf621
podman: always call into SetupRootless
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2022-07-13 09:13:06 +02:00
Daniel J Walsh c9a82d72a7
Docker uses "-c" to mean "--cpu-shares" in create and run
Add support for -c as an alias for --cpu-shares to be compatible with
Docker.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2022-07-12 14:53:17 -04:00
Valentin Rothberg 6b9abe69db improve pull-policy documentation
Make sure that the docs for pull policies is consistent with Buildah and
reflects the implementation.

Further improve the help messages and auto completions.

[NO NEW TESTS NEEDED]

Fixes: #14846
Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2022-07-08 17:11:08 +02:00
openshift-ci[bot] ca5bebb082
Merge pull request #14501 from cdoern/podUTS
podman pod create --uts support
2022-07-06 14:51:22 +00:00
Urvashi Mohnani 65d511c6d8 Fix podman pod unpaue TODO
Update the podman pod unpause to only show the paused
containers with autocomplete.
Fix a typo in the help command.
Update the unpause function to only attempt an unpause
on pasued pods instead of all the pods.
Update the tests accordingly.

Signed-off-by: Urvashi Mohnani <umohnani@redhat.com>
2022-07-05 10:32:49 -04:00
cdoern 8f2d9e7a7c podman pod create --uts support
add support for the --uts flag in pod create, allowing users to avoid
issues with default values in containers.conf.

uts follows the same format as other namespace flags:
--uts=private (default), --uts=host, --uts=ns:PATH

resolves #13714

Signed-off-by: Charlie Doern <cdoern@redhat.com>
2022-07-05 09:28:07 -04:00
Charlie Doern b92149e2a8 podman pod create --memory
using the new resource backend, implement podman pod create --memory which enables
users to modify memory.max inside of the parent cgroup (the pod), implicitly impacting all
children unless overriden

Signed-off-by: Charlie Doern <cdoern@redhat.com>
2022-07-01 13:44:32 -04:00
Sascha Grunert e8adec5f41
cmd/podman: 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.

Signed-off-by: Sascha Grunert <sgrunert@redhat.com>
2022-06-30 12:58:57 +02:00
openshift-ci[bot] c9dce6353d
Merge pull request #14659 from eriksjolund/setup_to_set_up_in_code
[CI:DOCS] "setup" -> "set up" in source code comments
2022-06-21 18:08:31 +00:00
cdoern f451b68dfa podman pod create --shm-size
expose the --shm-size flag to podman pod create and add proper handling and inheritance
for the option.

resolves #14609

Signed-off-by: Charlie Doern <cdoern@redhat.com>
2022-06-20 10:25:00 -04:00
Erik Sjölund 2827140907 [CI:DOCS] "setup" -> "set up" in source code comments
* Replace "setup", "lookup" with "set up", "look up"
  when used as verbs.

Signed-off-by: Erik Sjölund <erik.sjolund@gmail.com>
2022-06-19 12:18:08 +02:00
openshift-ci[bot] 2af8851787
Merge pull request #14299 from cdoern/podClone
implement podman pod clone
2022-06-16 20:05:27 +00:00
Paul Holzinger 41528739ce
golangci-lint: enable nolintlint
The nolintlint linter does not deny the use of `//nolint`
Instead it allows us to enforce a common nolint style:
- force that a linter name must be specified
- do not add a space between `//` and `nolint`
- make sure nolint is only used when there is actually a problem

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-06-14 16:29:42 +02:00
cdoern 958759a719 podman pod clone
implement podman pod clone, a command to create an exact copy of a pod while changing
certain config elements

current supported flags are:
--name change the pod name
--destroy remove the original pod
--start run the new pod on creation
and all infra-container related flags from podman pod create (namespaces etc)

resolves #12843

Signed-off-by: cdoern <cdoern@redhat.com>
2022-06-10 14:23:19 -04:00
OpenShift Merge Robot 0405e7c161
Merge pull request #14539 from Luap99/completion5
shell completion: fix problems with container path completion
2022-06-09 14:35:07 -04:00
Paul Holzinger 5614c29ce1
compat api: fix regressions from "Swagger refactor/cleanup"
For some reason commit 5b79cf15a0 moved the container create options
parsing from cmd/podman/common to pkg/api/handlers. However it did not
remove the old code. Unfortunately  it moved the code from an outdated
version and did not update it before this commit was merged.
Therefore a couple of regressions were introduced. I manually compared
both versions and found three missing bugfixes.

I fixed the network test again that was changed in bce97a3b5d. We
want bridge as default even as rootless. Sine the test is not run as
rootless in CI the regression was not caught.
Also the no hosts test never worked since it was missing the import
check if the hosts file exists.

I don't think we can check for the volume parsing change since this only
works on windows/wsl.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-06-09 16:00:46 +02:00
Paul Holzinger 549bffe58d
shell completion: fix problems with container path completion
When you try to complete a path which exists and it is a file the
completion logic did not check the parent dir for other matching file
names. To fix that we have to check if the current completion is not a
dir and use the parent dir in this case.

See the updated test for an example why this is required.

Also make sure directories are correctly completed, the shell always
adds the "/" as suffix to signal the user that this path is a directory.
In this case we do not want to automatically add a space. When the path
is a regular file we want the space after the suggestion since there is
nothing more to complete.

This better matches the normal default shell completion.

The test were changed to not assume any particular ordering since this
is irrelevant for the shell completion script and there is no guarantee
about the ordering.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-06-09 13:46:55 +02:00
Karthik Elango 9a34b88c9a changed megabyte to mebibyte
In podman run --help, the message said megabyte, gigabyte, etc. In reality podman takes mebibytes, gibibytes, etc.

[CI:DOCS]

Signed-off-by: Karthik Elango <kelango@redhat.com>
2022-06-02 14:58:39 -04:00
OpenShift Merge Robot be527a358a
Merge pull request #14457 from Luap99/completion4
shell completion for paths inside the image/container
2022-06-02 14:02:11 -04:00
Paul Holzinger f2bbbd20da
shell completion for paths inside the image/container
Add shell completion for paths inside the container or image. Currently
podman run IMAGE [TAB] only uses the default shell completion which
suggests paths on the host. This is fine for some cases but often the
user wants a path which only exists in the image/container.

This commits adds support for that. Both podman create/run can now
complete the paths from the image, podman cp ctr:... now completes paths
from the actual container.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-06-02 17:23:22 +02:00
Daniel J Walsh fb163976f4
Support setting image_volume_mode in containers.conf
Fixes: https://github.com/containers/podman/issues/14230

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2022-05-26 14:16:26 -04:00
Daniel J Walsh 429b1f7685
Fix codespell errors
[NO NEW TESTS NEEDED]

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2022-05-25 05:56:29 -04:00
OpenShift Merge Robot 0f5c06dac5
Merge pull request #14330 from Luap99/completion3
cmd/podman/common/completion.go: fix FIXMEs
2022-05-24 14:24:46 -04:00
Paul Holzinger 70f147d019
cmd/podman/common/completion.go: fix FIXMEs
There is no good way to recommend labels for podman container runlabel.

Add the missing max-size log option. These are the only documented
options so the completion should not suggest something different.

Add proper --stop-signal completion. It will now complete all supported
signal names both upper and lowercase depending on the user input. Also
it work with and without the SIG prefix.

Fixing the TODOs in this file are more complicated since they describe
bigger features.

[NO NEW TESTS NEEDED]

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-05-24 17:56:37 +02:00
Valentin Rothberg d924c46dae autocomplete `podman search --filter`
Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2022-05-24 16:07:38 +02:00
OpenShift Merge Robot 40c2ea3a27
Merge pull request #14263 from Luap99/completion
shell completion --format: various improvements
2022-05-23 15:50:44 -04:00
OpenShift Merge Robot 1916fe22a9
Merge pull request #14272 from Luap99/completion2
shell completion: use more constants in the code
2022-05-19 18:45:03 -04:00
Paul Holzinger 9c9fc96d27
shell completion: use more constants instead of duplicating strings
It is better to just reuse the existing constants instead of duplicating
the strings.

[NO NEW TESTS NEEDED]

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-05-19 14:04:23 +02:00
Paul Holzinger 337f8b9d98
shell completion: podman save --format use all valid values
docker-archive was missing from the completions. To prevent duplication
use the same format list as podman save.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-05-19 14:04:22 +02:00
Paul Holzinger 74f70315b3
shell completion: update podman inspect --type options
Add all option that are supported by the podman inspect --type flag to
the completions. Also use the same constants instead of duplicating the
strings. In order to do this I had to move the definitions into the
common package to prevent an import cycle.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-05-19 14:04:22 +02:00
Paul Holzinger 318e95fd2a
shell completion: fix podman event --filter values
The completion suggested incorrect values for `podman events --filter
type=` . It should only list types not the event status. Also make sure
to use the constants instead of duplicating the strings.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-05-19 14:04:10 +02:00
Valentin Rothberg b22143267b linter: enable unconvert linter
Detects unneccessary type conversions and helps in keeping the code base
cleaner.

Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2022-05-19 13:59:15 +02:00
Paul Holzinger 3b0844f990
shell completion --format: add help to function with args
From a template users POV it is not importent when they use a struct field or
method. They only notice the difference when the function requires arguments.
So lets be nice and let the user know that this method requires arguments
via the help text.

This is how it now looks like when the completion descriptions are enabled
on bash:
```
$  bin/podman ps --format {{.Created.A
{{.Created.AddDate       (This is a function and requires 3 arguments)   {{.Created.After         (This is a function and requires 1 argument)
{{.Created.Add           (This is a function and requires 1 argument)    {{.Created.AppendFormat   (This is a function and requires 2 arguments)
```

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-05-18 18:28:22 +02:00
Paul Holzinger 3d8a1f9173
shell completion --format: support maps and functions
Currently we only support structs in a template string like this:
`{{.var1.test.` -> this meams that test must be a struct field on var1.

Now with this var1 and test could also be either a map or function which
returns a struct.

A actual example:
`podman container inspect  --format {{.NetworkSettings.Networks.netname.`
Now we can complete the struct fileds after netname. Note that this
cannot complete map keys since they are empty by default, so it is
impossible to get them in the completion logic.

Also this fixes a panic with embeeded nil structs
Fixes #14223

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-05-18 18:28:22 +02:00
Paul Holzinger ecd6edb191
shell completion --format: fix embedded struct handling
When a struct is embeeded it is possible that we end up with same names
but different types, this results in incorrect completions. The go
template logic always preferes the actual field/method name before the
one from the embedded one. Thefore the completion logic should do the
same. First get all method/fields names from the struct and then only
add the field names from the embedded struct when they are not already
present in the list.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-05-18 18:28:11 +02:00
Paul Holzinger 11ff5ffd3b
shell completion --format: only show usable methods
In a template you cann call function that are defined on a type, however
this is only useful if they return one value. If it returns more than
one the template cannot know what value it has to display.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-05-18 18:24:42 +02:00
Paul Holzinger eeeb88a667
shell completion --format: only show exported fields
go templates only support exported fields, so the completion logic must
filter the private fields out.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-05-18 18:24:41 +02:00
Paul Holzinger 9df3906553
shell completion --format: work with pointer functions
The completion logic currently suggest also the functions that are
defined for this type. However this did not work correctly when it was
defined as pointer to that type on not the actual type.

This commit fixes that problem. To test you can compare the difference
between `podman stats --format {{.[TAB]` with and without this commit.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-05-12 13:15:56 +02:00
Niall Crowe ccd576504e play kube default log driver
The default log driver is not used when using play kube
without --log-driver. The LogDriver function needs to
be called in order to use the default log driver.

fixes #13781
Signed-off-by: Niall Crowe <nicrowe@redhat.com>
2022-05-04 12:52:27 +01:00
Valentin Rothberg 4eff0c8cf2 pod: add exit policies
Add the notion of an "exit policy" to a pod.  This policy controls the
behaviour when the last container of pod exits.  Initially, there are
two policies:

 - "continue" : the pod continues running. This is the default policy
                when creating a pod.

 - "stop" : stop the pod when the last container exits. This is the
            default behaviour for `play kube`.

In order to implement the deferred stop of a pod, add a worker queue to
the libpod runtime.  The queue will pick up work items and in this case
helps resolve dead locks that would otherwise occur if we attempted to
stop a pod during container cleanup.

Note that the default restart policy of `play kube` is "Always".  Hence,
in order to really solve #13464, the YAML files must set a custom
restart policy; the tests use "OnFailure".

Fixes: #13464
Signed-off-by: Valentin Rothberg <vrothberg@redhat.com>
2022-05-02 13:29:59 +02:00
Paul Holzinger cb9a45630f
shell completion --format: use anonymous struct field once
We should not include the anonymous twice in the suggestions.

one example is `podman network ls --format {{.` it will also show
`{{.Network` but since Network is the actual struct all fields are
already shown so there is no need for it to be suggested.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-04-28 15:11:25 +02:00
Paul Holzinger f93ba587c6
shell completion --format: work with nil structs
AutocompleteFormat() takes the format struct as argument. Often the structs
are deeply nested and contain other structs. Up until now if there was a
pointer to a struct the logic was not able to get the field names from
that, simply because the pointer was nil. However it is possible to
create a new initialized type with reflect.New(). This allows us to
complete all struct fields/functions even when there nil pointers.
Therefore we can drop the extra initialization which was done by some
callers.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-04-28 15:11:21 +02:00
Paul Holzinger 51fbf3da9e
enable gocritic linter
The linter ensures a common code style.
- use switch/case instead of else if
- use if instead of switch/case for single case statement
- add space between comment and text
- detect the use of defer with os.Exit()
- use short form var += "..." instead of var = var + "..."
- detect problems with append()
```
newSlice := append(orgSlice, val)
```
  This could lead to nasty bugs because the orgSlice will be changed in
  place if it has enough capacity too hold the new elements. Thus we
  newSlice might not be a copy.

Of course most of the changes are just cosmetic and do not cause any
logic errors but I think it is a good idea to enforce a common style.
This should help maintainability.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-04-26 18:12:22 +02:00
Jason T. Greene b0d36f6351 Implements Windows volume/mount support
Based on WSL2 9p support: remaps windows paths to /mnt/<drive> locations for
both podman and Docker API clients.

Signed-off-by: Jason T. Greene <jason.greene@redhat.com>
2022-04-25 13:52:27 -05:00
Daniel J Walsh 80c0fceb24
Add support for --userns=nomap
From a security point of view, it would be nice to be able to map a
rootless usernamespace that does not use your own UID within the
container.

This would add protection against a hostile process escapping the
container and reading content in your homedir.

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2022-04-21 15:29:04 -04:00
Daniel J Walsh a2077e5eae
Add missing events to podman-events man page
[NO NEW TESTS NEEDED]

Signed-off-by: Daniel J Walsh <dwalsh@redhat.com>
2022-04-19 16:30:26 -04:00
OpenShift Merge Robot f2ab79cc02
Merge pull request #13868 from cdoern/cloneSwap
Fix Memory Swappiness passing in Container Clone
2022-04-15 05:54:05 -04:00
cdoern f38b03d375 Fix Memory Swappiness passing in Container Clone
`DefineCreateFlags` was excluding clone from using the memory-swappiness flag leading the value to be zero
when our deafult is -1. Rearrange the if/else to give clone these memory related options

resolves #13856

Signed-off-by: cdoern <cdoern@redhat.com>
2022-04-14 10:40:29 -04:00
Giuseppe Scrivano 3f2939c2ef
run, create: add --passwd-entry
It allows to customize the entry that is written to the `/etc/passwd`
file when --passwd is used.

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

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2022-04-14 11:22:13 +02:00