node.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. package builders
  2. import (
  3. "time"
  4. "github.com/docker/docker/api/types/swarm"
  5. )
  6. // Node creates a node with default values.
  7. // Any number of node function builder can be pass to augment it.
  8. func Node(builders ...func(*swarm.Node)) *swarm.Node {
  9. t1 := time.Date(2009, time.November, 10, 23, 0, 0, 0, time.UTC)
  10. node := &swarm.Node{
  11. ID: "nodeID",
  12. Meta: swarm.Meta{
  13. CreatedAt: t1,
  14. },
  15. Description: swarm.NodeDescription{
  16. Hostname: "defaultNodeHostname",
  17. Platform: swarm.Platform{
  18. Architecture: "x86_64",
  19. OS: "linux",
  20. },
  21. Resources: swarm.Resources{
  22. NanoCPUs: 4,
  23. MemoryBytes: 20 * 1024 * 1024,
  24. },
  25. Engine: swarm.EngineDescription{
  26. EngineVersion: "1.13.0",
  27. Labels: map[string]string{
  28. "engine": "label",
  29. },
  30. Plugins: []swarm.PluginDescription{
  31. {
  32. Type: "Volume",
  33. Name: "local",
  34. },
  35. {
  36. Type: "Network",
  37. Name: "bridge",
  38. },
  39. {
  40. Type: "Network",
  41. Name: "overlay",
  42. },
  43. },
  44. },
  45. },
  46. Status: swarm.NodeStatus{
  47. State: swarm.NodeStateReady,
  48. Addr: "127.0.0.1",
  49. },
  50. Spec: swarm.NodeSpec{
  51. Annotations: swarm.Annotations{
  52. Name: "defaultNodeName",
  53. },
  54. Role: swarm.NodeRoleWorker,
  55. Availability: swarm.NodeAvailabilityActive,
  56. },
  57. }
  58. for _, builder := range builders {
  59. builder(node)
  60. }
  61. return node
  62. }
  63. // NodeID sets the node id
  64. func NodeID(id string) func(*swarm.Node) {
  65. return func(node *swarm.Node) {
  66. node.ID = id
  67. }
  68. }
  69. // NodeLabels sets the node labels
  70. func NodeLabels(labels map[string]string) func(*swarm.Node) {
  71. return func(node *swarm.Node) {
  72. node.Spec.Labels = labels
  73. }
  74. }
  75. // Hostname sets the node hostname
  76. func Hostname(hostname string) func(*swarm.Node) {
  77. return func(node *swarm.Node) {
  78. node.Description.Hostname = hostname
  79. }
  80. }
  81. // Leader sets the current node as a leader
  82. func Leader() func(*swarm.ManagerStatus) {
  83. return func(managerStatus *swarm.ManagerStatus) {
  84. managerStatus.Leader = true
  85. }
  86. }
  87. // Manager set the current node as a manager
  88. func Manager(managerStatusBuilders ...func(*swarm.ManagerStatus)) func(*swarm.Node) {
  89. return func(node *swarm.Node) {
  90. node.Spec.Role = swarm.NodeRoleManager
  91. node.ManagerStatus = ManagerStatus(managerStatusBuilders...)
  92. }
  93. }
  94. // ManagerStatus create a ManageStatus with default values.
  95. func ManagerStatus(managerStatusBuilders ...func(*swarm.ManagerStatus)) *swarm.ManagerStatus {
  96. managerStatus := &swarm.ManagerStatus{
  97. Reachability: swarm.ReachabilityReachable,
  98. Addr: "127.0.0.1",
  99. }
  100. for _, builder := range managerStatusBuilders {
  101. builder(managerStatus)
  102. }
  103. return managerStatus
  104. }