...
1 package main
2
3 import (
4 "flag"
5 "os"
6
7 "k8s.io/client-go/rest"
8
9 kruntime "k8s.io/apimachinery/pkg/runtime"
10 utilruntime "k8s.io/apimachinery/pkg/util/runtime"
11 ctrl "sigs.k8s.io/controller-runtime"
12 "sigs.k8s.io/controller-runtime/pkg/client"
13
14 "k8s.io/client-go/kubernetes/scheme"
15
16 edgeagent "edge-infra.dev/pkg/edge/edgeagent"
17 "edge-infra.dev/pkg/edge/info"
18 "edge-infra.dev/pkg/lib/fog"
19 "edge-infra.dev/pkg/lib/runtime"
20 "edge-infra.dev/pkg/lib/runtime/manager"
21 "edge-infra.dev/pkg/lib/runtime/subscriber"
22
23 _ "github.com/GoogleCloudPlatform/cloudsql-proxy/proxy/dialers/postgres"
24 "github.com/peterbourgon/ff/v3"
25
26 helmApi "github.com/fluxcd/helm-controller/api/v2"
27 kustomizeApi "github.com/fluxcd/kustomize-controller/api/v1"
28 kubeVirtApi "kubevirt.io/api/core/v1"
29 )
30
31 var log = ctrl.Log.WithName("setup")
32
33 func init() {
34 utilruntime.Must(scheme.AddToScheme(kruntime.NewScheme()))
35 utilruntime.Must(helmApi.AddToScheme(scheme.Scheme))
36 utilruntime.Must(kustomizeApi.AddToScheme(scheme.Scheme))
37 utilruntime.Must(kubeVirtApi.AddToScheme(scheme.Scheme))
38 }
39
40 type Cfg struct {
41 ProjectID string
42 SubscriptionID string
43 }
44
45 func (cfg *Cfg) BindFlags(flags *flag.FlagSet) {
46 flags.StringVar(
47 &cfg.ProjectID,
48 "project-id",
49 "",
50 "GCP project ID",
51 )
52 flags.StringVar(
53 &cfg.SubscriptionID,
54 "subscription-id",
55 "",
56 "Subscription ID",
57 )
58 }
59
60 func main() {
61 ctrl.SetLogger(fog.New())
62 flags := flag.NewFlagSet("edge-agent", flag.ExitOnError)
63 cfg := &Cfg{}
64 cfg.BindFlags(flags)
65 if err := ff.Parse(flags, os.Args[1:], ff.WithEnvVarNoPrefix(), ff.WithIgnoreUndefined(false)); err != nil {
66 log.Error(err, "failed to parse command line arguments or environment variables")
67 os.Exit(1)
68 }
69
70 edgeOpts := manager.Options{
71 Logger: &log,
72 }
73
74 edgeMgr, err := runtime.NewManager(edgeOpts)
75 if err != nil {
76 log.Error(err, "failed to create default manager")
77 os.Exit(1)
78 }
79
80 ctx := runtime.SetupSignalHandler()
81 ctx = fog.IntoContext(ctx, log)
82
83 config, err := rest.InClusterConfig()
84 if err != nil {
85 log.Error(err, "failed to get in cluster config")
86 os.Exit(1)
87 }
88
89 c, err := client.New(config, client.Options{Scheme: scheme.Scheme})
90 if err != nil {
91 log.Error(err, "failed to create runtime client")
92 os.Exit(1)
93 }
94
95 edgeInfo, err := info.FromClient(ctx, c)
96 if err != nil {
97 log.Error(err, "failed to retrieve edge info")
98 os.Exit(1)
99 }
100
101 subOpts := subscriber.Options{
102 Logger: &log,
103 ProjectID: cfg.ProjectID,
104 ID: cfg.SubscriptionID,
105 Handler: &edgeagent.EdgeAgent{
106 ClusterEdgeID: edgeInfo.ClusterEdgeID,
107 Client: c,
108 },
109 }
110 sub, err := runtime.NewSubscriber(subOpts)
111 if err != nil {
112 log.Error(err, "failed to create subscriber")
113 os.Exit(1)
114 }
115
116 if err := edgeMgr.Add(sub); err != nil {
117 log.Error(err, "failed to add subscription to manager")
118 os.Exit(1)
119 }
120
121 if err := edgeMgr.Start(ctx); err != nil {
122 log.Error(err, "failed to start edge default manager")
123 os.Exit(1)
124 }
125 }
126
View as plain text