mirror of
https://github.com/goharbor/harbor.git
synced 2024-12-19 07:07:42 +01:00
98 lines
2.1 KiB
Go
98 lines
2.1 KiB
Go
|
package client
|
||
|
|
||
|
import "os/exec"
|
||
|
import "strings"
|
||
|
import "errors"
|
||
|
import "bufio"
|
||
|
import "fmt"
|
||
|
|
||
|
//DockerClient : Run docker commands
|
||
|
type DockerClient struct{}
|
||
|
|
||
|
//Status : Check if docker daemon is there
|
||
|
func (dc *DockerClient) Status() error {
|
||
|
cmdName := "docker"
|
||
|
args := []string{"info"}
|
||
|
|
||
|
return dc.runCommand(cmdName, args)
|
||
|
}
|
||
|
|
||
|
//Pull : Pull image
|
||
|
func (dc *DockerClient) Pull(image string) error {
|
||
|
if len(strings.TrimSpace(image)) == 0 {
|
||
|
return errors.New("Empty image")
|
||
|
}
|
||
|
|
||
|
cmdName := "docker"
|
||
|
args := []string{"pull", image}
|
||
|
|
||
|
return dc.runCommandWithOutput(cmdName, args)
|
||
|
}
|
||
|
|
||
|
//Tag :Tag image
|
||
|
func (dc *DockerClient) Tag(source, target string) error {
|
||
|
if len(strings.TrimSpace(source)) == 0 ||
|
||
|
len(strings.TrimSpace(target)) == 0 {
|
||
|
return errors.New("Empty images")
|
||
|
}
|
||
|
|
||
|
cmdName := "docker"
|
||
|
args := []string{"tag", source, target}
|
||
|
|
||
|
return dc.runCommandWithOutput(cmdName, args)
|
||
|
}
|
||
|
|
||
|
//Push : push image
|
||
|
func (dc *DockerClient) Push(image string) error {
|
||
|
if len(strings.TrimSpace(image)) == 0 {
|
||
|
return errors.New("Empty image")
|
||
|
}
|
||
|
|
||
|
cmdName := "docker"
|
||
|
args := []string{"push", image}
|
||
|
|
||
|
return dc.runCommandWithOutput(cmdName, args)
|
||
|
}
|
||
|
|
||
|
//Login : Login docker
|
||
|
func (dc *DockerClient) Login(userName, password string, uri string) error {
|
||
|
if len(strings.TrimSpace(userName)) == 0 ||
|
||
|
len(strings.TrimSpace(password)) == 0 {
|
||
|
return errors.New("Invlaid credential")
|
||
|
}
|
||
|
|
||
|
cmdName := "docker"
|
||
|
args := []string{"login", "-u", userName, "-p", password, uri}
|
||
|
|
||
|
return dc.runCommandWithOutput(cmdName, args)
|
||
|
}
|
||
|
|
||
|
func (dc *DockerClient) runCommand(cmdName string, args []string) error {
|
||
|
return exec.Command(cmdName, args...).Run()
|
||
|
}
|
||
|
|
||
|
func (dc *DockerClient) runCommandWithOutput(cmdName string, args []string) error {
|
||
|
cmd := exec.Command(cmdName, args...)
|
||
|
cmdReader, err := cmd.StdoutPipe()
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
scanner := bufio.NewScanner(cmdReader)
|
||
|
go func() {
|
||
|
for scanner.Scan() {
|
||
|
fmt.Printf("%s out | %s\n", cmdName, scanner.Text())
|
||
|
}
|
||
|
}()
|
||
|
|
||
|
if err = cmd.Start(); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
if err = cmd.Wait(); err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|