github.com/jingruilea/kubeedge@v1.2.0-beta.0.0.20200410162146-4bb8902b3879/edgemesh/pkg/config/config.go (about) 1 package config 2 3 import ( 4 "net" 5 "sync" 6 7 "k8s.io/klog" 8 9 "github.com/kubeedge/kubeedge/edgemesh/pkg/common" 10 "github.com/kubeedge/kubeedge/pkg/apis/componentconfig/edgecore/v1alpha1" 11 ) 12 13 var Config Configure 14 var once sync.Once 15 16 type Configure struct { 17 v1alpha1.EdgeMesh 18 // for edgemesh listener 19 ListenIP net.IP 20 Listener *net.TCPListener 21 } 22 23 func InitConfigure(e *v1alpha1.EdgeMesh) { 24 once.Do(func() { 25 Config = Configure{ 26 EdgeMesh: *e, 27 } 28 if Config.Enable { 29 // get listen ip 30 var err error 31 Config.ListenIP, err = common.GetInterfaceIP(Config.ListenInterface) 32 if err != nil { 33 klog.Errorf("[EdgeMesh] get listen ip err: %v", err) 34 return 35 } 36 // get listener 37 tmpPort := 0 38 listenAddr := &net.TCPAddr{ 39 IP: Config.ListenIP, 40 Port: Config.ListenPort + tmpPort, 41 } 42 for { 43 ln, err := net.ListenTCP("tcp", listenAddr) 44 if err == nil { 45 Config.Listener = ln 46 break 47 } 48 klog.Warningf("[EdgeMesh] listen on address %v err: %v", listenAddr, err) 49 tmpPort++ 50 listenAddr = &net.TCPAddr{ 51 IP: Config.ListenIP, 52 Port: Config.ListenPort + tmpPort, 53 } 54 } 55 } 56 }) 57 }