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  }