From 473eb9a2c575f88578b674661e48ce2154eb6023 Mon Sep 17 00:00:00 2001 From: Brian Goff Date: Wed, 11 Feb 2015 14:21:38 -0500 Subject: [PATCH] Allow setting ulimits for containers Signed-off-by: Brian Goff --- opts/opts.go | 5 +++++ opts/ulimit.go | 44 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 opts/ulimit.go diff --git a/opts/opts.go b/opts/opts.go index e2596983cf..6b42fa6871 100644 --- a/opts/opts.go +++ b/opts/opts.go @@ -11,6 +11,7 @@ import ( "github.com/docker/docker/api" flag "github.com/docker/docker/pkg/mflag" "github.com/docker/docker/pkg/parsers" + "github.com/docker/docker/pkg/ulimit" "github.com/docker/docker/utils" ) @@ -43,6 +44,10 @@ func LabelListVar(values *[]string, names []string, usage string) { flag.Var(newListOptsRef(values, ValidateLabel), names, usage) } +func UlimitMapVar(values map[string]*ulimit.Ulimit, names []string, usage string) { + flag.Var(NewUlimitOpt(values), names, usage) +} + // ListOpts type type ListOpts struct { values *[]string diff --git a/opts/ulimit.go b/opts/ulimit.go new file mode 100644 index 0000000000..361eadf220 --- /dev/null +++ b/opts/ulimit.go @@ -0,0 +1,44 @@ +package opts + +import ( + "fmt" + + "github.com/docker/docker/pkg/ulimit" +) + +type UlimitOpt struct { + values map[string]*ulimit.Ulimit +} + +func NewUlimitOpt(ref map[string]*ulimit.Ulimit) *UlimitOpt { + return &UlimitOpt{ref} +} + +func (o *UlimitOpt) Set(val string) error { + l, err := ulimit.Parse(val) + if err != nil { + return err + } + + o.values[l.Name] = l + + return nil +} + +func (o *UlimitOpt) String() string { + var out []string + for _, v := range o.values { + out = append(out, v.String()) + } + + return fmt.Sprintf("%v", out) +} + +func (o *UlimitOpt) GetList() []*ulimit.Ulimit { + var ulimits []*ulimit.Ulimit + for _, v := range o.values { + ulimits = append(ulimits, v) + } + + return ulimits +}