1
1
package cmd
2
2
3
3
import (
4
+ "github.com/TykTechnologies/tyk-k8s/ingress"
4
5
"github.com/TykTechnologies/tyk-k8s/injector"
6
+ "github.com/TykTechnologies/tyk-k8s/logger"
5
7
"github.com/TykTechnologies/tyk-k8s/webserver"
6
- "github.com/golang/glog"
7
8
"github.com/spf13/cobra"
8
9
"github.com/spf13/viper"
10
+ "os"
11
+ "os/signal"
12
+ "sync"
9
13
)
10
14
15
+ var log = logger .GetLogger ("main" )
16
+
11
17
// startCmd represents the start command
12
18
var startCmd = & cobra.Command {
13
19
Use : "start" ,
@@ -21,39 +27,72 @@ the above example starts the sidecar injector and the tyk k8s ingress controller
21
27
sConf := & webserver.Config {}
22
28
err := viper .UnmarshalKey ("Server" , sConf )
23
29
if err != nil {
24
- glog .Fatalf ("no Server entry found in config file: %v" , err )
30
+ log .Fatalf ("no Server entry found in config file: %v" , err )
25
31
}
26
32
27
33
// init config for the server
28
34
webserver .Server ().Config (sConf )
29
-
35
+ ingressStarted := false
30
36
for _ , a := range args {
31
37
switch a {
32
38
case "inject" , "injector" , "sidecar" :
33
39
whConf := & injector.Config {}
34
40
err := viper .UnmarshalKey ("Injector" , whConf )
35
41
if err != nil {
36
- glog .Fatalf ("couldn't read injector config: %v" , err )
42
+ log .Fatalf ("couldn't read injector config: %v" , err )
37
43
}
38
44
whs := & injector.WebhookServer {
39
45
SidecarConfig : whConf ,
40
46
}
41
47
42
48
webserver .Server ().AddRoute ("POST" , "/inject" , whs .Serve )
43
49
case "ingress" , "ing" :
44
- glog .Fatal ("not implemented" )
45
- //TODO: add ingress controller
50
+ ingressStarted = true
51
+ ingress .NewController ()
52
+ err := ingress .Controller ().Start ()
53
+ if err != nil {
54
+ log .Fatal (err )
55
+ }
56
+ log .Info ("ingress controller started" )
46
57
default :
47
- glog .Error ("use arguments like 'inject' or 'ingress' to start services" )
58
+ log .Error ("use arguments like 'inject' or 'ingress' to start services" )
48
59
return
49
60
50
61
}
51
62
}
52
63
53
- webserver .Server ().Start ()
64
+ go webserver .Server ().Start ()
65
+ log .Info ("web server started" )
66
+
67
+ WaitForCtrlC ()
68
+
69
+ err = webserver .Server ().Stop ()
70
+ if err != nil {
71
+ log .Error (err )
72
+ }
73
+
74
+ if ingressStarted {
75
+ err = ingress .Controller ().Stop ()
76
+ if err != nil {
77
+ log .Error (err )
78
+ }
79
+ }
54
80
},
55
81
}
56
82
57
83
func init () {
58
84
rootCmd .AddCommand (startCmd )
59
85
}
86
+
87
+ func WaitForCtrlC () {
88
+ var end_waiter sync.WaitGroup
89
+ end_waiter .Add (1 )
90
+ var signal_channel chan os.Signal
91
+ signal_channel = make (chan os.Signal , 1 )
92
+ signal .Notify (signal_channel , os .Interrupt )
93
+ go func () {
94
+ <- signal_channel
95
+ end_waiter .Done ()
96
+ }()
97
+ end_waiter .Wait ()
98
+ }
0 commit comments