github.com/jwhonce/docker@v0.6.7-0.20190327063223-da823cf3a5a3/hack/integration-cli-on-swarm/host/dockercmd.go (about) 1 package main 2 3 import ( 4 "fmt" 5 "os" 6 "os/exec" 7 "strings" 8 "time" 9 10 "github.com/docker/docker/client" 11 ) 12 13 func system(commands [][]string) error { 14 for _, c := range commands { 15 cmd := exec.Command(c[0], c[1:]...) 16 cmd.Stdout = os.Stdout 17 cmd.Stderr = os.Stderr 18 if err := cmd.Run(); err != nil { 19 return err 20 } 21 } 22 return nil 23 } 24 25 func pushImage(_ *client.Client, remote, local string) error { 26 // FIXME: eliminate os/exec (but it is hard to pass auth without os/exec ...) 27 return system([][]string{ 28 {"docker", "image", "tag", local, remote}, 29 {"docker", "image", "push", remote}, 30 }) 31 } 32 33 func deployStack(_ *client.Client, stackName, composeFilePath string) error { 34 // FIXME: eliminate os/exec (but stack is implemented in CLI ...) 35 return system([][]string{ 36 {"docker", "stack", "deploy", 37 "--compose-file", composeFilePath, 38 "--with-registry-auth", 39 stackName}, 40 }) 41 } 42 43 func hasStack(_ *client.Client, stackName string) bool { 44 // FIXME: eliminate os/exec (but stack is implemented in CLI ...) 45 out, err := exec.Command("docker", "stack", "ls").CombinedOutput() 46 if err != nil { 47 panic(fmt.Errorf("`docker stack ls` failed with: %s", string(out))) 48 } 49 // FIXME: not accurate 50 return strings.Contains(string(out), stackName) 51 } 52 53 func removeStack(_ *client.Client, stackName string) error { 54 // FIXME: eliminate os/exec (but stack is implemented in CLI ...) 55 if err := system([][]string{ 56 {"docker", "stack", "rm", stackName}, 57 }); err != nil { 58 return err 59 } 60 // FIXME 61 time.Sleep(10 * time.Second) 62 return nil 63 }