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