From aba3bbd0594982c7f696c481be1a90dcec475bba Mon Sep 17 00:00:00 2001
From: Matej Vasek <mvasek@redhat.com>
Date: Tue, 23 Mar 2021 16:36:23 +0100
Subject: fix: build endpoint for compat API

Signed-off-by: Matej Vasek <mvasek@redhat.com>
---
 pkg/api/handlers/compat/images_build.go | 48 ++++++++++++++++++++++++++++++---
 1 file changed, 44 insertions(+), 4 deletions(-)

(limited to 'pkg')

diff --git a/pkg/api/handlers/compat/images_build.go b/pkg/api/handlers/compat/images_build.go
index 7751b91a7..063ad7413 100644
--- a/pkg/api/handlers/compat/images_build.go
+++ b/pkg/api/handlers/compat/images_build.go
@@ -69,7 +69,7 @@ func BuildImage(w http.ResponseWriter, r *http.Request) {
 		BuildArgs              string `schema:"buildargs"`
 		CacheFrom              string `schema:"cachefrom"`
 		Compression            uint64 `schema:"compression"`
-		ConfigureNetwork       int64  `schema:"networkmode"`
+		ConfigureNetwork       string `schema:"networkmode"`
 		CpuPeriod              uint64 `schema:"cpuperiod"`  // nolint
 		CpuQuota               int64  `schema:"cpuquota"`   // nolint
 		CpuSetCpus             string `schema:"cpusetcpus"` // nolint
@@ -84,7 +84,7 @@ func BuildImage(w http.ResponseWriter, r *http.Request) {
 		ForceRm                bool   `schema:"forcerm"`
 		From                   string `schema:"from"`
 		HTTPProxy              bool   `schema:"httpproxy"`
-		Isolation              int64  `schema:"isolation"`
+		Isolation              string `schema:"isolation"`
 		Ignore                 bool   `schema:"ignore"`
 		Jobs                   int    `schema:"jobs"` // nolint
 		Labels                 string `schema:"labels"`
@@ -205,9 +205,15 @@ func BuildImage(w http.ResponseWriter, r *http.Request) {
 		isolation := buildah.IsolationDefault
 	*/
 	if utils.IsLibpodRequest(r) {
-		//		isolation = buildah.Isolation(query.Isolation)
+		// isolation = parseLibPodIsolation(query.Isolation)
 		registry = ""
 		format = query.OutputFormat
+	} else {
+		if _, found := r.URL.Query()["isolation"]; found {
+			if query.Isolation != "" && query.Isolation != "default" {
+				logrus.Debugf("invalid `isolation` parameter: %q", query.Isolation)
+			}
+		}
 	}
 	var additionalTags []string
 	if len(query.Tag) > 1 {
@@ -329,7 +335,7 @@ func BuildImage(w http.ResponseWriter, r *http.Request) {
 		CNIConfigDir:                   rtc.Network.CNIPluginDirs[0],
 		CNIPluginPath:                  util.DefaultCNIPluginPath,
 		Compression:                    compression,
-		ConfigureNetwork:               buildah.NetworkConfigurationPolicy(query.ConfigureNetwork),
+		ConfigureNetwork:               parseNetworkConfigurationPolicy(query.ConfigureNetwork),
 		ContextDirectory:               contextDirectory,
 		Devices:                        devices,
 		DropCapabilities:               dropCaps,
@@ -459,6 +465,40 @@ loop:
 	}
 }
 
+func parseNetworkConfigurationPolicy(network string) buildah.NetworkConfigurationPolicy {
+	if val, err := strconv.Atoi(network); err == nil {
+		return buildah.NetworkConfigurationPolicy(val)
+	}
+	switch network {
+	case "NetworkDefault":
+		return buildah.NetworkDefault
+	case "NetworkDisabled":
+		return buildah.NetworkDisabled
+	case "NetworkEnabled":
+		return buildah.NetworkEnabled
+	default:
+		return buildah.NetworkDefault
+	}
+}
+
+func parseLibPodIsolation(isolation string) buildah.Isolation {
+	if val, err := strconv.Atoi(isolation); err == nil {
+		return buildah.Isolation(val)
+	}
+	switch isolation {
+	case "IsolationDefault", "default":
+		return buildah.IsolationDefault
+	case "IsolationOCI":
+		return buildah.IsolationOCI
+	case "IsolationChroot":
+		return buildah.IsolationChroot
+	case "IsolationOCIRootless":
+		return buildah.IsolationOCIRootless
+	default:
+		return buildah.IsolationDefault
+	}
+}
+
 func extractTarFile(r *http.Request) (string, error) {
 	// build a home for the request body
 	anchorDir, err := ioutil.TempDir("", "libpod_builder")
-- 
cgit v1.2.3-54-g00ecf