The following pull request was submitted through Github.
It can be accessed and reviewed at: https://github.com/lxc/crio-lxc/pull/14

This e-mail was sent by the LXC bot, direct replies will not reach the author
unless they happen to be subscribed to this list.

=== Description (from pull-request) ===
- passes through namespace config as specified in https://github.com/opencontainers/runtime-spec/blob/v1.0.0-rc4/config-linux.md#namespaces

- adds a test for namespace sharing

- fixes tests to clean up created containers
From 71f195b3d423e1abf8b82d4357cfa1122511090d Mon Sep 17 00:00:00 2001
From: Michael McCracken <mikmc...@cisco.com>
Date: Wed, 1 May 2019 18:27:57 -0700
Subject: [PATCH 1/5] create: handle namespaces in spec

Signed-off-by: Michael McCracken <mikmc...@cisco.com>
---
 cmd/create.go | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 52 insertions(+)

diff --git a/cmd/create.go b/cmd/create.go
index 2d53b6c..c3edad9 100644
--- a/cmd/create.go
+++ b/cmd/create.go
@@ -9,6 +9,7 @@ import (
        "os/exec"
        "path"
        "path/filepath"
+       "regexp"
        "strings"
        "time"
 
@@ -42,6 +43,17 @@ var createCmd = cli.Command{
        },
 }
 
