types

package
v0.0.0-...-1a62c48 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 14, 2018 License: MIT Imports: 10 Imported by: 0

Documentation

Index

Constants

View Source
const (
	Byte int64 = 1

	KByte = Byte << 10
	MByte = KByte << 10
	GByte = MByte << 10
)

size units

Variables

View Source
var (
	ErrInsufficientCPU   = errors.New("cannot alloc a plan, not enough cpu")
	ErrInsufficientMEM   = errors.New("cannot alloc a plan, not enough memory")
	ErrInsufficientCap   = errors.New("cannot alloc a each node plan, not enough capacity")
	ErrInsufficientRes   = errors.New("not enough resource")
	ErrInsufficientNodes = errors.New("not enough nodes")

	ErrNegativeMemory = errors.New("memory must be positive")
	ErrNegativeQuota  = errors.New("quota must be positive")

	ErrZeroNodes = errors.New("no nodes provide to choose some")

	ErrNodeFormat = errors.New("bad endpoint name")
	ErrNodeExist  = errors.New("node already exists")

	ErrKeyIsDir    = errors.New("key is a directory")
	ErrKeyIsNotDir = errors.New("key is not a directory")
	ErrKeyIsEmpty  = errors.New("key is empty")

	ErrBadContainerID  = errors.New("container ID must be length of 64")
	ErrBadDeployMethod = errors.New("deploy method not support yet")
	ErrBadFaver        = errors.New("favor should be either CPU or MEM")
	ErrBadIPAddress    = errors.New("bad IP address")
	ErrBadPodType      = errors.New("pod type not support yet")
	ErrBadSCMType      = errors.New("unkonwn SCM type")
	ErrBadMemory       = errors.New("bad `Memory` value")
	ErrBadCPU          = errors.New("bad `CPU` value")
	ErrBadCount        = errors.New("bad `Count` value")

	ErrPodHasNodes = errors.New("pod has nodes")
	ErrPodNoNodes  = errors.New("pod has no nodes")

	ErrCannotGetEngine = errors.New("cannot get engine")
	ErrNilEngine       = errors.New("engine is nil")

	ErrBadMeta         = errors.New("bad meta")
	ErrInvaildPassword = errors.New("invaild password")
	ErrInvaildUsername = errors.New("invaild username")
)

errors

Functions

func IsDetailedErr

func IsDetailedErr(err error) error

IsDetailedErr returns the error's type if the error is a detailedErr, otherwise return it back

func NewDetailedErr

func NewDetailedErr(err error, details interface{}) error

NewDetailedErr returns an error with details

Types

type AuthConfig

type AuthConfig struct {
	Username string `yaml:"username,omitempty" json:"username,omitempty"`
	Password string `yaml:"password,omitempty" json:"password,omitempty"`
}

AuthConfig contains authorization information for connecting to a Registry Basically copied from https://github.com/moby/moby/blob/16a1736b9b93e44c898f95d670bbaf20a558103d/api/types/auth.go#L4 But use yaml instead of json And we use it as grpc simple auth

type Bind

type Bind struct {
	InContainerPath string `yaml:"bind,omitempty"`
	ReadOnly        bool   `yaml:"ro,omitempty"`
}

Bind define a single bind

type Build

type Build struct {
	Base      string            `yaml:"base,omitempty"`
	Repo      string            `yaml:"repo,omitempty"`
	Version   string            `yaml:"version,omitempty"`
	Dir       string            `yaml:"dir,omitempty"`
	Submodule bool              `yaml:"submodule,omitempty"`
	Commands  []string          `yaml:"commands,omitempty,flow"`
	Envs      map[string]string `yaml:"envs,omitempty,flow"`
	Args      map[string]string `yaml:"args,omitempty,flow"`
	Labels    map[string]string `yaml:"labels,omitempty,flow"`
	Artifacts map[string]string `yaml:"artifacts,omitempty,flow"`
	Cache     map[string]string `yaml:"cache,omitempty,flow"`
}

Build define build

type BuildImageMessage

type BuildImageMessage struct {
	ID          string      `json:"id,omitempty"`
	Status      string      `json:"status,omitempty"`
	Progress    string      `json:"progress,omitempty"`
	Error       string      `json:"error,omitempty"`
	Stream      string      `json:"stream,omitempty"`
	ErrorDetail errorDetail `json:"errorDetail,omitempty"`
}

BuildImageMessage for build image message

type BuildOptions

type BuildOptions struct {
	Name   string
	User   string
	UID    int
	Tags   []string
	Builds *Builds
}

BuildOptions is options for building image

type Builds

type Builds struct {
	Stages []string          `yaml:"stages,omitempty,flow"`
	Builds map[string]*Build `yaml:"builds,omitempty,flow"`
}

Builds define builds

type CPUAndMem

type CPUAndMem struct {
	CPUMap CPUMap
	MemCap int64
}

CPUAndMem store cpu and mem

type CPUMap

type CPUMap map[string]int

CPUMap is cpu core map CPUMap {["0"]10000, ["1"]10000}

func (CPUMap) Add

