mirror of
https://github.com/k3s-io/k3s.git
synced 2024-06-07 19:41:36 +00:00
ba70c41cce
This attempts to update logging statements to make them consistent through out the code base. It also adds additional context to messages where possible, simplifies messages, and updates level where necessary.
58 lines
1.3 KiB
Go
58 lines
1.3 KiB
Go
package netutil
|
|
|
|
import (
|
|
"fmt"
|
|
"net"
|
|
|
|
"github.com/pkg/errors"
|
|
"github.com/sirupsen/logrus"
|
|
)
|
|
|
|
func GetIPFromInterface(ifaceName string) string {
|
|
ip, err := getIPFromInterface(ifaceName)
|
|
if err != nil {
|
|
logrus.Warn(errors.Wrap(err, "unable to get global unicast ip from interface name"))
|
|
} else {
|
|
logrus.Infof("Found ip %s from iface %s", ip, ifaceName)
|
|
}
|
|
return ip
|
|
}
|
|
|
|
func getIPFromInterface(ifaceName string) (string, error) {
|
|
iface, err := net.InterfaceByName(ifaceName)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
addrs, err := iface.Addrs()
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
if iface.Flags&net.FlagUp == 0 {
|
|
return "", fmt.Errorf("the interface %s is not up", ifaceName)
|
|
}
|
|
|
|
globalUnicasts := []string{}
|
|
for _, addr := range addrs {
|
|
ip, _, err := net.ParseCIDR(addr.String())
|
|
if err != nil {
|
|
return "", errors.Wrapf(err, "unable to parse CIDR for interface %s", iface.Name)
|
|
}
|
|
// skipping if not ipv4
|
|
if ip.To4() == nil {
|
|
continue
|
|
}
|
|
if ip.IsGlobalUnicast() {
|
|
globalUnicasts = append(globalUnicasts, ip.String())
|
|
}
|
|
}
|
|
|
|
if len(globalUnicasts) > 1 {
|
|
return "", fmt.Errorf("multiple global unicast addresses defined for %s, please set ip from one of %v", ifaceName, globalUnicasts)
|
|
}
|
|
if len(globalUnicasts) == 1 {
|
|
return globalUnicasts[0], nil
|
|
}
|
|
|
|
return "", fmt.Errorf("can't find ip for interface %s", ifaceName)
|
|
}
|