agent v0.3.8: fix crash UI notifications, auto Podman machine DNS, WordPress 7.0.0 ready template
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"log"
|
||||
"os/exec"
|
||||
"runtime"
|
||||
)
|
||||
|
||||
type podmanMachine struct {
|
||||
Name string `json:"name"`
|
||||
Running bool `json:"running"`
|
||||
VMType string `json:"vm_type"`
|
||||
}
|
||||
|
||||
// ensurePodmanMachineDNS configures public DNS resolvers on running Podman
|
||||
// machines on Windows and macOS. This is required because the Podman VM does
|
||||
// not always inherit a working DNS from the host, which prevents pulling
|
||||
// images and reaching api.wordpress.org from containers.
|
||||
func ensurePodmanMachineDNS() {
|
||||
if runtime.GOOS != "windows" && runtime.GOOS != "darwin" {
|
||||
return
|
||||
}
|
||||
if getContainerEngine() != "podman" {
|
||||
return
|
||||
}
|
||||
|
||||
out, err := exec.Command("podman", "machine", "list", "--format", "json").Output()
|
||||
if err != nil {
|
||||
log.Printf("ensurePodmanMachineDNS: cannot list machines: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
var machines []podmanMachine
|
||||
if err := json.Unmarshal(out, &machines); err != nil {
|
||||
log.Printf("ensurePodmanMachineDNS: cannot parse machine list: %v", err)
|
||||
return
|
||||
}
|
||||
|
||||
for _, m := range machines {
|
||||
if !m.Running {
|
||||
continue
|
||||
}
|
||||
if err := configurePodmanMachineDNS(m.Name); err != nil {
|
||||
log.Printf("ensurePodmanMachineDNS: failed for %s: %v", m.Name, err)
|
||||
} else {
|
||||
log.Printf("ensurePodmanMachineDNS: DNS configured for %s", m.Name)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func configurePodmanMachineDNS(name string) error {
|
||||
cmd := exec.Command(
|
||||
"podman", "machine", "ssh", name,
|
||||
"sudo", "sh", "-c",
|
||||
"echo nameserver 8.8.8.8 > /etc/resolv.conf && echo nameserver 1.1.1.1 >> /etc/resolv.conf",
|
||||
)
|
||||
hideWindow(cmd)
|
||||
out, err := cmd.CombinedOutput()
|
||||
if err != nil {
|
||||
return fmt.Errorf("%w: %s", err, string(out))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user