github.com/angryronald/go-kit@v0.0.0-20240505173814-ff2bd9c79dbf/test/docker/vault/vault.docker.go (about)

     1  package vault
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"os/exec"
     7  	"sync"
     8  	"time"
     9  
    10  	"github.com/sirupsen/logrus"
    11  
    12  	"github.com/angryronald/go-kit/test/docker"
    13  )
    14  
    15  var mu sync.Mutex
    16  var upFlag bool
    17  var port string
    18  var host string
    19  
    20  func init() {
    21  	port = docker.GetAvailablePort(8200)
    22  	host = "localhost"
    23  	upFlag = false
    24  }
    25  
    26  // StartVault starting vault in docker and returning active port and rootToken being used by vault container
    27  func StartVault() (string, string) {
    28  	mu.Lock()
    29  	if !upFlag {
    30  		// availablePort := docker.GetAvailablePort(1080)
    31  		// Define the command you want to run
    32  		cmd := exec.Command("docker", "run", "-d", "--rm", "-p", fmt.Sprintf("%s:8200", port), "--name", "vault", "hashicorp/vault:latest", "vault", "server", "-dev", "-dev-root-token-id", "701432d1-00e7-7c94-10c4-8450ab3c4b31", "-dev-listen-address", "0.0.0.0:8200")
    33  
    34  		// Set the working directory to the location of your docker-compose.yml file
    35  		cmd.Dir = "."
    36  
    37  		// Capture and print the command's output
    38  		output, err := cmd.CombinedOutput()
    39  		if err != nil {
    40  			StopVaultWithoutLock()
    41  			logrus.Debug("Error:", err)
    42  			os.Exit(1)
    43  		}
    44  
    45  		logrus.Debug("Command Output:", string(output))
    46  
    47  		time.Sleep(2 * time.Second)
    48  
    49  		cmd = exec.Command("docker", "ps", "-a")
    50  
    51  		// Capture and print the command's output
    52  		output, err = cmd.CombinedOutput()
    53  		if err != nil {
    54  			logrus.Debug("Error:", err)
    55  			os.Exit(1)
    56  		}
    57  
    58  		logrus.Debug("Command Output:", string(output))
    59  
    60  		upFlag = true
    61  
    62  		time.Sleep(3 * time.Second)
    63  	}
    64  	mu.Unlock()
    65  	return port, vaultTestRootToken
    66  }
    67  
    68  func StopVaultWithoutLock() {
    69  	// Define the command you want to run
    70  	cmd := exec.Command("docker", "stop", "vault")
    71  
    72  	// Set the working directory to the location of your docker-compose.yml file
    73  	cmd.Dir = "."
    74  
    75  	// Capture and print the command's output
    76  	output, err := cmd.CombinedOutput()
    77  	if err != nil {
    78  		logrus.Debug("Error:", err)
    79  		os.Exit(1)
    80  	}
    81  
    82  	logrus.Debug("Command Output:", string(output))
    83  }
    84  
    85  func StopVault() {
    86  	mu.Lock()
    87  	if upFlag {
    88  		StopVaultWithoutLock()
    89  		upFlag = false
    90  	}
    91  	mu.Unlock()
    92  }