github.com/zhuohuang-hust/src-cbuild@v0.0.0-20230105071821-c7aab3e7c840/api/types/types.go (about)

     1  package types
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  	"io"
     7  	"os"
     8  	"strings"
     9  	"time"
    10  
    11  	"github.com/docker/docker/api/types/container"
    12  	"github.com/docker/docker/api/types/filters"
    13  	"github.com/docker/docker/api/types/mount"
    14  	"github.com/docker/docker/api/types/network"
    15  	"github.com/docker/docker/api/types/registry"
    16  	"github.com/docker/docker/api/types/swarm"
    17  	"github.com/docker/go-connections/nat"
    18  )
    19  
    20  // ContainerChange contains response of Engine API:
    21  // GET "/containers/{name:.*}/changes"
    22  type ContainerChange struct {
    23  	Kind int
    24  	Path string
    25  }
    26  
    27  // ImageHistory contains response of Engine API:
    28  // GET "/images/{name:.*}/history"
    29  type ImageHistory struct {
    30  	ID        string `json:"Id"`
    31  	Created   int64
    32  	CreatedBy string
    33  	Tags      []string
    34  	Size      int64
    35  	Comment   string
    36  }
    37  
    38  // ImageDelete contains response of Engine API:
    39  // DELETE "/images/{name:.*}"
    40  type ImageDelete struct {
    41  	Untagged string `json:",omitempty"`
    42  	Deleted  string `json:",omitempty"`
    43  }
    44  
    45  // GraphDriverData returns Image's graph driver config info
    46  // when calling inspect command
    47  type GraphDriverData struct {
    48  	Name string
    49  	Data map[string]string
    50  }
    51  
    52  // RootFS returns Image's RootFS description including the layer IDs.
    53  type RootFS struct {
    54  	Type      string
    55  	Layers    []string `json:",omitempty"`
    56  	BaseLayer string   `json:",omitempty"`
    57  }
    58  
    59  // ImageInspect contains response of Engine API:
    60  // GET "/images/{name:.*}/json"
    61  type ImageInspect struct {
    62  	ID              string `json:"Id"`
    63  	RepoTags        []string
    64  	RepoDigests     []string
    65  	Parent          string
    66  	Comment         string
    67  	Created         string
    68  	Container       string
    69  	ContainerConfig *container.Config
    70  	DockerVersion   string
    71  	Author          string
    72  	Config          *container.Config
    73  	Architecture    string
    74  	Os              string
    75  	OsVersion       string `json:",omitempty"`
    76  	Size            int64
    77  	VirtualSize     int64
    78  	GraphDriver     GraphDriverData
    79  	RootFS          RootFS
    80  }
    81  
    82  // Container contains response of Engine API:
    83  // GET "/containers/json"
    84  type Container struct {
    85  	ID         string `json:"Id"`
    86  	Names      []string
    87  	Image      string
    88  	ImageID    string
    89  	Command    string
    90  	Created    int64
    91  	Ports      []Port
    92  	SizeRw     int64 `json:",omitempty"`
    93  	SizeRootFs int64 `json:",omitempty"`
    94  	Labels     map[string]string
    95  	State      string
    96  	Status     string
    97  	HostConfig struct {
    98  		NetworkMode string `json:",omitempty"`
    99  	}
   100  	NetworkSettings *SummaryNetworkSettings
   101  	Mounts          []MountPoint
   102  }
   103  
   104  // CopyConfig contains request body of Engine API:
   105  // POST "/containers/"+containerID+"/copy"
   106  type CopyConfig struct {
   107  	Resource string
   108  }
   109  
   110  // ContainerPathStat is used to encode the header from
   111  // GET "/containers/{name:.*}/archive"
   112  // "Name" is the file or directory name.
   113  type ContainerPathStat struct {
   114  	Name       string      `json:"name"`
   115  	Size       int64       `json:"size"`
   116  	Mode       os.FileMode `json:"mode"`
   117  	Mtime      time.Time   `json:"mtime"`
   118  	LinkTarget string      `json:"linkTarget"`
   119  }
   120  
   121  // ContainerStats contains response of Engine API:
   122  // GET "/stats"
   123  type ContainerStats struct {
   124  	Body   io.ReadCloser `json:"body"`
   125  	OSType string        `json:"ostype"`
   126  }
   127  
   128  // ContainerProcessList contains response of Engine API:
   129  // GET "/containers/{name:.*}/top"
   130  type ContainerProcessList struct {
   131  	Processes [][]string
   132  	Titles    []string
   133  }
   134  
   135  // Ping contains response of Engine API:
   136  // GET "/_ping"
   137  type Ping struct {
   138  	APIVersion   string
   139  	Experimental bool
   140  }
   141  
   142  // Version contains response of Engine API:
   143  // GET "/version"
   144  type Version struct {
   145  	Version       string
   146  	APIVersion    string `json:"ApiVersion"`
   147  	MinAPIVersion string `json:"MinAPIVersion,omitempty"`
   148  	GitCommit     string
   149  	GoVersion     string
   150  	Os            string
   151  	Arch          string
   152  	KernelVersion string `json:",omitempty"`
   153  	Experimental  bool   `json:",omitempty"`
   154  	BuildTime     string `json:",omitempty"`
   155  }
   156  
   157  // Commit records a external tool actual commit id version along the
   158  // one expect by dockerd as set at build time
   159  type Commit struct {
   160  	ID       string
   161  	Expected string
   162  }
   163  
   164  // Info contains response of Engine API:
   165  // GET "/info"
   166  type Info struct {
   167  	ID                 string
   168  	Containers         int
   169  	ContainersRunning  int
   170  	ContainersPaused   int
   171  	ContainersStopped  int
   172  	Images             int
   173  	Driver             string
   174  	DriverStatus       [][2]string
   175  	SystemStatus       [][2]string
   176  	Plugins            PluginsInfo
   177  	MemoryLimit        bool
   178  	SwapLimit          bool
   179  	KernelMemory       bool
   180  	CPUCfsPeriod       bool `json:"CpuCfsPeriod"`
   181  	CPUCfsQuota        bool `json:"CpuCfsQuota"`
   182  	CPUShares          bool
   183  	CPUSet             bool
   184  	IPv4Forwarding     bool
   185  	BridgeNfIptables   bool
   186  	BridgeNfIP6tables  bool `json:"BridgeNfIp6tables"`
   187  	Debug              bool
   188  	NFd                int
   189  	OomKillDisable     bool
   190  	NGoroutines        int
   191  	SystemTime         string
   192  	LoggingDriver      string
   193  	CgroupDriver       string
   194  	NEventsListener    int
   195  	KernelVersion      string
   196  	OperatingSystem    string
   197  	OSType             string
   198  	Architecture       string
   199  	IndexServerAddress string
   200  	RegistryConfig     *registry.ServiceConfig
   201  	NCPU               int
   202  	MemTotal           int64
   203  	DockerRootDir      string
   204  	HTTPProxy          string `json:"HttpProxy"`
   205  	HTTPSProxy         string `json:"HttpsProxy"`
   206  	NoProxy            string
   207  	Name               string
   208  	Labels             []string
   209  	ExperimentalBuild  bool
   210  	ServerVersion      string
   211  	ClusterStore       string
   212  	ClusterAdvertise   string
   213  	Runtimes           map[string]Runtime
   214  	DefaultRuntime     string
   215  	Swarm              swarm.Info
   216  	// LiveRestoreEnabled determines whether containers should be kept
   217  	// running when the daemon is shutdown or upon daemon start if
   218  	// running containers are detected
   219  	LiveRestoreEnabled bool
   220  	Isolation          container.Isolation
   221  	InitBinary         string
   222  	ContainerdCommit   Commit
   223  	RuncCommit         Commit
   224  	InitCommit         Commit
   225  	SecurityOptions    []string
   226  }
   227  
   228  // KeyValue holds a key/value pair
   229  type KeyValue struct {
   230  	Key, Value string
   231  }
   232  
   233  // SecurityOpt contains the name and options of a security option
   234  type SecurityOpt struct {
   235  	Name    string
   236  	Options []KeyValue
   237  }
   238  
   239  // DecodeSecurityOptions decodes a security options string slice to a type safe
   240  // SecurityOpt
   241  func DecodeSecurityOptions(opts []string) ([]SecurityOpt, error) {
   242  	so := []SecurityOpt{}
   243  	for _, opt := range opts {
   244  		// support output from a < 1.13 docker daemon
   245  		if !strings.Contains(opt, "=") {
   246  			so = append(so, SecurityOpt{Name: opt})
   247  			continue
   248  		}
   249  		secopt := SecurityOpt{}
   250  		split := strings.Split(opt, ",")
   251  		for _, s := range split {
   252  			kv := strings.SplitN(s, "=", 2)
   253  			if len(kv) != 2 {
   254  				return nil, fmt.Errorf("invalid security option %q", s)
   255  			}
   256  			if kv[0] == "" || kv[1] == "" {
   257  				return nil, errors.New("invalid empty security option")
   258  			}
   259  			if kv[0] == "name" {
   260  				secopt.Name = kv[1]
   261  				continue
   262  			}
   263  			secopt.Options = append(secopt.Options, KeyValue{Key: kv[0], Value: kv[1]})
   264  		}
   265  		so = append(so, secopt)
   266  	}
   267  	return so, nil
   268  }
   269  
   270  // PluginsInfo is a temp struct holding Plugins name
   271  // registered with docker daemon. It is used by Info struct
   272  type PluginsInfo struct {
   273  	// List of Volume plugins registered
   274  	Volume []string
   275  	// List of Network plugins registered
   276  	Network []string
   277  	// List of Authorization plugins registered
   278  	Authorization []string
   279  }
   280  
   281  // ExecStartCheck is a temp struct used by execStart
   282  // Config fields is part of ExecConfig in runconfig package
   283  type ExecStartCheck struct {
   284  	// ExecStart will first check if it's detached
   285  	Detach bool
   286  	// Check if there's a tty
   287  	Tty bool
   288  }
   289  
   290  // HealthcheckResult stores information about a single run of a healthcheck probe
   291  type HealthcheckResult struct {
   292  	Start    time.Time // Start is the time this check started
   293  	End      time.Time // End is the time this check ended
   294  	ExitCode int       // ExitCode meanings: 0=healthy, 1=unhealthy, 2=reserved (considered unhealthy), else=error running probe
   295  	Output   string    // Output from last check
   296  }
   297  
   298  // Health states
   299  const (
   300  	NoHealthcheck = "none"      // Indicates there is no healthcheck
   301  	Starting      = "starting"  // Starting indicates that the container is not yet ready
   302  	Healthy       = "healthy"   // Healthy indicates that the container is running correctly
   303  	Unhealthy     = "unhealthy" // Unhealthy indicates that the container has a problem
   304  )
   305  
   306  // Health stores information about the container's healthcheck results
   307  type Health struct {
   308  	Status        string               // Status is one of Starting, Healthy or Unhealthy
   309  	FailingStreak int                  // FailingStreak is the number of consecutive failures
   310  	Log           []*HealthcheckResult // Log contains the last few results (oldest first)
   311  }
   312  
   313  // ContainerState stores container's running state
   314  // it's part of ContainerJSONBase and will return by "inspect" command
   315  type ContainerState struct {
   316  	Status     string
   317  	Running    bool
   318  	Paused     bool
   319  	Restarting bool
   320  	OOMKilled  bool
   321  	Dead       bool
   322  	Pid        int
   323  	ExitCode   int
   324  	Error      string
   325  	StartedAt  string
   326  	FinishedAt string
   327  	Health     *Health `json:",omitempty"`
   328  }
   329  
   330  // ContainerNode stores information about the node that a container
   331  // is running on.  It's only available in Docker Swarm
   332  type ContainerNode struct {
   333  	ID        string
   334  	IPAddress string `json:"IP"`
   335  	Addr      string
   336  	Name      string
   337  	Cpus      int
   338  	Memory    int64
   339  	Labels    map[string]string
   340  }
   341  
   342  // ContainerJSONBase contains response of Engine API:
   343  // GET "/containers/{name:.*}/json"
   344  type ContainerJSONBase struct {
   345  	ID              string `json:"Id"`
   346  	Created         string
   347  	Path            string
   348  	Args            []string
   349  	State           *ContainerState
   350  	Image           string
   351  	ResolvConfPath  string
   352  	HostnamePath    string
   353  	HostsPath       string
   354  	LogPath         string
   355  	Node            *ContainerNode `json:",omitempty"`
   356  	Name            string
   357  	RestartCount    int
   358  	Driver          string
   359  	MountLabel      string
   360  	ProcessLabel    string
   361  	AppArmorProfile string
   362  	ExecIDs         []string
   363  	HostConfig      *container.HostConfig
   364  	GraphDriver     GraphDriverData
   365  	SizeRw          *int64 `json:",omitempty"`
   366  	SizeRootFs      *int64 `json:",omitempty"`
   367  }
   368  
   369  // ContainerJSON is newly used struct along with MountPoint
   370  type ContainerJSON struct {
   371  	*ContainerJSONBase
   372  	Mounts          []MountPoint
   373  	Config          *container.Config
   374  	NetworkSettings *NetworkSettings
   375  }
   376  
   377  // NetworkSettings exposes the network settings in the api
   378  type NetworkSettings struct {
   379  	NetworkSettingsBase
   380  	DefaultNetworkSettings
   381  	Networks map[string]*network.EndpointSettings
   382  }
   383  
   384  // SummaryNetworkSettings provides a summary of container's networks
   385  // in /containers/json
   386  type SummaryNetworkSettings struct {
   387  	Networks map[string]*network.EndpointSettings
   388  }
   389  
   390  // NetworkSettingsBase holds basic information about networks
   391  type NetworkSettingsBase struct {
   392  	Bridge                 string      // Bridge is the Bridge name the network uses(e.g. `docker0`)
   393  	SandboxID              string      // SandboxID uniquely represents a container's network stack
   394  	HairpinMode            bool        // HairpinMode specifies if hairpin NAT should be enabled on the virtual interface
   395  	LinkLocalIPv6Address   string      // LinkLocalIPv6Address is an IPv6 unicast address using the link-local prefix
   396  	LinkLocalIPv6PrefixLen int         // LinkLocalIPv6PrefixLen is the prefix length of an IPv6 unicast address
   397  	Ports                  nat.PortMap // Ports is a collection of PortBinding indexed by Port
   398  	SandboxKey             string      // SandboxKey identifies the sandbox
   399  	SecondaryIPAddresses   []network.Address
   400  	SecondaryIPv6Addresses []network.Address
   401  }
   402  
   403  // DefaultNetworkSettings holds network information
   404  // during the 2 release deprecation period.
   405  // It will be removed in Docker 1.11.
   406  type DefaultNetworkSettings struct {
   407  	EndpointID          string // EndpointID uniquely represents a service endpoint in a Sandbox
   408  	Gateway             string // Gateway holds the gateway address for the network
   409  	GlobalIPv6Address   string // GlobalIPv6Address holds network's global IPv6 address
   410  	GlobalIPv6PrefixLen int    // GlobalIPv6PrefixLen represents mask length of network's global IPv6 address
   411  	IPAddress           string // IPAddress holds the IPv4 address for the network
   412  	IPPrefixLen         int    // IPPrefixLen represents mask length of network's IPv4 address
   413  	IPv6Gateway         string // IPv6Gateway holds gateway address specific for IPv6
   414  	MacAddress          string // MacAddress holds the MAC address for the network
   415  }
   416  
   417  // MountPoint represents a mount point configuration inside the container.
   418  // This is used for reporting the mountpoints in use by a container.
   419  type MountPoint struct {
   420  	Type        mount.Type `json:",omitempty"`
   421  	Name        string     `json:",omitempty"`
   422  	Source      string
   423  	Destination string
   424  	Driver      string `json:",omitempty"`
   425  	Mode        string
   426  	RW          bool
   427  	Propagation mount.Propagation
   428  }
   429  
   430  // NetworkResource is the body of the "get network" http response message
   431  type NetworkResource struct {
   432  	Name       string                      // Name is the requested name of the network
   433  	ID         string                      `json:"Id"` // ID uniquely identifies a network on a single machine
   434  	Created    time.Time                   // Created is the time the network created
   435  	Scope      string                      // Scope describes the level at which the network exists (e.g. `global` for cluster-wide or `local` for machine level)
   436  	Driver     string                      // Driver is the Driver name used to create the network (e.g. `bridge`, `overlay`)
   437  	EnableIPv6 bool                        // EnableIPv6 represents whether to enable IPv6
   438  	IPAM       network.IPAM                // IPAM is the network's IP Address Management
   439  	Internal   bool                        // Internal represents if the network is used internal only
   440  	Attachable bool                        // Attachable represents if the global scope is manually attachable by regular containers from workers in swarm mode.
   441  	Containers map[string]EndpointResource // Containers contains endpoints belonging to the network
   442  	Options    map[string]string           // Options holds the network specific options to use for when creating the network
   443  	Labels     map[string]string           // Labels holds metadata specific to the network being created
   444  	Peers      []network.PeerInfo          `json:",omitempty"` // List of peer nodes for an overlay network
   445  }
   446  
   447  // EndpointResource contains network resources allocated and used for a container in a network
   448  type EndpointResource struct {
   449  	Name        string
   450  	EndpointID  string
   451  	MacAddress  string
   452  	IPv4Address string
   453  	IPv6Address string
   454  }
   455  
   456  // NetworkCreate is the expected body of the "create network" http request message
   457  type NetworkCreate struct {
   458  	CheckDuplicate bool
   459  	Driver         string
   460  	EnableIPv6     bool
   461  	IPAM           *network.IPAM
   462  	Internal       bool
   463  	Attachable     bool
   464  	Options        map[string]string
   465  	Labels         map[string]string
   466  }
   467  
   468  // NetworkCreateRequest is the request message sent to the server for network create call.
   469  type NetworkCreateRequest struct {
   470  	NetworkCreate
   471  	Name string
   472  }
   473  
   474  // NetworkCreateResponse is the response message sent by the server for network create call
   475  type NetworkCreateResponse struct {
   476  	ID      string `json:"Id"`
   477  	Warning string
   478  }
   479  
   480  // NetworkConnect represents the data to be used to connect a container to the network
   481  type NetworkConnect struct {
   482  	Container      string
   483  	EndpointConfig *network.EndpointSettings `json:",omitempty"`
   484  }
   485  
   486  // NetworkDisconnect represents the data to be used to disconnect a container from the network
   487  type NetworkDisconnect struct {
   488  	Container string
   489  	Force     bool
   490  }
   491  
   492  // Checkpoint represents the details of a checkpoint
   493  type Checkpoint struct {
   494  	Name string // Name is the name of the checkpoint
   495  }
   496  
   497  // Runtime describes an OCI runtime
   498  type Runtime struct {
   499  	Path string   `json:"path"`
   500  	Args []string `json:"runtimeArgs,omitempty"`
   501  }
   502  
   503  // DiskUsage contains response of Engine API:
   504  // GET "/system/df"
   505  type DiskUsage struct {
   506  	LayersSize int64
   507  	Images     []*ImageSummary
   508  	Containers []*Container
   509  	Volumes    []*Volume
   510  }
   511  
   512  // ContainersPruneReport contains the response for Engine API:
   513  // POST "/containers/prune"
   514  type ContainersPruneReport struct {
   515  	ContainersDeleted []string
   516  	SpaceReclaimed    uint64
   517  }
   518  
   519  // VolumesPruneReport contains the response for Engine API:
   520  // POST "/volumes/prune"
   521  type VolumesPruneReport struct {
   522  	VolumesDeleted []string
   523  	SpaceReclaimed uint64
   524  }
   525  
   526  // ImagesPruneReport contains the response for Engine API:
   527  // POST "/images/prune"
   528  type ImagesPruneReport struct {
   529  	ImagesDeleted  []ImageDelete
   530  	SpaceReclaimed uint64
   531  }
   532  
   533  // NetworksPruneReport contains the response for Engine API:
   534  // POST "/networks/prune"
   535  type NetworksPruneReport struct {
   536  	NetworksDeleted []string
   537  }
   538  
   539  // SecretCreateResponse contains the information returned to a client
   540  // on the creation of a new secret.
   541  type SecretCreateResponse struct {
   542  	// ID is the id of the created secret.
   543  	ID string
   544  }
   545  
   546  // SecretListOptions holds parameters to list secrets
   547  type SecretListOptions struct {
   548  	Filters filters.Args
   549  }