Bläddra i källkod

Fix container.json sample to be loadable by nsinit.

Docker-DCO-1.1-Signed-off-by: Rohit Jnagal <jnagal@google.com> (github: rjnagal)
Rohit Jnagal 11 år sedan
förälder
incheckning
14b2a9de87
3 ändrade filer med 102 tillägg och 41 borttagningar
  1. 20 20
      pkg/libcontainer/README.md
  2. 22 21
      pkg/libcontainer/container.json
  3. 60 0
      pkg/libcontainer/container_test.go

+ 20 - 20
pkg/libcontainer/README.md

@@ -41,21 +41,21 @@ Sample `container.json` file:
       "TERM=xterm"
    ],
    "capabilities_mask" : [
-      "SETPCAP",
-      "SYS_MODULE",
-      "SYS_RAWIO",
-      "SYS_PACCT",
-      "SYS_ADMIN",
-      "SYS_NICE",
-      "SYS_RESOURCE",
-      "SYS_TIME",
-      "SYS_TTY_CONFIG",
-      "MKNOD",
-      "AUDIT_WRITE",
-      "AUDIT_CONTROL",
-      "MAC_OVERRIDE",
-      "MAC_ADMIN",
-      "NET_ADMIN"
+      { "key": "SETPCAP" },
+      { "key": "SYS_MODULE" },
+      { "key": "SYS_RAWIO" },
+      { "key": "SYS_PACCT" },
+      { "key": "SYS_ADMIN" },
+      { "key": "SYS_NICE" },
+      { "key": "SYS_RESOURCE" },
+      { "key": "SYS_TIME" },
+      { "key": "SYS_TTY_CONFIG" },
+      { "key": "MKNOD" },
+      { "key": "AUDIT_WRITE" },
+      { "key": "AUDIT_CONTROL" },
+      { "key": "MAC_OVERRIDE" },
+      { "key": "MAC_ADMIN" },
+      { "key": "NET_ADMIN" }
    ],
    "context" : {
       "apparmor_profile" : "docker-default"
@@ -81,11 +81,11 @@ Sample `container.json` file:
       }
    ],
    "namespaces" : [
-      "NEWNS",
-      "NEWUTS",
-      "NEWIPC",
-      "NEWPID",
-      "NEWNET"
+      { "key": "NEWNS" },
+      { "key": "NEWUTS" },
+      { "key": "NEWIPC" },
+      { "key": "NEWPID" },
+      { "key": "NEWNET" }
    ]
 }
 ```

+ 22 - 21
pkg/libcontainer/container.json

@@ -8,28 +8,28 @@
         "TERM=xterm-256color"
     ],
     "namespaces": [
-        "NEWIPC",
-        "NEWNS",
-        "NEWPID",
-        "NEWUTS",
-        "NEWNET"
+    	{ "key": "NEWIPC" },
+    	{ "key": "NEWNS"  },
+    	{ "key": "NEWPID" },
+    	{ "key": "NEWUTS" },
+    	{ "key": "NEWNET" }
     ],
     "capabilities_mask": [
-        "SETPCAP",
-        "SYS_MODULE",
-        "SYS_RAWIO",
-        "SYS_PACCT",
-        "SYS_ADMIN",
-        "SYS_NICE",
-        "SYS_RESOURCE",
-        "SYS_TIME",
-        "SYS_TTY_CONFIG",
-        "MKNOD",
-        "AUDIT_WRITE",
-        "AUDIT_CONTROL",
-        "MAC_OVERRIDE",
-        "MAC_ADMIN",
-        "NET_ADMIN"
+    	{ "key": "SETPCAP" },
+    	{ "key": "SYS_MODULE" },
+	{ "key": "SYS_RAWIO" },
+	{ "key": "SYS_PACCT" },
+	{ "key": "SYS_ADMIN" },
+	{ "key": "SYS_NICE" },
+	{ "key": "SYS_RESOURCE" },
+	{ "key": "SYS_TIME" },
+	{ "key": "SYS_TTY_CONFIG" },
+	{ "key": "MKNOD" },
+	{ "key": "AUDIT_WRITE" },
+	{ "key": "AUDIT_CONTROL" },
+	{ "key": "MAC_OVERRIDE" },
+	{ "key": "MAC_ADMIN" },
+	{ "key": "NET_ADMIN" }
     ],
     "networks": [{
             "type": "veth",
@@ -45,6 +45,7 @@
     "cgroups": {
         "name": "docker-koye",
         "parent": "docker",
-        "memory": 5248000
+        "memory": 5248000,
+	"cpu_shares": 1024
     }
 }

+ 60 - 0
pkg/libcontainer/container_test.go

@@ -0,0 +1,60 @@
+package libcontainer
+
+import (
+	"encoding/json"
+	"os"
+	"testing"
+)
+
+func TestContainerJsonFormat(t *testing.T) {
+	f, err := os.Open("container.json")
+	if err != nil {
+		t.Fatal("Unable to open container.json")
+	}
+	defer f.Close()
+
+	var container *Container
+	if err := json.NewDecoder(f).Decode(&container); err != nil {
+		t.Log("failed to decode container config")
+		t.FailNow()
+	}
+	if container.Hostname != "koye" {
+		t.Log("hostname is not set")
+		t.Fail()
+	}
+
+	if !container.Tty {
+		t.Log("tty should be set to true")
+		t.Fail()
+	}
+
+	if !container.Namespaces.Contains("NEWNET") {
+		t.Log("namespaces should contain NEWNET")
+		t.Fail()
+	}
+
+	if container.Namespaces.Contains("NEWUSER") {
+		t.Log("namespaces should not contain NEWUSER")
+		t.Fail()
+	}
+
+	if !container.CapabilitiesMask.Contains("SYS_ADMIN") {
+		t.Log("capabilities should contain SYS_ADMIN")
+		t.Fail()
+	}
+
+	if container.CapabilitiesMask.Contains("SYS_CHROOT") {
+		t.Log("capabitlies should not contain SYS_CHROOT")
+		t.Fail()
+	}
+
+	if container.Cgroups.CpuShares != 1024 {
+		t.Log("cpu shares not set correctly")
+		t.Fail()
+	}
+
+	if container.Cgroups.Memory != 5248000 {
+		t.Log("memory limit not set correctly")
+		t.Fail()
+	}
+}