...
1 package wireguardctl
2
3 import (
4 "time"
5
6 iamAPI "github.com/GoogleCloudPlatform/k8s-config-connector/pkg/clients/generated/apis/iam/v1beta1"
7 emissaryv3alpha1 "github.com/emissary-ingress/emissary/v3/pkg/api/getambassador.io/v3alpha1"
8 kruntime "k8s.io/apimachinery/pkg/runtime"
9 utilruntime "k8s.io/apimachinery/pkg/util/runtime"
10 clientgoscheme "k8s.io/client-go/kubernetes/scheme"
11 ctrl "sigs.k8s.io/controller-runtime"
12 ctrlMgr "sigs.k8s.io/controller-runtime/pkg/manager"
13
14 v1cluster "edge-infra.dev/pkg/edge/apis/cluster/v1alpha1"
15 v1alpha1syncedobject "edge-infra.dev/pkg/edge/apis/syncedobject/apis/v1alpha1"
16 "edge-infra.dev/pkg/k8s/runtime/controller"
17 "edge-infra.dev/pkg/lib/fog"
18 "edge-infra.dev/pkg/sds/remoteaccess/constants"
19 v1vpnconfig "edge-infra.dev/pkg/sds/remoteaccess/k8s/apis/vpnconfigs/v1"
20 "edge-infra.dev/pkg/sds/remoteaccess/wireguard/vpn"
21 )
22
23 var (
24 scheme = kruntime.NewScheme()
25 requeueTime = 60 * time.Second
26 )
27
28 func init() {
29 utilruntime.Must(clientgoscheme.AddToScheme(scheme))
30 utilruntime.Must(v1vpnconfig.AddToScheme(scheme))
31 utilruntime.Must(v1cluster.AddToScheme(scheme))
32 utilruntime.Must(v1alpha1syncedobject.AddToScheme(scheme))
33 utilruntime.Must(emissaryv3alpha1.AddToScheme(scheme))
34 utilruntime.Must(iamAPI.AddToScheme(scheme))
35 }
36
37 func Run(opts ...controller.Option) error {
38 log := fog.New().WithName(constants.WireguardControllerName)
39 ctrl.SetLogger(log)
40 ctx := ctrl.SetupSignalHandler()
41
42 mgr, err := NewManager(opts...)
43 if err != nil {
44 log.Error(err, "unable to create controller manager")
45 return err
46 }
47
48 vpn, err := vpn.New()
49 if err != nil {
50 log.Error(err, "unable to create banner VPN")
51 return err
52 }
53
54 if err := registerControllers(mgr, vpn); err != nil {
55 log.Error(err, "unable to register controllers")
56 return err
57 }
58
59 if err := mgr.Start(ctx); err != nil {
60 log.Error(err, "unable to start controllers")
61 return err
62 }
63
64 return nil
65 }
66
67 func NewManager(opts ...controller.Option) (ctrl.Manager, error) {
68 mgrCfg, mgrOpts := controller.ProcessOptions(opts...)
69 mgrOpts.Scheme = scheme
70 return ctrl.NewManager(mgrCfg, mgrOpts)
71 }
72
73 func registerControllers(mgr ctrlMgr.Manager, vpn *vpn.VPN) error {
74 remoteAccessController := NewVPNController(mgr, vpn)
75 return remoteAccessController.SetupWithManager(mgr)
76 }
77
View as plain text