// // DISCLAIMER // // Copyright 2023-2024 ArangoDB GmbH, Cologne, Germany // // 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 // // http://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. // // Copyright holder is ArangoDB GmbH, Cologne, Germany // package cmd import ( "os" "github.com/rs/zerolog/log" "github.com/spf13/cobra" "google.golang.org/grpc" pbShutdown "github.com/arangodb/kube-arangodb/pkg/api/shutdown/v1" "github.com/arangodb/kube-arangodb/pkg/ml/storage" "github.com/arangodb/kube-arangodb/pkg/util/probe" "github.com/arangodb/kube-arangodb/pkg/util/shutdown" "github.com/arangodb/kube-arangodb/pkg/util/svc" ) var ( cmdMLStorage = &cobra.Command{ Use: "storage", Run: func(cmd *cobra.Command, args []string) { }, Hidden: true, } cmdMLStorageS3 = &cobra.Command{ Use: "s3", Short: "Run a GRPC service implementing the arangodb.operator.ml.storage.v1 API. Enterprise Edition only", Run: cmdMLStorageS3Run, } cmdMLStorageS3Options struct { storage.ServiceConfig } cmdMLStorageControllerOptions struct { svc.GRPCConfig } ) func init() { cmdML.AddCommand(cmdMLStorage) cmdMLStorage.AddCommand(cmdMLStorageS3) f := cmdMLStorageS3.PersistentFlags() f.StringVar(&cmdMLStorageControllerOptions.ListenAddress, "controller.address", "", "Address the GRPC controller service will listen on (IP:port)") f.StringVar(&cmdMLStorageS3Options.ListenAddress, "server.address", "", "Address the GRPC service will listen on (IP:port)") f.StringVar(&cmdMLStorageS3Options.S3.Endpoint, "s3.endpoint", "", "Endpoint of S3 API implementation") f.StringVar(&cmdMLStorageS3Options.S3.CACrtFile, "s3.ca-crt", "", "Path to file containing CA certificate to validate endpoint connection") f.StringVar(&cmdMLStorageS3Options.S3.CAKeyFile, "s3.ca-key", "", "Path to file containing keyfile to validate endpoint connection") f.BoolVar(&cmdMLStorageS3Options.S3.AllowInsecure, "s3.allow-insecure", false, "If set to true, the Endpoint certificates won't be checked") f.BoolVar(&cmdMLStorageS3Options.S3.DisableSSL, "s3.disable-ssl", false, "If set to true, the SSL won't be used when connecting to Endpoint") f.StringVar(&cmdMLStorageS3Options.S3.Region, "s3.region", "", "Region") f.StringVar(&cmdMLStorageS3Options.S3.BucketName, "s3.bucket", "", "Bucket name") f.StringVar(&cmdMLStorageS3Options.S3.AccessKeyFile, "s3.access-key", "", "Path to file containing S3 AccessKey") f.StringVar(&cmdMLStorageS3Options.S3.SecretKeyFile, "s3.secret-key", "", "Path to file containing S3 SecretKey") } func cmdMLStorageS3Run(cmd *cobra.Command, _ []string) { if err := cmdMLStorageS3RunE(cmd); err != nil { log.Error().Err(err).Msgf("Fatal") os.Exit(1) } } func cmdMLStorageS3RunE(_ *cobra.Command) error { storageService, err := storage.NewService(shutdown.Context(), storage.StorageTypeS3Proxy, cmdMLStorageS3Options.ServiceConfig) if err != nil { return err } healthService := probe.NewHealthService() controllerService := svc.NewGRPC(cmdMLStorageControllerOptions.GRPCConfig, func(server *grpc.Server) { pbShutdown.RegisterShutdownServer(server, shutdown.NewShutdownableShutdownServer()) healthService.Register(server) }) return svc.RunServices(shutdown.Context(), healthService, storageService, controllerService) }