-
Notifications
You must be signed in to change notification settings - Fork 103
/
apiForger.go
103 lines (88 loc) · 3.38 KB
/
apiForger.go
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package forge
import (
"fmt"
"reflect"
"github.com/pkg/errors"
"google.golang.org/grpc"
appsv1 "k8s.io/api/apps/v1"
corev1 "k8s.io/api/core/v1"
discoveryv1beta1 "k8s.io/api/discovery/v1beta1"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/klog/v2"
"github.com/liqotech/liqo/pkg/consts"
"github.com/liqotech/liqo/pkg/liqonet"
"github.com/liqotech/liqo/pkg/virtualKubelet/namespacesMapping"
"github.com/liqotech/liqo/pkg/virtualKubelet/options"
"github.com/liqotech/liqo/pkg/virtualKubelet/options/types"
)
func ForeignToHomeStatus(foreignObj, homeObj runtime.Object) (runtime.Object, error) {
switch foreignObj.(type) {
case *corev1.Pod:
return forger.podStatusForeignToHome(foreignObj, homeObj), nil
}
return nil, errors.Errorf("error while creating home object status from foreign: api %s unhandled", reflect.TypeOf(foreignObj).String())
}
func ForeignToHome(foreignObj, homeObj runtime.Object, reflectionType string) (runtime.Object, error) {
switch foreignObj.(type) {
case *corev1.Pod:
return forger.podForeignToHome(foreignObj, homeObj, reflectionType)
}
return nil, errors.Errorf("error while creating home object from foreign: api %s unhandled", reflect.TypeOf(foreignObj).String())
}
func HomeToForeign(homeObj, foreignObj runtime.Object, reflectionType string) (runtime.Object, error) {
switch homeObj.(type) {
case *corev1.ConfigMap:
return forger.configmapHomeToForeign(homeObj.(*corev1.ConfigMap), foreignObj.(*corev1.ConfigMap))
case *discoveryv1beta1.EndpointSlice:
return forger.endpointsliceHomeToForeign(homeObj.(*discoveryv1beta1.EndpointSlice), foreignObj.(*discoveryv1beta1.EndpointSlice))
case *corev1.Pod:
return forger.podHomeToForeign(homeObj, foreignObj, reflectionType)
case *corev1.Service:
return forger.serviceHomeToForeign(homeObj.(*corev1.Service), foreignObj.(*corev1.Service))
}
return nil, errors.Errorf("error while creating foreign object from home: api %s unhandled", reflect.TypeOf(homeObj).String())
}
func ReplicasetFromPod(pod *corev1.Pod) *appsv1.ReplicaSet {
return forger.replicasetFromPod(pod)
}
func ForeignReplicasetDeleted(pod *corev1.Pod) *corev1.Pod {
return forger.setPodToBeDeleted(pod)
}
type apiForger struct {
nattingTable namespacesMapping.NamespaceNatter
ipamClient liqonet.IpamClient
localRemappedPodCidr options.ReadOnlyOption
remoteRemappedPodCidr options.ReadOnlyOption
virtualNodeName options.ReadOnlyOption
liqoIpamServer options.ReadOnlyOption
offloadClusterID options.ReadOnlyOption
}
var forger apiForger
// InitForger initialize forger component to set all necessary fields of offloaded resources.
func InitForger(nattingTable namespacesMapping.NamespaceNatter, opts ...options.ReadOnlyOption) {
forger.nattingTable = nattingTable
for _, opt := range opts {
switch opt.Key() {
case types.LocalRemappedPodCIDR:
forger.localRemappedPodCidr = opt
case types.RemoteRemappedPodCIDR:
forger.remoteRemappedPodCidr = opt
case types.VirtualNodeName:
forger.virtualNodeName = opt
case types.RemoteClusterID:
forger.offloadClusterID = opt
case types.LiqoIpamServer:
forger.liqoIpamServer = opt
initIpamClient()
}
}
}
func initIpamClient() {
conn, err := grpc.Dial(fmt.Sprintf("%s:%d", forger.liqoIpamServer.Value().ToString(), consts.NetworkManagerIpamPort),
grpc.WithInsecure(),
grpc.WithBlock())
if err != nil {
klog.Error(err)
}
forger.ipamClient = liqonet.NewIpamClient(conn)
}