github.com/containers/podman/v4@v4.9.4/pkg/machine/applehv/ignition.go (about) 1 //go:build darwin 2 // +build darwin 3 4 package applehv 5 6 import ( 7 "net" 8 "net/http" 9 10 "github.com/containers/podman/v4/pkg/machine/define" 11 "github.com/sirupsen/logrus" 12 ) 13 14 // serveIgnitionOverSock allows podman to open a small httpd instance on the vsock between the host 15 // and guest to inject the ignitionfile into fcos 16 func (m *MacMachine) serveIgnitionOverSock(ignitionSocket *define.VMFile) error { 17 logrus.Debugf("reading ignition file: %s", m.IgnitionFile.GetPath()) 18 ignFile, err := m.IgnitionFile.Read() 19 if err != nil { 20 return err 21 } 22 mux := http.NewServeMux() 23 mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { 24 _, err := w.Write(ignFile) 25 if err != nil { 26 logrus.Error("failed to serve ignition file: %v", err) 27 } 28 }) 29 listener, err := net.Listen("unix", ignitionSocket.GetPath()) 30 if err != nil { 31 return err 32 } 33 logrus.Debugf("ignition socket device: %s", ignitionSocket.GetPath()) 34 defer func() { 35 if err := listener.Close(); err != nil { 36 logrus.Error(err) 37 } 38 }() 39 return http.Serve(listener, mux) 40 }