docker_config.go 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. package config
  2. import (
  3. "fmt"
  4. "os"
  5. "github.com/fatih/structs"
  6. )
  7. func (d *DockerConfig) FullArgs() []string {
  8. args := []string{}
  9. args = append(args, generateEngineOptsSlice(d.EngineOpts)...)
  10. args = append(args, d.ExtraArgs...)
  11. if d.TLS {
  12. args = append(args, d.TLSArgs...)
  13. }
  14. return args
  15. }
  16. func (d *DockerConfig) AppendEnv() []string {
  17. return append(os.Environ(), d.Environment...)
  18. }
  19. func generateEngineOptsSlice(opts EngineOpts) []string {
  20. optsStruct := structs.New(opts)
  21. var optsSlice []string
  22. for k, v := range optsStruct.Map() {
  23. optTag := optsStruct.Field(k).Tag("opt")
  24. switch value := v.(type) {
  25. case string:
  26. if value != "" {
  27. optsSlice = append(optsSlice, fmt.Sprintf("--%s", optTag), value)
  28. }
  29. case *bool:
  30. if value != nil {
  31. if *value {
  32. optsSlice = append(optsSlice, fmt.Sprintf("--%s", optTag))
  33. } else {
  34. optsSlice = append(optsSlice, fmt.Sprintf("--%s=false", optTag))
  35. }
  36. }
  37. case []string:
  38. for _, elem := range value {
  39. if elem != "" {
  40. optsSlice = append(optsSlice, fmt.Sprintf("--%s", optTag), elem)
  41. }
  42. }
  43. case map[string]string:
  44. for k, v := range value {
  45. if v != "" {
  46. optsSlice = append(optsSlice, fmt.Sprintf("--%s", optTag), fmt.Sprintf("%s=%s", k, v))
  47. }
  48. }
  49. }
  50. }
  51. return optsSlice
  52. }