network.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. package formatter
  2. import (
  3. "fmt"
  4. "strings"
  5. "github.com/docker/docker/api/types"
  6. "github.com/docker/docker/pkg/stringid"
  7. )
  8. const (
  9. defaultNetworkTableFormat = "table {{.ID}}\t{{.Name}}\t{{.Driver}}\t{{.Scope}}"
  10. networkIDHeader = "NETWORK ID"
  11. ipv6Header = "IPV6"
  12. internalHeader = "INTERNAL"
  13. )
  14. // NewNetworkFormat returns a Format for rendering using a network Context
  15. func NewNetworkFormat(source string, quiet bool) Format {
  16. switch source {
  17. case TableFormatKey:
  18. if quiet {
  19. return defaultQuietFormat
  20. }
  21. return defaultNetworkTableFormat
  22. case RawFormatKey:
  23. if quiet {
  24. return `network_id: {{.ID}}`
  25. }
  26. return `network_id: {{.ID}}\nname: {{.Name}}\ndriver: {{.Driver}}\nscope: {{.Scope}}\n`
  27. }
  28. return Format(source)
  29. }
  30. // NetworkWrite writes the context
  31. func NetworkWrite(ctx Context, networks []types.NetworkResource) error {
  32. render := func(format func(subContext subContext) error) error {
  33. for _, network := range networks {
  34. networkCtx := &networkContext{trunc: ctx.Trunc, n: network}
  35. if err := format(networkCtx); err != nil {
  36. return err
  37. }
  38. }
  39. return nil
  40. }
  41. return ctx.Write(&networkContext{}, render)
  42. }
  43. type networkContext struct {
  44. HeaderContext
  45. trunc bool
  46. n types.NetworkResource
  47. }
  48. func (c *networkContext) MarshalJSON() ([]byte, error) {
  49. return marshalJSON(c)
  50. }
  51. func (c *networkContext) ID() string {
  52. c.AddHeader(networkIDHeader)
  53. if c.trunc {
  54. return stringid.TruncateID(c.n.ID)
  55. }
  56. return c.n.ID
  57. }
  58. func (c *networkContext) Name() string {
  59. c.AddHeader(nameHeader)
  60. return c.n.Name
  61. }
  62. func (c *networkContext) Driver() string {
  63. c.AddHeader(driverHeader)
  64. return c.n.Driver
  65. }
  66. func (c *networkContext) Scope() string {
  67. c.AddHeader(scopeHeader)
  68. return c.n.Scope
  69. }
  70. func (c *networkContext) IPv6() string {
  71. c.AddHeader(ipv6Header)
  72. return fmt.Sprintf("%v", c.n.EnableIPv6)
  73. }
  74. func (c *networkContext) Internal() string {
  75. c.AddHeader(internalHeader)
  76. return fmt.Sprintf("%v", c.n.Internal)
  77. }
  78. func (c *networkContext) Labels() string {
  79. c.AddHeader(labelsHeader)
  80. if c.n.Labels == nil {
  81. return ""
  82. }
  83. var joinLabels []string
  84. for k, v := range c.n.Labels {
  85. joinLabels = append(joinLabels, fmt.Sprintf("%s=%s", k, v))
  86. }
  87. return strings.Join(joinLabels, ",")
  88. }
  89. func (c *networkContext) Label(name string) string {
  90. n := strings.Split(name, ".")
  91. r := strings.NewReplacer("-", " ", "_", " ")
  92. h := r.Replace(n[len(n)-1])
  93. c.AddHeader(h)
  94. if c.n.Labels == nil {
  95. return ""
  96. }
  97. return c.n.Labels[name]
  98. }