github.com/Heebron/moby@v0.0.0-20221111184709-6eab4f55faf7/api/types/swarm/node.go (about)

     1  package swarm // import "github.com/docker/docker/api/types/swarm"
     2  
     3  // Node represents a node.
     4  type Node struct {
     5  	ID string
     6  	Meta
     7  	// Spec defines the desired state of the node as specified by the user.
     8  	// The system will honor this and will *never* modify it.
     9  	Spec NodeSpec `json:",omitempty"`
    10  	// Description encapsulates the properties of the Node as reported by the
    11  	// agent.
    12  	Description NodeDescription `json:",omitempty"`
    13  	// Status provides the current status of the node, as seen by the manager.
    14  	Status NodeStatus `json:",omitempty"`
    15  	// ManagerStatus provides the current status of the node's manager
    16  	// component, if the node is a manager.
    17  	ManagerStatus *ManagerStatus `json:",omitempty"`
    18  }
    19  
    20  // NodeSpec represents the spec of a node.
    21  type NodeSpec struct {
    22  	Annotations
    23  	Role         NodeRole         `json:",omitempty"`
    24  	Availability NodeAvailability `json:",omitempty"`
    25  }
    26  
    27  // NodeRole represents the role of a node.
    28  type NodeRole string
    29  
    30  const (
    31  	// NodeRoleWorker WORKER
    32  	NodeRoleWorker NodeRole = "worker"
    33  	// NodeRoleManager MANAGER
    34  	NodeRoleManager NodeRole = "manager"
    35  )
    36  
    37  // NodeAvailability represents the availability of a node.
    38  type NodeAvailability string
    39  
    40  const (
    41  	// NodeAvailabilityActive ACTIVE
    42  	NodeAvailabilityActive NodeAvailability = "active"
    43  	// NodeAvailabilityPause PAUSE
    44  	NodeAvailabilityPause NodeAvailability = "pause"
    45  	// NodeAvailabilityDrain DRAIN
    46  	NodeAvailabilityDrain NodeAvailability = "drain"
    47  )
    48  
    49  // NodeDescription represents the description of a node.
    50  type NodeDescription struct {
    51  	Hostname  string            `json:",omitempty"`
    52  	Platform  Platform          `json:",omitempty"`
    53  	Resources Resources         `json:",omitempty"`
    54  	Engine    EngineDescription `json:",omitempty"`
    55  	TLSInfo   TLSInfo           `json:",omitempty"`
    56  	CSIInfo   []NodeCSIInfo     `json:",omitempty"`
    57  }
    58  
    59  // Platform represents the platform (Arch/OS).
    60  type Platform struct {
    61  	Architecture string `json:",omitempty"`
    62  	OS           string `json:",omitempty"`
    63  }
    64  
    65  // EngineDescription represents the description of an engine.
    66  type EngineDescription struct {
    67  	EngineVersion string              `json:",omitempty"`
    68  	Labels        map[string]string   `json:",omitempty"`
    69  	Plugins       []PluginDescription `json:",omitempty"`
    70  }
    71  
    72  // NodeCSIInfo represents information about a CSI plugin available on the node
    73  type NodeCSIInfo struct {
    74  	// PluginName is the name of the CSI plugin.
    75  	PluginName string `json:",omitempty"`
    76  	// NodeID is the ID of the node as reported by the CSI plugin. This is
    77  	// different from the swarm node ID.
    78  	NodeID string `json:",omitempty"`
    79  	// MaxVolumesPerNode is the maximum number of volumes that may be published
    80  	// to this node
    81  	MaxVolumesPerNode int64 `json:",omitempty"`
    82  	// AccessibleTopology indicates the location of this node in the CSI
    83  	// plugin's topology
    84  	AccessibleTopology *Topology `json:",omitempty"`
    85  }
    86  
    87  // PluginDescription represents the description of an engine plugin.
    88  type PluginDescription struct {
    89  	Type string `json:",omitempty"`
    90  	Name string `json:",omitempty"`
    91  }
    92  
    93  // NodeStatus represents the status of a node.
    94  type NodeStatus struct {
    95  	State   NodeState `json:",omitempty"`
    96  	Message string    `json:",omitempty"`
    97  	Addr    string    `json:",omitempty"`
    98  }
    99  
   100  // Reachability represents the reachability of a node.
   101  type Reachability string
   102  
   103  const (
   104  	// ReachabilityUnknown UNKNOWN
   105  	ReachabilityUnknown Reachability = "unknown"
   106  	// ReachabilityUnreachable UNREACHABLE
   107  	ReachabilityUnreachable Reachability = "unreachable"
   108  	// ReachabilityReachable REACHABLE
   109  	ReachabilityReachable Reachability = "reachable"
   110  )
   111  
   112  // ManagerStatus represents the status of a manager.
   113  type ManagerStatus struct {
   114  	Leader       bool         `json:",omitempty"`
   115  	Reachability Reachability `json:",omitempty"`
   116  	Addr         string       `json:",omitempty"`
   117  }
   118  
   119  // NodeState represents the state of a node.
   120  type NodeState string
   121  
   122  const (
   123  	// NodeStateUnknown UNKNOWN
   124  	NodeStateUnknown NodeState = "unknown"
   125  	// NodeStateDown DOWN
   126  	NodeStateDown NodeState = "down"
   127  	// NodeStateReady READY
   128  	NodeStateReady NodeState = "ready"
   129  	// NodeStateDisconnected DISCONNECTED
   130  	NodeStateDisconnected NodeState = "disconnected"
   131  )
   132  
   133  // Topology defines the CSI topology of this node. This type is a duplicate of
   134  // github.com/docker/docker/api/types.Topology. Because the type definition
   135  // is so simple and to avoid complicated structure or circular imports, we just
   136  // duplicate it here. See that type for full documentation
   137  type Topology struct {
   138  	Segments map[string]string `json:",omitempty"`
   139  }