Merge pull request #5544 from baude/apiv2serveswagger

serve swagger when present
This commit is contained in:
OpenShift Merge Robot
2020-03-18 21:26:52 +01:00
committed by GitHub
3 changed files with 31 additions and 14 deletions

View File

@ -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)
}

View File

@ -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
}

View File

@ -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,