mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-12-18 08:26:45 +02:00
167 lines
3.4 KiB
Go
167 lines
3.4 KiB
Go
|
package docker
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"strconv"
|
||
|
"strings"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
// These are structures copied from the Docker project.
|
||
|
// We avoid importing the libraries due to a CGO
|
||
|
// depenency on libdevmapper that we'd like to avoid.
|
||
|
|
||
|
type KeyValuePair struct {
|
||
|
Key string
|
||
|
Value string
|
||
|
}
|
||
|
|
||
|
type HostConfig struct {
|
||
|
Binds []string
|
||
|
ContainerIDFile string
|
||
|
LxcConf []KeyValuePair
|
||
|
Privileged bool
|
||
|
PortBindings map[Port][]PortBinding
|
||
|
Links []string
|
||
|
PublishAllPorts bool
|
||
|
}
|
||
|
|
||
|
type Top struct {
|
||
|
Titles []string
|
||
|
Processes [][]string
|
||
|
}
|
||
|
|
||
|
type Containers struct {
|
||
|
ID string `json:"Id"`
|
||
|
Image string
|
||
|
Command string
|
||
|
Created int64
|
||
|
Status string
|
||
|
Ports []Port
|
||
|
SizeRw int64
|
||
|
SizeRootFs int64
|
||
|
Names []string
|
||
|
}
|
||
|
|
||
|
type Run struct {
|
||
|
ID string `json:"Id"`
|
||
|
Warnings []string `json:",omitempty"`
|
||
|
}
|
||
|
|
||
|
type Wait struct {
|
||
|
StatusCode int
|
||
|
}
|
||
|
|
||
|
type State struct {
|
||
|
Running bool
|
||
|
Pid int
|
||
|
ExitCode int
|
||
|
StartedAt time.Time
|
||
|
FinishedAt time.Time
|
||
|
Ghost bool
|
||
|
}
|
||
|
|
||
|
type PortBinding struct {
|
||
|
HostIp string
|
||
|
HostPort string
|
||
|
}
|
||
|
|
||
|
// 80/tcp
|
||
|
type Port string
|
||
|
|
||
|
func (p Port) Proto() string {
|
||
|
parts := strings.Split(string(p), "/")
|
||
|
if len(parts) == 1 {
|
||
|
return "tcp"
|
||
|
}
|
||
|
return parts[1]
|
||
|
}
|
||
|
|
||
|
func (p Port) Port() string {
|
||
|
return strings.Split(string(p), "/")[0]
|
||
|
}
|
||
|
|
||
|
func (p Port) Int() int {
|
||
|
i, err := parsePort(p.Port())
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
return i
|
||
|
}
|
||
|
|
||
|
func parsePort(rawPort string) (int, error) {
|
||
|
port, err := strconv.ParseUint(rawPort, 10, 16)
|
||
|
if err != nil {
|
||
|
return 0, err
|
||
|
}
|
||
|
return int(port), nil
|
||
|
}
|
||
|
|
||
|
func NewPort(proto, port string) Port {
|
||
|
return Port(fmt.Sprintf("%s/%s", port, proto))
|
||
|
}
|
||
|
|
||
|
type PortMapping map[string]string // Deprecated
|
||
|
|
||
|
type NetworkSettings struct {
|
||
|
IPAddress string
|
||
|
IPPrefixLen int
|
||
|
Gateway string
|
||
|
Bridge string
|
||
|
PortMapping map[string]PortMapping // Deprecated
|
||
|
Ports map[Port][]PortBinding
|
||
|
}
|
||
|
|
||
|
type Config struct {
|
||
|
Hostname string
|
||
|
Domainname string
|
||
|
User string
|
||
|
Memory int64 // Memory limit (in bytes)
|
||
|
MemorySwap int64 // Total memory usage (memory + swap); set `-1' to disable swap
|
||
|
CpuShares int64 // CPU shares (relative weight vs. other containers)
|
||
|
AttachStdin bool
|
||
|
AttachStdout bool
|
||
|
AttachStderr bool
|
||
|
PortSpecs []string // Deprecated - Can be in the format of 8080/tcp
|
||
|
ExposedPorts map[Port]struct{}
|
||
|
Tty bool // Attach standard streams to a tty, including stdin if it is not closed.
|
||
|
OpenStdin bool // Open stdin
|
||
|
StdinOnce bool // If true, close stdin after the 1 attached client disconnects.
|
||
|
Env []string
|
||
|
Cmd []string
|
||
|
Dns []string
|
||
|
Image string // Name of the image as it was passed by the operator (eg. could be symbolic)
|
||
|
Volumes map[string]struct{}
|
||
|
VolumesFrom string
|
||
|
WorkingDir string
|
||
|
Entrypoint []string
|
||
|
NetworkDisabled bool
|
||
|
}
|
||
|
|
||
|
type Container struct {
|
||
|
ID string
|
||
|
|
||
|
Created time.Time
|
||
|
|
||
|
Path string
|
||
|
Args []string
|
||
|
|
||
|
Config *Config
|
||
|
State State
|
||
|
Image string
|
||
|
|
||
|
NetworkSettings *NetworkSettings
|
||
|
|
||
|
SysInitPath string
|
||
|
ResolvConfPath string
|
||
|
HostnamePath string
|
||
|
HostsPath string
|
||
|
Name string
|
||
|
Driver string
|
||
|
|
||
|
Volumes map[string]string
|
||
|
// Store rw/ro in a separate structure to preserve reverse-compatibility on-disk.
|
||
|
// Easier than migrating older container configs :)
|
||
|
VolumesRW map[string]bool
|
||
|
}
|