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