string.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package genericresource
  2. import (
  3. "strconv"
  4. "strings"
  5. "github.com/docker/swarmkit/api"
  6. )
  7. func discreteToString(d *api.GenericResource_DiscreteResourceSpec) string {
  8. return strconv.FormatInt(d.DiscreteResourceSpec.Value, 10)
  9. }
  10. // Kind returns the kind key as a string
  11. func Kind(res *api.GenericResource) string {
  12. switch r := res.Resource.(type) {
  13. case *api.GenericResource_DiscreteResourceSpec:
  14. return r.DiscreteResourceSpec.Kind
  15. case *api.GenericResource_NamedResourceSpec:
  16. return r.NamedResourceSpec.Kind
  17. }
  18. return ""
  19. }
  20. // Value returns the value key as a string
  21. func Value(res *api.GenericResource) string {
  22. switch res := res.Resource.(type) {
  23. case *api.GenericResource_DiscreteResourceSpec:
  24. return discreteToString(res)
  25. case *api.GenericResource_NamedResourceSpec:
  26. return res.NamedResourceSpec.Value
  27. }
  28. return ""
  29. }
  30. // EnvFormat returns the environment string version of the resource
  31. func EnvFormat(res []*api.GenericResource, prefix string) []string {
  32. envs := make(map[string][]string)
  33. for _, v := range res {
  34. key := Kind(v)
  35. val := Value(v)
  36. envs[key] = append(envs[key], val)
  37. }
  38. env := make([]string, 0, len(res))
  39. for k, v := range envs {
  40. k = strings.ToUpper(prefix + "_" + k)
  41. env = append(env, k+"="+strings.Join(v, ","))
  42. }
  43. return env
  44. }