// Package classification Sparrow // // Documentation for Edge Encryption API // // Schemes: http // BasePath: / // Version: 1.0.0 // Host: sparrow.sparrow.svc.cluster.local // // Consumes: // - text/plain // // Produces: // - text/plain // // swagger:meta package sparrow import ( "errors" "fmt" "path/filepath" "github.com/go-logr/logr" "k8s.io/apimachinery/pkg/runtime" utilruntime "k8s.io/apimachinery/pkg/util/runtime" clientgoscheme "k8s.io/client-go/kubernetes/scheme" "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" "k8s.io/client-go/util/homedir" "sigs.k8s.io/controller-runtime/pkg/client" ) // +kubebuilder:rbac:groups="",namespace=sparrow,resources=secrets,verbs=get;list;watch func Run(log logr.Logger) error { cfg, err := NewConfig() if err != nil { return fmt.Errorf("failed to load config: %w", err) } config, err := rest.InClusterConfig() if errors.Is(err, rest.ErrNotInCluster) { config, err = clientcmd.BuildConfigFromFlags("", filepath.Join(homedir.HomeDir(), ".kube", "config")) if err != nil { return fmt.Errorf("failed to get local config: %w", err) } } else if err != nil { return fmt.Errorf("failed to get in-cluster config: %w", err) } cl, err := client.New(config, client.Options{Scheme: createScheme()}) if err != nil { return fmt.Errorf("failed to create client: %w", err) } server := NewEncryptionServer(cfg, cl, log) return server.Start(fmt.Sprintf(":%s", cfg.Port), fmt.Sprintf(":%s", cfg.MetricPort)) } func createScheme() *runtime.Scheme { scheme := runtime.NewScheme() utilruntime.Must(clientgoscheme.AddToScheme(scheme)) return scheme }