summaryrefslogtreecommitdiff
path: root/edgemesh/pkg/module.go
blob: 5c45cedc2f173c5d92f5c9547754d301206c7df6 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
package pkg

import (
	"github.com/kubeedge/beehive/pkg/core"
	beehiveContext "github.com/kubeedge/beehive/pkg/core/context"
	"k8s.io/klog/v2"

	"github.com/kubeedge/kubeedge/edge/pkg/common/modules"
	meshconfig "github.com/kubeedge/kubeedge/edgemesh/pkg/config"
	"github.com/kubeedge/kubeedge/edgemesh/pkg/constant"
	"github.com/kubeedge/kubeedge/edgemesh/pkg/dns"
	"github.com/kubeedge/kubeedge/edgemesh/pkg/listener"
	"github.com/kubeedge/kubeedge/edgemesh/pkg/plugin"
	"github.com/kubeedge/kubeedge/edgemesh/pkg/proxy"
	"github.com/kubeedge/kubeedge/pkg/apis/componentconfig/edgecore/v1alpha1"
)

//EdgeMesh defines EdgeMesh object structure
type EdgeMesh struct {
	enable bool
}

// Register register edgemesh
func Register(m *v1alpha1.EdgeMesh) {
	meshconfig.InitConfigure(m)
	core.Register(&EdgeMesh{enable: m.Enable})
}

// Name returns the name of EdgeMesh module
func (em *EdgeMesh) Name() string {
	return constant.ModuleNameEdgeMesh
}

// Group returns EdgeMesh group
func (em *EdgeMesh) Group() string {
	return modules.MeshGroup
}

// Enable indicates whether this module is enabled
func (em *EdgeMesh) Enable() bool {
	return em.enable
}

//Start sets context and starts the controller
func (em *EdgeMesh) Start() {
	// install go-chassis plugins
	plugin.Install()
	// init tcp listener
	listener.Init()
	// init iptables
	proxy.Init()
	// start proxy listener
	go listener.Start()
	// start dns server
	go dns.Start()
	// we need watch message to update the cache of instances
	for {
		select {
		case <-beehiveContext.Done():
			klog.Warning("EdgeMesh Stop")
			proxy.Clean()
			return
		default:
		}
		msg, err := beehiveContext.Receive(constant.ModuleNameEdgeMesh)
		if err != nil {
			klog.Warningf("[EdgeMesh] receive msg error %v", err)
			continue
		}
		klog.V(4).Infof("[EdgeMesh] get message: %v", msg)
		listener.MsgProcess(msg)
	}
}