...
1 package firewallctl
2
3 import (
4 "time"
5
6 "github.com/fluxcd/pkg/ssa"
7 corev1 "k8s.io/api/core/v1"
8 kruntime "k8s.io/apimachinery/pkg/runtime"
9 utilruntime "k8s.io/apimachinery/pkg/util/runtime"
10 clientgoscheme "k8s.io/client-go/kubernetes/scheme"
11 "k8s.io/client-go/rest"
12 ctrl "sigs.k8s.io/controller-runtime"
13 "sigs.k8s.io/controller-runtime/pkg/client"
14 ctrlmgr "sigs.k8s.io/controller-runtime/pkg/manager"
15
16 "edge-infra.dev/pkg/k8s/runtime/controller"
17 "edge-infra.dev/pkg/k8s/runtime/controller/metrics"
18 "edge-infra.dev/pkg/k8s/runtime/controller/reconcile"
19 v1ien "edge-infra.dev/pkg/sds/ien/k8s/apis/v1"
20 )
21
22 var (
23 scheme = kruntime.NewScheme()
24 requeueTime = time.Second * 60
25 MetricsBindAddress = ":9000"
26 HealthBindAddress = ":9001"
27 )
28
29 type Controller struct {
30 name string
31 conditions reconcile.Conditions
32 client client.Client
33 metrics metrics.Metrics
34 resourceManager *ssa.ResourceManager
35 requeueTime time.Duration
36 }
37
38 func init() {
39 utilruntime.Must(clientgoscheme.AddToScheme(scheme))
40 utilruntime.Must(v1ien.AddToScheme(scheme))
41 }
42
43 func Run(opts ...controller.Option) error {
44 log := ctrl.Log.WithName("setup")
45
46
47 mgr, err := SetupManager(opts...)
48 if err != nil {
49 return err
50 }
51
52
53 if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil {
54 log.Error(err, "could not start controller")
55 return err
56 }
57
58 return nil
59 }
60
61 func SetupManager(ctrlOpts ...controller.Option) (ctrl.Manager, error) {
62 log := ctrl.Log.WithName("setup")
63
64 mgrRestConfig, mgrOpts := getManagerOptions(ctrlOpts...)
65 mgrOpts.Metrics.BindAddress = MetricsBindAddress
66 mgrOpts.Scheme = createScheme()
67 mgrOpts.HealthProbeBindAddress = HealthBindAddress
68 mgr, err := ctrl.NewManager(mgrRestConfig, mgrOpts)
69 if err != nil {
70 log.Error(err, "unable to create controller manager")
71 return nil, err
72 }
73
74 client := mgr.GetClient()
75
76 clusterFirewallReconciler := NewClusterFirewallController(client, mgr)
77
78 if err = clusterFirewallReconciler.SetUpWithManager(mgr); err != nil {
79 log.Error(err, "failed to setup ClusterFirewall controller with manager")
80 return nil, err
81 }
82
83 return mgr, nil
84 }
85
86 func getManagerOptions(opts ...controller.Option) (*rest.Config, ctrlmgr.Options) {
87 mgrConfig, mgrOpts := controller.ProcessOptions(opts...)
88 mgrOpts.Scheme = scheme
89 return mgrConfig, mgrOpts
90 }
91
92 func createScheme() *kruntime.Scheme {
93 scheme := kruntime.NewScheme()
94 utilruntime.Must(corev1.AddToScheme(scheme))
95 utilruntime.Must(v1ien.AddToScheme(scheme))
96 return scheme
97 }
98
View as plain text