sources

package
v0.0.0-...-a3a5c94 Latest Latest
Warning

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

Go to latest
Published: Aug 21, 2021 License: MIT Imports: 56 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrorNoAuth = fmt.Errorf("pull image require docker login")

ErrorNoAuth error no auth

View Source
var ErrorNoImage = fmt.Errorf("image not exist")

ErrorNoImage error no image

Functions

func AllCmds

func AllCmds() []string

AllCmds List all legal cmds in a dockerfile

func CheckFileExist

func CheckFileExist(path string) bool

CheckFileExist CheckFileExist

func CheckTrustedRepositories

func CheckTrustedRepositories(image, user, pass string) error

CheckTrustedRepositories check Repositories is exist, if not create it.

func CopyFileWithProgress

func CopyFileWithProgress(src, dst string, logger event.Logger) error

CopyFileWithProgress

func CopyToFile

func CopyToFile(outfile string, r io.Reader) error

CopyToFile writes the content of the reader to the specified file

func CopyWithProgress

func CopyWithProgress(srcFile SrcFile, dstFile DstFile, allSize int64, logger event.Logger) (err error)

CopyWithProgress

func EncodeAuthToBase64

func EncodeAuthToBase64(authConfig types.AuthConfig) (string, error)

EncodeAuthToBase64 serializes the auth configuration as JSON base64 payload

func EncodePrivateKey

func EncodePrivateKey(private *rsa.PrivateKey) []byte

EncodePrivateKey

func EncodeSSHKey

func EncodeSSHKey(public *rsa.PublicKey) ([]byte, error)

EncodeSSHKey

func GenSaveImageName

func GenSaveImageName(name string) string

GenSaveImageName generates the final name of the image, which is the name of the image in the exported tar package.

func GenerateKey

func GenerateKey(bits int) (*rsa.PrivateKey, *rsa.PublicKey, error)

GenerateKey

func GetCodeSourceDir

func GetCodeSourceDir(RepositoryURL, branch, tenantID string, ServiceID string) string

GetCodeSourceDir get source storage directory it changes as gitrepostory address, branch, and service id change

func GetLastCommit

func GetLastCommit(re *git.Repository) (*object.Commit, error)

GetLastCommit get last commit info get commit by head reference

func GetPrivateFile

func GetPrivateFile(tenantID string) string

GetPrivateFile

func GetPublicKey

func GetPublicKey(tenantID string) string

GetPublicKey

func GetTagFromNamedRef

func GetTagFromNamedRef(ref reference.Named) string

GetTagFromNamedRef get image tag by name

func GitCheckout

func GitCheckout(sourceDir, branch string) error

GitCheckout checkout the specified branch

func GitClone

func GitClone(csi CodeSourceInfo, sourceDir string, logger event.Logger, timeout int) (*git.Repository, error)

GitClone

func GitCloneOrPull

func GitCloneOrPull(csi CodeSourceInfo, sourceDir string, logger event.Logger, timeout int) (*git.Repository, error)

GitCloneOrPull if code exist in local,use git pull.

func GitPull

func GitPull(csi CodeSourceInfo, sourceDir string, logger event.Logger, timeout int) (*git.Repository, error)

GitPull

func Go

func Go(f func() error) chan error

Go is a basic promise implementation: it wraps calls a function in a goroutine, and returns a channel which will later return the function's return value.

func Home

func Home() (string, error)

Home returns the home directory for the executing user.

This uses an OS-specific method for discovering the home directory. An error is returned if a home directory cannot be detected.

func ImageBuild

func ImageBuild(dockerCli *client.Client, contextDir string, options types.ImageBuildOptions, logger event.Logger, timeout int) (string, error)

ImageBuild

func ImageExist

func ImageExist(imageName, user, password string) (bool, error)

ImageExist check image exist

func ImageImport

func ImageImport(dockerCli *client.Client, image, source string, logger event.Logger) error

ImageImport save image to tar file source source file name eg. /tmp/xxx.tar

func ImageInspectWithRaw

func ImageInspectWithRaw(dockerCli *client.Client, image string) (*types.ImageInspect, error)

ImageInspectWithRaw get image inspect

func ImageLoad

func ImageLoad(dockerCli *client.Client, tarFile string, logger event.Logger) error

ImageLoad load image from tar file destination destination file name eg. /tmp/xxx.tar

func ImageNameHandle

func ImageNameHandle(imageName string) *model.ImageName

ImageNameHandle

func ImageNameWithNamespaceHandle

func ImageNameWithNamespaceHandle(imageName string) *model.ImageName

