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  }