Browse Source

Use StrSlice from pkg/stringutils

Signed-off-by: Antonio Murdaca <runcom@linux.com>
Antonio Murdaca 10 years ago
parent
commit
17999c70c3
3 changed files with 40 additions and 131 deletions
  1. 38 91
      runconfig/hostconfig.go
  2. 0 38
      runconfig/hostconfig_test.go
  3. 2 2
      runconfig/parse.go

+ 38 - 91
runconfig/hostconfig.go

@@ -6,6 +6,7 @@ import (
 	"strings"
 	"strings"
 
 
 	"github.com/docker/docker/pkg/nat"
 	"github.com/docker/docker/pkg/nat"
+	"github.com/docker/docker/pkg/stringutils"
 	"github.com/docker/docker/pkg/ulimit"
 	"github.com/docker/docker/pkg/ulimit"
 )
 )
 
 
@@ -209,101 +210,47 @@ func NewLxcConfig(values []KeyValuePair) *LxcConfig {
 	return &LxcConfig{values}
 	return &LxcConfig{values}
 }
 }
 
 
-// CapList represents the list of capabilities of the container.
-type CapList struct {
-	caps []string
-}
-
-// MarshalJSON marshals (or serializes) the CapList into JSON.
-func (c *CapList) MarshalJSON() ([]byte, error) {
-	if c == nil {
-		return []byte{}, nil
-	}
-	return json.Marshal(c.Slice())
-}
-
-// UnmarshalJSON unmarshals (or deserializes) the specified byte slices
-// from JSON to a CapList.
-func (c *CapList) UnmarshalJSON(b []byte) error {
-	if len(b) == 0 {
-		return nil
-	}
-
-	var caps []string
-	if err := json.Unmarshal(b, &caps); err != nil {
-		var s string
-		if err := json.Unmarshal(b, &s); err != nil {
-			return err
-		}
-		caps = append(caps, s)
-	}
-	c.caps = caps
-
-	return nil
-}
-
-// Len returns the number of specific kernel capabilities.
-func (c *CapList) Len() int {
-	if c == nil {
-		return 0
-	}
-	return len(c.caps)
-}
-
-// Slice returns the specific capabilities into a slice of KeyValuePair.
-func (c *CapList) Slice() []string {
-	if c == nil {
-		return nil
-	}
-	return c.caps
-}
-
-// NewCapList creates a CapList from a slice of string.
-func NewCapList(caps []string) *CapList {
-	return &CapList{caps}
-}
-
 // HostConfig the non-portable Config structure of a container.
 // HostConfig the non-portable Config structure of a container.
 // Here, "non-portable" means "dependent of the host we are running on".
 // Here, "non-portable" means "dependent of the host we are running on".
 // Portable information *should* appear in Config.
 // Portable information *should* appear in Config.
 type HostConfig struct {
 type HostConfig struct {
-	Binds            []string         // List of volume bindings for this container
-	ContainerIDFile  string           // File (path) where the containerId is written
-	LxcConf          *LxcConfig       // Additional lxc configuration
-	Memory           int64            // Memory limit (in bytes)
-	MemorySwap       int64            // Total memory usage (memory + swap); set `-1` to disable swap
-	KernelMemory     int64            // Kernel memory limit (in bytes)
-	CPUShares        int64            `json:"CpuShares"` // CPU shares (relative weight vs. other containers)
-	CPUPeriod        int64            `json:"CpuPeriod"` // CPU CFS (Completely Fair Scheduler) period
-	CpusetCpus       string           // CpusetCpus 0-2, 0,1
-	CpusetMems       string           // CpusetMems 0-2, 0,1
-	CPUQuota         int64            `json:"CpuQuota"` // CPU CFS (Completely Fair Scheduler) quota
-	BlkioWeight      int64            // Block IO weight (relative weight vs. other containers)
-	OomKillDisable   bool             // Whether to disable OOM Killer or not
-	MemorySwappiness *int64           // Tuning container memory swappiness behaviour
-	Privileged       bool             // Is the container in privileged mode
-	PortBindings     nat.PortMap      // Port mapping between the exposed port (container) and the host
-	Links            []string         // List of links (in the name:alias form)
-	PublishAllPorts  bool             // Should docker publish all exposed port for the container
-	DNS              []string         `json:"Dns"`       // List of DNS server to lookup
-	DNSSearch        []string         `json:"DnsSearch"` // List of DNSSearch to look for
-	ExtraHosts       []string         // List of extra hosts
-	VolumesFrom      []string         // List of volumes to take from other container
-	Devices          []DeviceMapping  // List of devices to map inside the container
-	NetworkMode      NetworkMode      // Network namespace to use for the container
-	IpcMode          IpcMode          // IPC namespace to use for the container
-	PidMode          PidMode          // PID namespace to use for the container
-	UTSMode          UTSMode          // UTS namespace to use for the container
-	CapAdd           *CapList         // List of kernel capabilities to add to the container
-	CapDrop          *CapList         // List of kernel capabilities to remove from the container
-	GroupAdd         []string         // List of additional groups that the container process will run as
-	RestartPolicy    RestartPolicy    // Restart policy to be used for the container
-	SecurityOpt      []string         // List of string values to customize labels for MLS systems, such as SELinux.
-	ReadonlyRootfs   bool             // Is the container root filesystem in read-only
-	Ulimits          []*ulimit.Ulimit // List of ulimits to be set in the container
-	LogConfig        LogConfig        // Configuration of the logs for this container
-	CgroupParent     string           // Parent cgroup.
-	ConsoleSize      [2]int           // Initial console size on Windows
+	Binds            []string              // List of volume bindings for this container
+	ContainerIDFile  string                // File (path) where the containerId is written
+	LxcConf          *LxcConfig            // Additional lxc configuration
+	Memory           int64                 // Memory limit (in bytes)
+	MemorySwap       int64                 // Total memory usage (memory + swap); set `-1` to disable swap
+	KernelMemory     int64                 // Kernel memory limit (in bytes)
+	CPUShares        int64                 `json:"CpuShares"` // CPU shares (relative weight vs. other containers)
+	CPUPeriod        int64                 `json:"CpuPeriod"` // CPU CFS (Completely Fair Scheduler) period
+	CpusetCpus       string                // CpusetCpus 0-2, 0,1
+	CpusetMems       string                // CpusetMems 0-2, 0,1
+	CPUQuota         int64                 `json:"CpuQuota"` // CPU CFS (Completely Fair Scheduler) quota
+	BlkioWeight      int64                 // Block IO weight (relative weight vs. other containers)
+	OomKillDisable   bool                  // Whether to disable OOM Killer or not
+	MemorySwappiness *int64                // Tuning container memory swappiness behaviour
+	Privileged       bool                  // Is the container in privileged mode
+	PortBindings     nat.PortMap           // Port mapping between the exposed port (container) and the host
+	Links            []string              // List of links (in the name:alias form)
+	PublishAllPorts  bool                  // Should docker publish all exposed port for the container
+	DNS              []string              `json:"Dns"`       // List of DNS server to lookup
+	DNSSearch        []string              `json:"DnsSearch"` // List of DNSSearch to look for
+	ExtraHosts       []string              // List of extra hosts
+	VolumesFrom      []string              // List of volumes to take from other container
+	Devices          []DeviceMapping       // List of devices to map inside the container
+	NetworkMode      NetworkMode           // Network namespace to use for the container
+	IpcMode          IpcMode               // IPC namespace to use for the container
+	PidMode          PidMode               // PID namespace to use for the container
+	UTSMode          UTSMode               // UTS namespace to use for the container
+	CapAdd           *stringutils.StrSlice // List of kernel capabilities to add to the container
+	CapDrop          *stringutils.StrSlice // List of kernel capabilities to remove from the container
+	GroupAdd         []string              // List of additional groups that the container process will run as
+	RestartPolicy    RestartPolicy         // Restart policy to be used for the container
+	SecurityOpt      []string              // List of string values to customize labels for MLS systems, such as SELinux.
+	ReadonlyRootfs   bool                  // Is the container root filesystem in read-only
+	Ulimits          []*ulimit.Ulimit      // List of ulimits to be set in the container
+	LogConfig        LogConfig             // Configuration of the logs for this container
+	CgroupParent     string                // Parent cgroup.
+	ConsoleSize      [2]int                // Initial console size on Windows
 }
 }
 
 
 // DecodeHostConfig creates a HostConfig based on the specified Reader.
 // DecodeHostConfig creates a HostConfig based on the specified Reader.

