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  }