func (c CPUMap) Add(q CPUMap)

Add return cpu

func (CPUMap) Sub

func (c CPUMap) Sub(q CPUMap)

Sub decrease cpus

func (CPUMap) Total

func (c CPUMap) Total() int

Total show total cpu Total quotas

type Config

type Config struct {
	LogLevel      string        `yaml:"log_level"`
	Bind          string        `yaml:"bind"`           // HTTP API address
	Statsd        string        `yaml:"statsd"`         // statsd host and port
	Profile       string        `yaml:"profile"`        // profile ip:port
	ImageCache    int           `yaml:"image_cache"`    // cache image count
	LockTimeout   int           `yaml:"lock_timeout"`   // timeout for lock (ttl)
	GlobalTimeout time.Duration `yaml:"global_timeout"` // timeout for remove, run_and_wait and build, in second
	Auth          AuthConfig    `yaml:"auth"`           // grpc auth

	Git       GitConfig    `yaml:"git"`
	Etcd      EtcdConfig   `yaml:"etcd"`
	Docker    DockerConfig `yaml:"docker"`
	Scheduler SchedConfig  `yaml:"scheduler"`
}

Config holds eru-core config

type Container

type Container struct {
	ID         string            `json:"id"`
	Podname    string            `json:"podname"`
	Nodename   string            `json:"nodename"`
	Name       string            `json:"name"`
	CPU        CPUMap            `json:"cpu"`
	Quota      float64           `json:"quota"`
	Memory     int64             `json:"memory"`
	Hook       *Hook             `json:"hook"`
	Privileged bool              `json:"privileged"`
	SoftLimit  bool              `json:"softlimit"`
	Engine     *engineapi.Client `json:"-"`
	Node       *Node             `json:"-"`
}

Container store container info only relationship with pod and node is stored if you wanna get realtime information, use Inspect method

func (*Container) Inspect

Inspect a container

func (*Container) Remove

func (c *Container) Remove(ctx context.Context) error

Remove a container

func (*Container) ShortID

func (c *Container) ShortID() string

ShortID short container ID

func (*Container) Stop

func (c *Container) Stop(ctx context.Context, timeout time.Duration) error

Stop a container

type CopyMessage

type CopyMessage struct {
	ID     string        `json:"id,omitempty"`
	Status string        `json:"status,omitempty"`
	Name   string        `json:"name,omitempty"`
	Path   string        `json:"path,omitempty"`
	Error  error         `json:"error,omitempty"`
	Data   io.ReadCloser `json:"-"`
}

CopyMessage for copy message

type CopyOptions

type CopyOptions struct {
	Targets map[string][]string
}

CopyOptions for multiple container files copy

type CreateContainerMessage

type CreateContainerMessage struct {
	Podname       string
	Nodename      string
	ContainerID   string
	ContainerName string
	Error         error
	Success       bool
	CPU           CPUMap
	Quota         float64
	Memory        int64
	Publish       map[string]string
	Hook          []byte
}

CreateContainerMessage for create message

type DeployOptions

type DeployOptions struct {
	Name         string            // Name of application
	Entrypoint   *Entrypoint       // entrypoint
	Podname      string            // Name of pod to deploy
	Nodename     string            // Specific nodes to deploy, if given, must belong to pod
	Image        string            // Name of image to deploy
	ExtraArgs    string            // Extra arguments to append to command
	CPUQuota     float64           // How many cores needed, e.g. 1.5
	Memory       int64             // Memory for container, in bytes
	Count        int               // How many containers needed, e.g. 4
	Env          []string          // Env for container
	DNS          []string          // DNS for container
	ExtraHosts   []string          // Extra hosts for container
	Volumes      []string          // Volumes for container
	Networks     map[string]string // Network names and specified IPs
	NetworkMode  string            // Network mode
	User         string            // User for container
	Debug        bool              // debug mode, use syslog as log driver
	OpenStdin    bool              // OpenStdin for container
	Meta         map[string]string // Meta for containers
	NodeLabels   map[string]string // NodeLabels for filter node
	DeployMethod string            // Deploy method
	Data         map[string][]byte // For additional file data
	SoftLimit    bool              // softlimit memory
}

DeployOptions is options for deploying

type DeployStatus

type DeployStatus struct {
	Data       string
	Err        error
	Action     string
	Appname    string
	Entrypoint string
	Nodename   string
	ID         string
}

DeployStatus store deploy status

type DockerConfig

type DockerConfig struct {
	APIVersion  string                `yaml:"version"`      // docker API version
	NetworkMode string                `yaml:"network_mode"` // docker network mode
	CertPath    string                `yaml:"cert_path"`    // docker cert files path
	Hub         string                `yaml:"hub"`          // docker hub address
	Namespace   string                `yaml:"namespace"`    // docker hub prefix, will be set to $Hub/$HubPrefix/$appname
	BuildPod    string                `yaml:"build_pod"`    // podname used to build
	UseLocalDNS bool                  `yaml:"local_dns"`    // use node IP as dns
	Log         LogConfig             `yaml:"log"`          // docker log driver
	AuthConfigs map[string]AuthConfig `yaml:"auths"`        // docker registry credentials
}

