pkg/api: api list quadlets resource

Signed-off-by: Celso Henrique Souza Silva <celsohenrique367@gmail.com>
This commit is contained in:
Celso Henrique Souza Silva
2025-09-30 18:44:04 -03:00
parent d58e496a5e
commit a724fce8aa
5 changed files with 96 additions and 0 deletions

View File

@ -0,0 +1,37 @@
//go:build !remote
package libpod
import (
"fmt"
"net/http"
"github.com/containers/podman/v5/libpod"
"github.com/containers/podman/v5/pkg/api/handlers/utils"
api "github.com/containers/podman/v5/pkg/api/types"
"github.com/containers/podman/v5/pkg/domain/entities"
"github.com/containers/podman/v5/pkg/domain/infra/abi"
"github.com/containers/podman/v5/pkg/util"
)
func ListQuadlets(w http.ResponseWriter, r *http.Request) {
runtime := r.Context().Value(api.RuntimeKey).(*libpod.Runtime)
filterMap, err := util.FiltersFromRequest(r)
if err != nil {
utils.Error(
w, http.StatusInternalServerError,
fmt.Errorf("failed to parse parameters for %s: %w", r.URL.String(), err),
)
return
}
containerEngine := abi.ContainerEngine{Libpod: runtime}
quadlets, err := containerEngine.QuadletList(r.Context(), entities.QuadletListOptions{Filters: filterMap})
if err != nil {
utils.InternalServerError(w, err)
return
}
utils.WriteResponse(w, http.StatusOK, quadlets)
}

View File

@ -520,3 +520,10 @@ type artifactPushResponse struct {
// in:body
Body entities.ArtifactPushReport
}
// Quadlet list
// swagger:response
type quadletListResponse struct {
// in:body
Body []entities.ListQuadlet
}

View File

@ -0,0 +1,36 @@
//go:build !remote
package server
import (
"net/http"
"github.com/containers/podman/v5/pkg/api/handlers/libpod"
"github.com/gorilla/mux"
)
func (s *APIServer) registerQuadletHandlers(r *mux.Router) error {
// swagger:operation GET /libpod/quadlets/json libpod QuadletListLibpod
// ---
// tags:
// - quadlets
// summary: List quadlets
// description: Return a list of all quadlets.
// produces:
// - application/json
// parameters:
// - in: query
// name: filters
// type: string
// description: |
// JSON encoded value of the filters (a map[string][]string).
// Supported filters:
// - name=<quadlet-name> Filter by quadlet name
// responses:
// 200:
// $ref: "#/responses/quadletListResponse"
// 500:
// $ref: "#/responses/internalError"
r.HandleFunc(VersionedPath("/libpod/quadlets/json"), s.APIHandler(libpod.ListQuadlets)).Methods(http.MethodGet)
return nil
}

View File

@ -128,6 +128,7 @@ func newServer(runtime *libpod.Runtime, listener net.Listener, opts entities.Ser
server.registerKubeHandlers,
server.registerPluginsHandlers,
server.registerPodsHandlers,
server.registerQuadletHandlers,
server.registerSecretHandlers,
server.registerSwaggerHandlers,
server.registerSwarmHandlers,

15
test/apiv2/36-quadlets.at Normal file
View File

@ -0,0 +1,15 @@
# -*- sh -*-
#
# quadlet-related tests
#
# NOTE: Once podman-remote quadlet support is added we can enable the podman quadlet tests in
# test/system/253-podman-quadlet.bats which should cover it in more detail then.
## list volume
t GET libpod/quadlets/json 200
# Example with filter applied (uncomment once needed)
# t GET libpod/quadlets/json?filters='{"name":["name.*"]}' 200
# vim: filetype=sh