Commit Graph

2622 Commits

Author SHA1 Message Date
Valentin Rothberg
84381df810 swagger: v2: libpod/images/{import,load,pull}
Note: this commit is merely adding swagger documentation and the golang
stubs and types for the proposed endpoints.  The implementation will
follow in separate individual changes in the future.

The ultimate goal is to prevent the libpod API from exposing the rather
complex /images/create endpoint from Docker and split it into easier to
implement, use and comprehend endpoints with a more narrow focus.

 # Import

Add the v2 swagger documentation for the libpod/images/import endpoint.
Note that we have intend to have separate backend and not mix it up with
load since import allows for specifying a URL instead of a local
tarball.

 # Load

Complete the v2 swagger documentation for the libpod/images/load
endpoint.  Note that we are accounting for future plans to be able to
load multiple images from one oci/docker archive by returning an array
of image-load responses.

Also move the (incomplete) implementation of the generic endpoint to the
corresponding package and create a stub for the libpod handler, which
will be implemented once there's an agreement on the proposed API.

 # Pull

Add the v2 swagger documentation for the libpod/images/pull endpoint.
Similar to the load endpoint, we return an array since more than one
image can be pulled when the `all-tags` parameter is set.

Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
2020-02-04 10:45:54 +01:00
OpenShift Merge Robot
54926d1b03 Merge pull request #5061 from baude/apiv2swaggerexec
[CI:DOCS]add apiv2 endpoints for exec
2020-02-04 01:39:45 -08:00
Sujil02
68287ff8bd Add a binding test to check image tag and list commands.
Include testcase to validate tag api responses and check if
all the image instaces are shown list command.
Also, Update the binding process and the response

Signed-off-by: Sujil02 <sushah@redhat.com>
2020-02-03 15:33:28 -05:00
Jhon Honce
4d301c8c4f Update /_ping support
* Add swagger support and documentation
* Promote handler as there can only ever be one
* Update swagger tags

Between verbs and paths there are four endpoints for /_ping.  I've
attempted to document them well without four copies of the details.
Time will tell.

Clients will use the headers `Libpod-API-Version` and
`Libpod-Buildha-Version` to determine if they are connecting to a Podman
service or some other compatible engine.

Client calls GET(/_ping):
 * VARLINK engines will fail with error message
 * Compatible engines will return 200 without Libpod headers
 * Podman engines will return 200 and Libpod headers

Signed-off-by: Jhon Honce <jhonce@redhat.com>
2020-02-03 11:57:54 -07:00
Brent Baude
81296cba82 [CI:DOCS]add apiv2 endpoints for exec
add the openapi/swagger documentation for exec.  The subcommands added are create, inspect, resize, and start.

at the time of this writing, no structure is declared for the inspect response.  once the libpod work for this is complete, we can inherit and swaggerize it.

Signed-off-by: Brent Baude <bbaude@redhat.com>
2020-02-03 12:40:01 -06:00
OpenShift Merge Robot
781fc827c6 Merge pull request #5036 from vrothberg/fix-5034
sigproxy: return after closing the channel
2020-01-31 08:32:26 -08:00
Valentin Rothberg
868ee6db70 sigproxy: return after closing the channel
When stopping signal handling (e.g., to properly handle ^C) we are also
closing the signal channel.  We should really return from the go-routine
instead of continuing and risking double-closing the channel which leads
to a panic.

Fixes: #5034
Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
2020-01-31 16:13:00 +01:00
Brent Baude
f1eaccedfa fix longname handling for bindings
the api needs to account for image input where the image is encoded as a fqd image name.

Signed-off-by: Brent Baude <bbaude@redhat.com>
2020-01-31 08:38:25 -06:00
OpenShift Merge Robot
4f96b17ef5 Merge pull request #5020 from baude/bindingtestrootless
Bindingtestrootless
2020-01-30 15:24:51 -08:00
OpenShift Merge Robot
a3e14c87bb Merge pull request #5022 from ssbarnea/fix/validate
Assure validate includes lint
2020-01-30 15:02:18 -08:00
Brent Baude
616acf181d compat container names begin with /
when using the apiv2, containers names are preceeded with a /.  fixing this for inspect and listcontainers.