DockerConfig holds eru-core docker config

type Entrypoint

type Entrypoint struct {
	Name          string       `yaml:"name,omitempty"`
	Command       string       `yaml:"cmd,omitempty"`
	Privileged    bool         `yaml:"privileged,omitempty"`
	Dir           string       `yaml:"dir,omitempty"`
	Log           *LogConfig   `yaml:"log,omitempty"`
	Publish       []string     `yaml:"publish,omitempty,flow"`
	HealthCheck   *HealthCheck `yaml:"healthcheck,omitempty,flow"`
	Hook          *Hook        `yaml:"hook,omitempty,flow"`
	RestartPolicy string       `yaml:"restart,omitempty"`
}

Entrypoint is a single entrypoint

type EtcdConfig

type EtcdConfig struct {
	Machines   []string `yaml:"machines"`    // etcd cluster addresses
	Prefix     string   `yaml:"prefix"`      // etcd lock prefix, all locks will be created under this dir
	LockPrefix string   `yaml:"lock_prefix"` // etcd lock prefix, all locks will be created under this dir
}

EtcdConfig holds eru-core etcd config

type GitConfig

type GitConfig struct {
	SCMType    string `yaml:"scm_type"`    // source code manager type [gitlab/github]
	PublicKey  string `yaml:"public_key"`  // public key to clone code
	PrivateKey string `yaml:"private_key"` // private key to clone code
	Token      string `yaml:"token"`       // Token to call SCM API
}

GitConfig holds eru-core git config

type HealthCheck

type HealthCheck struct {
	TCPPorts []string `yaml:"tcp_ports,omitempty,flow"`
	HTTPPort string   `yaml:"http_port"`
	HTTPURL  string   `yaml:"url,omitempty"`
	HTTPCode int      `yaml:"code,omitempty"`
}

HealthCheck define healthcheck

type Hook

type Hook struct {
	AfterStart []string `yaml:"after_start,omitempty"`
	BeforeStop []string `yaml:"before_stop,omitempty"`
	Force      bool     `yaml:"force,omitempty"`
}

Hook define hooks

type LogConfig

type LogConfig struct {
	Type   string            `yaml:"type"`   // Log type, can be "journald", "json-file", "none"
	Config map[string]string `yaml:"config"` // Log configs
}

LogConfig define log type

type Network

type Network struct {
	Name    string   `json:"name"`
	Subnets []string `json:"cidr"`
}

Network for network define

type Node

type Node struct {
	sync.Mutex

	Name      string            `json:"name"`
	Endpoint  string            `json:"endpoint"`
	Podname   string            `json:"podname"`
	Available bool              `json:"available"`
	CPU       CPUMap            `json:"cpu"`
	MemCap    int64             `json:"memcap"`
	Labels    map[string]string `json:"labels"`
	Engine    *engineapi.Client `json:"-"`
}

Node store node info

func (*Node) GetIP

func (n *Node) GetIP() string

GetIP get node ip get IP for node will not return error

func (*Node) Info

func (n *Node) Info(ctx context.Context) (enginetypes.Info, error)

Info show node info 2 seconds timeout used to be 5, but client won't wait that long

type NodeInfo

type NodeInfo struct {
	CPUAndMem
	Name     string
	CPUs     int
	CPUPlan  []CPUMap
	Capacity int // 可以部署几个
	Count    int // 上面有几个了
	Deploy   int // 最终部署几个

}

NodeInfo for deploy

type Pod

type Pod struct {
	Name string `json:"name"`
	Desc string `json:"desc"`
	// scheduler favor, should be CPU or MEM
	Favor string `json:"favor"`
}

Pod define pod

type PullImageMessage

type PullImageMessage struct {
	BuildImageMessage
}

PullImageMessage for cache image

type ReallocResourceMessage

type ReallocResourceMessage struct {
	ContainerID string
	Success     bool
}

ReallocResourceMessage for realloc resource

type RemoveContainerMessage

type RemoveContainerMessage struct {
	ContainerID string
	Success     bool
	Message     string
}

RemoveContainerMessage for remove message

type RemoveImageMessage

type RemoveImageMessage struct {
	Image    string
	Success  bool
	Messages []string
}

RemoveImageMessage for remove image message

type ReplaceContainerMessage

type ReplaceContainerMessage struct {
	Create *CreateContainerMessage
	Remove *RemoveContainerMessage
	Error  error
}

ReplaceContainerMessage for replace method

type RunAndWaitMessage

type RunAndWaitMessage struct {
	ContainerID string
	Data        []byte
}

RunAndWaitMessage for run and wait

type RunAndWaitOptions

type RunAndWaitOptions struct {
	DeployOptions
	Timeout int
	Cmd     string
}

RunAndWaitOptions is options for running and waiting

type SchedConfig

type SchedConfig struct {
	MaxShare  int `yaml:"maxshare"`  // comlpex scheduler use maxshare
	ShareBase int `yaml:"sharebase"` // how many pieces for one core
}

SchedConfig holds scheduler config

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL