ulimit.go 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package opts
  2. import (
  3. "fmt"
  4. "github.com/docker/go-units"
  5. )
  6. // UlimitOpt defines a map of Ulimits
  7. type UlimitOpt struct {
  8. values *map[string]*units.Ulimit
  9. }
  10. // NewUlimitOpt creates a new UlimitOpt
  11. func NewUlimitOpt(ref *map[string]*units.Ulimit) *UlimitOpt {
  12. if ref == nil {
  13. ref = &map[string]*units.Ulimit{}
  14. }
  15. return &UlimitOpt{ref}
  16. }
  17. // Set validates a Ulimit and sets its name as a key in UlimitOpt
  18. func (o *UlimitOpt) Set(val string) error {
  19. l, err := units.ParseUlimit(val)
  20. if err != nil {
  21. return err
  22. }
  23. (*o.values)[l.Name] = l
  24. return nil
  25. }
  26. // String returns Ulimit values as a string.
  27. func (o *UlimitOpt) String() string {
  28. var out []string
  29. for _, v := range *o.values {
  30. out = append(out, v.String())
  31. }
  32. return fmt.Sprintf("%v", out)
  33. }
  34. // GetList returns a slice of pointers to Ulimits.
  35. func (o *UlimitOpt) GetList() []*units.Ulimit {
  36. var ulimits []*units.Ulimit
  37. for _, v := range *o.values {
  38. ulimits = append(ulimits, v)
  39. }
  40. return ulimits
  41. }
  42. // Type returns the option type
  43. func (o *UlimitOpt) Type() string {
  44. return "ulimit"
  45. }