mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Move context stuff to its own package
Signed-off-by: Doug Davis <dug@us.ibm.com>
This commit is contained in:
parent
8b454dd79e
commit
f790496d8b
11 changed files with 122 additions and 34 deletions
|
@ -4,10 +4,9 @@ import (
|
|||
"encoding/json"
|
||||
"net/http"
|
||||
|
||||
"golang.org/x/net/context"
|
||||
|
||||
"github.com/docker/docker/api/types"
|
||||
"github.com/docker/docker/cliconfig"
|
||||
"github.com/docker/docker/context"
|
||||
)
|
||||
|
||||
func (s *Server) postAuth(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
||||
|
|
|
@ -8,15 +8,14 @@ import (
|
|||
"strings"
|
||||
"time"
|
||||
|
||||
"golang.org/x/net/context"
|
||||
"golang.org/x/net/websocket"
|
||||
|
||||
"github.com/Sirupsen/logrus"
|
||||
"github.com/docker/docker/api/types"
|
||||
"github.com/docker/docker/context"
|
||||
"github.com/docker/docker/daemon"
|
||||
"github.com/docker/docker/pkg/ioutils"
|
||||
"github.com/docker/docker/pkg/signal"
|
||||
"github.com/docker/docker/pkg/version"
|
||||
"github.com/docker/docker/runconfig"
|
||||
)
|
||||
|
||||
|
@ -251,7 +250,7 @@ func (s *Server) postContainersKill(ctx context.Context, w http.ResponseWriter,
|
|||
// Return error that's not caused because the container is stopped.
|
||||
// Return error if the container is not running and the api is >= 1.20
|
||||
// to keep backwards compatibility.
|
||||
version, _ := ctx.Value("api-version").(version.Version)
|
||||
version := ctx.Version()
|
||||
if version.GreaterThanOrEqualTo("1.20") || !isStopped {
|
||||
return fmt.Errorf("Cannot kill container %s: %v", name, err)
|
||||
}
|
||||
|
@ -392,7 +391,7 @@ func (s *Server) postContainersCreate(ctx context.Context, w http.ResponseWriter
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
version, _ := ctx.Value("api-version").(version.Version)
|
||||
version := ctx.Version()
|
||||
adjustCPUShares := version.LessThan("1.19")
|
||||
|
||||
container, warnings, err := s.daemon.ContainerCreate(name, config, hostConfig, adjustCPUShares)
|
||||
|
|
|
@ -9,9 +9,8 @@ import (
|
|||
"os"
|
||||
"strings"
|
||||
|
||||
"golang.org/x/net/context"
|
||||
|
||||
"github.com/docker/docker/api/types"
|
||||
"github.com/docker/docker/context"
|
||||
)
|
||||
|
||||
// postContainersCopy is deprecated in favor of getContainersArchive.
|
||||
|
|
|
@ -8,17 +8,15 @@ import (
|
|||
"strings"
|
||||
"time"
|
||||
|
||||
"golang.org/x/net/context"
|
||||
|
||||
"github.com/Sirupsen/logrus"
|
||||
"github.com/docker/docker/api"
|
||||
"github.com/docker/docker/api/types"
|
||||
"github.com/docker/docker/autogen/dockerversion"
|
||||
"github.com/docker/docker/context"
|
||||
"github.com/docker/docker/pkg/ioutils"
|
||||
"github.com/docker/docker/pkg/jsonmessage"
|
||||
"github.com/docker/docker/pkg/parsers/filters"
|
||||
"github.com/docker/docker/pkg/parsers/kernel"
|
||||
"github.com/docker/docker/pkg/version"
|
||||
"github.com/docker/docker/utils"
|
||||
)
|
||||
|
||||
|
@ -33,7 +31,7 @@ func (s *Server) getVersion(ctx context.Context, w http.ResponseWriter, r *http.
|
|||
BuildTime: dockerversion.BUILDTIME,
|
||||
}
|
||||
|
||||
version, _ := ctx.Value("api-version").(version.Version)
|
||||
version := ctx.Version()
|
||||
|
||||
if version.GreaterThanOrEqualTo("1.19") {
|
||||
v.Experimental = utils.ExperimentalBuild()
|
||||
|
|
|
@ -7,10 +7,9 @@ import (
|
|||
"net/http"
|
||||
"strconv"
|
||||
|
||||
"golang.org/x/net/context"
|
||||
|
||||
"github.com/Sirupsen/logrus"
|
||||
"github.com/docker/docker/api/types"
|
||||
"github.com/docker/docker/context"
|
||||
"github.com/docker/docker/pkg/stdcopy"
|
||||
"github.com/docker/docker/runconfig"
|
||||
)
|
||||
|
|
|
@ -8,18 +8,16 @@ import (
|
|||
"net/http"
|
||||
"strings"
|
||||
|
||||
"golang.org/x/net/context"
|
||||
|
||||
"github.com/Sirupsen/logrus"
|
||||
"github.com/docker/docker/api/types"
|
||||
"github.com/docker/docker/builder"
|
||||
"github.com/docker/docker/cliconfig"
|
||||
"github.com/docker/docker/context"
|
||||
"github.com/docker/docker/graph"
|
||||
"github.com/docker/docker/pkg/ioutils"
|
||||
"github.com/docker/docker/pkg/parsers"
|
||||
"github.com/docker/docker/pkg/streamformatter"
|
||||
"github.com/docker/docker/pkg/ulimit"
|
||||
"github.com/docker/docker/pkg/version"
|
||||
"github.com/docker/docker/runconfig"
|
||||
"github.com/docker/docker/utils"
|
||||
)
|
||||
|
@ -36,7 +34,7 @@ func (s *Server) postCommit(ctx context.Context, w http.ResponseWriter, r *http.
|
|||
cname := r.Form.Get("container")
|
||||
|
||||
pause := boolValue(r, "pause")
|
||||
version, _ := ctx.Value("api-version").(version.Version)
|
||||
version := ctx.Version()
|
||||
if r.FormValue("pause") == "" && version.GreaterThanOrEqualTo("1.13") {
|
||||
pause = true
|
||||
}
|
||||
|
@ -283,7 +281,7 @@ func (s *Server) postBuild(ctx context.Context, w http.ResponseWriter, r *http.R
|
|||
|
||||
w.Header().Set("Content-Type", "application/json")
|
||||
|
||||
version, _ := ctx.Value("api-version").(version.Version)
|
||||
version := ctx.Version()
|
||||
if boolValue(r, "forcerm") && version.GreaterThanOrEqualTo("1.12") {
|
||||
buildConfig.Remove = true
|
||||
} else if r.FormValue("rm") == "" && version.GreaterThanOrEqualTo("1.12") {
|
||||
|
|
|
@ -4,9 +4,7 @@ import (
|
|||
"fmt"
|
||||
"net/http"
|
||||
|
||||
"golang.org/x/net/context"
|
||||
|
||||
"github.com/docker/docker/pkg/version"
|
||||
"github.com/docker/docker/context"
|
||||
)
|
||||
|
||||
// getContainersByName inspects containers configuration and serializes it as json.
|
||||
|
@ -18,7 +16,7 @@ func (s *Server) getContainersByName(ctx context.Context, w http.ResponseWriter,
|
|||
var json interface{}
|
||||
var err error
|
||||
|
||||
version, _ := ctx.Value("api-version").(version.Version)
|
||||
version := ctx.Version()
|
||||
|
||||
switch {
|
||||
case version.LessThan("1.20"):
|
||||
|
|
|
@ -12,11 +12,11 @@ import (
|
|||
"strings"
|
||||
|
||||
"github.com/gorilla/mux"
|
||||
"golang.org/x/net/context"
|
||||
|
||||
"github.com/Sirupsen/logrus"
|
||||
"github.com/docker/docker/api"
|
||||
"github.com/docker/docker/autogen/dockerversion"
|
||||
"github.com/docker/docker/context"
|
||||
"github.com/docker/docker/daemon"
|
||||
"github.com/docker/docker/pkg/sockets"
|
||||
"github.com/docker/docker/pkg/stringid"
|
||||
|
@ -261,14 +261,14 @@ func makeHTTPHandler(logging bool, localMethod string, localRoute string, handle
|
|||
// as 'args' on the function call.
|
||||
|
||||
reqID := stringid.TruncateID(stringid.GenerateNonCryptoID())
|
||||
api_version := version.Version(mux.Vars(r)["version"])
|
||||
if api_version == "" {
|
||||
api_version = api.Version
|
||||
apiVersion := version.Version(mux.Vars(r)["version"])
|
||||
if apiVersion == "" {
|
||||
apiVersion = api.Version
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
ctx = context.WithValue(ctx, "docker-request-id", reqID)
|
||||
ctx = context.WithValue(ctx, "api-version", api_version)
|
||||
ctx = context.WithValue(ctx, context.RequestID, reqID)
|
||||
ctx = context.WithValue(ctx, context.APIVersion, apiVersion)
|
||||
|
||||
// log the request
|
||||
logrus.Debugf("Calling %s %s", localMethod, localRoute)
|
||||
|
@ -294,11 +294,11 @@ func makeHTTPHandler(logging bool, localMethod string, localRoute string, handle
|
|||
writeCorsHeaders(w, r, corsHeaders)
|
||||
}
|
||||
|
||||
if api_version.GreaterThan(api.Version) {
|
||||
http.Error(w, fmt.Errorf("client is newer than server (client API version: %s, server API version: %s)", api_version, api.Version).Error(), http.StatusBadRequest)
|
||||
if apiVersion.GreaterThan(api.Version) {
|
||||
http.Error(w, fmt.Errorf("client is newer than server (client API version: %s, server API version: %s)", apiVersion, api.Version).Error(), http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
if api_version.LessThan(api.MinVersion) {
|
||||
if apiVersion.LessThan(api.MinVersion) {
|
||||
http.Error(w, fmt.Errorf("client is too old, minimum supported API version is %s, please upgrade your client to a newer version", api.MinVersion).Error(), http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
|
|
@ -4,9 +4,8 @@ import (
|
|||
"encoding/json"
|
||||
"net/http"
|
||||
|
||||
"golang.org/x/net/context"
|
||||
|
||||
"github.com/docker/docker/api/types"
|
||||
"github.com/docker/docker/context"
|
||||
)
|
||||
|
||||
func (s *Server) getVolumesList(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
||||
|
|
64
context/context.go
Normal file
64
context/context.go
Normal file
|
@ -0,0 +1,64 @@
|
|||
package context
|
||||
|
||||
import (
|
||||
"golang.org/x/net/context"
|
||||
|
||||
"github.com/docker/docker/pkg/version"
|
||||
)
|
||||
|
||||
const (
|
||||
// RequestID is the unique ID for each http request
|
||||
RequestID = "request-id"
|
||||
|
||||
// APIVersion is the client's requested API version
|
||||
APIVersion = "api-version"
|
||||
)
|
||||
|
||||
// Context is just our own wrapper for the golang 'Context' - mainly
|
||||
// so we can add our over version of the funcs.
|
||||
type Context struct {
|
||||
context.Context
|
||||
}
|
||||
|
||||
// Background creates a new Context based on golang's default one.
|
||||
func Background() Context {
|
||||
return Context{context.Background()}
|
||||
}
|
||||
|
||||
// WithValue will return a Context that has this new key/value pair
|
||||
// associated with it. Just uses the golang version but then wraps it.
|
||||
func WithValue(ctx Context, key, value interface{}) Context {
|
||||
return Context{context.WithValue(ctx, key, value)}
|
||||
}
|
||||
|
||||
// RequestID is a utility func to make it easier to get the
|
||||
// request ID associated with this Context/request.
|
||||
func (ctx Context) RequestID() string {
|
||||
val := ctx.Value(RequestID)
|
||||
if val == nil {
|
||||
return ""
|
||||
}
|
||||
|
||||
id, ok := val.(string)
|
||||
if !ok {
|
||||
// Ideally we shouldn't panic but we also should never get here
|
||||
panic("Context RequestID isn't a string")
|
||||
}
|
||||
return id
|
||||
}
|
||||
|
||||
// Version is a utility func to make it easier to get the
|
||||
// API version string associated with this Context/request.
|
||||
func (ctx Context) Version() version.Version {
|
||||
val := ctx.Value(APIVersion)
|
||||
if val == nil {
|
||||
return version.Version("")
|
||||
}
|
||||
|
||||
ver, ok := val.(version.Version)
|
||||
if !ok {
|
||||
// Ideally we shouldn't panic but we also should never get here
|
||||
panic("Context APIVersion isn't a version.Version")
|
||||
}
|
||||
return ver
|
||||
}
|
35
context/context_test.go
Normal file
35
context/context_test.go
Normal file
|
@ -0,0 +1,35 @@
|
|||
package context
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/docker/docker/pkg/version"
|
||||
)
|
||||
|
||||
func TestContext(t *testing.T) {
|
||||
ctx := Background()
|
||||
|
||||
// First make sure getting non-existent values doesn't break
|
||||
if id := ctx.RequestID(); id != "" {
|
||||
t.Fatalf("RequestID() should have been '', was: %q", id)
|
||||
}
|
||||
|
||||
if ver := ctx.Version(); ver != "" {
|
||||
t.Fatalf("Version() should have been '', was: %q", ver)
|
||||
}
|
||||
|
||||
// Test basic set/get
|
||||
ctx = WithValue(ctx, RequestID, "123")
|
||||
if ctx.RequestID() != "123" {
|
||||
t.Fatalf("RequestID() should have been '123'")
|
||||
}
|
||||
|
||||
// Now make sure after a 2nd set we can still get both
|
||||
ctx = WithValue(ctx, APIVersion, version.Version("x.y"))
|
||||
if id := ctx.RequestID(); id != "123" {
|
||||
t.Fatalf("RequestID() should have been '123', was %q", id)
|
||||
}
|
||||
if ver := ctx.Version(); ver != "x.y" {
|
||||
t.Fatalf("Version() should have been 'x.y', was %q", ver)
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue