mirror of
https://github.com/containers/podman.git
synced 2025-06-01 01:00:22 +08:00
Merge pull request #5544 from baude/apiv2serveswagger
serve swagger when present
This commit is contained in:
@ -1,6 +1,16 @@
|
||||
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
|
||||
// swagger:response ListContainers
|
||||
@ -15,3 +25,20 @@ type swagInspectManifestResponse struct {
|
||||
// in:body
|
||||
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 (
|
||||
"net/http"
|
||||
"os"
|
||||
|
||||
"github.com/containers/libpod/pkg/api/handlers/libpod"
|
||||
"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
|
||||
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
|
||||
r.PathPrefix("/swagger/").HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
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)
|
||||
})
|
||||
r.HandleFunc(VersionedPath("/libpod/swagger"), s.APIHandler(libpod.ServeSwagger)).Methods(http.MethodGet)
|
||||
return nil
|
||||
}
|
||||
|
@ -109,6 +109,7 @@ func newServer(runtime *libpod.Runtime, duration time.Duration, listener *net.Li
|
||||
server.registerPingHandlers,
|
||||
server.registerPluginsHandlers,
|
||||
server.registerPodsHandlers,
|
||||
server.RegisterSwaggerHandlers,
|
||||
server.registerSwarmHandlers,
|
||||
server.registerSystemHandlers,
|
||||
server.registerVersionHandlers,
|
||||
|
Reference in New Issue
Block a user