1
0
Fork 0
mirror of https://github.com/moby/moby.git synced 2022-11-09 12:21:53 -05:00

Merge pull request #15988 from runcom/use-stringutils-strslice

Use StrSlice from pkg/stringutils
This commit is contained in:
Alexander Morozov 2015-09-01 14:32:58 -07:00
commit 3111aa7293
3 changed files with 40 additions and 131 deletions

View file

@ -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 Binds []string // List of volume bindings for this container
ContainerIDFile string // File (path) where the containerId is written ContainerIDFile string // File (path) where the containerId is written
LxcConf *LxcConfig // Additional lxc configuration LxcConf *LxcConfig // Additional lxc configuration
Memory int64 // Memory limit (in bytes) Memory int64 // Memory limit (in bytes)
MemorySwap int64 // Total memory usage (memory + swap); set `-1` to disable swap MemorySwap int64 // Total memory usage (memory + swap); set `-1` to disable swap
KernelMemory int64 // Kernel memory limit (in bytes) KernelMemory int64 // Kernel memory limit (in bytes)
CPUShares int64 `json:"CpuShares"` // CPU shares (relative weight vs. other containers) CPUShares int64 `json:"CpuShares"` // CPU shares (relative weight vs. other containers)
CPUPeriod int64 `json:"CpuPeriod"` // CPU CFS (Completely Fair Scheduler) period CPUPeriod int64 `json:"CpuPeriod"` // CPU CFS (Completely Fair Scheduler) period
CpusetCpus string // CpusetCpus 0-2, 0,1 CpusetCpus string // CpusetCpus 0-2, 0,1
CpusetMems string // CpusetMems 0-2, 0,1 CpusetMems string // CpusetMems 0-2, 0,1
CPUQuota int64 `json:"CpuQuota"` // CPU CFS (Completely Fair Scheduler) quota CPUQuota int64 `json:"CpuQuota"` // CPU CFS (Completely Fair Scheduler) quota
BlkioWeight int64 // Block IO weight (relative weight vs. other containers) BlkioWeight int64 // Block IO weight (relative weight vs. other containers)
OomKillDisable bool // Whether to disable OOM Killer or not OomKillDisable bool // Whether to disable OOM Killer or not
MemorySwappiness *int64 // Tuning container memory swappiness behaviour MemorySwappiness *int64 // Tuning container memory swappiness behaviour
Privileged bool // Is the container in privileged mode Privileged bool // Is the container in privileged mode
PortBindings nat.PortMap // Port mapping between the exposed port (container) and the host PortBindings nat.PortMap // Port mapping between the exposed port (container) and the host
Links []string // List of links (in the name:alias form) Links []string // List of links (in the name:alias form)
PublishAllPorts bool // Should docker publish all exposed port for the container PublishAllPorts bool // Should docker publish all exposed port for the container
DNS []string `json:"Dns"` // List of DNS server to lookup DNS []string `json:"Dns"` // List of DNS server to lookup
DNSSearch []string `json:"DnsSearch"` // List of DNSSearch to look for DNSSearch []string `json:"DnsSearch"` // List of DNSSearch to look for
ExtraHosts []string // List of extra hosts ExtraHosts []string // List of extra hosts
VolumesFrom []string // List of volumes to take from other container VolumesFrom []string // List of volumes to take from other container
Devices []DeviceMapping // List of devices to map inside the container Devices []DeviceMapping // List of devices to map inside the container
NetworkMode NetworkMode // Network namespace to use for the container NetworkMode NetworkMode // Network namespace to use for the container
IpcMode IpcMode // IPC namespace to use for the container IpcMode IpcMode // IPC namespace to use for the container
PidMode PidMode // PID namespace to use for the container PidMode PidMode // PID namespace to use for the container
UTSMode UTSMode // UTS 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 CapAdd *stringutils.StrSlice // List of kernel capabilities to add to the container
CapDrop *CapList // List of kernel capabilities to remove from 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 GroupAdd []string // List of additional groups that the container process will run as
RestartPolicy RestartPolicy // Restart policy to be used for the container 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. 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 ReadonlyRootfs bool // Is the container root filesystem in read-only
Ulimits []*ulimit.Ulimit // List of ulimits to be set in the container Ulimits []*ulimit.Ulimit // List of ulimits to be set in the container
LogConfig LogConfig // Configuration of the logs for this container LogConfig LogConfig // Configuration of the logs for this container
CgroupParent string // Parent cgroup. CgroupParent string // Parent cgroup.
ConsoleSize [2]int // Initial console size on Windows 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.

View file

@ -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])
}
}

View file

@ -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()), CapAdd: stringutils.NewStrSlice(flCapAdd.GetAll()...),
CapDrop: NewCapList(flCapDrop.GetAll()), CapDrop: stringutils.NewStrSlice(flCapDrop.GetAll()...),
GroupAdd: flGroupAdd.GetAll(), GroupAdd: flGroupAdd.GetAll(),
RestartPolicy: restartPolicy, RestartPolicy: restartPolicy,
SecurityOpt: flSecurityOpt.GetAll(), SecurityOpt: flSecurityOpt.GetAll(),