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