github.com/jingruilea/kubeedge@v1.2.0-beta.0.0.20200410162146-4bb8902b3879/edgemesh/pkg/module.go (about)

     1  package pkg
     2  
     3  import (
     4  	"github.com/kubeedge/beehive/pkg/core"
     5  	beehiveContext "github.com/kubeedge/beehive/pkg/core/context"
     6  	"k8s.io/klog"
     7  
     8  	"github.com/kubeedge/kubeedge/edge/pkg/common/modules"
     9  	meshconfig "github.com/kubeedge/kubeedge/edgemesh/pkg/config"
    10  	"github.com/kubeedge/kubeedge/edgemesh/pkg/constant"
    11  	"github.com/kubeedge/kubeedge/edgemesh/pkg/dns"
    12  	"github.com/kubeedge/kubeedge/edgemesh/pkg/listener"
    13  	"github.com/kubeedge/kubeedge/edgemesh/pkg/plugin"
    14  	"github.com/kubeedge/kubeedge/edgemesh/pkg/proxy"
    15  	"github.com/kubeedge/kubeedge/pkg/apis/componentconfig/edgecore/v1alpha1"
    16  )
    17  
    18  //EdgeMesh defines EdgeMesh object structure
    19  type EdgeMesh struct {
    20  	enable bool
    21  }
    22  
    23  // Register register edgemesh
    24  func Register(m *v1alpha1.EdgeMesh) {
    25  	meshconfig.InitConfigure(m)
    26  	core.Register(&EdgeMesh{enable: m.Enable})
    27  }
    28  
    29  // Name returns the name of EdgeMesh module
    30  func (em *EdgeMesh) Name() string {
    31  	return constant.ModuleNameEdgeMesh
    32  }
    33  
    34  // Group returns EdgeMesh group
    35  func (em *EdgeMesh) Group() string {
    36  	return modules.MeshGroup
    37  }
    38  
    39  // Enable indicates whether this module is enabled
    40  func (em *EdgeMesh) Enable() bool {
    41  	return em.enable
    42  }
    43  
    44  //Start sets context and starts the controller
    45  func (em *EdgeMesh) Start() {
    46  	// install go-chassis plugins
    47  	plugin.Install()
    48  	// init tcp listener
    49  	listener.Init()
    50  	// init iptables
    51  	proxy.Init()
    52  	// start proxy listener
    53  	go listener.Start()
    54  	// start dns server
    55  	go dns.Start()
    56  	// we need watch message to update the cache of instances
    57  	for {
    58  		select {
    59  		case <-beehiveContext.Done():
    60  			klog.Warning("EdgeMesh Stop")
    61  			proxy.Clean()
    62  			return
    63  		default:
    64  		}
    65  		msg, err := beehiveContext.Receive(constant.ModuleNameEdgeMesh)
    66  		if err != nil {
    67  			klog.Warningf("[EdgeMesh] receive msg error %v", err)
    68  			continue
    69  		}
    70  		klog.V(4).Infof("[EdgeMesh] get message: %v", msg)
    71  		listener.MsgProcess(msg)
    72  	}
    73  }