ImageNameWithNamespaceHandle if have namespace, will parse namespace

func ImagePull

func ImagePull(dockerCli *client.Client, image string, username, password string, logger event.Logger, timeout int) (*types.ImageInspect, error)

ImagePull pull docker image timeout minutes of the unit

func ImagePush

func ImagePush(dockerCli *client.Client, image, user, pass string, logger event.Logger, timeout int) error

ImagePush push image to registry timeout minutes of the unit

func ImageRemove

func ImageRemove(dockerCli *client.Client, image string) error

ImageRemove remove image

func ImageSave

func ImageSave(dockerCli *client.Client, image, destination string, logger event.Logger) error

ImageSave save image to tar file destination destination file name eg. /tmp/xxx.tar

func ImageTag

func ImageTag(dockerCli *client.Client, source, target string, logger event.Logger, timeout int) error

ImageTag change docker image tag

func MakeSSHKeyPair

func MakeSSHKeyPair() (string, string, error)

MakeSSHKeyPair

func MultiImageSave

func MultiImageSave(ctx context.Context, dockerCli *client.Client, destination string, logger event.Logger, images ...string) error

MultiImageSave save multi image to tar file destination destination file name eg. /tmp/xxx.tar

func RemoveDir

func RemoveDir(path string) error

RemoveDir

func TrustedImagePush

func TrustedImagePush(dockerCli *client.Client, image, user, pass string, logger event.Logger, timeout int) error

TrustedImagePush push image to trusted registry

Types

type CodeSourceInfo

type CodeSourceInfo struct {
	ServerType    string `json:"server_type"`
	RepositoryURL string `json:"repository_url"`
	Branch        string `json:"branch"`
	User          string `json:"user"`
	Password      string `json:"password"`
	//To avoid conflicts between projects, the code cache directory is increased to tenants
	TenantID  string `json:"tenant_id"`
	ServiceID string `json:"service_id"`
}

CodeSourceInfo

func (CodeSourceInfo) GetCodeSourceDir

func (c CodeSourceInfo) GetCodeSourceDir() string

GetCodeSourceDir get source storage directory

type Command

type Command struct {
	Cmd       string   // lowercased command name (ex: `from`)
	SubCmd    string   // for ONBUILD only this holds the sub-command
	Json      bool     // whether the value is written in json form
	Original  string   // The original source line
	StartLine int      // The original source line number
	Flags     []string // Any flags such as `--from=...` for `COPY`.
	Value     []string // The contents of the command (ex: `ubuntu:xenial`)
}

Command Represents a single line (layer) in a Dockerfile. For example `FROM ubuntu:xenial`

func ParseFile

func ParseFile(filename string) ([]Command, error)

ParseFile Parse a Dockerfile from a filename. An IOError or ParseError may occur.

func ParseReader

func ParseReader(file io.Reader) ([]Command, error)

ParseReader Parse a Dockerfile from a reader. A ParseError may occur.

type Commit

type Commit struct {
	Revision string `xml:"revision,attr"`
	Author   string `xml:"author"`
	Msg      string `xml:"msg"`
	Date     string `xml:"date"`
}

Commit

type ContainerConfig