+ 0 - 38
runconfig/hostconfig_test.go

@@ -4,7 +4,6 @@ package runconfig
 
 
 import (
 import (
 	"bytes"
 	"bytes"
-	"encoding/json"
 	"fmt"
 	"fmt"
 	"io/ioutil"
 	"io/ioutil"
 	"testing"
 	"testing"
@@ -267,40 +266,3 @@ func TestDecodeHostConfig(t *testing.T) {
 		}
 		}
 	}
 	}
 }
 }
-
-func TestCapListUnmarshalSliceAndString(t *testing.T) {
-	var cl *CapList
-	cap0, err := json.Marshal([]string{"CAP_SOMETHING"})
-	if err != nil {
-		t.Fatal(err)
-	}
-	if err := json.Unmarshal(cap0, &cl); err != nil {
-		t.Fatal(err)
-	}
-
-	slice := cl.Slice()
-	if len(slice) != 1 {
-		t.Fatalf("expected 1 element after unmarshal: %q", slice)
-	}
-
-	if slice[0] != "CAP_SOMETHING" {
-		t.Fatalf("expected `CAP_SOMETHING`, got: %q", slice[0])
-	}
-
-	cap1, err := json.Marshal("CAP_SOMETHING")
-	if err != nil {
-		t.Fatal(err)
-	}
-	if err := json.Unmarshal(cap1, &cl); err != nil {
-		t.Fatal(err)
-	}
-
-	slice = cl.Slice()
-	if len(slice) != 1 {
-		t.Fatalf("expected 1 element after unmarshal: %q", slice)
-	}
-
-	if slice[0] != "CAP_SOMETHING" {
-		t.Fatalf("expected `CAP_SOMETHING`, got: %q", slice[0])
-	}
-}

+ 2 - 2
runconfig/parse.go

@@ -353,8 +353,8 @@ func Parse(cmd *flag.FlagSet, args []string) (*Config, *HostConfig, *flag.FlagSe
 		PidMode:          pidMode,
 		PidMode:          pidMode,
 		UTSMode:          utsMode,
 		UTSMode:          utsMode,
 		Devices:          deviceMappings,
 		Devices:          deviceMappings,
-		CapAdd:           NewCapList(flCapAdd.GetAll()),
-		CapDrop:          NewCapList(flCapDrop.GetAll()),
+		CapAdd:           stringutils.NewStrSlice(flCapAdd.GetAll()...),
+		CapDrop:          stringutils.NewStrSlice(flCapDrop.GetAll()...),
 		GroupAdd:         flGroupAdd.GetAll(),
 		GroupAdd:         flGroupAdd.GetAll(),
 		RestartPolicy:    restartPolicy,
 		RestartPolicy:    restartPolicy,
 		SecurityOpt:      flSecurityOpt.GetAll(),
 		SecurityOpt:      flSecurityOpt.GetAll(),