-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
120 lines (97 loc) · 4.62 KB
/
main.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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/*
Copyright 2017 The Kubernetes Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package main
import (
"flag"
"time"
kubeinformers "k8s.io/client-go/informers"
"k8s.io/client-go/kubernetes"
"k8s.io/client-go/tools/clientcmd"
"k8s.io/klog/v2"
// Uncomment the following line to load the gcp plugin (only required to authenticate against GKE clusters).
// _ "k8s.io/client-go/plugin/pkg/client/auth/gcp"
clientset "github.com/ibmdcb/k8s-serviceroute-conrtoller/pkg/generated/clientset/versioned"
informers "github.com/ibmdcb/k8s-serviceroute-conrtoller/pkg/generated/informers/externalversions"
"github.com/ibmdcb/k8s-serviceroute-conrtoller/pkg/signals"
istioclientset "istio.io/client-go/pkg/clientset/versioned"
)
var (
masterURL string
kubeconfig string
clustername string
istio_config string
istio IstioInfo
)
func main() {
klog.InitFlags(nil)
flag.Parse()
// set up signals so we handle the first shutdown signal gracefully
stopCh := signals.SetupSignalHandler()
cfg, err := clientcmd.BuildConfigFromFlags(masterURL, kubeconfig)
if err != nil {
klog.Fatalf("Error building kubeconfig: %s", err.Error())
}
//used to monitor svc and ep in src cluster
kubeClient, err := kubernetes.NewForConfig(cfg)
if err != nil {
klog.Fatalf("Error building kubernetes clientset: %s", err.Error())
}
//used to monitor caps-routes in src cluster
exampleClient, err := clientset.NewForConfig(cfg)
if err != nil {
klog.Fatalf("Error building example clientset: %s", err.Error())
}
istiocfg, err := clientcmd.BuildConfigFromFlags(masterURL, istio_config)
if err != nil {
klog.Fatalf("Error building istio kubeconfig: %s", err.Error())
}
//used to create svc and ep in istio cluster
istioClient, err := kubernetes.NewForConfig(istiocfg)
if err != nil {
klog.Fatalf("Error building istio kubernetes clientset: %s", err.Error())
}
//used to create istio artifacts in istio cluster
istioclientset, err := istioclientset.NewForConfig(istiocfg)
if err != nil {
klog.Fatalf("Error building istio kubernetes clientset: %s", err.Error())
}
//used to create service routes in istio cluster
istiocapsclientset, err := clientset.NewForConfig(istiocfg)
if err != nil {
klog.Fatalf("Error building istio kubernetes clientset: %s", err.Error())
}
kubeInformerFactory := kubeinformers.NewSharedInformerFactory(kubeClient, time.Second*30)
exampleInformerFactory := informers.NewSharedInformerFactory(exampleClient, time.Second*30)
controller := NewController(kubeClient, exampleClient, istioClient, istioclientset, istiocapsclientset, clustername, istio,
kubeInformerFactory.Core().V1().Endpoints(),
kubeInformerFactory.Core().V1().Services(),
exampleInformerFactory.Samplecontroller().V1alpha1().ServiceRoutes())
// notice that there is no need to run Start methods in a separate goroutine. (i.e. go kubeInformerFactory.Start(stopCh)
// Start method is non-blocking and runs all registered informers in a dedicated goroutine.
kubeInformerFactory.Start(stopCh)
exampleInformerFactory.Start(stopCh)
if err = controller.Run(2, stopCh); err != nil {
klog.Fatalf("Error running controller: %s", err.Error())
}
}
func init() {
flag.StringVar(&kubeconfig, "kubeconfig", "", "Path to a kubeconfig. Only required if out-of-cluster.")
flag.StringVar(&masterURL, "master", "", "The address of the Kubernetes API server. Overrides any value in kubeconfig. Only required if out-of-cluster.")
flag.StringVar(&clustername, "clustername", "", "name of the cluster. required.")
flag.StringVar(&istio_config, "istio_config", "", "Path to a kubeconfig to the istio cluster. required.")
flag.StringVar(&istio.istio_ns, "istio_ns", "", "Namespace for artifacts in the istio cluster. required.")
flag.StringVar(&istio.istio_suffix, "istio_suffix", "", "DNS suffix supported by the istio cluster. required.")
flag.StringVar(&istio.istio_gateway, "istio_gateway", "", "DNS suffix supported by the istio cluster. required.")
flag.StringVar(&istio.istio_gateway_http, "istio_gateway_http", "", "DNS suffix supported by the istio cluster. required.")
flag.StringVar(&istio.istio_gateway_https, "istio_gateway_https", "", "DNS suffix supported by the istio cluster. required.")
}