-
Notifications
You must be signed in to change notification settings - Fork 53
/
controller-manager.go
83 lines (78 loc) · 1.96 KB
/
controller-manager.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
package test
import (
"context"
"fmt"
"os/exec"
"path"
"strings"
"github.com/onsi/ginkgo"
"github.com/phayes/freeport"
"k8s.io/client-go/tools/clientcmd"
"k8s.io/client-go/tools/clientcmd/api"
"sigs.k8s.io/controller-runtime/pkg/envtest"
)
var defaultControllers = []string{
"cronjob",
"daemonset",
"deployment",
"garbagecollector",
"namespace",
"replicaset",
"service",
"serviceaccount",
"statefulset",
}
func StartControllerManager(ctx context.Context, testEnv *envtest.Environment) {
cfg := testEnv.Config
controllerMgrBin := path.Join(testEnv.BinaryAssetsDirectory, "kube-controller-manager")
apiCfg := api.Config{
Clusters: map[string]*api.Cluster{
"default": {
Server: cfg.Host,
CertificateAuthorityData: cfg.CAData,
},
},
Contexts: map[string]*api.Context{
"default": {
Cluster: "default",
AuthInfo: "default",
},
},
AuthInfos: map[string]*api.AuthInfo{
"default": {
ClientCertificateData: cfg.CertData,
ClientKeyData: cfg.KeyData,
Token: cfg.BearerToken,
Username: cfg.Username,
Password: cfg.Password,
},
},
CurrentContext: "default",
}
port, err := freeport.GetFreePort()
if err != nil {
panic(err)
}
clientcmd.WriteToFile(apiCfg, path.Join(testEnv.BinaryAssetsDirectory, "kubeconfig.yaml"))
cmd := exec.CommandContext(ctx, controllerMgrBin,
"--kubeconfig", path.Join(testEnv.BinaryAssetsDirectory, "kubeconfig.yaml"),
"--controllers", strings.Join(defaultControllers, ","),
"--leader-elect=false",
"--bind-address=127.0.0.1",
fmt.Sprintf("--secure-port=%d", port),
"--enable-garbage-collector",
"--concurrent-gc-syncs=40",
)
cmd.Stdout = ginkgo.GinkgoWriter
cmd.Stderr = ginkgo.GinkgoWriter
go func() {
if err := cmd.Start(); err != nil {
panic(err)
}
ExternalResources.Add(1)
defer ExternalResources.Done()
if err := cmd.Wait(); err != nil {
fmt.Fprintln(ginkgo.GinkgoWriter, err)
}
}()
}