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  }