github.com/ali-iotechsys/cli@v20.10.0+incompatible/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  }