+// maps from CRIO namespace names to LXC names
+var NamespaceMap = map[string]string{
+       "cgroup":  "cgroup",
+       "ipc":     "ipc",
+       "mount":   "mnt",
+       "network": "net",
+       "pid":     "pid",
+       "user":    "user",
+       "uts":     "uts",
+}
+
 func ensureShell(rootfs string) {
        shPath := filepath.Join(rootfs, "bin/sh")
        if exists, _ := pathExists(shPath); exists {
@@ -202,6 +214,46 @@ func configureContainer(ctx *cli.Context, c 
*lxc.Container, spec *specs.Spec) er
                return errors.Wrap(err, "failed to set hook version")
        }
 
+       procPidPathRE := regexp.MustCompile(`/proc/(\d+)/ns`)
+
+       var nsToClone []string
+       var configVal string
+       seenNamespaceTypes := map[specs.LinuxNamespaceType]bool{}
+       for _, ns := range spec.Linux.Namespaces {
+               if _, ok := seenNamespaceTypes[ns.Type]; ok == true {
+                       return fmt.Errorf("duplicate namespace type %s", 
ns.Type)
+               }
+               seenNamespaceTypes[ns.Type] = true
+               if ns.Path == "" {
+                       nsToClone = append(nsToClone, 
NamespaceMap[string(ns.Type)])
+               } else {
+                       configKey := fmt.Sprintf("lxc.namespace.share.%s", 
NamespaceMap[string(ns.Type)])
+
+                       matches := procPidPathRE.FindStringSubmatch(ns.Path)
+                       switch len(matches) {
+                       case 0:
+                               configVal = ns.Path
+                       case 1:
+                               return fmt.Errorf("error parsing namespace 
path. expected /proc/(\\d+)/ns/*, got '%s'", ns.Path)
+                       case 2:
+                               configVal = matches[1]
+                       default:
+                               return fmt.Errorf("error parsing namespace 
path. expected /proc/(\\d+)/ns/*, got '%s'", ns.Path)
+                       }
+
+                       if err := c.SetConfigItem(configKey, configVal); err != 
nil {
+                               return errors.Wrapf(err, "failed to set 
namespace config: '%s'='%s'", configKey, configVal)
+                       }
+               }
+       }
+
+       if len(nsToClone) > 0 {
+               configVal = strings.Join(nsToClone, " ")
+               if err := c.SetConfigItem("lxc.namespace.clone", configVal); 
err != nil {
+                       return errors.Wrapf(err, "failed to set 
lxc.namespace.clone=%s", configVal)
+               }
+       }
+
        // capabilities?
 
        // if !spec.Process.Terminal {

From 8fbba421bedf68439fdc0b72d38d2a6cd4335411 Mon Sep 17 00:00:00 2001
From: Michael McCracken <mikmc...@cisco.com>
Date: Thu, 2 May 2019 12:10:24 -0700
Subject: [PATCH 2/5] helpers: fix var reference in crictl func

want to substitute, not run CRICTLDEBUG

Signed-off-by: Michael McCracken <mikmc...@cisco.com>
---
 test/helpers.bash | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/test/helpers.bash b/test/helpers.bash
index 9b906db..1741ea1 100644
--- a/test/helpers.bash
+++ b/test/helpers.bash
@@ -54,7 +54,7 @@ function crictl {
     # watch out for: https://github.com/kubernetes-sigs/cri-tools/issues/460
     # If you need more debug output, set CRICTLDEBUG to -D
     CRICTLDEBUG=""
-    $(which crictl) $(CRICTLDEBUG) --runtime-endpoint "$TEMP_DIR/crio.sock" $@
+    $(which crictl) ${CRICTLDEBUG} --runtime-endpoint "$TEMP_DIR/crio.sock" $@
     echo "$output"
 }
 

From d7ed2812ea42801e86d999a6e9e13cfcece4a86c Mon Sep 17 00:00:00 2001
From: Michael McCracken <mikmc...@cisco.com>
Date: Thu, 2 May 2019 16:38:08 -0700
Subject: [PATCH 3/5] test: clean up created containers

Signed-off-by: Michael McCracken <mikmc...@cisco.com>
---
 test/basic.bats  | 2 ++
 test/manual.bats | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/test/basic.bats b/test/basic.bats
index b9a8c6d..70e9317 100644
--- a/test/basic.bats
+++ b/test/basic.bats
@@ -15,4 +15,6 @@ function teardown() {
     podid=$(crictl pods | grep nginx-sandbox | awk '{ print $1 }')
     crictl create $podid test/basic-container-config.json 
test/basic-pod-config.json
     crictl ps -a | grep busybox
+    crictl stopp $podid
+    crictl rmp $podid
 }
diff --git a/test/manual.bats b/test/manual.bats
index 7dc4ecf..ec8246c 100644
--- a/test/manual.bats
+++ b/test/manual.bats
@@ -14,4 +14,6 @@ function teardown() {
 @test "manual invocation" {
     crio-lxc --debug --log-level trace --log-file "$TEMP_DIR/log" create 
--bundle "$TEMP_DIR/dest" alpine
     crio-lxc --debug --log-level trace --log-file "$TEMP_DIR/log" start alpine
+    crio-lxc --debug --log-level trace --log-file "$TEMP_DIR/log" kill alpine
+    crio-lxc --debug --log-level trace --log-file "$TEMP_DIR/log" delete alpine
 }

From c7d98002c17563dc55f8483a02b633b07f13dcee Mon Sep 17 00:00:00 2001
From: Michael McCracken <mikmc...@cisco.com>
Date: Thu, 2 May 2019 16:38:27 -0700
Subject: [PATCH 4/5] test: manual: replace shell with sleep so container stays
 running

so we can test killing and deleting

Signed-off-by: Michael McCracken <mikmc...@cisco.com>
---
 test/manual.bats | 1 +
 1 file changed, 1 insertion(+)

diff --git a/test/manual.bats b/test/manual.bats
index ec8246c..1ec28ed 100644
--- a/test/manual.bats
+++ b/test/manual.bats
@@ -5,6 +5,7 @@ function setup() {
     skopeo --insecure-policy copy docker://alpine:latest 
oci:$ROOT_DIR/test/oci-cache:alpine
     umoci unpack --image "$ROOT_DIR/test/oci-cache:alpine" "$TEMP_DIR/dest"
     sed -i -e "s?rootfs?$TEMP_DIR/dest/rootfs?" "$TEMP_DIR/dest/config.json"
+    sed -i -e "s?\"/bin/sh\"?\"/bin/sleep\",\n\"60\"?" 
"$TEMP_DIR/dest/config.json"
 }
 
 function teardown() {

From ae8352f59b8980ad4e799c1e1f393db5835e8c23 Mon Sep 17 00:00:00 2001
From: Michael McCracken <mikmc...@cisco.com>
Date: Thu, 2 May 2019 18:52:03 -0700
Subject: [PATCH 5/5] test: check that container correctly shares a namespace

Signed-off-by: Michael McCracken <mikmc...@cisco.com>
---
 test/manual.bats | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/test/manual.bats b/test/manual.bats
index 1ec28ed..265e1fb 100644
--- a/test/manual.bats
+++ b/test/manual.bats
@@ -5,7 +5,9 @@ function setup() {
     skopeo --insecure-policy copy docker://alpine:latest 
oci:$ROOT_DIR/test/oci-cache:alpine
     umoci unpack --image "$ROOT_DIR/test/oci-cache:alpine" "$TEMP_DIR/dest"
     sed -i -e "s?rootfs?$TEMP_DIR/dest/rootfs?" "$TEMP_DIR/dest/config.json"
-    sed -i -e "s?\"/bin/sh\"?\"/bin/sleep\",\n\"60\"?" 
"$TEMP_DIR/dest/config.json"
+    sed -i -e "s?\"/bin/sh\"?\"/bin/sleep\",\n\"10\"?" 
"$TEMP_DIR/dest/config.json"
+    sed -i -e "s?\"type\": \"ipc\"?\"type\": \"ipc\",\n\"path\": 
\"/proc/1/ns/ipc\"?" "$TEMP_DIR/dest/config.json"
+
 }
 
 function teardown() {
@@ -13,8 +15,12 @@ function teardown() {
 }
 
 @test "manual invocation" {
-    crio-lxc --debug --log-level trace --log-file "$TEMP_DIR/log" create 
--bundle "$TEMP_DIR/dest" alpine
+    crio-lxc --debug --log-level trace --log-file "$TEMP_DIR/log" create 
--bundle "$TEMP_DIR/dest" --pid-file "$TEMP_DIR/pid" alpine
     crio-lxc --debug --log-level trace --log-file "$TEMP_DIR/log" start alpine
+    pid1ipcnsinode=$(stat -L -c%i /proc/1/ns/ipc)
+    mypid=$(<"$TEMP_DIR/pid")
+    mypidipcnsinode=$(stat -L -c%i "/proc/$mypid/ns/ipc")
+    [ $pid1ipcnsinode = $mypidipcnsinode ]
     crio-lxc --debug --log-level trace --log-file "$TEMP_DIR/log" kill alpine
     crio-lxc --debug --log-level trace --log-file "$TEMP_DIR/log" delete alpine
 }
_______________________________________________
lxc-devel mailing list
lxc-devel@lists.linuxcontainers.org
http://lists.linuxcontainers.org/listinfo/lxc-devel

Reply via email to