type ContainerConfig struct {
	// Metadata of the container. This information will uniquely identify the
	// container, and the runtime should leverage this to ensure correct
	// operation. The runtime may also use this information to improve UX, such
	// as by constructing a readable name.
	Metadata *ContainerMetadata `protobuf:"bytes,1,opt,name=metadata" json:"metadata,omitempty"`
	// Image to use.
	Image *ImageSpec `protobuf:"bytes,2,opt,name=image" json:"image,omitempty"`
	// Command to execute (i.e., entrypoint for docker)
	Command []string `protobuf:"bytes,3,rep,name=command" json:"command,omitempty"`
	// Args for the Command (i.e., command for docker)
	Args []string `protobuf:"bytes,4,rep,name=args" json:"args,omitempty"`
	// Current working directory of the command.
	WorkingDir string `protobuf:"bytes,5,opt,name=working_dir,json=workingDir,proto3" json:"working_dir,omitempty"`
	// List of environment variable to set in the container.
	Envs []*KeyValue `protobuf:"bytes,6,rep,name=envs" json:"envs,omitempty"`
	// Mounts for the container.
	Mounts []*Mount `protobuf:"bytes,7,rep,name=mounts" json:"mounts,omitempty"`
	// Devices for the container.
	Devices []*Device `protobuf:"bytes,8,rep,name=devices" json:"devices,omitempty"`
	// Key-value pairs that may be used to scope and select individual resources.
	// Label keys are of the form:
	//     label-key ::= prefixed-name | name
	//     prefixed-name ::= prefix '/' name
	//     prefix ::= DNS_SUBDOMAIN
	//     name ::= DNS_LABEL
	Labels map[string]string `` /* 146-byte string literal not displayed */
	// Unstructured key-value map that may be used by the kubelet to store and
	// retrieve arbitrary metadata.
	//
	// Annotations MUST NOT be altered by the runtime; the annotations stored
	// here MUST be returned in the ContainerStatus associated with the container
	// this ContainerConfig creates.
	//
	// In general, in order to preserve a well-defined interface between the
	// kubelet and the container runtime, annotations SHOULD NOT influence
	// runtime behaviour.
	Annotations map[string]string `` /* 157-byte string literal not displayed */
	// Path relative to PodSandboxConfig.LogDirectory for container to store
	// the log (STDOUT and STDERR) on the host.
	// E.g.,
	//     PodSandboxConfig.LogDirectory = `/var/log/pods/<podUID>/`
	//     ContainerConfig.LogPath = `containerName_Instance#.log`
	//
	// WARNING: Log management and how kubelet should interface with the
	// container logs are under active discussion in
	// https://issues.k8s.io/24677. There *may* be future change of direction
	// for logging as the discussion carries on.
	LogPath string `protobuf:"bytes,11,opt,name=log_path,json=logPath,proto3" json:"log_path,omitempty"`
	// Variables for interactive containers, these have very specialized
	// use-cases (e.g. debugging).
	// TODO: Determine if we need to continue supporting these fields that are
	// part of Kubernetes's Container Spec.
	Stdin     bool `protobuf:"varint,12,opt,name=stdin,proto3" json:"stdin,omitempty"`
	StdinOnce bool `protobuf:"varint,13,opt,name=stdin_once,json=stdinOnce,proto3" json:"stdin_once,omitempty"`
	Tty       bool `protobuf:"varint,14,opt,name=tty,proto3" json:"tty,omitempty"`
	// Configuration specific to Linux containers.
	//Linux *LinuxContainerConfig `protobuf:"bytes,15,opt,name=linux" json:"linux,omitempty"`
	AttachStdin   bool
	AttachStdout  bool
	AttachStderr  bool
	NetworkConfig *NetworkConfig
	ExtraHosts    []string
}

ContainerConfig holds all the required and optional fields for creating a container.

func (*ContainerConfig) GetAnnotations

func (m *ContainerConfig) GetAnnotations() map[string]string

GetAnnotations

func (*ContainerConfig) GetDevices

func (m *ContainerConfig) GetDevices() []*Device

GetDevices

func (*ContainerConfig) GetEnvs

func (m *ContainerConfig) GetEnvs() []*KeyValue

GetEnvs

func (*ContainerConfig) GetImage

func (m *ContainerConfig) GetImage() *ImageSpec

GetImage

func (*ContainerConfig) GetLabels

func (m *ContainerConfig) GetLabels() map[string]string

GetLabels

func (*ContainerConfig) GetMetadata

func (m *ContainerConfig) GetMetadata() *ContainerMetadata

GetMetadata GetMetadata

func (*ContainerConfig) GetMounts

func (m *ContainerConfig) GetMounts() []*Mount

GetMounts

type ContainerMetadata

type ContainerMetadata struct {
	// Name of the container. Same as the container name in the PodSpec.
	Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name,omitempty"`
	// Attempt number of creating the container. Default: 0.
	Attempt uint32 `protobuf:"varint,2,opt,name=attempt,proto3" json:"attempt,omitempty"`
}

ContainerMetadata holds all necessary information for building the container name. The container runtime is encouraged to expose the metadata in its user interface for better user experience. E.g., runtime can construct a unique container name based on the metadata. Note that (name, attempt) is unique within a sandbox for the entire lifetime of the sandbox.

type Device

type Device struct {
	// Path of the device within the container.
	ContainerPath string `protobuf:"bytes,1,opt,name=container_path,json=containerPath,proto3" json:"container_path,omitempty"`
	// Path of the device on the host.
	HostPath string `protobuf:"bytes,2,opt,name=host_path,json=hostPath,proto3" json:"host_path,omitempty"`
	// Cgroups permissions of the device, candidates are one or more of
	// * r - allows container to read from the specified device.
	// * w - allows container to write to the specified device.
	// * m - allows container to create device files that do not yet exist.
	Permissions string `protobuf:"bytes,3,opt,name=permissions,proto3" json:"permissions,omitempty"`
}

