Skip to content

Commit 089d153

Browse files
Merge pull request #27203 from nothiaki/quadlets-api-resource
pkg/api: api list quadlets resource
2 parents 77dd165 + a724fce commit 089d153

File tree

5 files changed

+96
-0
lines changed

5 files changed

+96
-0
lines changed
Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
//go:build !remote
2+
3+
package libpod
4+
5+
import (
6+
"fmt"
7+
"net/http"
8+
9+
"github.com/containers/podman/v5/libpod"
10+
"github.com/containers/podman/v5/pkg/api/handlers/utils"
11+
api "github.com/containers/podman/v5/pkg/api/types"
12+
"github.com/containers/podman/v5/pkg/domain/entities"
13+
"github.com/containers/podman/v5/pkg/domain/infra/abi"
14+
"github.com/containers/podman/v5/pkg/util"
15+
)
16+
17+
func ListQuadlets(w http.ResponseWriter, r *http.Request) {
18+
runtime := r.Context().Value(api.RuntimeKey).(*libpod.Runtime)
19+
filterMap, err := util.FiltersFromRequest(r)
20+
if err != nil {
21+
utils.Error(
22+
w, http.StatusInternalServerError,
23+
fmt.Errorf("failed to parse parameters for %s: %w", r.URL.String(), err),
24+
)
25+
return
26+
}
27+
28+
containerEngine := abi.ContainerEngine{Libpod: runtime}
29+
30+
quadlets, err := containerEngine.QuadletList(r.Context(), entities.QuadletListOptions{Filters: filterMap})
31+
if err != nil {
32+
utils.InternalServerError(w, err)
33+
return
34+
}
35+
36+
utils.WriteResponse(w, http.StatusOK, quadlets)
37+
}

pkg/api/handlers/swagger/responses.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -520,3 +520,10 @@ type artifactPushResponse struct {
520520
// in:body
521521
Body entities.ArtifactPushReport
522522
}
523+
524+
// Quadlet list
525+
// swagger:response
526+
type quadletListResponse struct {
527+
// in:body
528+
Body []entities.ListQuadlet
529+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
//go:build !remote
2+
3+
package server
4+
5+
import (
6+
"net/http"
7+
8+
"github.com/containers/podman/v5/pkg/api/handlers/libpod"
9+
"github.com/gorilla/mux"
10+
)
11+
12+
func (s *APIServer) registerQuadletHandlers(r *mux.Router) error {
13+
// swagger:operation GET /libpod/quadlets/json libpod QuadletListLibpod
14+
// ---
15+
// tags:
16+
// - quadlets
17+
// summary: List quadlets
18+
// description: Return a list of all quadlets.
19+
// produces:
20+
// - application/json
21+
// parameters:
22+
// - in: query
23+
// name: filters
24+
// type: string
25+
// description: |
26+
// JSON encoded value of the filters (a map[string][]string).
27+
// Supported filters:
28+
// - name=<quadlet-name> Filter by quadlet name
29+
// responses:
30+
// 200:
31+
// $ref: "#/responses/quadletListResponse"
32+
// 500:
33+
// $ref: "#/responses/internalError"
34+
r.HandleFunc(VersionedPath("/libpod/quadlets/json"), s.APIHandler(libpod.ListQuadlets)).Methods(http.MethodGet)
35+
return nil
36+
}

pkg/api/server/server.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,7 @@ func newServer(runtime *libpod.Runtime, listener net.Listener, opts entities.Ser
148148
server.registerKubeHandlers,
149149
server.registerPluginsHandlers,
150150
server.registerPodsHandlers,
151+
server.registerQuadletHandlers,
151152
server.registerSecretHandlers,
152153
server.registerSwaggerHandlers,
153154
server.registerSwarmHandlers,

test/apiv2/36-quadlets.at

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
# -*- sh -*-
2+
#
3+
# quadlet-related tests
4+
#
5+
6+
# NOTE: Once podman-remote quadlet support is added we can enable the podman quadlet tests in
7+
# test/system/253-podman-quadlet.bats which should cover it in more detail then.
8+
9+
## list volume
10+
t GET libpod/quadlets/json 200
11+
12+
# Example with filter applied (uncomment once needed)
13+
# t GET libpod/quadlets/json?filters='{"name":["name.*"]}' 200
14+
15+
# vim: filetype=sh

0 commit comments

Comments
 (0)