mirror of
https://github.com/containers/podman.git
synced 2025-06-02 10:46:09 +08:00
Merge pull request #5544 from baude/apiv2serveswagger
serve swagger when present
This commit is contained in:
@ -1,6 +1,16 @@
|
|||||||
package libpod
|
package libpod
|
||||||
|
|
||||||
import "github.com/containers/image/v5/manifest"
|
import (
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/containers/image/v5/manifest"
|
||||||
|
"github.com/containers/libpod/pkg/api/handlers/utils"
|
||||||
|
"github.com/pkg/errors"
|
||||||
|
)
|
||||||
|
|
||||||
|
// DefaultPodmanSwaggerSpec provides the default path to the podman swagger spec file
|
||||||
|
const DefaultPodmanSwaggerSpec = "/usr/share/containers/podman/swagger.yaml"
|
||||||
|
|
||||||
// List Containers
|
// List Containers
|
||||||
// swagger:response ListContainers
|
// swagger:response ListContainers
|
||||||
@ -15,3 +25,20 @@ type swagInspectManifestResponse struct {
|
|||||||
// in:body
|
// in:body
|
||||||
Body manifest.List
|
Body manifest.List
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func ServeSwagger(w http.ResponseWriter, r *http.Request) {
|
||||||
|
path := DefaultPodmanSwaggerSpec
|
||||||
|
if p, found := os.LookupEnv("PODMAN_SWAGGER_SPEC"); found {
|
||||||
|
path = p
|
||||||
|
}
|
||||||
|
if _, err := os.Stat(path); err != nil {
|
||||||
|
if os.IsNotExist(err) {
|
||||||
|
utils.InternalServerError(w, errors.Errorf("file %q does not exist", path))
|
||||||
|
return
|
||||||
|
}
|
||||||
|
utils.InternalServerError(w, err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
w.Header().Set("Content-Type", "text/yaml")
|
||||||
|
http.ServeFile(w, r, path)
|
||||||
|
}
|
||||||
|
@ -2,25 +2,14 @@ package server
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"net/http"
|
"net/http"
|
||||||
"os"
|
|
||||||
|
|
||||||
|
"github.com/containers/libpod/pkg/api/handlers/libpod"
|
||||||
"github.com/gorilla/mux"
|
"github.com/gorilla/mux"
|
||||||
)
|
)
|
||||||
|
|
||||||
// DefaultPodmanSwaggerSpec provides the default path to the podman swagger spec file
|
|
||||||
const DefaultPodmanSwaggerSpec = "/usr/share/containers/podman/swagger.yaml"
|
|
||||||
|
|
||||||
// RegisterSwaggerHandlers maps the swagger endpoint for the server
|
// RegisterSwaggerHandlers maps the swagger endpoint for the server
|
||||||
func (s *APIServer) RegisterSwaggerHandlers(r *mux.Router) error {
|
func (s *APIServer) RegisterSwaggerHandlers(r *mux.Router) error {
|
||||||
// This handler does _*NOT*_ provide an UI rather just a swagger spec that an UI could render
|
// This handler does _*NOT*_ provide an UI rather just a swagger spec that an UI could render
|
||||||
r.PathPrefix("/swagger/").HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
r.HandleFunc(VersionedPath("/libpod/swagger"), s.APIHandler(libpod.ServeSwagger)).Methods(http.MethodGet)
|
||||||
path := DefaultPodmanSwaggerSpec
|
|
||||||
if p, found := os.LookupEnv("PODMAN_SWAGGER_SPEC"); found {
|
|
||||||
path = p
|
|
||||||
}
|
|
||||||
w.Header().Set("Content-Type", "text/yaml")
|
|
||||||
|
|
||||||
http.ServeFile(w, r, path)
|
|
||||||
})
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -109,6 +109,7 @@ func newServer(runtime *libpod.Runtime, duration time.Duration, listener *net.Li
|
|||||||
server.registerPingHandlers,
|
server.registerPingHandlers,
|
||||||
server.registerPluginsHandlers,
|
server.registerPluginsHandlers,
|
||||||
server.registerPodsHandlers,
|
server.registerPodsHandlers,
|
||||||
|
server.RegisterSwaggerHandlers,
|
||||||
server.registerSwarmHandlers,
|
server.registerSwarmHandlers,
|
||||||
server.registerSystemHandlers,
|
server.registerSystemHandlers,
|
||||||
server.registerVersionHandlers,
|
server.registerVersionHandlers,
|
||||||
|
Reference in New Issue
Block a user