summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSebastiaan van Stijn <github@gone.nl>2019-10-13 16:30:03 +0200
committerSebastiaan van Stijn <github@gone.nl>2019-12-04 16:19:01 +0100
commit04203d13fb52ae41a156506831ce44abcc726dd6 (patch)
tree884b329e00bf24f0a7cead9328f98e03c0d6ace8
parent9709f6b95e4604956125eaddbb8a4a46b4eb9005 (diff)
downloaddocker-04203d13fb52ae41a156506831ce44abcc726dd6.tar.gz
api/server: build: refactor for better readability
- construct the initial options as a literal - move validation for windows up, and fail early - move all API-version handling together Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
-rw-r--r--api/server/router/build/build_routes.go83
1 files changed, 40 insertions, 43 deletions
diff --git a/api/server/router/build/build_routes.go b/api/server/router/build/build_routes.go
index a67063f036..9b57e68963 100644
--- a/api/server/router/build/build_routes.go
+++ b/api/server/router/build/build_routes.go
@@ -38,8 +38,36 @@ func (e invalidIsolationError) Error() string {
func (e invalidIsolationError) InvalidParameter() {}
func newImageBuildOptions(ctx context.Context, r *http.Request) (*types.ImageBuildOptions, error) {
+ options := &types.ImageBuildOptions{
+ Version: types.BuilderV1, // Builder V1 is the default, but can be overridden
+ Dockerfile: r.FormValue("dockerfile"),
+ SuppressOutput: httputils.BoolValue(r, "q"),
+ NoCache: httputils.BoolValue(r, "nocache"),
+ ForceRemove: httputils.BoolValue(r, "forcerm"),
+ MemorySwap: httputils.Int64ValueOrZero(r, "memswap"),
+ Memory: httputils.Int64ValueOrZero(r, "memory"),
+ CPUShares: httputils.Int64ValueOrZero(r, "cpushares"),
+ CPUPeriod: httputils.Int64ValueOrZero(r, "cpuperiod"),
+ CPUQuota: httputils.Int64ValueOrZero(r, "cpuquota"),
+ CPUSetCPUs: r.FormValue("cpusetcpus"),
+ CPUSetMems: r.FormValue("cpusetmems"),
+ CgroupParent: r.FormValue("cgroupparent"),
+ NetworkMode: r.FormValue("networkmode"),
+ Tags: r.Form["t"],
+ ExtraHosts: r.Form["extrahosts"],
+ SecurityOpt: r.Form["securityopt"],
+ Squash: httputils.BoolValue(r, "squash"),
+ Target: r.FormValue("target"),
+ RemoteContext: r.FormValue("remote"),
+ SessionID: r.FormValue("session"),
+ BuildID: r.FormValue("buildid"),
+ }
+
+ if runtime.GOOS != "windows" && options.SecurityOpt != nil {
+ return nil, errdefs.InvalidParameter(errors.New("The daemon on this platform does not support setting security options on build"))
+ }
+
version := httputils.VersionFromContext(ctx)
- options := &types.ImageBuildOptions{}
if httputils.BoolValue(r, "forcerm") && versions.GreaterThanOrEqualTo(version, "1.12") {
options.Remove = true
} else if r.FormValue("rm") == "" && versions.GreaterThanOrEqualTo(version, "1.12") {
@@ -50,30 +78,19 @@ func newImageBuildOptions(ctx context.Context, r *http.Request) (*types.ImageBui
if httputils.BoolValue(r, "pull") && versions.GreaterThanOrEqualTo(version, "1.16") {
options.PullParent = true
}
-
- options.Version = types.BuilderV1 // Builder V1 is the default, but can be overridden
- options.Dockerfile = r.FormValue("dockerfile")
- options.SuppressOutput = httputils.BoolValue(r, "q")
- options.NoCache = httputils.BoolValue(r, "nocache")
- options.ForceRemove = httputils.BoolValue(r, "forcerm")
- options.MemorySwap = httputils.Int64ValueOrZero(r, "memswap")
- options.Memory = httputils.Int64ValueOrZero(r, "memory")
- options.CPUShares = httputils.Int64ValueOrZero(r, "cpushares")
- options.CPUPeriod = httputils.Int64ValueOrZero(r, "cpuperiod")
- options.CPUQuota = httputils.Int64ValueOrZero(r, "cpuquota")
- options.CPUSetCPUs = r.FormValue("cpusetcpus")
- options.CPUSetMems = r.FormValue("cpusetmems")
- options.CgroupParent = r.FormValue("cgroupparent")
- options.NetworkMode = r.FormValue("networkmode")
- options.Tags = r.Form["t"]
- options.ExtraHosts = r.Form["extrahosts"]
- options.SecurityOpt = r.Form["securityopt"]
- options.Squash = httputils.BoolValue(r, "squash")
- options.Target = r.FormValue("target")
- options.RemoteContext = r.FormValue("remote")
if versions.GreaterThanOrEqualTo(version, "1.32") {
options.Platform = r.FormValue("platform")
}
+ if versions.GreaterThanOrEqualTo(version, "1.40") {
+ outputsJSON := r.FormValue("outputs")
+ if outputsJSON != "" {
+ var outputs []types.ImageBuildOutput
+ if err := json.Unmarshal([]byte(outputsJSON), &outputs); err != nil {
+ return nil, err
+ }
+ options.Outputs = outputs
+ }
+ }
if s := r.Form.Get("shmsize"); s != "" {
shmSize, err := strconv.ParseInt(s, 10, 64)
@@ -90,10 +107,6 @@ func newImageBuildOptions(ctx context.Context, r *http.Request) (*types.ImageBui
}
}
- if runtime.GOOS != "windows" && options.SecurityOpt != nil {
- return nil, errdefs.InvalidParameter(errors.New("The daemon on this platform does not support setting security options on build"))
- }
-
if ulimitsJSON := r.FormValue("ulimits"); ulimitsJSON != "" {
var buildUlimits = []*units.Ulimit{}
if err := json.Unmarshal([]byte(ulimitsJSON), &buildUlimits); err != nil {
@@ -137,8 +150,6 @@ func newImageBuildOptions(ctx context.Context, r *http.Request) (*types.ImageBui
}
options.CacheFrom = cacheFrom
}
- options.SessionID = r.FormValue("session")
- options.BuildID = r.FormValue("buildid")
if bv := r.FormValue("version"); bv != "" {
v, err := parseVersion(bv)
@@ -148,31 +159,17 @@ func newImageBuildOptions(ctx context.Context, r *http.Request) (*types.ImageBui
options.Version = v
}
- if versions.GreaterThanOrEqualTo(version, "1.40") {
- outputsJSON := r.FormValue("outputs")
- if outputsJSON != "" {
- var outputs []types.ImageBuildOutput
- if err := json.Unmarshal([]byte(outputsJSON), &outputs); err != nil {
- return nil, err
- }
- options.Outputs = outputs
- }
- }
-
return options, nil
}
func parseVersion(s string) (types.BuilderVersion, error) {
- if s == "" {
- return types.BuilderV1, nil
- }
switch types.BuilderVersion(s) {
case types.BuilderV1:
return types.BuilderV1, nil
case types.BuilderBuildKit:
return types.BuilderBuildKit, nil
default:
- return "", errors.Errorf("invalid version %s", s)
+ return "", errors.Errorf("invalid version %q", s)
}
}