package main import ( "fmt" "net" "os" "os/exec" "strings" ) func main() { hostnames := os.Getenv("HOSTNAMES") if hostnames == "" { fmt.Println("Error: Environment variable HOSTNAMES not set or empty.") return } hosts := strings.Split(hostnames, ",") // Environment Variables failOnError := os.Getenv("FAIL_ON_ERROR") == "true" commandStr := os.Getenv("COMMAND") errorCommandStr := os.Getenv("ERROR_COMMAND") for _, host := range hosts { host = strings.TrimSpace(host) fmt.Println("\n---", host, "---") // DNS Resolution (Remove if you don't need this) ip, err := net.LookupIP(host) if err != nil { fmt.Println("DNS Resolution Failed:", err) } else { fmt.Println("Resolved IPs:", ip) } // Ping pingCmd := exec.Command("ping", "-c", "3", host) pingOutput, err := pingCmd.Output() if err != nil { fmt.Println("Ping Failed:", err) if failOnError { os.Exit(1) } // Execute error command if specified if errorCommandStr != "" { cmdParts := strings.Fields(errorCommandStr) cmd := exec.Command(cmdParts[0], cmdParts[1:]...) cmdOutput, cmdErr := cmd.Output() if cmdErr != nil { fmt.Println("Error Command Execution Failed:", errorCommandStr, cmdErr) } else { fmt.Println("Error Command Output:\n", string(cmdOutput)) } } } else { fmt.Println("Ping Output:\n", string(pingOutput)) } // Execute additional command if specified if commandStr != "" { cmdParts := strings.Fields(commandStr) cmd := exec.Command(cmdParts[0], cmdParts[1:]...) cmdOutput, err := cmd.Output() if err != nil { fmt.Println("Command Execution Failed:", commandStr, err) } else { fmt.Println("Command Output:\n", string(cmdOutput)) } } } }