This repository has been archived by the owner on Feb 9, 2022. It is now read-only.
/
starter.go
104 lines (91 loc) · 3.08 KB
/
starter.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
package operator
import (
"context"
"fmt"
dynamicclient "k8s.io/client-go/dynamic"
kubeclient "k8s.io/client-go/kubernetes"
"k8s.io/client-go/rest"
"k8s.io/klog"
opv1 "github.com/openshift/api/operator/v1"
"github.com/openshift/library-go/pkg/controller/controllercmd"
"github.com/openshift/library-go/pkg/operator/csi/csicontrollerset"
goc "github.com/openshift/library-go/pkg/operator/genericoperatorclient"
"github.com/openshift/library-go/pkg/operator/v1helpers"
"github.com/ovirt/csi-driver-operator/pkg/generated"
)
const (
// Operand and operator run in the same namespace
defaultNamespace = "openshift-cluster-csi-drivers"
operatorName = "ovirt-csi-driver-operator"
operandName = "ovirt-csi-driver"
instanceName = "csi.ovirt.org"
)
func RunOperator(ctx context.Context, controllerConfig *controllercmd.ControllerContext) error {
// Create clientsets and informers
kubeClient := kubeclient.NewForConfigOrDie(rest.AddUserAgent(controllerConfig.KubeConfig, operatorName))
dynamicClient := dynamicclient.NewForConfigOrDie(rest.AddUserAgent(controllerConfig.KubeConfig, operatorName))
kubeInformersForNamespaces := v1helpers.NewKubeInformersForNamespaces(kubeClient, defaultNamespace, "")
// Create GenericOperatorclient. This is used by the library-go controllers created down below
gvr := opv1.SchemeGroupVersion.WithResource("clustercsidrivers")
operatorClient, dynamicInformers, err := goc.NewClusterScopedOperatorClientWithConfigName(controllerConfig.KubeConfig, gvr, instanceName)
if err != nil {
return err
}
csiControllerSet := csicontrollerset.NewCSIControllerSet(
operatorClient,
controllerConfig.EventRecorder,
).WithLogLevelController().WithManagementStateController(
operandName,
false,
).WithStaticResourcesController(
"OvirtDriverStaticResources",
kubeClient,
kubeInformersForNamespaces,
generated.Asset,
[]string{
"storageclass.yaml",
"csidriver.yaml",
"controller_sa.yaml",
"node_sa.yaml",
"rbac/attacher_binding.yaml",
"rbac/attacher_role.yaml",
"rbac/controller_privileged_binding.yaml",
"rbac/node_privileged_binding.yaml",
"rbac/privileged_role.yaml",
"rbac/provisioner_binding.yaml",
"rbac/provisioner_role.yaml",
"rbac/resizer_binding.yaml",
"rbac/resizer_role.yaml",
"rbac/snapshotter_binding.yaml",
"rbac/snapshotter_role.yaml",
},
).
WithCredentialsRequestController(
"OvirtDriverCredentialsRequestController",
defaultNamespace,
generated.MustAsset,
"credentials.yaml",
dynamicClient,
).
WithCSIDriverController(
"OvirtDriverController",
instanceName,
operandName,
defaultNamespace,
generated.MustAsset,
kubeClient,
kubeInformersForNamespaces.InformersFor(defaultNamespace),
csicontrollerset.WithControllerService("controller.yaml"),
csicontrollerset.WithNodeService("node.yaml"),
)
if err != nil {
return err
}
klog.Info("Starting the informers")
go kubeInformersForNamespaces.Start(ctx.Done())
go dynamicInformers.Start(ctx.Done())
klog.Info("Starting controllerset")
go csiControllerSet.Run(ctx, 1)
<-ctx.Done()
return fmt.Errorf("stopped")
}