github.com/demonoid81/moby@v0.0.0-20200517203328-62dd8e17c460/api/types/swarm/swarm.go (about)

     1  package swarm // import "github.com/demonoid81/moby/api/types/swarm"
     2  
     3  import (
     4  	"time"
     5  )
     6  
     7  // ClusterInfo represents info about the cluster for outputting in "info"
     8  // it contains the same information as "Swarm", but without the JoinTokens
     9  type ClusterInfo struct {
    10  	ID string
    11  	Meta
    12  	Spec                   Spec
    13  	TLSInfo                TLSInfo
    14  	RootRotationInProgress bool
    15  	DefaultAddrPool        []string
    16  	SubnetSize             uint32
    17  	DataPathPort           uint32
    18  }
    19  
    20  // Swarm represents a swarm.
    21  type Swarm struct {
    22  	ClusterInfo
    23  	JoinTokens JoinTokens
    24  }
    25  
    26  // JoinTokens contains the tokens workers and managers need to join the swarm.
    27  type JoinTokens struct {
    28  	// Worker is the join token workers may use to join the swarm.
    29  	Worker string
    30  	// Manager is the join token managers may use to join the swarm.
    31  	Manager string
    32  }
    33  
    34  // Spec represents the spec of a swarm.
    35  type Spec struct {
    36  	Annotations
    37  
    38  	Orchestration    OrchestrationConfig `json:",omitempty"`
    39  	Raft             RaftConfig          `json:",omitempty"`
    40  	Dispatcher       DispatcherConfig    `json:",omitempty"`
    41  	CAConfig         CAConfig            `json:",omitempty"`
    42  	TaskDefaults     TaskDefaults        `json:",omitempty"`
    43  	EncryptionConfig EncryptionConfig    `json:",omitempty"`
    44  }
    45  
    46  // OrchestrationConfig represents orchestration configuration.
    47  type OrchestrationConfig struct {
    48  	// TaskHistoryRetentionLimit is the number of historic tasks to keep per instance or
    49  	// node. If negative, never remove completed or failed tasks.
    50  	TaskHistoryRetentionLimit *int64 `json:",omitempty"`
    51  }
    52  
    53  // TaskDefaults parameterizes cluster-level task creation with default values.
    54  type TaskDefaults struct {
    55  	// LogDriver selects the log driver to use for tasks created in the
    56  	// orchestrator if unspecified by a service.
    57  	//
    58  	// Updating this value will only have an affect on new tasks. Old tasks
    59  	// will continue use their previously configured log driver until
    60  	// recreated.
    61  	LogDriver *Driver `json:",omitempty"`
    62  }
    63  
    64  // EncryptionConfig controls at-rest encryption of data and keys.
    65  type EncryptionConfig struct {
    66  	// AutoLockManagers specifies whether or not managers TLS keys and raft data
    67  	// should be encrypted at rest in such a way that they must be unlocked
    68  	// before the manager node starts up again.
    69  	AutoLockManagers bool
    70  }
    71  
    72  // RaftConfig represents raft configuration.
    73  type RaftConfig struct {
    74  	// SnapshotInterval is the number of log entries between snapshots.
    75  	SnapshotInterval uint64 `json:",omitempty"`
    76  
    77  	// KeepOldSnapshots is the number of snapshots to keep beyond the
    78  	// current snapshot.
    79  	KeepOldSnapshots *uint64 `json:",omitempty"`
    80  
    81  	// LogEntriesForSlowFollowers is the number of log entries to keep
    82  	// around to sync up slow followers after a snapshot is created.
    83  	LogEntriesForSlowFollowers uint64 `json:",omitempty"`
    84  
    85  	// ElectionTick is the number of ticks that a follower will wait for a message
    86  	// from the leader before becoming a candidate and starting an election.
    87  	// ElectionTick must be greater than HeartbeatTick.
    88  	//
    89  	// A tick currently defaults to one second, so these translate directly to
    90  	// seconds currently, but this is NOT guaranteed.
    91  	ElectionTick int
    92  
    93  	// HeartbeatTick is the number of ticks between heartbeats. Every
    94  	// HeartbeatTick ticks, the leader will send a heartbeat to the
    95  	// followers.
    96  	//
    97  	// A tick currently defaults to one second, so these translate directly to
    98  	// seconds currently, but this is NOT guaranteed.
    99  	HeartbeatTick int
   100  }
   101  
   102  // DispatcherConfig represents dispatcher configuration.
   103  type DispatcherConfig struct {
   104  	// HeartbeatPeriod defines how often agent should send heartbeats to
   105  	// dispatcher.
   106  	HeartbeatPeriod time.Duration `json:",omitempty"`
   107  }
   108  
   109  // CAConfig represents CA configuration.
   110  type CAConfig struct {
   111  	// NodeCertExpiry is the duration certificates should be issued for
   112  	NodeCertExpiry time.Duration `json:",omitempty"`
   113  
   114  	// ExternalCAs is a list of CAs to which a manager node will make
   115  	// certificate signing requests for node certificates.
   116  	ExternalCAs []*ExternalCA `json:",omitempty"`
   117  
   118  	// SigningCACert and SigningCAKey specify the desired signing root CA and
   119  	// root CA key for the swarm.  When inspecting the cluster, the key will
   120  	// be redacted.
   121  	SigningCACert string `json:",omitempty"`
   122  	SigningCAKey  string `json:",omitempty"`
   123  
   124  	// If this value changes, and there is no specified signing cert and key,
   125  	// then the swarm is forced to generate a new root certificate ane key.
   126  	ForceRotate uint64 `json:",omitempty"`
   127  }
   128  
   129  // ExternalCAProtocol represents type of external CA.
   130  type ExternalCAProtocol string
   131  
   132  // ExternalCAProtocolCFSSL CFSSL
   133  const ExternalCAProtocolCFSSL ExternalCAProtocol = "cfssl"
   134  
   135  // ExternalCA defines external CA to be used by the cluster.
   136  type ExternalCA struct {
   137  	// Protocol is the protocol used by this external CA.
   138  	Protocol ExternalCAProtocol
   139  
   140  	// URL is the URL where the external CA can be reached.
   141  	URL string
   142  
   143  	// Options is a set of additional key/value pairs whose interpretation
   144  	// depends on the specified CA type.
   145  	Options map[string]string `json:",omitempty"`
   146  
   147  	// CACert specifies which root CA is used by this external CA.  This certificate must
   148  	// be in PEM format.
   149  	CACert string
   150  }
   151  
   152  // InitRequest is the request used to init a swarm.
   153  type InitRequest struct {
   154  	ListenAddr       string
   155  	AdvertiseAddr    string
   156  	DataPathAddr     string
   157  	DataPathPort     uint32
   158  	ForceNewCluster  bool
   159  	Spec             Spec
   160  	AutoLockManagers bool
   161  	Availability     NodeAvailability
   162  	DefaultAddrPool  []string
   163  	SubnetSize       uint32
   164  }
   165  
   166  // JoinRequest is the request used to join a swarm.
   167  type JoinRequest struct {
   168  	ListenAddr    string
   169  	AdvertiseAddr string
   170  	DataPathAddr  string
   171  	RemoteAddrs   []string
   172  	JoinToken     string // accept by secret
   173  	Availability  NodeAvailability
   174  }
   175  
   176  // UnlockRequest is the request used to unlock a swarm.
   177  type UnlockRequest struct {
   178  	// UnlockKey is the unlock key in ASCII-armored format.
   179  	UnlockKey string
   180  }
   181  
   182  // LocalNodeState represents the state of the local node.
   183  type LocalNodeState string
   184  
   185  const (
   186  	// LocalNodeStateInactive INACTIVE
   187  	LocalNodeStateInactive LocalNodeState = "inactive"
   188  	// LocalNodeStatePending PENDING
   189  	LocalNodeStatePending LocalNodeState = "pending"
   190  	// LocalNodeStateActive ACTIVE
   191  	LocalNodeStateActive LocalNodeState = "active"
   192  	// LocalNodeStateError ERROR
   193  	LocalNodeStateError LocalNodeState = "error"
   194  	// LocalNodeStateLocked LOCKED
   195  	LocalNodeStateLocked LocalNodeState = "locked"
   196  )
   197  
   198  // Info represents generic information about swarm.
   199  type Info struct {
   200  	NodeID   string
   201  	NodeAddr string
   202  
   203  	LocalNodeState   LocalNodeState
   204  	ControlAvailable bool
   205  	Error            string
   206  
   207  	RemoteManagers []Peer
   208  	Nodes          int `json:",omitempty"`
   209  	Managers       int `json:",omitempty"`
   210  
   211  	Cluster *ClusterInfo `json:",omitempty"`
   212  
   213  	Warnings []string `json:",omitempty"`
   214  }
   215  
   216  // Peer represents a peer.
   217  type Peer struct {
   218  	NodeID string
   219  	Addr   string
   220  }
   221  
   222  // UpdateFlags contains flags for SwarmUpdate.
   223  type UpdateFlags struct {
   224  	RotateWorkerToken      bool
   225  	RotateManagerToken     bool
   226  	RotateManagerUnlockKey bool
   227  }