Device specifies a host device to mount into a container.

type DockerService

type DockerService struct {
	// contains filtered or unexported fields
}

DockerService docker cli service

func CreateDockerService

func CreateDockerService(ctx context.Context, client *client.Client) *DockerService

CreateDockerService create docker service

func (*DockerService) AttachContainer

func (ds *DockerService) AttachContainer(containerID string, attacheStdin, attaStdout, attaStderr bool, inputStream io.ReadCloser, outputStream, errorStream io.Writer, errCh *chan error) (func(), error)

AttachContainer attach container

func (*DockerService) CreateContainer

func (ds *DockerService) CreateContainer(config *ContainerConfig) (string, error)

CreateContainer creates a new container in the given PodSandbox Docker cannot store the log to an arbitrary location (yet), so we create an symlink at LogPath, linking to the actual path of the log. TODO: check if the default values returned by the runtime API are ok.

func (*DockerService) GetContainerLogPath

func (ds *DockerService) GetContainerLogPath(containerID string) (string, error)

GetContainerLogPath returns the real path where docker stores the container log.

func (*DockerService) RemoveContainer

func (ds *DockerService) RemoveContainer(containerID string) error

RemoveContainer removes the container. TODO: If a container is still running, should we forcibly remove it?

func (*DockerService) StartContainer

func (ds *DockerService) StartContainer(containerID string) error

StartContainer starts the container.

func (*DockerService) StopContainer

func (ds *DockerService) StopContainer(containerID string, timeout int64) error

StopContainer stops a running container with a grace period (i.e., timeout).

type DstFile

type DstFile interface {
	Write([]byte) (int, error)
}

DstFile

type IOError

type IOError struct {
	Msg string
}

IOError A failure in opening a file for reading.

func (IOError) Error

func (e IOError) Error() string

type ImageSpec

type ImageSpec struct {
	Image string `protobuf:"bytes,1,opt,name=image,proto3" json:"image,omitempty"`
}

ImageSpec is an internal representation of an image. Currently, it wraps the value of a Container's Image field (e.g. imageID or imageDigest), but in the future it will include more detailed information about the different image types.

type Info

type Info struct {
	XMLName       xml.Name `xml:"info"`
	URL           string   `xml:"entry>url"`
	RelativeURL   string   `xml:"entry>relative-url"`
	Root          string   `xml:"entry>repository>root"`
	UUID          string   `xml:"entry>repository>uuid"`
	WcrootAbspath string   `xml:"entry>wc-info>wcroot-abspath"`
	Schedule      string   `xml:"entry>wc-info>schedule"`
	Depth         string   `xml:"entry>wc-info>depth"`
	Logs          *Logs
	Branchs       []string
	Tags          []string
}

Info

type JSONError

type JSONError struct {
	Code    int    `json:"code,omitempty"`
	Message string `json:"message,omitempty"`
}

JSONError wraps a concrete Code and Message, `Code` is is an integer error code, `Message` is the error message.

func (*JSONError) Error

func (e *JSONError) Error() string

type JSONMessage

type JSONMessage struct {
	Stream          string        `json:"stream,omitempty"`
	Status          string        `json:"status,omitempty"`
	Progress        *JSONProgress `json:"progressDetail,omitempty"`
	ProgressMessage string        `json:"progress,omitempty"` //deprecated
	ID              string        `json:"id,omitempty"`
	From            string        `json:"from,omitempty"`
	Time            int64         `json:"time,omitempty"`
	TimeNano        int64         `json:"timeNano,omitempty"`
	Error           *JSONError    `json:"errorDetail,omitempty"`
	ErrorMessage    string        `json:"error,omitempty"` //deprecated
	// Aux contains out-of-band data, such as digests for push signing.
	Aux *json.RawMessage `json:"aux,omitempty"`
}

JSONMessage JSONMessage

func (*JSONMessage) JSONString

func (j *JSONMessage) JSONString() string

JSONString return json string

type JSONProgress

type JSONProgress struct {
	Current int64 `json:"current,omitempty"`
	Total   int64 `json:"total,omitempty"`
	Start   int64 `json:"start,omitempty"`
	// If true, don't show xB/yB
	HideCounts bool `json:"hidecounts,omitempty"`
	// contains filtered or unexported fields
}

JSONProgress describes a Progress. terminalFd is the fd of the current terminal, Start is the initial value for the operation. Current is the current status and value of the progress made towards Total. Total is the end value describing when we made 100% progress for an operation.

type KeyValue

