mirror of
https://github.com/fosrl/pangolin.git
synced 2026-01-28 22:00:51 +00:00
@@ -210,6 +210,47 @@ func isDockerRunning() bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func isPodmanRunning() bool {
|
||||||
|
cmd := exec.Command("podman", "info")
|
||||||
|
if err := cmd.Run(); err != nil {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
|
||||||
|
// detectContainerType detects whether the system is currently using Docker or Podman
|
||||||
|
// by checking which container runtime is running and has containers
|
||||||
|
func detectContainerType() SupportedContainer {
|
||||||
|
// Check if we have running containers with podman
|
||||||
|
if isPodmanRunning() {
|
||||||
|
cmd := exec.Command("podman", "ps", "-q")
|
||||||
|
output, err := cmd.Output()
|
||||||
|
if err == nil && len(strings.TrimSpace(string(output))) > 0 {
|
||||||
|
return Podman
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if we have running containers with docker
|
||||||
|
if isDockerRunning() {
|
||||||
|
cmd := exec.Command("docker", "ps", "-q")
|
||||||
|
output, err := cmd.Output()
|
||||||
|
if err == nil && len(strings.TrimSpace(string(output))) > 0 {
|
||||||
|
return Docker
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If no containers are running, check which one is installed and running
|
||||||
|
if isPodmanRunning() && isPodmanInstalled() {
|
||||||
|
return Podman
|
||||||
|
}
|
||||||
|
|
||||||
|
if isDockerRunning() && isDockerInstalled() {
|
||||||
|
return Docker
|
||||||
|
}
|
||||||
|
|
||||||
|
return Undefined
|
||||||
|
}
|
||||||
|
|
||||||
// executeDockerComposeCommandWithArgs executes the appropriate docker command with arguments supplied
|
// executeDockerComposeCommandWithArgs executes the appropriate docker command with arguments supplied
|
||||||
func executeDockerComposeCommandWithArgs(args ...string) error {
|
func executeDockerComposeCommandWithArgs(args ...string) error {
|
||||||
var cmd *exec.Cmd
|
var cmd *exec.Cmd
|
||||||
|
|||||||
@@ -93,7 +93,7 @@ func installCrowdsec(config Config) error {
|
|||||||
|
|
||||||
if checkIfTextInFile("config/traefik/dynamic_config.yml", "PUT_YOUR_BOUNCER_KEY_HERE_OR_IT_WILL_NOT_WORK") {
|
if checkIfTextInFile("config/traefik/dynamic_config.yml", "PUT_YOUR_BOUNCER_KEY_HERE_OR_IT_WILL_NOT_WORK") {
|
||||||
fmt.Println("Failed to replace bouncer key! Please retrieve the key and replace it in the config/traefik/dynamic_config.yml file using the following command:")
|
fmt.Println("Failed to replace bouncer key! Please retrieve the key and replace it in the config/traefik/dynamic_config.yml file using the following command:")
|
||||||
fmt.Println(" docker exec crowdsec cscli bouncers add traefik-bouncer")
|
fmt.Printf(" %s exec crowdsec cscli bouncers add traefik-bouncer\n", config.InstallationContainerType)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
@@ -117,7 +117,7 @@ func GetCrowdSecAPIKey(containerType SupportedContainer) (string, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Execute the command to get the API key
|
// Execute the command to get the API key
|
||||||
cmd := exec.Command("docker", "exec", "crowdsec", "cscli", "bouncers", "add", "traefik-bouncer", "-o", "raw")
|
cmd := exec.Command(string(containerType), "exec", "crowdsec", "cscli", "bouncers", "add", "traefik-bouncer", "-o", "raw")
|
||||||
var out bytes.Buffer
|
var out bytes.Buffer
|
||||||
cmd.Stdout = &out
|
cmd.Stdout = &out
|
||||||
|
|
||||||
|
|||||||
@@ -229,7 +229,16 @@ func main() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
config.InstallationContainerType = podmanOrDocker(reader)
|
// Try to detect container type from existing installation
|
||||||
|
detectedType := detectContainerType()
|
||||||
|
if detectedType == Undefined {
|
||||||
|
// If detection fails, prompt the user
|
||||||
|
fmt.Println("Unable to detect container type from existing installation.")
|
||||||
|
config.InstallationContainerType = podmanOrDocker(reader)
|
||||||
|
} else {
|
||||||
|
config.InstallationContainerType = detectedType
|
||||||
|
fmt.Printf("Detected container type: %s\n", config.InstallationContainerType)
|
||||||
|
}
|
||||||
|
|
||||||
config.DoCrowdsecInstall = true
|
config.DoCrowdsecInstall = true
|
||||||
err := installCrowdsec(config)
|
err := installCrowdsec(config)
|
||||||
|
|||||||
Reference in New Issue
Block a user