summaryrefslogtreecommitdiff
path: root/pkg/api/server
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/api/server')
-rw-r--r--pkg/api/server/register_exec.go329
-rw-r--r--pkg/api/server/register_images.go82
-rw-r--r--pkg/api/server/register_ping.go60
-rw-r--r--pkg/api/server/server.go1
-rw-r--r--pkg/api/server/swagger.go9
5 files changed, 464 insertions, 17 deletions
diff --git a/pkg/api/server/register_exec.go b/pkg/api/server/register_exec.go
new file mode 100644
index 000000000..dbf04dc19
--- /dev/null
+++ b/pkg/api/server/register_exec.go
@@ -0,0 +1,329 @@
+package server
+
+import (
+ "net/http"
+
+ "github.com/containers/libpod/pkg/api/handlers"
+ "github.com/gorilla/mux"
+)
+
+func (s *APIServer) registerExecHandlers(r *mux.Router) error {
+ // swagger:operation POST /containers/{name}/create compat createExec
+ // ---
+ // tags:
+ // - exec (compat)
+ // summary: Create an exec instance
+ // description: Run a command inside a running container.
+ // parameters:
+ // - in: path
+ // name: name
+ // type: string
+ // required: true
+ // description: name of container
+ // - in: body
+ // name: control
+ // description: Attributes for create
+ // schema:
+ // type: object
+ // properties:
+ // AttachStdin:
+ // type: boolean
+ // description: Attach to stdin of the exec command
+ // AttachStdout:
+ // type: boolean
+ // description: Attach to stdout of the exec command
+ // AttachStderr:
+ // type: boolean
+ // description: Attach to stderr of the exec command
+ // DetachKeys:
+ // type: string
+ // description: |
+ // "Override the key sequence for detaching a container. Format is a single character [a-Z] or ctrl-<value> where <value> is one of: a-z, @, ^, [, , or _."
+ // Tty:
+ // type: boolean
+ // description: Allocate a pseudo-TTY
+ // Env:
+ // type: array
+ // description: A list of environment variables in the form ["VAR=value", ...]
+ // items:
+ // type: string
+ // Cmd:
+ // type: array
+ // description: Command to run, as a string or array of strings.
+ // items:
+ // type: string
+ // Privileged:
+ // type: boolean
+ // default: false
+ // description: Runs the exec process with extended privileges
+ // User:
+ // type: string
+ // description: |
+ // "The user, and optionally, group to run the exec process inside the container. Format is one of: user, user:group, uid, or uid:gid."
+ // WorkingDir:
+ // type: string
+ // description: The working directory for the exec process inside the container.
+ // produces:
+ // - application/json
+ // responses:
+ // 201:
+ // description: no error
+ // 404:
+ // $ref: "#/responses/NoSuchContainer"
+ // 409:
+ // description: container is paused
+ // 500:
+ // $ref: "#/responses/InternalError"
+ r.Handle(VersionedPath("/containers/{name}/create"), APIHandler(s.Context, handlers.CreateExec)).Methods(http.MethodPost)
+ // swagger:operation POST /exec/{id}/start compat startExec
+ // ---
+ // tags:
+ // - exec (compat)
+ // summary: Start an exec instance
+ // description: Starts a previously set up exec instance. If detach is true, this endpoint returns immediately after starting the command. Otherwise, it sets up an interactive session with the command.
+ // parameters:
+ // - in: path
+ // name: id
+ // type: string
+ // required: true
+ // description: Exec instance ID
+ // - in: body
+ // name: control
+ // description: Attributes for start
+ // schema:
+ // type: object
+ // properties:
+ // Detach:
+ // type: boolean
+ // description: Detach from the command
+ // Tty:
+ // type: boolean
+ // description: Allocate a pseudo-TTY
+ // produces:
+ // - application/json
+ // responses:
+ // 200:
+ // description: no error
+ // 404:
+ // $ref: "#/responses/NoSuchExecInstance"
+ // 409:
+ // description: container is stopped or paused
+ // 500:
+ // $ref: "#/responses/InternalError"
+ r.Handle(VersionedPath("/exec/{id}/start"), APIHandler(s.Context, handlers.StartExec)).Methods(http.MethodPost)
+ // swagger:operation POST /exec/{id}/resize compat resizeExec
+ // ---
+ // tags:
+ // - exec (compat)
+ // summary: Resize an exec instance
+ // description: |
+ // Resize the TTY session used by an exec instance. This endpoint only works if tty was specified as part of creating and starting the exec instance.
+ // parameters:
+ // - in: path
+ // name: id
+ // type: string
+ // required: true
+ // description: Exec instance ID
+ // - in: query
+ // name: h
+ // type: integer
+ // description: Height of the TTY session in characters
+ // - in: query
+ // name: w
+ // type: integer
+ // description: Width of the TTY session in characters
+ // produces:
+ // - application/json
+ // responses:
+ // 201:
+ // description: no error
+ // 404:
+ // $ref: "#/responses/NoSuchExecInstance"
+ // 500:
+ // $ref: "#/responses/InternalError"
+ r.Handle(VersionedPath("/exec/{id}/resize"), APIHandler(s.Context, handlers.ResizeExec)).Methods(http.MethodPost)
+ // swagger:operation GET /exec/{id}/inspect compat inspectExec
+ // ---
+ // tags:
+ // - exec (compat)
+ // summary: Inspect an exec instance
+ // description: Return low-level information about an exec instance.
+ // parameters:
+ // - in: path
+ // name: id
+ // type: string
+ // required: true
+ // description: Exec instance ID
+ // produces:
+ // - application/json
+ // responses:
+ // 200:
+ // description: no error
+ // 404:
+ // $ref: "#/responses/NoSuchExecInstance"
+ // 500:
+ // $ref: "#/responses/InternalError"
+ r.Handle(VersionedPath("/exec/{id}/json"), APIHandler(s.Context, handlers.InspectExec)).Methods(http.MethodGet)
+
+ /*
+ libpod api follows
+ */
+
+ // swagger:operation POST /libpod/containers/{name}/create libpod libpodCreateExec
+ // ---
+ // tags:
+ // - exec
+ // summary: Create an exec instance
+ // description: Run a command inside a running container.
+ // parameters:
+ // - in: path
+ // name: name
+ // type: string
+ // required: true
+ // description: name of container
+ // - in: body
+ // name: control
+ // description: Attributes for create
+ // schema:
+ // type: object
+ // properties:
+ // AttachStdin:
+ // type: boolean
+ // description: Attach to stdin of the exec command
+ // AttachStdout:
+ // type: boolean
+ // description: Attach to stdout of the exec command
+ // AttachStderr:
+ // type: boolean
+ // description: Attach to stderr of the exec command
+ // DetachKeys:
+ // type: string
+ // description: |
+ // "Override the key sequence for detaching a container. Format is a single character [a-Z] or ctrl-<value> where <value> is one of: a-z, @, ^, [, , or _."
+ // Tty:
+ // type: boolean
+ // description: Allocate a pseudo-TTY
+ // Env:
+ // type: array
+ // description: A list of environment variables in the form ["VAR=value", ...]
+ // items:
+ // type: string
+ // Cmd:
+ // type: array
+ // description: Command to run, as a string or array of strings.
+ // items:
+ // type: string
+ // Privileged:
+ // type: boolean
+ // default: false
+ // description: Runs the exec process with extended privileges
+ // User:
+ // type: string
+ // description: |
+ // "The user, and optionally, group to run the exec process inside the container. Format is one of: user, user:group, uid, or uid:gid."
+ // WorkingDir:
+ // type: string
+ // description: The working directory for the exec process inside the container.
+ // produces:
+ // - application/json
+ // responses:
+ // 201:
+ // description: no error
+ // 404:
+ // $ref: "#/responses/NoSuchContainer"
+ // 409:
+ // description: container is paused
+ // 500:
+ // $ref: "#/responses/InternalError"
+ r.Handle(VersionedPath("/libpod/containers/{name}/create"), APIHandler(s.Context, handlers.CreateExec)).Methods(http.MethodPost)
+ // swagger:operation POST /libpod/exec/{id}/start libpod libpodStartExec
+ // ---
+ // tags:
+ // - exec
+ // summary: Start an exec instance
+ // description: Starts a previously set up exec instance. If detach is true, this endpoint returns immediately after starting the command. Otherwise, it sets up an interactive session with the command.
+ // parameters:
+ // - in: path
+ // name: id
+ // type: string
+ // required: true
+ // description: Exec instance ID
+ // - in: body
+ // name: control
+ // description: Attributes for start
+ // schema:
+ // type: object
+ // properties:
+ // Detach:
+ // type: boolean
+ // description: Detach from the command
+ // Tty:
+ // type: boolean
+ // description: Allocate a pseudo-TTY
+ // produces:
+ // - application/json
+ // responses:
+ // 200:
+ // description: no error
+ // 404:
+ // $ref: "#/responses/NoSuchExecInstance"
+ // 409:
+ // description: container is stopped or paused
+ // 500:
+ // $ref: "#/responses/InternalError"
+ r.Handle(VersionedPath("/libpod/exec/{id}/start"), APIHandler(s.Context, handlers.StartExec)).Methods(http.MethodPost)
+ // swagger:operation POST /libpod/exec/{id}/resize libpod libpodResizeExec
+ // ---
+ // tags:
+ // - exec
+ // summary: Resize an exec instance
+ // description: |
+ // Resize the TTY session used by an exec instance. This endpoint only works if tty was specified as part of creating and starting the exec instance.
+ // parameters:
+ // - in: path
+ // name: id
+ // type: string
+ // required: true
+ // description: Exec instance ID
+ // - in: query
+ // name: h
+ // type: integer
+ // description: Height of the TTY session in characters
+ // - in: query
+ // name: w
+ // type: integer
+ // description: Width of the TTY session in characters
+ // produces:
+ // - application/json
+ // responses:
+ // 201:
+ // description: no error
+ // 404:
+ // $ref: "#/responses/NoSuchExecInstance"
+ // 500:
+ // $ref: "#/responses/InternalError"
+ r.Handle(VersionedPath("/libpod/exec/{id}/resize"), APIHandler(s.Context, handlers.ResizeExec)).Methods(http.MethodPost)
+ // swagger:operation GET /libpod/exec/{id}/inspect libpod libpodInspectExec
+ // ---
+ // tags:
+ // - exec
+ // summary: Inspect an exec instance
+ // description: Return low-level information about an exec instance.
+ // parameters:
+ // - in: path
+ // name: id
+ // type: string
+ // required: true
+ // description: Exec instance ID
+ // produces:
+ // - application/json
+ // responses:
+ // 200:
+ // description: no error
+ // 404:
+ // $ref: "#/responses/NoSuchExecInstance"
+ // 500:
+ // $ref: "#/responses/InternalError"
+ r.Handle(VersionedPath("/libpod/exec/{id}/json"), APIHandler(s.Context, handlers.InspectExec)).Methods(http.MethodGet)
+ return nil
+}
diff --git a/pkg/api/server/register_images.go b/pkg/api/server/register_images.go
index f1cc0574c..2959e604a 100644
--- a/pkg/api/server/register_images.go
+++ b/pkg/api/server/register_images.go
@@ -107,7 +107,7 @@ func (s *APIServer) registerImagesHandlers(r *mux.Router) error {
// description: no error
// 500:
// $ref: '#/responses/InternalError'
- r.Handle(VersionedPath("/images/load"), APIHandler(s.Context, libpod.ImportImage)).Methods(http.MethodPost)
+ r.Handle(VersionedPath("/images/load"), APIHandler(s.Context, generic.LoadImages)).Methods(http.MethodPost)
// swagger:operation POST /images/prune compat pruneImages
// ---
// tags:
@@ -300,8 +300,9 @@ func (s *APIServer) registerImagesHandlers(r *mux.Router) error {
// swagger:operation POST /commit/ compat commitContainer
// ---
// tags:
- // - commit (compat)
- // summary: Create a new image from a container
+ // - containers (compat)
+ // summary: New Image
+ // description: Create a new image from a container
// parameters:
// - in: query
// name: container
@@ -630,18 +631,14 @@ func (s *APIServer) registerImagesHandlers(r *mux.Router) error {
// 500:
// $ref: '#/responses/InternalError'
r.Handle(VersionedPath("/libpod/images/json"), APIHandler(s.Context, libpod.GetImages)).Methods(http.MethodGet)
- // swagger:operation POST /libpod/images/load libpod libpodImportImage
+ // swagger:operation POST /libpod/images/load libpod libpodImagesLoad
// ---
// tags:
// - images
- // summary: Import image
- // description: Load a set of images and tags into a repository.
+ // summary: Load image
+ // description: Load an image (oci-archive or docker-archive) stream.
// parameters:
// - in: query
- // name: quiet
- // type: boolean
- // description: not supported
- // - in: query
// name: change
// description: "Apply the following possible instructions to the created image (default []): CMD | ENTRYPOINT | ENV | EXPOSE | LABEL | STOPSIGNAL | USER | VOLUME | WORKDIR. JSON encoded string"
// type: string
@@ -659,10 +656,71 @@ func (s *APIServer) registerImagesHandlers(r *mux.Router) error {
// - application/json
// responses:
// 200:
- // description: no error
+ // $ref: "#/response/LibpodImagesLoadResponse"
+ // 500:
+ // $ref: '#/responses/InternalError'
+ r.Handle(VersionedPath("/libpod/images/load"), APIHandler(s.Context, libpod.ImagesLoad)).Methods(http.MethodPost)
+ // swagger:operation POST /libpod/images/import libpod libpodImagesImport
+ // ---
+ // tags:
+ // - images
+ // summary: Import image
+ // description: Import a previosly exported tarball as an image.
+ // parameters:
+ // - in: query
+ // name: change
+ // description: "Apply the following possible instructions to the created image (default []): CMD | ENTRYPOINT | ENV | EXPOSE | LABEL | STOPSIGNAL | USER | VOLUME | WORKDIR. JSON encoded string"
+ // type: string
+ // - in: query
+ // name: message
+ // description: Set commit message for imported image
+ // type: string
+ // - in: query
+ // name: url
+ // description: Specify a URL instead of a tarball
+ // type: bool
+ // - in: body
+ // name: request
+ // description: Tarball of (or URL to) container image
+ // required: true
+ // schema:
+ // type: string
+ // produces:
+ // - application/json
+ // responses:
+ // 200:
+ // $ref: "#/response/LibpodImagesImportResponse"
+ // 500:
+ // $ref: '#/responses/InternalError'
+ r.Handle(VersionedPath("/libpod/images/import"), APIHandler(s.Context, libpod.ImagesImport)).Methods(http.MethodPost)
+ // swagger:operation GET /libpod/images/pull libpod libpodImagesPull
+ // ---
+ // tags:
+ // - images
+ // summary: Import image
+ // description: Import a previosly exported image as a tarball.
+ // parameters:
+ // - in: query
+ // name: reference
+ // description: Mandatory reference to the image (e.g., quay.io/image/name:tag)/
+ // type: string
+ // - in: query
+ // name: credentials
+ // description: username:password for the registry.
+ // type: string
+ // - in: query
+ // name: tls-verify
+ // description: Require TLS verification.
+ // type: bool
+ // default: true
+ // produces:
+ // - application/json
+ // responses:
+ // 200:
+ // $ref: "#/response/LibpodImagesPullResponse"
// 500:
// $ref: '#/responses/InternalError'
- r.Handle(VersionedPath("/libpod/images/load"), APIHandler(s.Context, libpod.ImportImage)).Methods(http.MethodPost)
+ r.Handle(VersionedPath("/libpod/images/pull"), APIHandler(s.Context, libpod.ImagesPull)).Methods(http.MethodPost)
// swagger:operation POST /libpod/images/prune libpod libpodPruneImages
// ---
// tags:
diff --git a/pkg/api/server/register_ping.go b/pkg/api/server/register_ping.go
index 4956f9822..086e674a1 100644
--- a/pkg/api/server/register_ping.go
+++ b/pkg/api/server/register_ping.go
@@ -3,15 +3,65 @@ package server
import (
"net/http"
- "github.com/containers/libpod/pkg/api/handlers/generic"
+ "github.com/containers/libpod/pkg/api/handlers"
"github.com/gorilla/mux"
)
func (s *APIServer) registerPingHandlers(r *mux.Router) error {
- r.Handle("/_ping", APIHandler(s.Context, generic.PingGET)).Methods(http.MethodGet)
- r.Handle("/_ping", APIHandler(s.Context, generic.PingHEAD)).Methods("HEAD")
- // libpod
- r.Handle("/libpod/_ping", APIHandler(s.Context, generic.PingGET)).Methods(http.MethodGet)
+ r.Handle("/_ping", APIHandler(s.Context, handlers.Ping)).Methods(http.MethodGet)
+ r.Handle("/_ping", APIHandler(s.Context, handlers.Ping)).Methods(http.MethodHead)
+
+ // swagger:operation GET /libpod/_ping libpod libpodPingGet
+ // ---
+ // summary: Ping service
+ // description: |
+ // Return protocol information in response headers.
+ // `HEAD /libpod/_ping` is also supported.
+ // `/_ping` is available for compatibility with other engines.
+ // tags:
+ // - system (compat)
+ // - system
+ // produces:
+ // - text/plain
+ // responses:
+ // 200:
+ // description: Success
+ // schema:
+ // description: OK
+ // type: string
+ // example: "OK"
+ // headers:
+ // API-Version:
+ // type: string
+ // description: Max compatibility API Version the server supports
+ // BuildKit-Version:
+ // type: string
+ // description: Default version of docker image builder
+ // Docker-Experimental:
+ // type: boolean
+ // description: If the server is running with experimental mode enabled, always true
+ // Cache-Control:
+ // type: string
+ // description: always no-cache
+ // Pragma:
+ // type: string
+ // description: always no-cache
+ // Libpod-API-Version:
+ // type: string
+ // description: |
+ // Max Podman API Version the server supports.
+ // Available if service is backed by Podman, therefore may be used to
+ // determine if talking to Podman engine or another engine
+ // Libpod-Buildha-Version:
+ // type: string
+ // description: |
+ // Default version of libpod image builder.
+ // Available if service is backed by Podman, therefore may be used to
+ // determine if talking to Podman engine or another engine
+ // 500:
+ // $ref: "#/responses/InternalError"
+ r.Handle("/libpod/_ping", APIHandler(s.Context, handlers.Ping)).Methods(http.MethodGet)
+ r.Handle("/libpod/_ping", APIHandler(s.Context, handlers.Ping)).Methods(http.MethodHead)
return nil
}
diff --git a/pkg/api/server/server.go b/pkg/api/server/server.go
index d030961cb..7bb0f5481 100644
--- a/pkg/api/server/server.go
+++ b/pkg/api/server/server.go
@@ -105,6 +105,7 @@ func newServer(runtime *libpod.Runtime, duration time.Duration, listener *net.Li
server.RegisterAuthHandlers,
server.RegisterContainersHandlers,
server.RegisterDistributionHandlers,
+ server.registerExecHandlers,
server.registerHealthCheckHandlers,
server.registerImagesHandlers,
server.registerInfoHandlers,
diff --git a/pkg/api/server/swagger.go b/pkg/api/server/swagger.go
index 5098390bc..fc409d816 100644
--- a/pkg/api/server/swagger.go
+++ b/pkg/api/server/swagger.go
@@ -23,6 +23,15 @@ type swagErrNoSuchContainer struct {
}
}
+// No such exec instance
+// swagger:response NoSuchExecInstance
+type swagErrNoSuchExecInstance struct {
+ // in:body
+ Body struct {
+ utils.ErrorModel
+ }
+}
+
// No such volume
// swagger:response NoSuchVolume
type swagErrNoSuchVolume struct {