...

Source file src/edge-infra.dev/cmd/edge/edge-agent/main.go

Documentation: edge-infra.dev/cmd/edge/edge-agent

     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