Files
podman/pkg/api/server/register_manifest.go
Paul Holzinger 1514d5c933 silence deprecated warnings for manifest functions
There is no reason to mark them directly as deprecated since we still
have to use them as long as we want to support 3.X calls. The
staticcheck linter is complaining about the Deprecated comment but that
doesn't make sense in this context. There is no good way to only exclude
a single check with golangci-lint.

I renamed the function with a V3 suffix to make clear that we only use
this for backwards compat.

Signed-off-by: Paul Holzinger <pholzing@redhat.com>
2022-04-22 12:51:41 +02:00

302 lines
8.9 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 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: 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/NoSuchImage"
// 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/NoSuchManifest'
// 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
// responses:
// 200:
// $ref: "#/responses/InspectManifest"
// 404:
// $ref: "#/responses/NoSuchManifest"
// 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: body
// name: options
// description: options for mutating a manifest
// required: true
// schema:
// $ref: "#/definitions/ManifestModifyOptions"
// responses:
// 200:
// schema:
// $ref: "#/definitions/ManifestModifyReport"
// 404:
// $ref: "#/responses/NoSuchManifest"
// 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/NoSuchManifest"
// 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/NoSuchManifest"
// 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/DocsLibpodImagesRemoveResponse"
// 404:
// $ref: "#/responses/NoSuchManifest"
// 500:
// $ref: "#/responses/InternalError"
v4.Handle("/{name:.*}", s.APIHandler(libpod.ManifestDelete)).Methods(http.MethodDelete)
// 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/NoSuchManifest"
// 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: 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: false
// - in: query
// name: tlsVerify
// type: boolean
// default: false
// description: skip TLS verification for registries
// responses:
// 200:
// schema:
// $ref: "#/definitions/IDResponse"
// 400:
// $ref: "#/responses/BadParamError"
// 404:
// $ref: "#/responses/NoSuchManifest"
// 500:
// $ref: "#/responses/InternalError"
v4.Handle("/{name:.*}/registry/{destination:.*}", s.APIHandler(libpod.ManifestPush)).Methods(http.MethodPost)
return nil
}