| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160 |
- /*
- Copyright © The ESO Authors
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
- https://www.apache.org/licenses/LICENSE-2.0
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
- */
- // Code generated by providers/v2/hack/generate-provider-main.go. DO NOT EDIT.
- package main
- import (
- "context"
- "flag"
- "fmt"
- "log"
- "net"
- "os/signal"
- "syscall"
- genv1alpha1 "github.com/external-secrets/external-secrets/apis/generators/v1alpha1"
- awsv2alpha1 "github.com/external-secrets/external-secrets/apis/provider/aws/v2alpha1"
- genpb "github.com/external-secrets/external-secrets/proto/generator"
- pb "github.com/external-secrets/external-secrets/proto/provider"
- adaptergenerator "github.com/external-secrets/external-secrets/providers/v2/adapter/generator"
- adapterstore "github.com/external-secrets/external-secrets/providers/v2/adapter/store"
- generator "github.com/external-secrets/external-secrets/providers/v2/aws/generator"
- store "github.com/external-secrets/external-secrets/providers/v2/aws/store"
- grpcserver "github.com/external-secrets/external-secrets/providers/v2/common/grpc/server"
- "google.golang.org/grpc/health"
- "google.golang.org/grpc/health/grpc_health_v1"
- "google.golang.org/grpc/reflection"
- "k8s.io/apimachinery/pkg/runtime"
- "k8s.io/apimachinery/pkg/runtime/schema"
- clientgoscheme "k8s.io/client-go/kubernetes/scheme"
- "sigs.k8s.io/controller-runtime/pkg/client"
- "sigs.k8s.io/controller-runtime/pkg/client/config"
- )
- var (
- port = flag.Int("port", 8080, "The server port")
- enableTLS = flag.Bool("enable-tls", true, "Enable TLS/mTLS for gRPC server")
- verbose = flag.Bool("verbose", false, "Enable verbose connection-level debugging")
- )
- func main() {
- flag.Parse()
- ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM)
- defer stop()
- log.Printf("starting on port %d (TLS: %v, Verbose: %v)", *port, *enableTLS, *verbose)
- // Create Kubernetes client (required by adapter)
- scheme := runtime.NewScheme()
- _ = clientgoscheme.AddToScheme(scheme)
- _ = awsv2alpha1.AddToScheme(scheme)
- _ = genv1alpha1.AddToScheme(scheme)
- cfg, err := config.GetConfig()
- if err != nil {
- log.Fatalf("Failed to get kubeconfig: %v", err)
- }
- kubeClient, err := client.New(cfg, client.Options{Scheme: scheme})
- if err != nil {
- log.Fatalf("Failed to create Kubernetes client: %v", err)
- }
- // Setup v1 provider(s)
- v1Provider0 := store.NewProvider()
- v1Provider1 := store.NewProvider()
- compatibilityProvider := v1Provider0
- providerMapping := adapterstore.ProviderMapping{
- schema.GroupVersionKind{
- Group: "provider.external-secrets.io",
- Version: "v2alpha1",
- Kind: "SecretsManager",
- }: v1Provider0,
- schema.GroupVersionKind{
- Group: "provider.external-secrets.io",
- Version: "v2alpha1",
- Kind: "ParameterStore",
- }: v1Provider1,
- }
- specMapper := GetSpecMapper(kubeClient)
- // Setup v1 generator(s)
- generatorMapping := adaptergenerator.Mapping{
- schema.GroupVersionKind{
- Group: "generators.external-secrets.io",
- Version: "v1alpha1",
- Kind: "ECRAuthorizationToken",
- }: generator.NewECRGenerator(),
- schema.GroupVersionKind{
- Group: "generators.external-secrets.io",
- Version: "v1alpha1",
- Kind: "STSSessionToken",
- }: generator.NewSTSGenerator(),
- }
- storeServer := adapterstore.NewServerWithCompatibilityProvider(kubeClient, providerMapping, specMapper, compatibilityProvider)
- generatorServer := adaptergenerator.NewServer(kubeClient, scheme, generatorMapping)
- log.Printf("[PROVIDER] Using v1 AWS Provider provider with generators wrapped with v2 adapter")
- grpcServer, err := grpcserver.NewGRPCServer(grpcserver.ServerOptions{
- EnableTLS: *enableTLS,
- Verbose: *verbose,
- })
- if err != nil {
- log.Fatalf("Failed to create gRPC server: %v", err)
- }
- metricsServer := grpcserver.NewMetricsServer(grpcserver.DefaultMetricsPort, nil)
- if err := grpcserver.RegisterMetrics(metricsServer.GetRegistry()); err != nil {
- log.Fatalf("Failed to register metrics: %v", err)
- }
- // Register services
- pb.RegisterSecretStoreProviderServer(grpcServer, storeServer)
- genpb.RegisterGeneratorProviderServer(grpcServer, generatorServer)
- // Register health service
- healthServer := health.NewServer()
- grpc_health_v1.RegisterHealthServer(grpcServer, healthServer)
- healthServer.SetServingStatus("", grpc_health_v1.HealthCheckResponse_SERVING)
- // Register reflection service for debugging
- reflection.Register(grpcServer)
- // Start listening
- lis, err := net.Listen("tcp", fmt.Sprintf(":%d", *port))
- if err != nil {
- log.Fatalf("Failed to listen: %v", err)
- }
- go func() {
- if err := metricsServer.Start(ctx); err != nil {
- log.Fatalf("Failed to start metrics server: %v", err)
- }
- }()
- // Handle graceful shutdown
- go func() {
- <-ctx.Done()
- log.Printf("Received shutdown signal, stopping gRPC server...")
- grpcServer.GracefulStop()
- }()
- // Start serving
- log.Printf("AWS Provider Provider listening on %s", lis.Addr().String())
- if err := grpcServer.Serve(lis); err != nil {
- log.Fatalf("Failed to serve: %v", err)
- }
- }
|