Signed-off-by: Daniel Nephin <dnephin@docker.com>
| ... | ... |
@@ -27,9 +27,9 @@ import ( |
| 27 | 27 |
flag "github.com/docker/docker/pkg/mflag" |
| 28 | 28 |
"github.com/docker/docker/pkg/progress" |
| 29 | 29 |
"github.com/docker/docker/pkg/streamformatter" |
| 30 |
- "github.com/docker/docker/pkg/ulimit" |
|
| 31 | 30 |
"github.com/docker/docker/pkg/urlutil" |
| 32 | 31 |
"github.com/docker/docker/reference" |
| 32 |
+ runconfigopts "github.com/docker/docker/runconfig/opts" |
|
| 33 | 33 |
"github.com/docker/docker/utils" |
| 34 | 34 |
"github.com/docker/go-units" |
| 35 | 35 |
) |
| ... | ... |
@@ -62,8 +62,8 @@ func (cli *DockerCli) CmdBuild(args ...string) error {
|
| 62 | 62 |
cmd.Var(&flBuildArg, []string{"-build-arg"}, "Set build-time variables")
|
| 63 | 63 |
isolation := cmd.String([]string{"-isolation"}, "", "Container isolation level")
|
| 64 | 64 |
|
| 65 |
- ulimits := make(map[string]*ulimit.Ulimit) |
|
| 66 |
- flUlimits := opts.NewUlimitOpt(&ulimits) |
|
| 65 |
+ ulimits := make(map[string]*units.Ulimit) |
|
| 66 |
+ flUlimits := runconfigopts.NewUlimitOpt(&ulimits) |
|
| 67 | 67 |
cmd.Var(flUlimits, []string{"-ulimit"}, "Ulimit options")
|
| 68 | 68 |
|
| 69 | 69 |
cmd.Require(flag.Exact, 1) |
| ... | ... |
@@ -7,7 +7,8 @@ import ( |
| 7 | 7 |
|
| 8 | 8 |
"github.com/docker/docker/opts" |
| 9 | 9 |
flag "github.com/docker/docker/pkg/mflag" |
| 10 |
- "github.com/docker/docker/pkg/ulimit" |
|
| 10 |
+ runconfigopts "github.com/docker/docker/runconfig/opts" |
|
| 11 |
+ "github.com/docker/go-units" |
|
| 11 | 12 |
) |
| 12 | 13 |
|
| 13 | 14 |
var ( |
| ... | ... |
@@ -27,7 +28,7 @@ type Config struct {
|
| 27 | 27 |
EnableSelinuxSupport bool |
| 28 | 28 |
RemappedRoot string |
| 29 | 29 |
SocketGroup string |
| 30 |
- Ulimits map[string]*ulimit.Ulimit |
|
| 30 |
+ Ulimits map[string]*units.Ulimit |
|
| 31 | 31 |
} |
| 32 | 32 |
|
| 33 | 33 |
// bridgeConfig stores all the bridge driver specific |
| ... | ... |
@@ -59,8 +60,8 @@ func (config *Config) InstallFlags(cmd *flag.FlagSet, usageFn func(string) strin |
| 59 | 59 |
// Then platform-specific install flags |
| 60 | 60 |
cmd.BoolVar(&config.EnableSelinuxSupport, []string{"-selinux-enabled"}, false, usageFn("Enable selinux support"))
|
| 61 | 61 |
cmd.StringVar(&config.SocketGroup, []string{"G", "-group"}, "docker", usageFn("Group for the unix socket"))
|
| 62 |
- config.Ulimits = make(map[string]*ulimit.Ulimit) |
|
| 63 |
- cmd.Var(opts.NewUlimitOpt(&config.Ulimits), []string{"-default-ulimit"}, usageFn("Set default ulimits for containers"))
|
|
| 62 |
+ config.Ulimits = make(map[string]*units.Ulimit) |
|
| 63 |
+ cmd.Var(runconfigopts.NewUlimitOpt(&config.Ulimits), []string{"-default-ulimit"}, usageFn("Set default ulimits for containers"))
|
|
| 64 | 64 |
cmd.BoolVar(&config.Bridge.EnableIPTables, []string{"#iptables", "-iptables"}, true, usageFn("Enable addition of iptables rules"))
|
| 65 | 65 |
cmd.BoolVar(&config.Bridge.EnableIPForward, []string{"#ip-forward", "-ip-forward"}, true, usageFn("Enable net.ipv4.ip_forward"))
|
| 66 | 66 |
cmd.BoolVar(&config.Bridge.EnableIPMasq, []string{"-ip-masq"}, true, usageFn("Enable IP masquerading"))
|
| 67 | 67 |
deleted file mode 100644 |
| ... | ... |
@@ -1,52 +0,0 @@ |
| 1 |
-package opts |
|
| 2 |
- |
|
| 3 |
-import ( |
|
| 4 |
- "fmt" |
|
| 5 |
- |
|
| 6 |
- "github.com/docker/docker/pkg/ulimit" |
|
| 7 |
-) |
|
| 8 |
- |
|
| 9 |
-// UlimitOpt defines a map of Ulimits |
|
| 10 |
-type UlimitOpt struct {
|
|
| 11 |
- values *map[string]*ulimit.Ulimit |
|
| 12 |
-} |
|
| 13 |
- |
|
| 14 |
-// NewUlimitOpt creates a new UlimitOpt |
|
| 15 |
-func NewUlimitOpt(ref *map[string]*ulimit.Ulimit) *UlimitOpt {
|
|
| 16 |
- if ref == nil {
|
|
| 17 |
- ref = &map[string]*ulimit.Ulimit{}
|
|
| 18 |
- } |
|
| 19 |
- return &UlimitOpt{ref}
|
|
| 20 |
-} |
|
| 21 |
- |
|
| 22 |
-// Set validates a Ulimit and sets its name as a key in UlimitOpt |
|
| 23 |
-func (o *UlimitOpt) Set(val string) error {
|
|
| 24 |
- l, err := ulimit.Parse(val) |
|
| 25 |
- if err != nil {
|
|
| 26 |
- return err |
|
| 27 |
- } |
|
| 28 |
- |
|
| 29 |
- (*o.values)[l.Name] = l |
|
| 30 |
- |
|
| 31 |
- return nil |
|
| 32 |
-} |
|
| 33 |
- |
|
| 34 |
-// String returns Ulimit values as a string. |
|
| 35 |
-func (o *UlimitOpt) String() string {
|
|
| 36 |
- var out []string |
|
| 37 |
- for _, v := range *o.values {
|
|
| 38 |
- out = append(out, v.String()) |
|
| 39 |
- } |
|
| 40 |
- |
|
| 41 |
- return fmt.Sprintf("%v", out)
|
|
| 42 |
-} |
|
| 43 |
- |
|
| 44 |
-// GetList returns a slice of pointers to Ulimits. |
|
| 45 |
-func (o *UlimitOpt) GetList() []*ulimit.Ulimit {
|
|
| 46 |
- var ulimits []*ulimit.Ulimit |
|
| 47 |
- for _, v := range *o.values {
|
|
| 48 |
- ulimits = append(ulimits, v) |
|
| 49 |
- } |
|
| 50 |
- |
|
| 51 |
- return ulimits |
|
| 52 |
-} |
| 53 | 1 |
deleted file mode 100644 |
| ... | ... |
@@ -1,42 +0,0 @@ |
| 1 |
-package opts |
|
| 2 |
- |
|
| 3 |
-import ( |
|
| 4 |
- "testing" |
|
| 5 |
- |
|
| 6 |
- "github.com/docker/docker/pkg/ulimit" |
|
| 7 |
-) |
|
| 8 |
- |
|
| 9 |
-func TestUlimitOpt(t *testing.T) {
|
|
| 10 |
- ulimitMap := map[string]*ulimit.Ulimit{
|
|
| 11 |
- "nofile": {"nofile", 1024, 512},
|
|
| 12 |
- } |
|
| 13 |
- |
|
| 14 |
- ulimitOpt := NewUlimitOpt(&ulimitMap) |
|
| 15 |
- |
|
| 16 |
- expected := "[nofile=512:1024]" |
|
| 17 |
- if ulimitOpt.String() != expected {
|
|
| 18 |
- t.Fatalf("Expected %v, got %v", expected, ulimitOpt)
|
|
| 19 |
- } |
|
| 20 |
- |
|
| 21 |
- // Valid ulimit append to opts |
|
| 22 |
- if err := ulimitOpt.Set("core=1024:1024"); err != nil {
|
|
| 23 |
- t.Fatal(err) |
|
| 24 |
- } |
|
| 25 |
- |
|
| 26 |
- // Invalid ulimit type returns an error and do not append to opts |
|
| 27 |
- if err := ulimitOpt.Set("notavalidtype=1024:1024"); err == nil {
|
|
| 28 |
- t.Fatalf("Expected error on invalid ulimit type")
|
|
| 29 |
- } |
|
| 30 |
- expected = "[nofile=512:1024 core=1024:1024]" |
|
| 31 |
- expected2 := "[core=1024:1024 nofile=512:1024]" |
|
| 32 |
- result := ulimitOpt.String() |
|
| 33 |
- if result != expected && result != expected2 {
|
|
| 34 |
- t.Fatalf("Expected %v or %v, got %v", expected, expected2, ulimitOpt)
|
|
| 35 |
- } |
|
| 36 |
- |
|
| 37 |
- // And test GetList |
|
| 38 |
- ulimits := ulimitOpt.GetList() |
|
| 39 |
- if len(ulimits) != 2 {
|
|
| 40 |
- t.Fatalf("Expected a ulimit list of 2, got %v", ulimits)
|
|
| 41 |
- } |
|
| 42 |
-} |
| 43 | 1 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,52 @@ |
| 0 |
+package opts |
|
| 1 |
+ |
|
| 2 |
+import ( |
|
| 3 |
+ "fmt" |
|
| 4 |
+ |
|
| 5 |
+ "github.com/docker/go-units" |
|
| 6 |
+) |
|
| 7 |
+ |
|
| 8 |
+// UlimitOpt defines a map of Ulimits |
|
| 9 |
+type UlimitOpt struct {
|
|
| 10 |
+ values *map[string]*units.Ulimit |
|
| 11 |
+} |
|
| 12 |
+ |
|
| 13 |
+// NewUlimitOpt creates a new UlimitOpt |
|
| 14 |
+func NewUlimitOpt(ref *map[string]*units.Ulimit) *UlimitOpt {
|
|
| 15 |
+ if ref == nil {
|
|
| 16 |
+ ref = &map[string]*units.Ulimit{}
|
|
| 17 |
+ } |
|
| 18 |
+ return &UlimitOpt{ref}
|
|
| 19 |
+} |
|
| 20 |
+ |
|
| 21 |
+// Set validates a Ulimit and sets its name as a key in UlimitOpt |
|
| 22 |
+func (o *UlimitOpt) Set(val string) error {
|
|
| 23 |
+ l, err := units.ParseUlimit(val) |
|
| 24 |
+ if err != nil {
|
|
| 25 |
+ return err |
|
| 26 |
+ } |
|
| 27 |
+ |
|
| 28 |
+ (*o.values)[l.Name] = l |
|
| 29 |
+ |
|
| 30 |
+ return nil |
|
| 31 |
+} |
|
| 32 |
+ |
|
| 33 |
+// String returns Ulimit values as a string. |
|
| 34 |
+func (o *UlimitOpt) String() string {
|
|
| 35 |
+ var out []string |
|
| 36 |
+ for _, v := range *o.values {
|
|
| 37 |
+ out = append(out, v.String()) |
|
| 38 |
+ } |
|
| 39 |
+ |
|
| 40 |
+ return fmt.Sprintf("%v", out)
|
|
| 41 |
+} |
|
| 42 |
+ |
|
| 43 |
+// GetList returns a slice of pointers to Ulimits. |
|
| 44 |
+func (o *UlimitOpt) GetList() []*units.Ulimit {
|
|
| 45 |
+ var ulimits []*units.Ulimit |
|
| 46 |
+ for _, v := range *o.values {
|
|
| 47 |
+ ulimits = append(ulimits, v) |
|
| 48 |
+ } |
|
| 49 |
+ |
|
| 50 |
+ return ulimits |
|
| 51 |
+} |
| 0 | 52 |
new file mode 100644 |
| ... | ... |
@@ -0,0 +1,42 @@ |
| 0 |
+package opts |
|
| 1 |
+ |
|
| 2 |
+import ( |
|
| 3 |
+ "testing" |
|
| 4 |
+ |
|
| 5 |
+ "github.com/docker/go-units" |
|
| 6 |
+) |
|
| 7 |
+ |
|
| 8 |
+func TestUlimitOpt(t *testing.T) {
|
|
| 9 |
+ ulimitMap := map[string]*units.Ulimit{
|
|
| 10 |
+ "nofile": {"nofile", 1024, 512},
|
|
| 11 |
+ } |
|
| 12 |
+ |
|
| 13 |
+ ulimitOpt := NewUlimitOpt(&ulimitMap) |
|
| 14 |
+ |
|
| 15 |
+ expected := "[nofile=512:1024]" |
|
| 16 |
+ if ulimitOpt.String() != expected {
|
|
| 17 |
+ t.Fatalf("Expected %v, got %v", expected, ulimitOpt)
|
|
| 18 |
+ } |
|
| 19 |
+ |
|
| 20 |
+ // Valid ulimit append to opts |
|
| 21 |
+ if err := ulimitOpt.Set("core=1024:1024"); err != nil {
|
|
| 22 |
+ t.Fatal(err) |
|
| 23 |
+ } |
|
| 24 |
+ |
|
| 25 |
+ // Invalid ulimit type returns an error and do not append to opts |
|
| 26 |
+ if err := ulimitOpt.Set("notavalidtype=1024:1024"); err == nil {
|
|
| 27 |
+ t.Fatalf("Expected error on invalid ulimit type")
|
|
| 28 |
+ } |
|
| 29 |
+ expected = "[nofile=512:1024 core=1024:1024]" |
|
| 30 |
+ expected2 := "[core=1024:1024 nofile=512:1024]" |
|
| 31 |
+ result := ulimitOpt.String() |
|
| 32 |
+ if result != expected && result != expected2 {
|
|
| 33 |
+ t.Fatalf("Expected %v or %v, got %v", expected, expected2, ulimitOpt)
|
|
| 34 |
+ } |
|
| 35 |
+ |
|
| 36 |
+ // And test GetList |
|
| 37 |
+ ulimits := ulimitOpt.GetList() |
|
| 38 |
+ if len(ulimits) != 2 {
|
|
| 39 |
+ t.Fatalf("Expected a ulimit list of 2, got %v", ulimits)
|
|
| 40 |
+ } |
|
| 41 |
+} |
| ... | ... |
@@ -12,6 +12,7 @@ import ( |
| 12 | 12 |
flag "github.com/docker/docker/pkg/mflag" |
| 13 | 13 |
"github.com/docker/docker/pkg/mount" |
| 14 | 14 |
"github.com/docker/docker/pkg/signal" |
| 15 |
+ runconfigopts "github.com/docker/docker/runconfig/opts" |
|
| 15 | 16 |
"github.com/docker/docker/volume" |
| 16 | 17 |
"github.com/docker/go-connections/nat" |
| 17 | 18 |
"github.com/docker/go-units" |
| ... | ... |
@@ -63,7 +64,7 @@ func Parse(cmd *flag.FlagSet, args []string) (*container.Config, *container.Host |
| 63 | 63 |
flLabels = opts.NewListOpts(opts.ValidateEnv) |
| 64 | 64 |
flDevices = opts.NewListOpts(ValidateDevice) |
| 65 | 65 |
|
| 66 |
- flUlimits = opts.NewUlimitOpt(nil) |
|
| 66 |
+ flUlimits = runconfigopts.NewUlimitOpt(nil) |
|
| 67 | 67 |
|
| 68 | 68 |
flPublish = opts.NewListOpts(nil) |
| 69 | 69 |
flExpose = opts.NewListOpts(nil) |