mirror of
https://github.com/containers/podman.git
synced 2025-06-17 23:20:59 +08:00

Value of `--force-compression` should be already `true` is `--compression-format` is selected otherwise let users decide. Signed-off-by: Aditya R <arajan@redhat.com>
333 lines
10 KiB
Go
333 lines
10 KiB
Go
package server
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/containers/podman/v4/pkg/api/handlers/libpod"
|
|
"github.com/gorilla/mux"
|
|
)
|
|
|
|
func (s *APIServer) registerManifestHandlers(r *mux.Router) error {
|
|
v3 := r.PathPrefix("/v{version:[0-3][0-9A-Za-z.-]*}/libpod/manifests").Subrouter()
|
|
v4 := r.PathPrefix("/v{version:[4-9][0-9A-Za-z.-]*}/libpod/manifests").Subrouter()
|
|
// swagger:operation POST /libpod/manifests/{name}/push manifests ManifestPushV3Libpod
|
|
// ---
|
|
// summary: Push manifest to registry
|
|
// description: |
|
|
// Push a manifest list or image index to a registry
|
|
//
|
|
// Deprecated: As of 4.0.0 use ManifestPushLibpod instead
|
|
// produces:
|
|
// - application/json
|
|
// parameters:
|
|
// - in: path
|
|
// name: name
|
|
// type: string
|
|
// required: true
|
|
// description: the name or ID of the manifest
|
|
// - in: query
|
|
// name: destination
|
|
// type: string
|
|
// required: true
|
|
// description: the destination for the manifest
|
|
// - in: query
|
|
// name: all
|
|
// description: push all images
|
|
// type: boolean
|
|
// responses:
|
|
// 200:
|
|
// schema:
|
|
// $ref: "#/definitions/IDResponse"
|
|
// 400:
|
|
// $ref: "#/responses/badParamError"
|
|
// 404:
|
|
// $ref: "#/responses/manifestNotFound"
|
|
// 500:
|
|
// $ref: "#/responses/internalError"
|
|
v3.Handle("/{name}/push", s.APIHandler(libpod.ManifestPushV3)).Methods(http.MethodPost)
|
|
// swagger:operation POST /libpod/manifests/{name}/registry/{destination} manifests ManifestPushLibpod
|
|
// ---
|
|
// summary: Push manifest list to registry
|
|
// description: |
|
|
// Push a manifest list or image index to the named registry
|
|
//
|
|
// As of v4.0.0
|
|
// produces:
|
|
// - application/json
|
|
// parameters:
|
|
// - in: path
|
|
// name: name
|
|
// type: string
|
|
// required: true
|
|
// description: the name or ID of the manifest list
|
|
// - in: query
|
|
// name: addCompression
|
|
// required: false
|
|
// description: add existing instances with requested compression algorithms to manifest list
|
|
// type: array
|
|
// items:
|
|
// type: string
|
|
// - in: query
|
|
// name: forceCompressionFormat
|
|
// description: Enforce compressing the layers with the specified --compression and do not reuse differently compressed blobs on the registry.
|
|
// type: boolean
|
|
// default: false
|
|
// - in: path
|
|
// name: destination
|
|
// type: string
|
|
// required: true
|
|
// description: the registry for the manifest list
|
|
// - in: query
|
|
// name: all
|
|
// description: push all images
|
|
// type: boolean
|
|
// default: true
|
|
// - in: query
|
|
// name: tlsVerify
|
|
// type: boolean
|
|
// default: true
|
|
// description: Require HTTPS and verify signatures when contacting registries.
|
|
// - in: query
|
|
// name: quiet
|
|
// description: "silences extra stream data on push"
|
|
// type: boolean
|
|
// default: true
|
|
// responses:
|
|
// 200:
|
|
// schema:
|
|
// $ref: "#/definitions/IDResponse"
|
|
// 400:
|
|
// $ref: "#/responses/badParamError"
|
|
// 404:
|
|
// $ref: "#/responses/manifestNotFound"
|
|
// 500:
|
|
// $ref: "#/responses/internalError"
|
|
v4.Handle("/{name:.*}/registry/{destination:.*}", s.APIHandler(libpod.ManifestPush)).Methods(http.MethodPost)
|
|
// swagger:operation POST /libpod/manifests manifests ManifestCreateLibpod
|
|
// ---
|
|
// summary: Create
|
|
// description: Create a manifest list
|
|
// produces:
|
|
// - application/json
|
|
// parameters:
|
|
// - in: query
|
|
// name: name
|
|
// type: string
|
|
// description: manifest list or index name to create
|
|
// required: true
|
|
// - in: query
|
|
// name: images
|
|
// type: string
|
|
// required: true
|
|
// description: |
|
|
// One or more names of an image or a manifest list. Repeat parameter as needed.
|
|
//
|
|
// Support for multiple images, as of version 4.0.0
|
|
// Alias of `image` is support for compatibility with < 4.0.0
|
|
// Response status code is 200 with < 4.0.0 for compatibility
|
|
// - in: query
|
|
// name: all
|
|
// type: boolean
|
|
// description: add all contents if given list
|
|
// - in: query
|
|
// name: amend
|
|
// type: boolean
|
|
// description: modify an existing list if one with the desired name already exists
|
|
// - in: body
|
|
// name: options
|
|
// description: options for new manifest
|
|
// required: false
|
|
// schema:
|
|
// $ref: "#/definitions/ManifestModifyOptions"
|
|
// responses:
|
|
// 201:
|
|
// schema:
|
|
// $ref: "#/definitions/IDResponse"
|
|
// 400:
|
|
// $ref: "#/responses/badParamError"
|
|
// 404:
|
|
// $ref: "#/responses/imageNotFound"
|
|
// 500:
|
|
// $ref: "#/responses/internalError"
|
|
v3.Handle("/create", s.APIHandler(libpod.ManifestCreate)).Methods(http.MethodPost)
|
|
v4.Handle("/{name:.*}", s.APIHandler(libpod.ManifestCreate)).Methods(http.MethodPost)
|
|
// swagger:operation GET /libpod/manifests/{name}/exists manifests ManifestExistsLibpod
|
|
// ---
|
|
// summary: Exists
|
|
// description: |
|
|
// Check if manifest list exists
|
|
//
|
|
// Note: There is no contract that the manifest list will exist for a follow-on operation
|
|
// parameters:
|
|
// - in: path
|
|
// name: name
|
|
// type: string
|
|
// required: true
|
|
// description: the name or ID of the manifest list
|
|
// produces:
|
|
// - application/json
|
|
// responses:
|
|
// 204:
|
|
// description: manifest list exists
|
|
// 404:
|
|
// $ref: '#/responses/manifestNotFound'
|
|
// 500:
|
|
// $ref: '#/responses/internalError'
|
|
v3.Handle("/{name:.*}/exists", s.APIHandler(libpod.ManifestExists)).Methods(http.MethodGet)
|
|
v4.Handle("/{name:.*}/exists", s.APIHandler(libpod.ManifestExists)).Methods(http.MethodGet)
|
|
// swagger:operation GET /libpod/manifests/{name}/json manifests ManifestInspectLibpod
|
|
// ---
|
|
// summary: Inspect
|
|
// description: Display attributes of given manifest list
|
|
// produces:
|
|
// - application/json
|
|
// parameters:
|
|
// - in: path
|
|
// name: name
|
|
// type: string
|
|
// required: true
|
|
// description: the name or ID of the manifest list
|
|
// - in: query
|
|
// name: tlsVerify
|
|
// type: boolean
|
|
// default: true
|
|
// description: Require HTTPS and verify signatures when contacting registries.
|
|
// responses:
|
|
// 200:
|
|
// $ref: "#/responses/manifestInspect"
|
|
// 404:
|
|
// $ref: "#/responses/manifestNotFound"
|
|
// 500:
|
|
// $ref: "#/responses/internalError"
|
|
v3.Handle("/{name:.*}/json", s.APIHandler(libpod.ManifestInspect)).Methods(http.MethodGet)
|
|
v4.Handle("/{name:.*}/json", s.APIHandler(libpod.ManifestInspect)).Methods(http.MethodGet)
|
|
// swagger:operation PUT /libpod/manifests/{name} manifests ManifestModifyLibpod
|
|
// ---
|
|
// summary: Modify manifest list
|
|
// description: |
|
|
// Add/Remove an image(s) to a manifest list
|
|
//
|
|
// Note: operations are not atomic when multiple Images are provided.
|
|
//
|
|
// As of v4.0.0
|
|
// produces:
|
|
// - application/json
|
|
// parameters:
|
|
// - in: path
|
|
// name: name
|
|
// type: string
|
|
// required: true
|
|
// description: the name or ID of the manifest
|
|
// - in: query
|
|
// name: tlsVerify
|
|
// type: boolean
|
|
// default: true
|
|
// description: Require HTTPS and verify signatures when contacting registries.
|
|
// - in: body
|
|
// name: options
|
|
// description: options for mutating a manifest
|
|
// required: true
|
|
// schema:
|
|
// $ref: "#/definitions/ManifestModifyOptions"
|
|
// responses:
|
|
// 200:
|
|
// schema:
|
|
// $ref: "#/definitions/ManifestModifyReport"
|
|
// 404:
|
|
// $ref: "#/responses/manifestNotFound"
|
|
// 400:
|
|
// $ref: "#/responses/badParamError"
|
|
// 409:
|
|
// description: Operation had partial success, both Images and Errors may have members
|
|
// schema:
|
|
// $ref: "#/definitions/ManifestModifyReport"
|
|
// 500:
|
|
// $ref: "#/responses/internalError"
|
|
v4.Handle("/{name:.*}", s.APIHandler(libpod.ManifestModify)).Methods(http.MethodPut)
|
|
// swagger:operation POST /libpod/manifests/{name}/add manifests ManifestAddLibpod
|
|
// ---
|
|
// summary: Add image
|
|
// description: |
|
|
// Add an image to a manifest list
|
|
//
|
|
// Deprecated: As of 4.0.0 use ManifestModifyLibpod instead
|
|
// produces:
|
|
// - application/json
|
|
// parameters:
|
|
// - in: path
|
|
// name: name
|
|
// type: string
|
|
// required: true
|
|
// description: the name or ID of the manifest
|
|
// - in: body
|
|
// name: options
|
|
// description: options for creating a manifest
|
|
// schema:
|
|
// $ref: "#/definitions/ManifestAddOptions"
|
|
// responses:
|
|
// 200:
|
|
// schema:
|
|
// $ref: "#/definitions/IDResponse"
|
|
// 404:
|
|
// $ref: "#/responses/manifestNotFound"
|
|
// 409:
|
|
// $ref: "#/responses/badParamError"
|
|
// 500:
|
|
// $ref: "#/responses/internalError"
|
|
v3.Handle("/{name:.*}/add", s.APIHandler(libpod.ManifestAddV3)).Methods(http.MethodPost)
|
|
// swagger:operation DELETE /libpod/manifests/{name} manifests ManifestDeleteV3Libpod
|
|
// ---
|
|
// summary: Remove image from a manifest list
|
|
// description: |
|
|
// Remove an image from a manifest list
|
|
//
|
|
// Deprecated: As of 4.0.0 use ManifestModifyLibpod instead
|
|
// produces:
|
|
// - application/json
|
|
// parameters:
|
|
// - in: path
|
|
// name: name
|
|
// type: string
|
|
// required: true
|
|
// description: the image associated with the manifest
|
|
// - in: query
|
|
// name: digest
|
|
// type: string
|
|
// description: image digest to be removed
|
|
// responses:
|
|
// 200:
|
|
// schema:
|
|
// $ref: "#/definitions/IDResponse"
|
|
// 400:
|
|
// $ref: "#/responses/badParamError"
|
|
// 404:
|
|
// $ref: "#/responses/manifestNotFound"
|
|
// 500:
|
|
// $ref: "#/responses/internalError"
|
|
v3.Handle("/{name:.*}", s.APIHandler(libpod.ManifestRemoveDigestV3)).Methods(http.MethodDelete)
|
|
// swagger:operation DELETE /libpod/manifests/{name} manifests ManifestDeleteLibpod
|
|
// ---
|
|
// summary: Delete manifest list
|
|
// description: |
|
|
// Delete named manifest list
|
|
//
|
|
// As of v4.0.0
|
|
// produces:
|
|
// - application/json
|
|
// parameters:
|
|
// - in: path
|
|
// name: name
|
|
// type: string
|
|
// required: true
|
|
// description: The name or ID of the list to be deleted
|
|
// responses:
|
|
// 200:
|
|
// $ref: "#/responses/imagesRemoveResponseLibpod"
|
|
// 404:
|
|
// $ref: "#/responses/manifestNotFound"
|
|
// 500:
|
|
// $ref: "#/responses/internalError"
|
|
v4.Handle("/{name:.*}", s.APIHandler(libpod.ManifestDelete)).Methods(http.MethodDelete)
|
|
return nil
|
|
}
|