diff --git a/pkg/register/register.go b/pkg/register/register.go index 2b5c8da4..1ac9edc1 100644 --- a/pkg/register/register.go +++ b/pkg/register/register.go @@ -18,6 +18,7 @@ package register import ( "bufio" + "bytes" "crypto/tls" "crypto/x509" "errors" @@ -25,6 +26,7 @@ import ( "io" "net/http" "os" + "os/exec" "strings" "time" @@ -325,6 +327,14 @@ func sendAnnotations(conn *websocket.Conn, reg elementalv1.Registration) error { log.Debugf("sending local IP: %s", data["registration-ip"]) } + netIfaces := hostinfo.GetIPAddresses() + nmDevs := getNMActivatedDevices() + for _, ifName := range nmDevs { + if ipAddr, ok := netIfaces[ifName]; ok { + data["net."+ifName+".ip"] = ipAddr + } + } + err := SendJSONData(conn, MsgAnnotations, data) if err != nil { log.Debugf("annotation data:\n%s", litter.Sdump(data)) @@ -342,6 +352,29 @@ func getLocalIPAddress(conn *websocket.Conn) (string, error) { return tcpAddr[0:idxPortNumStart], nil } +func getNMActivatedDevices() (nmDevs []string) { + nmDevs = []string{} + tempBuf := &bytes.Buffer{} + cmd := exec.Command("nmcli", "-g", "DEVICE,STATE", "device") + cmd.Stdout = tempBuf + + if err := cmd.Run(); err != nil { + return + } + + scanner := bufio.NewScanner(tempBuf) + for scanner.Scan() { + devState := strings.Split(scanner.Text(), ":") + if len(devState) != 2 { + continue + } + if devState[1] == "connected" { + nmDevs = append(nmDevs, devState[0]) + } + } + return +} + func getOsReleaseInfo() (map[string]string, error) { data := map[string]string{}