type KeyValue struct {
	Key   string `protobuf:"bytes,1,opt,name=key,proto3" json:"key,omitempty"`
	Value string `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"`
}

KeyValue

type Logs

type Logs struct {
	XMLName      xml.Name `xml:"log"`
	CommitEntrys []Commit `xml:"logentry"`
}

Logs commit logs

type Mount

type Mount struct {
	// Path of the mount within the container.
	ContainerPath string `protobuf:"bytes,1,opt,name=container_path,json=containerPath,proto3" json:"container_path,omitempty"`
	// Path of the mount on the host.
	HostPath string `protobuf:"bytes,2,opt,name=host_path,json=hostPath,proto3" json:"host_path,omitempty"`
	// If set, the mount is read-only.
	Readonly bool `protobuf:"varint,3,opt,name=readonly,proto3" json:"readonly,omitempty"`
	// If set, the mount needs SELinux relabeling.
	SelinuxRelabel bool `protobuf:"varint,4,opt,name=selinux_relabel,json=selinuxRelabel,proto3" json:"selinux_relabel,omitempty"`
}

Mount specifies a host volume to mount into a container.

type NetworkConfig

type NetworkConfig struct {
	NetworkMode string `json:"network_mode"`
}

NetworkConfig network config for container

type ParseError

type ParseError struct {
	Msg string
}

ParseError A failure in parsing the file as a dockerfile.

func (ParseError) Error

func (e ParseError) Error() string

type Repostory

type Repostory struct {
	ID               int    `json:"id,omitempty"`
	Namespace        string `json:"namespace,omitempty"`
	NamespaceType    string `json:"namespaceType,omitempty"`
	Name             string `json:"name"`
	ShortDescription string `json:"shortDescription"`
	LongDescription  string `json:"longDescription"`
	Visibility       string `json:"visibility"`
	Status           string `json:"status,omitempty"`
}

Repostory repostory info

type RepostoryBuildInfo

type RepostoryBuildInfo struct {
	RepostoryURL     string
	RepostoryURLType string
	BuildBranch      string
	BuildPath        string
	CodeHome         string
	// contains filtered or unexported fields
}

RepostoryBuildInfo

func CreateRepostoryBuildInfo

func CreateRepostoryBuildInfo(repoURL, repoType, branch, tenantID string, ServiceID string) (*RepostoryBuildInfo, error)

CreateRepostoryBuildInfo repoType git or svn

func (*RepostoryBuildInfo) GetCodeBuildAbsPath

func (r *RepostoryBuildInfo) GetCodeBuildAbsPath() string

GetCodeBuildAbsPath

func (*RepostoryBuildInfo) GetCodeBuildPath

func (r *RepostoryBuildInfo) GetCodeBuildPath() string

GetCodeBuildPath

func (*RepostoryBuildInfo) GetCodeHome

func (r *RepostoryBuildInfo) GetCodeHome() string

GetCodeHome

func (*RepostoryBuildInfo) GetProtocol

func (r *RepostoryBuildInfo) GetProtocol() string

GetProtocol

type SFTPClient

type SFTPClient struct {
	UserName string `json:"username"`
	PassWord string `json:"password"`
	Host     string `json:"host"`
	Port     int    `json:"int"`
	// contains filtered or unexported fields
}

SFTPClient

func NewSFTPClient

func NewSFTPClient(username, password, host, port string) (*SFTPClient, error)

NewSFTPClient

func (*SFTPClient) Close

func (s *SFTPClient) Close()

Close

func (*SFTPClient) DownloadFile

func (s *SFTPClient) DownloadFile(src, dst string, logger event.Logger) error

DownloadFile

func (*SFTPClient) FileExist

func (s *SFTPClient) FileExist(filepath string) (bool, error)

FileExist

func (*SFTPClient) MkdirAll

func (s *SFTPClient) MkdirAll(dirpath string) error

MkdirAll

func (*SFTPClient) PushFile

func (s *SFTPClient) PushFile(src, dst string, logger event.Logger) error

PushFile

type SVNClient

type SVNClient interface {
	Checkout() (*Info, error)
	Update(childpath string) (*Info, error)
	UpdateOrCheckout(childpath string) (*Info, error)
}

SVNClient

func NewClient

func NewClient(csi CodeSourceInfo, codeHome string, logger event.Logger) SVNClient

NewClient

func NewClientWithEnv

func NewClientWithEnv(username, password, url, sourceDir string, env []string) SVNClient

NewClientWithEnv ...

type SrcFile

type SrcFile interface {
	Read([]byte) (int, error)
}

SrcFile

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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