Signed-off-by: Brent Baude <bbaude@redhat.com>
2020-01-30 13:21:40 -06:00
Sorin Sbarnea
5190407619 Assure validate includes lint
Fixed issue where lint was not run on CI, so we missed to prevent regressions.

Signed-off-by: Sorin Sbarnea <ssbarnea@redhat.com>
2020-01-30 18:39:56 +00:00
Giuseppe Scrivano
1d9537e242 rootless: enable shortcut only for podman
disable joining automatically the user namespace if the process is not
podman.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-01-29 16:16:36 -06:00
Giuseppe Scrivano
f8067d70b0 test: honor TEMPDIR variable
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-01-29 16:16:23 -06:00
OpenShift Merge Robot
0e21fc8860 Merge pull request #5015 from baude/bindingtestfixes
apiv2 binding test fixes
2020-01-29 12:30:46 -08:00
Brent Baude
a8b4e986f7 apiv2 binding test fixes
a recent refactor in the bindings broke the tests.  quick fixes to get them working again.

Signed-off-by: Brent Baude <bbaude@redhat.com>
2020-01-29 12:41:39 -06:00
Brent Baude
dce5b6176c display file name of bad cni conf
if one of the cni conf files is badly formatted or cannot be loaded, we now display the error as well as the filename.

Fixes: #2909
Signed-off-by: Brent Baude <bbaude@redhat.com>
2020-01-28 16:21:59 -06:00
OpenShift Merge Robot
63b1656f4c Merge pull request #4993 from baude/playkubepull
honor pull policy in play kube
2020-01-28 12:35:12 -08:00
Brent Baude
31a1f44fe6 honor pull policy in play kube
When a container specification has a pull policy, we should honor it when recreating the pods/containers from yaml.  furthermore, ini kube, if a tag is :latest, then the always pull policy is automatically instituted.

Fixes: #4880

Signed-off-by: Brent Baude <bbaude@redhat.com>
2020-01-28 13:36:10 -06:00
OpenShift Merge Robot
3426c34b77 Merge pull request #4964 from openSUSE/apparmor-signals
apparmor: allow receiving of signals from 'podman kill'
2020-01-28 10:30:57 -08:00
Brent Baude
54587335be [CI:DOCS]Binding overhauls
Add binding for networks and begin documentation for binding methods for godoc.  Also, add major functions to their own subpackages so reduce the amount of of method confusion.  So instead of: bindings.ListImages(), we now do a [bindings].images.List().

Also, the connection is passed to each binding method via a context to allow for future growth.

Lastly, add first set of tests.  There are a couple of things to work out for rootless tests yet.

Signed-off-by: Brent Baude <bbaude@redhat.com>
2020-01-28 08:42:18 -06:00
Brent Baude
6181faa90d inspect image healthchecks
when a docker image has a defined healthcheck, it should be displayed with inspect.  this is only valid for docker images as oci images are not aware of healthchecks.

Fixes: #4799
Signed-off-by: Brent Baude <bbaude@redhat.com>
2020-01-27 08:36:25 -06:00
OpenShift Merge Robot
d07f611885 Merge pull request #4965 from baude/reviewcorrections3
APIv2 review corrections #3
2020-01-25 23:23:39 -08:00
Brent Baude
5da70b04dd APIv2 review corrections #3
The third pass of corrections for the APIv2.

Signed-off-by: Brent Baude <bbaude@redhat.com>
2020-01-25 15:09:09 -06:00
Valentin Rothberg
e3ad92f85d camelcase: fix lint reports
Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
2020-01-25 09:48:37 +01:00
Valentin Rothberg
ac8e6c9910 fork fatih/camelcase
faith/camelcase has been archived and is no longer maintained.
The package is sufficiently small and self-contained enough to
maintain it in libpod.

Fixes: #4783
Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
2020-01-25 09:42:48 +01:00
Jhon Honce
9a2e275abd Refactor time parsing to be more liberal in accepted values
* Added helper function to allow parsing from filters

Signed-off-by: Jhon Honce <jhonce@redhat.com>
2020-01-24 10:11:05 -07:00
OpenShift Merge Robot
81e59a742b Merge pull request #4958 from jwhonce/wip/filters
[CI:DOCS] Add query parameter converters for complex types
2020-01-24 06:56:55 -08:00
Sascha Grunert
c49bc1f176 apparmor: allow receiving of signals from 'podman kill'
In newer kernels, AppArmor will reject attempts to send signals to a
container because the signal originated from outside of that AppArmor
profile. Correct this by allowing all unconfined signals to be received.

Signed-off-by: Sascha Grunert <sgrunert@suse.com>
2020-01-24 15:34:47 +01:00
Jhon Honce
9634e7eef7 Add query parameter converters for complex types
* Add converter for URL query parameters of type map[string][]string
* Add converter for URL query parameters of type time.Time
* Added function to allocate and configure schema.Decoder for API use
* Updated API handlers to leverage new converters, and correct handler
  code for filter type

An encoding example for a client using filters:

  v := map[string][]string{
      "dangling": {"true"},
  }
  payload, err := jsoniter.MarshalToString(v)
  if err != nil {
    panic(err)
  }
  payload = "?filters=" + url.QueryEscape(payload)

Signed-off-by: Jhon Honce <jhonce@redhat.com>
2020-01-23 16:32:00 -07:00
Brent Baude
cf7be58b2c Review corrections pass #2
Add API review comments to correct documentation and endpoints.  Also, add a libpode prune method to reduce code duplication.  Only used right now for the API but when the remote client is wired, we will switch over there too.

Signed-off-by: Brent Baude <bbaude@redhat.com>
2020-01-23 11:58:26 -06:00
OpenShift Merge Robot
ac3a6b80b0 Merge pull request #4936 from jwhonce/wip/swagger2
[CI:DOCS] Enable swagger validation for each PR
2020-01-22 17:43:57 -05:00
Jhon Honce
da1186ae63 Enable swagger validation for each PR
* Update swagger:operation's to pass validation
* 'name' path parameter now used throughout API
* Added #/response/ok for 200 returns, TBD values have been replaced
  with legal values.

Signed-off-by: Jhon Honce <jhonce@redhat.com>
2020-01-22 15:17:14 -07:00
OpenShift Merge Robot
8b377a79c2 Merge pull request #4920 from openSUSE/cgroup2-super-magic
Use cgroupv2 super magic from golang.org/x/sys/unix
2020-01-22 15:54:32 -05:00
OpenShift Merge Robot
c40664d698 Merge pull request #4912 from jwhonce/wip/swagger
[CI:DOCS] Update build images
2020-01-22 12:53:57 -05:00
OpenShift Merge Robot
9f146b1b54 Merge pull request #4861 from giuseppe/add-cgroups-disabled-conmon
oci_conmon: do not create a cgroup under systemd
2020-01-22 17:00:48 +01:00
OpenShift Merge Robot
55abb6d3fa Merge pull request #4911 from giuseppe/rootless-set-containers-env
rootless: set C variables also on shortcut
2020-01-22 14:39:49 +01:00
baude
d4c2aaf38a Add service endpoint
add service endpoint for the new API.  Also supports the varlink
implementation.

Signed-off-by: baude <bbaude@redhat.com>

Refactor to allow developer more control of API server

* Add api.NewServerWithSettings() to create an API server with custom
  settings
* Add api.ListenUnix() to create a UDS net.Listener and setup UDS

Signed-off-by: Jhon Honce <jhonce@redhat.com>
Signed-off-by: baude <bbaude@redhat.com>

More service completion

Add podman service command that allows users to run either a RESTful or
varlink protocol API service.

Addition of docs and RESTful listening.

Signed-off-by: baude <bbaude@redhat.com>
Signed-off-by: Brent Baude <bbaude@redhat.com>
2020-01-21 16:35:45 -06:00
Jhon Honce
68896b18e5 Update build images
* Add swagger annotations for all the query and response parameters
  for buildimages
* Improve populating the BuildOptions struct
* Improve swagger.json generation, removing tags.xml and move tag
  definiation into the swagger:meta block
* Update Makefile to be more robust, added target for validation

* TODO once validation passes add that step to the generation step

Signed-off-by: Jhon Honce <jhonce@redhat.com>
2020-01-21 14:19:42 -07:00
baude
78e4e83e92 [CI:DOCS]First pass at review comments
Tackling the first comments in the review pass.  More to come.

Signed-off-by: baude <bbaude@redhat.com>
Signed-off-by: Brent Baude <bbaude@redhat.com>
2020-01-21 12:50:41 -06:00
Sascha Grunert
2511b50800 Use cgroupv2 super magic from golang.org/x/sys/unix
We can use this constant from the already existing sys/unix package
instead of defining it by our own.

Signed-off-by: Sascha Grunert <sgrunert@suse.com>
2020-01-21 16:08:29 +01:00
Brent Baude
f432999023 [CI:DOCS] Add logo and dev statement
Add statement to the info section stating this is experimental only for now.  Also add the podman logo to the right-hand navigation.

Signed-off-by: Brent Baude <bbaude@redhat.com>
2020-01-20 13:59:55 -06:00
Giuseppe Scrivano
ab7744d3c1 rootless: set C variables also on shortcut
make sure the rootless env variables are set also when we are joining
directly the user+mount namespace without creating a new process.

It is required by pkg/unshare in containers/common.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-01-20 16:42:45 +01:00
baude
9be6f30a42 post-process swagger yaml for publish
Signed-off-by: baude <bbaude@redhat.com>
Signed-off-by: Chris Evich <cevich@redhat.com>
2020-01-17 15:41:33 -05:00
OpenShift Merge Robot
74b89da27c Merge pull request #4837 from mheon/rework_attach
Add an API for Attach over HTTP API
2020-01-16 21:10:53 +01:00
Matthew Heon
ac47e80b07 Add an API for Attach over HTTP API
The new APIv2 branch provides an HTTP-based remote API to Podman.
The requirements of this are, unfortunately, incompatible with
the existing Attach API. For non-terminal attach, we need append
a header to what was copied from the container, to multiplex
STDOUT and STDERR; to do this with the old API, we'd need to copy
into an intermediate buffer first, to handle the headers.

To avoid this, provide a new API to handle all aspects of
terminal and non-terminal attach, including closing the hijacked
HTTP connection. This might be a bit too specific, but for now,
it seems to be the simplest approach.

At the same time, add a Resize endpoint. This needs to be a
separate endpoint, so our existing channel approach does not work
here.

I wanted to rework the rest of attach at the same time (some
parts of it, particularly how we start the Attach session and how
we do resizing, are (in my opinion) handled much better here.
That may still be on the table, but I wanted to avoid breaking
existing APIs in this already massive change.

Signed-off-by: Matthew Heon <matthew.heon@pm.me>
2020-01-16 13:49:21 -05:00
Giuseppe Scrivano
70236f56f9 systemdgen: specify --cgroups=disabled-conmon for --new
Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-01-16 18:59:09 +01:00
Giuseppe Scrivano
ba0a6f34e3 podman: add new option --cgroups=no-conmon
it allows to disable cgroups creation only for the conmon process.

A new cgroup is created for the container payload.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
2020-01-16 18:56:51 +01:00
Valentin Rothberg
9d3667c2f0 systemdgen: add --ignore flag to generic services
The --ignore flag lets Podman ignore errors when a specified container
does not exist (anymore).  That's a nice addition to generic services
generated via the --new flag.  Those services create new containers and
can hence allows user to manually remove a container; may it only be by
accident.

The important part of using the --ignore flag is that Podman will exit 0
which plays nicer with most restart policies; a non-zero exit may yield
systemd to restart the entire service which is arguably wrong if the
user manually deletes the container.

If desired, users can still alter the generated files.

Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
2020-01-16 16:36:21 +01:00
Valentin Rothberg
c3d90179dc make binaries: include service
Include the service into make binaries such that we're it's being build
in the CI.

Signed-off-by: Valentin Rothberg <rothberg@redhat.com>
2020-01-16 14:05:39 +01:00