From 87c81825b702941e47560e4edef3c8c9da09b8ec Mon Sep 17 00:00:00 2001 From: Ryan McKinley Date: Fri, 27 Sep 2024 09:04:35 +0300 Subject: [PATCH] K8s: Move standalone apiserver CLI to enterprise (#93799) --- .github/CODEOWNERS | 1 - pkg/cmd/grafana-server/commands/buildinfo.go | 5 +- pkg/cmd/grafana-server/commands/cli.go | 19 +- pkg/cmd/grafana-server/commands/target.go | 10 +- pkg/cmd/grafana/apiserver/apiserver.md | 60 ------ pkg/cmd/grafana/apiserver/cmd.go | 157 -------------- .../deploy/aggregator-test/apiservice.yaml | 15 -- .../deploy/aggregator-test/externalname.yaml | 8 - .../deploy/aggregator-test/kustomization.yaml | 3 - pkg/cmd/grafana/apiserver/server.go | 201 ------------------ .../apiserver/testdata/certificates/README.md | 6 - .../apiserver/testdata/certificates/ca.crt | 24 --- .../apiserver/testdata/certificates/ca.key | 28 --- .../testdata/certificates/client.crt | 27 --- .../testdata/certificates/client.csr | 27 --- .../testdata/certificates/client.key | 52 ----- .../testdata/certificates/server.crt | 28 --- .../testdata/certificates/server.csr | 29 --- .../testdata/certificates/server.key | 52 ----- pkg/cmd/grafana/main.go | 49 +++-- pkg/extensions/main.go | 12 +- pkg/server/wire.go | 2 +- pkg/server/wireexts_oss.go | 2 +- pkg/services/apiserver/standalone/factory.go | 168 ++------------- 24 files changed, 62 insertions(+), 923 deletions(-) delete mode 100644 pkg/cmd/grafana/apiserver/apiserver.md delete mode 100644 pkg/cmd/grafana/apiserver/cmd.go delete mode 100644 pkg/cmd/grafana/apiserver/deploy/aggregator-test/apiservice.yaml delete mode 100644 pkg/cmd/grafana/apiserver/deploy/aggregator-test/externalname.yaml delete mode 100644 pkg/cmd/grafana/apiserver/deploy/aggregator-test/kustomization.yaml delete mode 100644 pkg/cmd/grafana/apiserver/server.go delete mode 100644 pkg/cmd/grafana/apiserver/testdata/certificates/README.md delete mode 100755 pkg/cmd/grafana/apiserver/testdata/certificates/ca.crt delete mode 100755 pkg/cmd/grafana/apiserver/testdata/certificates/ca.key delete mode 100755 pkg/cmd/grafana/apiserver/testdata/certificates/client.crt delete mode 100755 pkg/cmd/grafana/apiserver/testdata/certificates/client.csr delete mode 100755 pkg/cmd/grafana/apiserver/testdata/certificates/client.key delete mode 100755 pkg/cmd/grafana/apiserver/testdata/certificates/server.crt delete mode 100755 pkg/cmd/grafana/apiserver/testdata/certificates/server.csr delete mode 100755 pkg/cmd/grafana/apiserver/testdata/certificates/server.key diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index c30c40ee279..f00c143ce13 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -80,7 +80,6 @@ /pkg/apis/query @grafana/grafana-datasources-core-services /pkg/bus/ @grafana/grafana-search-and-storage /pkg/cmd/ @grafana/grafana-backend-group -/pkg/cmd/grafana/apiserver @grafana/grafana-app-platform-squad /pkg/components/apikeygen/ @grafana/identity-squad /pkg/components/satokengen/ @grafana/identity-squad /pkg/components/dashdiffs/ @grafana/grafana-app-platform-squad diff --git a/pkg/cmd/grafana-server/commands/buildinfo.go b/pkg/cmd/grafana-server/commands/buildinfo.go index 1051ca520bc..fe694d5e3b1 100644 --- a/pkg/cmd/grafana-server/commands/buildinfo.go +++ b/pkg/cmd/grafana-server/commands/buildinfo.go @@ -5,10 +5,11 @@ import ( "time" "github.com/grafana/grafana/pkg/extensions" + "github.com/grafana/grafana/pkg/services/apiserver/standalone" "github.com/grafana/grafana/pkg/setting" ) -func getBuildstamp(opts ServerOptions) int64 { +func getBuildstamp(opts standalone.BuildInfo) int64 { buildstampInt64, err := strconv.ParseInt(opts.BuildStamp, 10, 64) if err != nil || buildstampInt64 == 0 { buildstampInt64 = time.Now().Unix() @@ -16,7 +17,7 @@ func getBuildstamp(opts ServerOptions) int64 { return buildstampInt64 } -func SetBuildInfo(opts ServerOptions) { +func SetBuildInfo(opts standalone.BuildInfo) { setting.BuildVersion = opts.Version setting.BuildCommit = opts.Commit setting.EnterpriseBuildCommit = opts.EnterpriseCommit diff --git a/pkg/cmd/grafana-server/commands/cli.go b/pkg/cmd/grafana-server/commands/cli.go index 6e82a6362b4..5f438aad2fd 100644 --- a/pkg/cmd/grafana-server/commands/cli.go +++ b/pkg/cmd/grafana-server/commands/cli.go @@ -21,38 +21,29 @@ import ( "github.com/grafana/grafana/pkg/infra/metrics" "github.com/grafana/grafana/pkg/infra/process" "github.com/grafana/grafana/pkg/server" + "github.com/grafana/grafana/pkg/services/apiserver/standalone" "github.com/grafana/grafana/pkg/setting" ) -type ServerOptions struct { - Version string - Commit string - EnterpriseCommit string - BuildBranch string - BuildStamp string - Context *cli.Context -} - func ServerCommand(version, commit, enterpriseCommit, buildBranch, buildstamp string) *cli.Command { return &cli.Command{ Name: "server", Usage: "run the grafana server", Flags: commonFlags, Action: func(context *cli.Context) error { - return RunServer(ServerOptions{ + return RunServer(standalone.BuildInfo{ Version: version, Commit: commit, EnterpriseCommit: enterpriseCommit, BuildBranch: buildBranch, BuildStamp: buildstamp, - Context: context, - }) + }, context) }, Subcommands: []*cli.Command{TargetCommand(version, commit, buildBranch, buildstamp)}, } } -func RunServer(opts ServerOptions) error { +func RunServer(opts standalone.BuildInfo, cli *cli.Context) error { if Version || VerboseVersion { if opts.EnterpriseCommit != gcli.DefaultCommitValue && opts.EnterpriseCommit != "" { fmt.Printf("Version %s (commit: %s, branch: %s, enterprise-commit: %s)\n", opts.Version, opts.Commit, opts.BuildBranch, opts.EnterpriseCommit) @@ -106,7 +97,7 @@ func RunServer(opts ServerOptions) error { Config: ConfigFile, HomePath: HomePath, // tailing arguments have precedence over the options string - Args: append(configOptions, opts.Context.Args().Slice()...), + Args: append(configOptions, cli.Args().Slice()...), }) if err != nil { return err diff --git a/pkg/cmd/grafana-server/commands/target.go b/pkg/cmd/grafana-server/commands/target.go index 25df8f70e04..39f322396ac 100644 --- a/pkg/cmd/grafana-server/commands/target.go +++ b/pkg/cmd/grafana-server/commands/target.go @@ -13,6 +13,7 @@ import ( "github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/infra/metrics" "github.com/grafana/grafana/pkg/server" + "github.com/grafana/grafana/pkg/services/apiserver/standalone" "github.com/grafana/grafana/pkg/setting" ) @@ -22,18 +23,17 @@ func TargetCommand(version, commit, buildBranch, buildstamp string) *cli.Command Usage: "target specific grafana dskit services", Flags: commonFlags, Action: func(context *cli.Context) error { - return RunTargetServer(ServerOptions{ + return RunTargetServer(standalone.BuildInfo{ Version: version, Commit: commit, BuildBranch: buildBranch, BuildStamp: buildstamp, - Context: context, - }) + }, context) }, } } -func RunTargetServer(opts ServerOptions) error { +func RunTargetServer(opts standalone.BuildInfo, cli *cli.Context) error { if Version || VerboseVersion { fmt.Printf("Version %s (commit: %s, branch: %s)\n", opts.Version, opts.Commit, opts.BuildBranch) if VerboseVersion { @@ -83,7 +83,7 @@ func RunTargetServer(opts ServerOptions) error { Config: ConfigFile, HomePath: HomePath, // tailing arguments have precedence over the options string - Args: append(configOptions, opts.Context.Args().Slice()...), + Args: append(configOptions, cli.Args().Slice()...), }) if err != nil { return err diff --git a/pkg/cmd/grafana/apiserver/apiserver.md b/pkg/cmd/grafana/apiserver/apiserver.md deleted file mode 100644 index 41fe0362570..00000000000 --- a/pkg/cmd/grafana/apiserver/apiserver.md +++ /dev/null @@ -1,60 +0,0 @@ -# grafana apiserver (standalone) - -The example-apiserver closely resembles the -[sample-apiserver](https://github.com/kubernetes/sample-apiserver/tree/master) project in code and thus -allows the same -[CLI flags](https://kubernetes.io/docs/reference/command-line-tools-reference/kube-apiserver/) as kube-apiserver. -It is currently used for testing our deployment pipelines for aggregated servers. You can optionally omit the -aggregation path altogether and just run this example apiserver as a standalone process. - -## Standalone Mode - -### Usage - -For setting `--grafana.authn.signing-keys-url`, Grafana must be run with `idForwarding = true` while also ensuring -you have logged in to the instance at least once. - -```shell -go run ./pkg/cmd/grafana apiserver \ - --runtime-config=example.grafana.app/v0alpha1=true \ - --grafana-apiserver-dev-mode \ - --grafana.authn.signing-keys-url="http://localhost:3000/api/signing-keys/keys" \ - --verbosity 10 \ - --secure-port 7443 -``` - -### Verify that all works - -In dev mode, the standalone server's loopback kubeconfig is written to `./data/grafana-apiserver/apiserver.kubeconfig`. - -```shell -export KUBECONFIG=./data/grafana-apiserver/apiserver.kubeconfig - -kubectl api-resources -NAME SHORTNAMES APIVERSION NAMESPACED KIND -dummy example.grafana.app/v0alpha1 true DummyResource -runtime example.grafana.app/v0alpha1 false RuntimeInfo -``` - -### Observability - -Logs, metrics and traces are supported. See `--grafana.log.*`, `--grafana.metrics.*` and `--grafana.tracing.*` flags for details. - -```shell -go run ./pkg/cmd/grafana apiserver \ - --runtime-config=example.grafana.app/v0alpha1=true \ - --help -``` - -For example, to enable debug logs, metrics and traces (using [self-instrumentation](../../../../devenv/docker/blocks/self-instrumentation/readme.md)) use the following: - -```shell -go run ./pkg/cmd/grafana apiserver \ - --runtime-config=example.grafana.app/v0alpha1=true \ - --secure-port=7443 \ - --grafana.log.level=debug \ - --verbosity=10 \ - --grafana.metrics.enable \ - --grafana.tracing.jaeger.address=http://localhost:14268/api/traces \ - --grafana.tracing.sampler-param=1 -``` diff --git a/pkg/cmd/grafana/apiserver/cmd.go b/pkg/cmd/grafana/apiserver/cmd.go deleted file mode 100644 index a187772550e..00000000000 --- a/pkg/cmd/grafana/apiserver/cmd.go +++ /dev/null @@ -1,157 +0,0 @@ -package apiserver - -import ( - "context" - "os" - "sync" - - "github.com/spf13/cobra" - "go.opentelemetry.io/otel" - "go.opentelemetry.io/otel/trace" - genericapiserver "k8s.io/apiserver/pkg/server" - "k8s.io/component-base/cli" - - "github.com/grafana/grafana/pkg/cmd/grafana-server/commands" - "github.com/grafana/grafana/pkg/infra/log" - "github.com/grafana/grafana/pkg/infra/tracing" - "github.com/grafana/grafana/pkg/server" - "github.com/grafana/grafana/pkg/services/apiserver/standalone" -) - -func newCommandStartStandaloneAPIServer(o *APIServerOptions, stopCh <-chan struct{}) *cobra.Command { - devAcknowledgementNotice := "The apiserver command is in heavy development. The entire setup is subject to change without notice" - runtimeConfig := "" - - factory, err := server.InitializeAPIServerFactory() - if err != nil { - return nil - } - o.factory = factory - - cmd := &cobra.Command{ - Use: "apiserver [api group(s)]", - Short: "Run the grafana apiserver", - Long: "Run a standalone kubernetes based apiserver that can be aggregated by a root apiserver. " + - devAcknowledgementNotice, - Example: "grafana apiserver --runtime-config=example.grafana.app/v0alpha1=true", - RunE: func(c *cobra.Command, args []string) error { - if err := log.SetupConsoleLogger("debug"); err != nil { - return nil - } - - if err := o.Validate(); err != nil { - return err - } - - runtime, err := standalone.ReadRuntimeConfig(runtimeConfig) - if err != nil { - return err - } - apis, err := o.factory.GetEnabled(runtime) - if err != nil { - return err - } - - // Currently TracingOptions.ApplyTo, which will configure/initialize tracing, - // happens after loadAPIGroupBuilders. Hack to workaround this for now to allow - // the tracer to be initialized at a later stage, when tracer is available. - // TODO: Fix so that TracingOptions.ApplyTo happens before or during loadAPIGroupBuilders. - tracer := newLateInitializedTracingService() - - ctx, cancel := context.WithCancel(c.Context()) - go func() { - <-stopCh - cancel() - }() - - // Load each group from the args - if err := o.loadAPIGroupBuilders(ctx, tracer, apis); err != nil { - return err - } - - // Finish the config (a noop for now) - if err := o.Complete(); err != nil { - return err - } - - // o.Config(tracer) definitely needs to happen before we override the tracer below - // using tracer.InitTracer with the real tracer - config, err := o.Config(tracer) - if err != nil { - return err - } - - if o.Options.TracingOptions.TracingService != nil { - tracer.InitTracer(o.Options.TracingOptions.TracingService) - } - - defer o.factory.Shutdown() - - if err := o.RunAPIServer(ctx, config); err != nil { - return err - } - - return nil - }, - } - - cmd.Flags().StringVar(&runtimeConfig, "runtime-config", "", "A set of key=value pairs that enable or disable built-in APIs.") - - o.AddFlags(cmd.Flags()) - - return cmd -} - -func RunCLI(opts commands.ServerOptions) int { - stopCh := genericapiserver.SetupSignalHandler() - - commands.SetBuildInfo(opts) - - options := newAPIServerOptions(os.Stdout, os.Stderr) - cmd := newCommandStartStandaloneAPIServer(options, stopCh) - - return cli.Run(cmd) -} - -type lateInitializedTracingProvider struct { - trace.TracerProvider - tracer *lateInitializedTracingService -} - -func (tp lateInitializedTracingProvider) Tracer(name string, options ...trace.TracerOption) trace.Tracer { - return tp.tracer.getTracer() -} - -type lateInitializedTracingService struct { - tracing.Tracer - mutex sync.RWMutex -} - -func newLateInitializedTracingService() *lateInitializedTracingService { - ts := &lateInitializedTracingService{ - Tracer: tracing.NewNoopTracerService(), - } - - tp := &lateInitializedTracingProvider{ - tracer: ts, - } - - otel.SetTracerProvider(tp) - - return ts -} - -func (s *lateInitializedTracingService) getTracer() tracing.Tracer { - s.mutex.RLock() - t := s.Tracer - s.mutex.RUnlock() - return t -} - -func (s *lateInitializedTracingService) InitTracer(tracer *tracing.TracingService) { - s.mutex.Lock() - s.Tracer = tracer - s.mutex.Unlock() -} - -var _ tracing.Tracer = &lateInitializedTracingService{} diff --git a/pkg/cmd/grafana/apiserver/deploy/aggregator-test/apiservice.yaml b/pkg/cmd/grafana/apiserver/deploy/aggregator-test/apiservice.yaml deleted file mode 100644 index 65cc2a5884a..00000000000 --- a/pkg/cmd/grafana/apiserver/deploy/aggregator-test/apiservice.yaml +++ /dev/null @@ -1,15 +0,0 @@ ---- -apiVersion: apiregistration.k8s.io/v1 -kind: APIService -metadata: - name: v0alpha1.example.grafana.app -spec: - version: v0alpha1 - insecureSkipTLSVerify: true - group: example.grafana.app - groupPriorityMinimum: 1000 - versionPriority: 15 - service: - name: example-apiserver - namespace: grafana - port: 7443 diff --git a/pkg/cmd/grafana/apiserver/deploy/aggregator-test/externalname.yaml b/pkg/cmd/grafana/apiserver/deploy/aggregator-test/externalname.yaml deleted file mode 100644 index 75009779106..00000000000 --- a/pkg/cmd/grafana/apiserver/deploy/aggregator-test/externalname.yaml +++ /dev/null @@ -1,8 +0,0 @@ -apiVersion: service.grafana.app/v0alpha1 -kind: ExternalName -metadata: - name: example-apiserver - namespace: grafana -spec: - host: localhost - diff --git a/pkg/cmd/grafana/apiserver/deploy/aggregator-test/kustomization.yaml b/pkg/cmd/grafana/apiserver/deploy/aggregator-test/kustomization.yaml deleted file mode 100644 index 15829bf3c27..00000000000 --- a/pkg/cmd/grafana/apiserver/deploy/aggregator-test/kustomization.yaml +++ /dev/null @@ -1,3 +0,0 @@ -resources: - - apiservice.yaml - - externalname.yaml diff --git a/pkg/cmd/grafana/apiserver/server.go b/pkg/cmd/grafana/apiserver/server.go deleted file mode 100644 index 96bdc935f8a..00000000000 --- a/pkg/cmd/grafana/apiserver/server.go +++ /dev/null @@ -1,201 +0,0 @@ -package apiserver - -import ( - "context" - "fmt" - "io" - "net" - "path" - - "github.com/grafana/pyroscope-go/godeltaprof/http/pprof" - "github.com/spf13/pflag" - "k8s.io/apimachinery/pkg/runtime/schema" - utilerrors "k8s.io/apimachinery/pkg/util/errors" - genericapiserver "k8s.io/apiserver/pkg/server" - "k8s.io/apiserver/pkg/server/mux" - "k8s.io/client-go/tools/clientcmd" - netutils "k8s.io/utils/net" - - "github.com/grafana/grafana/pkg/infra/log" - "github.com/grafana/grafana/pkg/infra/tracing" - grafanaAPIServer "github.com/grafana/grafana/pkg/services/apiserver" - "github.com/grafana/grafana/pkg/services/apiserver/builder" - "github.com/grafana/grafana/pkg/services/apiserver/standalone" - standaloneoptions "github.com/grafana/grafana/pkg/services/apiserver/standalone/options" - "github.com/grafana/grafana/pkg/services/apiserver/utils" - "github.com/grafana/grafana/pkg/setting" -) - -const ( - dataPath = "data/grafana-apiserver" // same as grafana core -) - -// APIServerOptions contains the state for the apiserver -type APIServerOptions struct { - factory standalone.APIServerFactory - builders []builder.APIGroupBuilder - Options *standaloneoptions.Options - AlternateDNS []string - logger log.Logger - - StdOut io.Writer - StdErr io.Writer -} - -func newAPIServerOptions(out, errOut io.Writer) *APIServerOptions { - logger := log.New("grafana-apiserver") - - return &APIServerOptions{ - logger: logger, - StdOut: out, - StdErr: errOut, - Options: standaloneoptions.New(logger, grafanaAPIServer.Codecs.LegacyCodec()), - } -} - -func (o *APIServerOptions) loadAPIGroupBuilders(ctx context.Context, tracer tracing.Tracer, apis []schema.GroupVersion) error { - o.builders = []builder.APIGroupBuilder{} - for _, gv := range apis { - api, err := o.factory.MakeAPIServer(ctx, tracer, gv) - if err != nil { - return err - } - o.builders = append(o.builders, api) - } - - if len(o.builders) < 1 { - return fmt.Errorf("no apis matched ") - } - - // Install schemas - for _, b := range o.builders { - if err := b.InstallSchema(grafanaAPIServer.Scheme); err != nil { - return err - } - } - return nil -} - -func (o *APIServerOptions) Config(tracer tracing.Tracer) (*genericapiserver.RecommendedConfig, error) { - if err := o.Options.RecommendedOptions.SecureServing.MaybeDefaultWithSelfSignedCerts( - "localhost", o.AlternateDNS, []net.IP{netutils.ParseIPSloppy("127.0.0.1")}, - ); err != nil { - return nil, fmt.Errorf("error creating self-signed certificates: %v", err) - } - - o.Options.RecommendedOptions.Authentication.RemoteKubeConfigFileOptional = true - - // TODO: determine authorization, currently insecure because Authorization provided by recommended options doesn't work - // reason: an aggregated server won't be able to post subjectaccessreviews (Grafana doesn't have this kind) - // exact error: the server could not find the requested resource (post subjectaccessreviews.authorization.k8s.io) - o.Options.RecommendedOptions.Authorization = nil - - o.Options.RecommendedOptions.Admission = nil - o.Options.RecommendedOptions.Etcd = nil - - if o.Options.RecommendedOptions.CoreAPI.CoreAPIKubeconfigPath == "" { - o.Options.RecommendedOptions.CoreAPI = nil - } - - serverConfig := genericapiserver.NewRecommendedConfig(grafanaAPIServer.Codecs) - - if err := o.Options.ApplyTo(serverConfig); err != nil { - return nil, fmt.Errorf("failed to apply options to server config: %w", err) - } - - if factoryOptions := o.factory.GetOptions(); factoryOptions != nil { - err := factoryOptions.ApplyTo(serverConfig) - if err != nil { - return nil, fmt.Errorf("factory's applyTo func failed: %s", err.Error()) - } - } - - serverConfig.DisabledPostStartHooks = serverConfig.DisabledPostStartHooks.Insert("generic-apiserver-start-informers") - serverConfig.DisabledPostStartHooks = serverConfig.DisabledPostStartHooks.Insert("priority-and-fairness-config-consumer") - - // Add OpenAPI specs for each group+version - err := builder.SetupConfig( - grafanaAPIServer.Scheme, - serverConfig, - o.builders, - setting.BuildStamp, - setting.BuildVersion, - setting.BuildCommit, - setting.BuildBranch, - o.factory.GetBuildHandlerChainFunc(tracer, o.builders), - ) - return serverConfig, err -} - -func (o *APIServerOptions) AddFlags(fs *pflag.FlagSet) { - o.Options.AddFlags(fs) - - if factoryOptions := o.factory.GetOptions(); factoryOptions != nil { - factoryOptions.AddFlags(fs) - } -} - -// Validate validates APIServerOptions -func (o *APIServerOptions) Validate() error { - errors := make([]error, 0) - - if factoryOptions := o.factory.GetOptions(); factoryOptions != nil { - errors = append(errors, factoryOptions.ValidateOptions()...) - } - - if errs := o.Options.Validate(); len(errs) > 0 { - errors = append(errors, errs...) - } - - return utilerrors.NewAggregate(errors) -} - -// Complete fills in fields required to have valid data -func (o *APIServerOptions) Complete() error { - return nil -} - -func (o *APIServerOptions) RunAPIServer(ctx context.Context, config *genericapiserver.RecommendedConfig) error { - delegationTarget := genericapiserver.NewEmptyDelegate() - completedConfig := config.Complete() - - server, err := completedConfig.New("standalone-apiserver", delegationTarget) - if err != nil { - return err - } - - // Install the API Group+version - // #TODO figure out how to configure storage type in o.Options.StorageOptions - err = builder.InstallAPIs(grafanaAPIServer.Scheme, grafanaAPIServer.Codecs, server, config.RESTOptionsGetter, o.builders, o.Options.StorageOptions, - o.Options.MetricsOptions.MetricsRegisterer, nil, nil, nil, // no need for server lock in standalone - ) - if err != nil { - return err - } - - // write the local config to disk - if o.Options.ExtraOptions.DevMode { - if err = clientcmd.WriteToFile( - utils.FormatKubeConfig(server.LoopbackClientConfig), - path.Join(dataPath, "apiserver.kubeconfig"), - ); err != nil { - return err - } - } - - if config.EnableProfiling { - deltaProfiling{}.Install(server.Handler.NonGoRestfulMux) - } - - return server.PrepareRun().RunWithContext(ctx) -} - -// deltaProfiling adds godeltapprof handlers for pprof under /debug/pprof. -type deltaProfiling struct{} - -// Install register godeltapprof handlers to the given mux. -func (d deltaProfiling) Install(c *mux.PathRecorderMux) { - c.UnlistedHandleFunc("/debug/pprof/delta_heap", pprof.Heap) - c.UnlistedHandleFunc("/debug/pprof/delta_block", pprof.Block) - c.UnlistedHandleFunc("/debug/pprof/delta_mutex", pprof.Mutex) -} diff --git a/pkg/cmd/grafana/apiserver/testdata/certificates/README.md b/pkg/cmd/grafana/apiserver/testdata/certificates/README.md deleted file mode 100644 index e048128c8fb..00000000000 --- a/pkg/cmd/grafana/apiserver/testdata/certificates/README.md +++ /dev/null @@ -1,6 +0,0 @@ -# apiserver-certificates - -These certificates are used for development and testing ONLY. They are generated using the script under -[hack/make-aggregator-pki.sh](./hack/make-aggregator-pki.sh). - -The CA, server and client certificates are each 10 years of expiration. diff --git a/pkg/cmd/grafana/apiserver/testdata/certificates/ca.crt b/pkg/cmd/grafana/apiserver/testdata/certificates/ca.crt deleted file mode 100755 index 1991fe2da6d..00000000000 --- a/pkg/cmd/grafana/apiserver/testdata/certificates/ca.crt +++ /dev/null @@ -1,24 +0,0 @@ ------BEGIN CERTIFICATE----- -MIID9zCCAt+gAwIBAgIUeRrA5l+Rl4LkHPP1DmMFlYzrhW4wDQYJKoZIhvcNAQEL -BQAwgYoxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApOZXcgU3dlZGVuMRMwEQYDVQQH -DApTdG9ja2hvbG0gMRAwDgYDVQQKDAdHcmFmYW5hMQwwCgYDVQQLDANSJkQxEDAO -BgNVBAMMB3Rlc3QtY2ExHzAdBgkqhkiG9w0BCQEWEHRlc3RAZ3JhZmFuYS5hcHAw -HhcNMjQwODA1MjMxMzUzWhcNMzQwODAzMjMxMzUzWjCBijELMAkGA1UEBhMCVVMx -EzARBgNVBAgMCk5ldyBTd2VkZW4xEzARBgNVBAcMClN0b2NraG9sbSAxEDAOBgNV -BAoMB0dyYWZhbmExDDAKBgNVBAsMA1ImRDEQMA4GA1UEAwwHdGVzdC1jYTEfMB0G -CSqGSIb3DQEJARYQdGVzdEBncmFmYW5hLmFwcDCCASIwDQYJKoZIhvcNAQEBBQAD -ggEPADCCAQoCggEBANj6qsutYwof0e0zHrp35Dey+kQxi+VTr/sAKlSoyySP4fmQ -9Qn8mDY4HyJ1oOJFpFAlD0Qp1xGdbvcrlvjoieqmfenW342fza0wqS5K8qkd2rJ7 -khdAE2mACZTFSjmAa8+1rIRWnR0SaHBmDgdxBfNkET+n+cX+WsDMhmzNvPoPDS/V -8LaNih/eOUzb/5hamvD8CNLKakes0u/EsdxOsGFWCkpE1mg9yg0YPms5qUAj9pdV -iPH8B5zA1JoukZCrVGPv6R76fJI1LEohiASNFt9cgs2dhdk6QHzGyqNq3T3Cw8yI -Cug/Kk9DGqwq9OeXtADa4hhPebj04C4hxk0AT2UCAwEAAaNTMFEwHQYDVR0OBBYE -FBBn2SXiiItJQsJZ7MTvIn1s1t3jMB8GA1UdIwQYMBaAFBBn2SXiiItJQsJZ7MTv -In1s1t3jMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBABcCcwsg -jrcNZheAaKXtdcZT01+doQhaOvhZQhY5L+bCnB0wkBXRJzv8ne+KgLx7auFQP8/2 -OoPgaiA0R+XtImCkyBd+cr4mo2tYVpHt9+B0HaYGzGoXt0dre47ihlgkqoSwmgvG -9++pfrbQGRd5Xb/j0468sd5uQy1PPhsjCzFZTuxXcaAN13MDNikYjjn5mc5coklu -hCFH54PgP/PUDXxI0v/QUjNOj7hAdMkqOjzFD9Fze1KjtS3aSZvaaZVrM3x/YS8y -1IUgyocgoOKCqBOeEict+g/xghFDe7r2Dlgps/hPD1ojijBl83g5i079jW4y9jm+ -osFOTGnRx2u0CpE= ------END CERTIFICATE----- diff --git a/pkg/cmd/grafana/apiserver/testdata/certificates/ca.key b/pkg/cmd/grafana/apiserver/testdata/certificates/ca.key deleted file mode 100755 index 2b427227dff..00000000000 --- a/pkg/cmd/grafana/apiserver/testdata/certificates/ca.key +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN PRIVATE KEY----- -MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDY+qrLrWMKH9Ht -Mx66d+Q3svpEMYvlU6/7ACpUqMskj+H5kPUJ/Jg2OB8idaDiRaRQJQ9EKdcRnW73 -K5b46Inqpn3p1t+Nn82tMKkuSvKpHdqye5IXQBNpgAmUxUo5gGvPtayEVp0dEmhw -Zg4HcQXzZBE/p/nF/lrAzIZszbz6Dw0v1fC2jYof3jlM2/+YWprw/AjSympHrNLv -xLHcTrBhVgpKRNZoPcoNGD5rOalAI/aXVYjx/AecwNSaLpGQq1Rj7+ke+nySNSxK -IYgEjRbfXILNnYXZOkB8xsqjat09wsPMiAroPypPQxqsKvTnl7QA2uIYT3m49OAu -IcZNAE9lAgMBAAECggEAYUTyNy+J1BqSrd66WkZv6SZTeimp+Mrs+71FvMEUnFXi -LFJ2/xydEcVT88s+reEheYo7j0egcfWdLrH8UqZQWYB8ts0MV715YzgKx8Vyhizr -gxLRWZnwed2brfVJwoBXFHzxkzwO398GMckWZfCdhdBoyRwg5UkS3xZw9qq+mmw8 -hvt88sDzHwnk/9rMY6KLNhWNiCSAxU65AlpktWRGy2e9wAtyzN+WX/iQwsiAyhk2 -TV2bHQxRE7FT9hg4UBxzWruYRj4jkLKdH4tVqVKLsV7KutAOiYj3hCjYzOac/5QG -XrTRhN/ewAqJCTOI9K8BVT27l3QxREcq480auDwIawKBgQDzOr6+ILgPdqdGX9Nu -HoLnNuU6OdFsTJ3qXSp4AGv8ufq47PJmTp3F2ZN9RTDr6Fih7UKhApVvFOy6/Hlr -vb0MbL9FOe+2ejtnVmNi13AMexW+nmnOs1oSghXYIbt51/n+5bFmzAo6RFDEG0YT -mtRWMj4mifMI0XH31yRk+Yjp6wKBgQDkXxdG0OmoDwlrlbHjVOpEg7/A0diBHfb9 -yh4MbaVmd6rGgdNkJYq1qB6ctJcLYpKq1QGgj6FyNDNyY/T4lIxRuSHqC2v1Mjt/ -TaL1BhMsH2Q6+bT8mlmM4cNNgSVHfISJv2mMuKfEqb+uY0y8UU6/lYmwzC5rH4bs -TgPNSLmH7wKBgQCk8F9M2y81/UZt6Kmd8T7fwFAt7etgP4yO02LrQY35Mb0eDkBK -tGE1O9hSiMsmDseb9yLJwNDJJS1rl65XK7G5bT0/mow9+CG0b9axvlqTfBxAyXgC -3YjlKCXcDPPvKlCzU9u7U/5TiOQkOEKLJOF9GlEfHUkb37wjT1e0yarYxQKBgFNF -nT40RU8DlKLHJeNH/lhXVh9gJTsHix2Fiqlrfck8T2gsxMEas1aD5A2uB/mdyu9B -1mMOnIcBI9VNP3E48WWHRSeLXKU+2NUVoRsJSQpos+qRTP5i5c5qMAXd1pMXg1ib -FEi8uGgMoZlcGgn89+MCCwANo8tp5o/Z7qb3Ire/AoGANmc8BAGgKanJVAfu7gDU -AgxRg5T0/C6vpWh5k/gFS7AQqgnx8EcRYtuCD4Er5GFRdcyb9AuZccyKzWI5JS89 -YOmJPrfDd7VzBsrOjwJCXcV6tUUq6yO4Ra8vKlIw7T+mMYZh7xWwGnT8UA+X9F+7 -yV6kPpraMD/dFbo2TZoNMjc= ------END PRIVATE KEY----- diff --git a/pkg/cmd/grafana/apiserver/testdata/certificates/client.crt b/pkg/cmd/grafana/apiserver/testdata/certificates/client.crt deleted file mode 100755 index 4b451c2fac9..00000000000 --- a/pkg/cmd/grafana/apiserver/testdata/certificates/client.crt +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIEjDCCA3SgAwIBAgIBATANBgkqhkiG9w0BAQsFADCBijELMAkGA1UEBhMCVVMx -EzARBgNVBAgMCk5ldyBTd2VkZW4xEzARBgNVBAcMClN0b2NraG9sbSAxEDAOBgNV -BAoMB0dyYWZhbmExDDAKBgNVBAsMA1ImRDEQMA4GA1UEAwwHdGVzdC1jYTEfMB0G -CSqGSIb3DQEJARYQdGVzdEBncmFmYW5hLmFwcDAeFw0yNDA4MDUyMzEzNTRaFw0z -NDA4MDMyMzEzNTRaMC8xFDASBgNVBAMMC2RldmVsb3BtZW50MRcwFQYDVQQKDA5z -eXN0ZW06bWFzdGVyczCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMz3 -SSM62uPCNG7mbdlgE0bYcpT8f1ZFmyaauXzbqdTF0/VxGCh9YVBFnqlAdfAUFasN -HBLQz63PniOWbzmhXZBkrCF/nozg7PgiXJ7aM5ppJyYulOI3sldH49V8KWzcGiJo -ZE13kKIlCqnOanErj4RnaxVJvMmWOlt6Zn/ljkDFvwypaOeIX/YO1zuZ95BqGpDh -u4CXipKeCM0AjXNvKrHCi5QbNEF0FMyvsX+s76wZtZSpB7vbIfj/h5Z4Scfyovmy -cZeqgL2mDAnosKw8/KYAgkcArMHoScTfdCjWthJQlPybJKgMKOJI9OehuP1a89A9 -t+T/T8ZT75x0YADw+56WDcsYGECiaixrkpB0aiPBtgDm1i1z7ooqSfAfZa0PEgPT -L680TK66qXI2GFtNqUkU6+xZEfvuxOdZRXkuIVeQ4UMqaiW9y37ppvKzX4llOD2D -VP86D0JxCCuJqxlzSAGbxK61c8mdqM1SKAa5O5Kl0KHxVkGk4zHYtrHqWsy6YOIM -CqLMA2vLAeqYwSEn2eQBkTNdhSulrB6JPNBDPNB9+wX5EOX3w+x9lRxn59kQgKyV -anf1cm1UYeqjsLPhBjpuwVtHhEAc8uJrSZBM3oKPSYEYxwEo+QG8rcKIpjV9gtCu -T3e/WBWlDVBm0NwbxtY/rYc5ggPHMtPhFxBDhjJpAgMBAAGjVzBVMBMGA1UdJQQM -MAoGCCsGAQUFBwMCMB0GA1UdDgQWBBQ+z7tF4/VANXrXgsY0PVQFFo6csjAfBgNV -HSMEGDAWgBQQZ9kl4oiLSULCWezE7yJ9bNbd4zANBgkqhkiG9w0BAQsFAAOCAQEA -NagU3hqJr5wEU79202Rj+aqbzWJlz1jvZVR6PHILB0deTtvYk1EXeVgyjwmz7PW3 -DLYcpwgW3bTdxhejduFNzKazDOZZ2blUlZlHs1PoBb/ipnw4g+ozO+ZyGs05gCu8 -DrsxUKX7bpVcKGfPNVg8L4xZbanizO1XUiv6PDBBRZhKXSl+KO9+aN2C/yRnYmpV -9dyuMI9nFoMB0K7rxTxiRCIPIWs8nsGouLa6lg6/I+xTAjV0IqNz0rQ66UWJOr3x -vLGFdMMaDUSbsNlu18/sCJd+G0rkh24YE6e3I1wGqE9jr4iYsMhkhfp0u4Qojmfp -3/7IGZYzvVIN/PvSFBBgZw== ------END CERTIFICATE----- diff --git a/pkg/cmd/grafana/apiserver/testdata/certificates/client.csr b/pkg/cmd/grafana/apiserver/testdata/certificates/client.csr deleted file mode 100755 index b6848a532aa..00000000000 --- a/pkg/cmd/grafana/apiserver/testdata/certificates/client.csr +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIEmjCCAoICAQAwLzEUMBIGA1UEAwwLZGV2ZWxvcG1lbnQxFzAVBgNVBAoMDnN5 -c3RlbTptYXN0ZXJzMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzPdJ -Izra48I0buZt2WATRthylPx/VkWbJpq5fNup1MXT9XEYKH1hUEWeqUB18BQVqw0c -EtDPrc+eI5ZvOaFdkGSsIX+ejODs+CJcntozmmknJi6U4jeyV0fj1XwpbNwaImhk -TXeQoiUKqc5qcSuPhGdrFUm8yZY6W3pmf+WOQMW/DKlo54hf9g7XO5n3kGoakOG7 -gJeKkp4IzQCNc28qscKLlBs0QXQUzK+xf6zvrBm1lKkHu9sh+P+HlnhJx/Ki+bJx -l6qAvaYMCeiwrDz8pgCCRwCswehJxN90KNa2ElCU/JskqAwo4kj056G4/Vrz0D23 -5P9PxlPvnHRgAPD7npYNyxgYQKJqLGuSkHRqI8G2AObWLXPuiipJ8B9lrQ8SA9Mv -rzRMrrqpcjYYW02pSRTr7FkR++7E51lFeS4hV5DhQypqJb3Lfumm8rNfiWU4PYNU -/zoPQnEIK4mrGXNIAZvErrVzyZ2ozVIoBrk7kqXQofFWQaTjMdi2sepazLpg4gwK -oswDa8sB6pjBISfZ5AGRM12FK6WsHok80EM80H37BfkQ5ffD7H2VHGfn2RCArJVq -d/VybVRh6qOws+EGOm7BW0eEQBzy4mtJkEzego9JgRjHASj5AbytwoimNX2C0K5P -d79YFaUNUGbQ3BvG1j+thzmCA8cy0+EXEEOGMmkCAwEAAaAmMCQGCSqGSIb3DQEJ -DjEXMBUwEwYDVR0lBAwwCgYIKwYBBQUHAwIwDQYJKoZIhvcNAQELBQADggIBAB7x -82Hy942/7nSbz9gJUsJ70sYcre0VRduIMzP1Ytk/ni+1QXDZSmdSrgR0cbTL4VIZ -zSt5Bp2vxBJqHmGPOXv5oWI+nGrfWzmzBGoGNk4cdNW2ZZCn6Om4L16gLYIlxmm1 -vgCgnPOYMEi5qtgG6676wSX7gf5+j1gWVDEwNFil8wBUIlA9QRbc2NN0T6479Z4b -4tUHzUpGuf788OPUqAdxpkH1xZBKW8HEGsk1+NdHgb5krE2ElwvN9qWX5f2DzzwL -sQf3A2IrO4lrso4RHao4X3V+/DOZCx+FK/oXqzyoS4YNnNy6B0377LgYkuuJsbOo -IFC7vRhBORvAXEXD/scLEsGKuQzs1vLLiwOp7pBOcGZzxOoqoXc2A6h64qpZKriq -T1rK6rmrttaXqYUokjbg/ggpcXCC1BGxsoRvGQoN6aQNV27zUh2wpZqpCpVLoN21 -eCqM9LVoPMCRqn7ItXE9oJhasPlKDO6amHL3CtxjvU2meXoa+nCia8lL4Sb9pSkB -O5eX4k3H/m4zjrpbqp7UdnidcYn4zfrjRBr65bqNr1sOxwUDWOa0kqaOKrgqwhWn -ld6zkuekuwzrOK4+Dpf5ybWnVFi8WSz6k9TqQIaeMrzeCBVboufl/ygoIRsTqp7N -WcKuZdUx8t16hFZ/NgpHRgfZI9pYdzi2vNSZ6WMM ------END CERTIFICATE REQUEST----- diff --git a/pkg/cmd/grafana/apiserver/testdata/certificates/client.key b/pkg/cmd/grafana/apiserver/testdata/certificates/client.key deleted file mode 100755 index 0a195f34480..00000000000 --- a/pkg/cmd/grafana/apiserver/testdata/certificates/client.key +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -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 -nL1C44m2dHWfIuDuGDs008g/12A53A== ------END PRIVATE KEY----- diff --git a/pkg/cmd/grafana/apiserver/testdata/certificates/server.crt b/pkg/cmd/grafana/apiserver/testdata/certificates/server.crt deleted file mode 100755 index 1a5a8714498..00000000000 --- a/pkg/cmd/grafana/apiserver/testdata/certificates/server.crt +++ /dev/null @@ -1,28 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIE0jCCA7qgAwIBAgIBAjANBgkqhkiG9w0BAQsFADCBijELMAkGA1UEBhMCVVMx -EzARBgNVBAgMCk5ldyBTd2VkZW4xEzARBgNVBAcMClN0b2NraG9sbSAxEDAOBgNV -BAoMB0dyYWZhbmExDDAKBgNVBAsMA1ImRDEQMA4GA1UEAwwHdGVzdC1jYTEfMB0G -CSqGSIb3DQEJARYQdGVzdEBncmFmYW5hLmFwcDAeFw0yNDA4MDUyMzEzNTVaFw0z -NDA4MDMyMzEzNTVaMCkxEjAQBgNVBAMMCWxvY2FsaG9zdDETMBEGA1UECgwKYWdn -cmVnYXRlZDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMbgGuvCKonn -9KgW58wqgxiykVbbmT82HmhgOBw5CSg7lVnKQlRzfvUtwZX7UhHXYxOCu0no7RqD -Y19QiGOx6SQlaXSMxqPL1PpWMQdX6j/I/H1pHMJ8Ynyd956VlhKUOIQBJMVd46Bg -6IEU4izuJ9uqEuHQrO8lb2eaTXAjsOmtIImxBI7xFsxp42wJyo6ptGetyaNCw7UF -e8xYmBVSLyfiN/drBx/lcwMiDgzfzf8BsavC96Fa/HujXkybAIyVid2DxKODPT9+ -7MA1ZY0/Nz3ySKSxIIbfL+1cPihR2GGy1Qwa/GuuJSGAwzy6D/9am5/K3yR927Bk -OgMUCIlpGlSDY1qFd79o/n9BJ9FJmlTMgIZ6RokaXAU2uaiE6v7YPYGkXoIz3ncc -SBprVom2h3RmM3qDbmXio1gGsDL/2SI+Hpnq2zhCzL28K+bZA6ukYpCNyyaYF9O6 -X6qi56zGCw/igTJgaYKMsNMSoX+3eHSFxj5JeF4bWcC4qTqmzvfz0HhvX+jjky/V -LHCh9ddH1umT/Ss/IxaNarXxXHoUmN33FgFQ+tML4eTvosG6IxUdJ/34qBT+dWk4 -zNIhStTUNiYPbcSfv8qKLHhMAuZOLsTATLsFQt7bzGZwV8HAuCiqzjg9p4R/dRjE -OLhQLZfKkYl99Mgli6v/hooEBSORCulVAgMBAAGjgaIwgZ8wPgYDVR0RBDcwNYIo -djBhbHBoYTEuZXhhbXBsZS5ncmFmYW5hLmFwcC5kZWZhdWx0LnN2Y4IJbG9jYWxo -b3N0MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAdBgNVHQ4EFgQUFvrZ -B0vSR3B7HcNPCZrZ2H7sFw0wHwYDVR0jBBgwFoAUEGfZJeKIi0lCwlnsxO8ifWzW -3eMwDQYJKoZIhvcNAQELBQADggEBAGYZYrY+eFmgwFp/ohIcWnekdOiCr7qjnmRo -LyNU/EbFz0HUV+yTrtoXLjv8S9D9Yc029Dgj2f31Hp7cOGjUfd0t1DgTBChcFgVr -E5ZbhmKEM0tQiBMI6mHvy6hFT+nc9/yftnndHRUyR4xm6E1dMFqpMyMdYKojRmbn -F6znVTcjBr4OiDnfTUkqYO8kc3I0qvA5ou4jXAJ9mu3UEbEjwc6C2/Mrr48a42Df -rHrwqwnM3DC2+SWVocctk1PRZqMFWypJ9U/HbKPbId79YyHNsI0XtxizV2sX5oXD -1NPPEBeEXZ3Nv/gn4d0h57UoBML9165fRRQSe7CkIl8kZigHGCg= ------END CERTIFICATE----- diff --git a/pkg/cmd/grafana/apiserver/testdata/certificates/server.csr b/pkg/cmd/grafana/apiserver/testdata/certificates/server.csr deleted file mode 100755 index 7fc2e09691f..00000000000 --- a/pkg/cmd/grafana/apiserver/testdata/certificates/server.csr +++ /dev/null @@ -1,29 +0,0 @@ ------BEGIN CERTIFICATE REQUEST----- -MIIE3jCCAsYCAQAwKTESMBAGA1UEAwwJbG9jYWxob3N0MRMwEQYDVQQKDAphZ2dy -ZWdhdGVkMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxuAa68Iqief0 -qBbnzCqDGLKRVtuZPzYeaGA4HDkJKDuVWcpCVHN+9S3BlftSEddjE4K7SejtGoNj -X1CIY7HpJCVpdIzGo8vU+lYxB1fqP8j8fWkcwnxifJ33npWWEpQ4hAEkxV3joGDo -gRTiLO4n26oS4dCs7yVvZ5pNcCOw6a0gibEEjvEWzGnjbAnKjqm0Z63Jo0LDtQV7 -zFiYFVIvJ+I392sHH+VzAyIODN/N/wGxq8L3oVr8e6NeTJsAjJWJ3YPEo4M9P37s -wDVljT83PfJIpLEght8v7Vw+KFHYYbLVDBr8a64lIYDDPLoP/1qbn8rfJH3bsGQ6 -AxQIiWkaVINjWoV3v2j+f0En0UmaVMyAhnpGiRpcBTa5qITq/tg9gaRegjPedxxI -GmtWibaHdGYzeoNuZeKjWAawMv/ZIj4emerbOELMvbwr5tkDq6RikI3LJpgX07pf -qqLnrMYLD+KBMmBpgoyw0xKhf7d4dIXGPkl4XhtZwLipOqbO9/PQeG9f6OOTL9Us -cKH110fW6ZP9Kz8jFo1qtfFcehSY3fcWAVD60wvh5O+iwbojFR0n/fioFP51aTjM -0iFK1NQ2Jg9txJ+/yooseEwC5k4uxMBMuwVC3tvMZnBXwcC4KKrOOD2nhH91GMQ4 -uFAtl8qRiX30yCWLq/+GigQFI5EK6VUCAwEAAaBwMG4GCSqGSIb3DQEJDjFhMF8w -PgYDVR0RBDcwNYIodjBhbHBoYTEuZXhhbXBsZS5ncmFmYW5hLmFwcC5kZWZhdWx0 -LnN2Y4IJbG9jYWxob3N0MB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjAN -BgkqhkiG9w0BAQsFAAOCAgEAGmr6CnGfcm+DapmhQnQLyq0HyCqKD0PKKamofQLb -YVMiCF/zKDV4+gIs2kMK3uWeZ9r4xDa9nEgBw6U2vi14AI79hmpETCrfvK6hterI -Znb2TQMYnUY3rt26DFNf3/21/jb/1cn/9z55TaHJGqqlJmvB1LfYJoMN8t6A6xg4 -J8TYjBuwQQOqFAPRuxmGag44PSC9V5e6gajz56RPyZz2kmdbfPZRNCnqileDWZla -7pilwP8QAhrJCPP25edc/5hP2WNTEH/GTa5FFmkNMKEHn6+dnBuMu5w1SygKUYWz -37qE7jntZC/RGVZ//npwsVyaa+NbgJNjhg/EMj+sWb/Eet2ETq7v9FCM0QG3HNUk -6d6af2YHI3Fo89y5ty1DOydBa5lIxy6gDTwameJYoTem71nPlRtU2b4VFBWZ4xwE -ac7Xmon+Z7tOHVwcCPp1cTwJ2TNwha0JxsW0C1g3QG59ILU5FMPlqOuDJi41uWql -Q56O+a6MnK7GfGxBMMf4FSlbV3xjUGxqyGy5KwIcsy+u/3axCWPUcoz3g0pApbGO -pfsu5Ptr/xMtYjLRXbEcH9Byqx/LrBvD2upwNnlfMtgWIlg/EnZ26Mgardu/NwQq -3fpYv00VWbvBE/B/5p5zmEpA67COFejiwVTsbeN345Ue2mq59DNg6BZmaxKH3Sbq -Kz8= ------END CERTIFICATE REQUEST----- diff --git a/pkg/cmd/grafana/apiserver/testdata/certificates/server.key b/pkg/cmd/grafana/apiserver/testdata/certificates/server.key deleted file mode 100755 index 820abf97e95..00000000000 --- a/pkg/cmd/grafana/apiserver/testdata/certificates/server.key +++ /dev/null @@ -1,52 +0,0 @@ ------BEGIN PRIVATE KEY----- -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 -C+DUGz2rplZQ/4PtNOcz7reeAFvu6A== ------END PRIVATE KEY----- diff --git a/pkg/cmd/grafana/main.go b/pkg/cmd/grafana/main.go index e9003dd078a..5679d272a06 100644 --- a/pkg/cmd/grafana/main.go +++ b/pkg/cmd/grafana/main.go @@ -8,8 +8,9 @@ import ( "github.com/urfave/cli/v2" gcli "github.com/grafana/grafana/pkg/cmd/grafana-cli/commands" - gsrv "github.com/grafana/grafana/pkg/cmd/grafana-server/commands" - "github.com/grafana/grafana/pkg/cmd/grafana/apiserver" + "github.com/grafana/grafana/pkg/cmd/grafana-server/commands" + "github.com/grafana/grafana/pkg/server" + "github.com/grafana/grafana/pkg/services/apiserver/standalone" ) // The following variables cannot be constants, since they can be overridden through the -X link flag @@ -31,7 +32,7 @@ func main() { } func MainApp() *cli.App { - return &cli.App{ + app := &cli.App{ Name: "grafana", Usage: "Grafana server and command line interface", Authors: []*cli.Author{ @@ -43,30 +44,32 @@ func MainApp() *cli.App { Version: version, Commands: []*cli.Command{ gcli.CLICommand(version), - gsrv.ServerCommand(version, commit, enterpriseCommit, buildBranch, buildstamp), - { - // The kubernetes standalone apiserver service runner - Name: "apiserver", - Usage: "run a standalone api service (experimental)", - // Skip parsing flags because the command line is actually managed by cobra - SkipFlagParsing: true, - Action: func(context *cli.Context) error { - // exit here because apiserver handles its own error output - os.Exit(apiserver.RunCLI(gsrv.ServerOptions{ - Version: version, - Commit: commit, - EnterpriseCommit: enterpriseCommit, - BuildBranch: buildBranch, - BuildStamp: buildstamp, - Context: context, - })) - return nil - }, - }, + commands.ServerCommand(version, commit, enterpriseCommit, buildBranch, buildstamp), }, CommandNotFound: cmdNotFound, EnableBashCompletion: true, } + + // Set the global build info + buildInfo := standalone.BuildInfo{ + Version: version, + Commit: commit, + EnterpriseCommit: enterpriseCommit, + BuildBranch: buildBranch, + BuildStamp: buildstamp, + } + commands.SetBuildInfo(buildInfo) + + // Add the enterprise command line to build an api server + f, err := server.InitializeAPIServerFactory() + if err == nil { + cmd := f.GetCLICommand(buildInfo) + if cmd != nil { + app.Commands = append(app.Commands, cmd) + } + } + + return app } func cmdNotFound(c *cli.Context, command string) { diff --git a/pkg/extensions/main.go b/pkg/extensions/main.go index fc46292a84d..98e324f8e5e 100644 --- a/pkg/extensions/main.go +++ b/pkg/extensions/main.go @@ -15,11 +15,6 @@ import ( _ "github.com/go-jose/go-jose/v3" _ "github.com/gobwas/glob" _ "github.com/googleapis/gax-go/v2" - _ "github.com/grafana/dskit/backoff" - _ "github.com/grafana/dskit/flagext" - _ "github.com/grafana/e2e" - _ "github.com/grafana/gofpdf" - _ "github.com/grafana/gomemcache/memcache" _ "github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus" _ "github.com/grpc-ecosystem/go-grpc-middleware/v2" _ "github.com/hashicorp/go-multierror" @@ -29,9 +24,16 @@ import ( _ "github.com/phpdave11/gofpdi" _ "github.com/robfig/cron/v3" _ "github.com/russellhaering/goxmldsig" + _ "github.com/spf13/cobra" // used by the standalone apiserver cli _ "github.com/stretchr/testify/require" _ "golang.org/x/time/rate" _ "xorm.io/builder" + + _ "github.com/grafana/dskit/backoff" + _ "github.com/grafana/dskit/flagext" + _ "github.com/grafana/e2e" + _ "github.com/grafana/gofpdf" + _ "github.com/grafana/gomemcache/memcache" ) var IsEnterprise bool = false diff --git a/pkg/server/wire.go b/pkg/server/wire.go index 81574ec9677..f23c64fbb54 100644 --- a/pkg/server/wire.go +++ b/pkg/server/wire.go @@ -465,5 +465,5 @@ func InitializeModuleServer(cfg *setting.Cfg, opts Options, apiOpts api.ServerOp // Initialize the standalone APIServer factory func InitializeAPIServerFactory() (standalone.APIServerFactory, error) { wire.Build(wireExtsStandaloneAPIServerSet) - return &standalone.DummyAPIFactory{}, nil // Wire will replace this with a real interface + return &standalone.NoOpAPIServerFactory{}, nil // Wire will replace this with a real interface } diff --git a/pkg/server/wireexts_oss.go b/pkg/server/wireexts_oss.go index 564aad51ea5..3d97c42aafd 100644 --- a/pkg/server/wireexts_oss.go +++ b/pkg/server/wireexts_oss.go @@ -141,5 +141,5 @@ var wireExtsModuleServerSet = wire.NewSet( ) var wireExtsStandaloneAPIServerSet = wire.NewSet( - standalone.GetDummyAPIFactory, + standalone.ProvideAPIServerFactory, ) diff --git a/pkg/services/apiserver/standalone/factory.go b/pkg/services/apiserver/standalone/factory.go index 76d0a68a1da..c2c5bc9ef92 100644 --- a/pkg/services/apiserver/standalone/factory.go +++ b/pkg/services/apiserver/standalone/factory.go @@ -1,168 +1,28 @@ package standalone import ( - "context" - "fmt" - - "github.com/grafana/grafana-plugin-sdk-go/backend" - "github.com/prometheus/client_golang/prometheus" - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime/schema" - genericapiserver "k8s.io/apiserver/pkg/server" - - "github.com/grafana/grafana/pkg/apis/datasource/v0alpha1" - "github.com/grafana/grafana/pkg/infra/tracing" - "github.com/grafana/grafana/pkg/plugins" - "github.com/grafana/grafana/pkg/registry/apis/datasource" - "github.com/grafana/grafana/pkg/registry/apis/query" - "github.com/grafana/grafana/pkg/registry/apis/query/client" - "github.com/grafana/grafana/pkg/services/accesscontrol/actest" - "github.com/grafana/grafana/pkg/services/apiserver/builder" - "github.com/grafana/grafana/pkg/services/apiserver/endpoints/request" - "github.com/grafana/grafana/pkg/services/apiserver/options" - "github.com/grafana/grafana/pkg/services/featuremgmt" - testdatasource "github.com/grafana/grafana/pkg/tsdb/grafana-testdata-datasource" + "github.com/urfave/cli/v2" ) -type APIServerFactory interface { - // Called before the groups are loaded so any custom command can be registered - GetOptions() options.OptionsProvider - - // Given the flags, what can we produce - GetEnabled(runtime []RuntimeConfig) ([]schema.GroupVersion, error) - - // Optional override for apiserver's BuildHandlerChainFunc, return nil if you want to use the grafana's default chain func defined in pkg/services/apiserver/builder/helper.go - GetBuildHandlerChainFunc(tracer tracing.Tracer, builders []builder.APIGroupBuilder) builder.BuildHandlerChainFunc - - // Make an API server for a given group+version - MakeAPIServer(ctx context.Context, tracer tracing.Tracer, gv schema.GroupVersion) (builder.APIGroupBuilder, error) - - Shutdown() -} - -// Zero dependency provider for testing -func GetDummyAPIFactory() APIServerFactory { - return &DummyAPIFactory{} +type BuildInfo struct { + Version string + Commit string + EnterpriseCommit string + BuildBranch string + BuildStamp string } -type DummyAPIFactory struct{} - -func (p *DummyAPIFactory) GetOptions() options.OptionsProvider { - return nil +type APIServerFactory interface { + GetCLICommand(info BuildInfo) *cli.Command } -func (p *DummyAPIFactory) GetBuildHandlerChainFunc(_ tracing.Tracer, builders []builder.APIGroupBuilder) builder.BuildHandlerChainFunc { - return nil +// NOOP +func ProvideAPIServerFactory() APIServerFactory { + return &NoOpAPIServerFactory{} } -func (p *DummyAPIFactory) GetEnabled(runtime []RuntimeConfig) ([]schema.GroupVersion, error) { - gv := []schema.GroupVersion{} - for _, cfg := range runtime { - if !cfg.Enabled { - return nil, fmt.Errorf("only enabled supported now") - } - if cfg.Group == "all" { - return nil, fmt.Errorf("all not yet supported") - } - gv = append(gv, schema.GroupVersion{Group: cfg.Group, Version: cfg.Version}) - } - return gv, nil -} +type NoOpAPIServerFactory struct{} -func (p *DummyAPIFactory) ApplyTo(config *genericapiserver.RecommendedConfig) error { +func (f *NoOpAPIServerFactory) GetCLICommand(info BuildInfo) *cli.Command { return nil } - -func (p *DummyAPIFactory) MakeAPIServer(_ context.Context, tracer tracing.Tracer, gv schema.GroupVersion) (builder.APIGroupBuilder, error) { - if gv.Version != "v0alpha1" { - return nil, fmt.Errorf("only alpha supported now") - } - - switch gv.Group { - // Only works with testdata - case "query.grafana.app": - return query.NewQueryAPIBuilder( - featuremgmt.WithFeatures(), - &query.CommonDataSourceClientSupplier{ - Client: client.NewTestDataClient(), - }, - client.NewTestDataRegistry(), - nil, // legacy lookup - prometheus.NewRegistry(), // ??? - tracer, - ) - - case "testdata.datasource.grafana.app": - return datasource.NewDataSourceAPIBuilder( - plugins.JSONData{ - ID: "grafana-testdata-datasource", - }, - testdatasource.ProvideService(), // the client - &pluginDatasourceImpl{ - startup: v1.Now(), - }, - &pluginDatasourceImpl{}, // stub - &actest.FakeAccessControl{ExpectedEvaluate: true}, - true, // show query types - ) - } - - return nil, fmt.Errorf("unsupported group") -} - -func (p *DummyAPIFactory) Shutdown() {} - -// Simple stub for standalone datasource testing -type pluginDatasourceImpl struct { - startup v1.Time -} - -var ( - _ datasource.PluginDatasourceProvider = (*pluginDatasourceImpl)(nil) -) - -// Get implements PluginDatasourceProvider. -func (p *pluginDatasourceImpl) Get(ctx context.Context, uid string) (*v0alpha1.DataSourceConnection, error) { - all, err := p.List(ctx) - if err != nil { - return nil, err - } - for idx, v := range all.Items { - if v.Name == uid { - return &all.Items[idx], nil - } - } - return nil, fmt.Errorf("not found") -} - -// List implements PluginConfigProvider. -func (p *pluginDatasourceImpl) List(ctx context.Context) (*v0alpha1.DataSourceConnectionList, error) { - info, err := request.NamespaceInfoFrom(ctx, true) - if err != nil { - return nil, err - } - - return &v0alpha1.DataSourceConnectionList{ - TypeMeta: v0alpha1.GenericConnectionResourceInfo.TypeMeta(), - Items: []v0alpha1.DataSourceConnection{ - { - ObjectMeta: v1.ObjectMeta{ - Name: "PD8C576611E62080A", - Namespace: info.Value, // the raw namespace value - CreationTimestamp: p.startup, - }, - Title: "gdev-testdata", - }, - }, - }, nil -} - -// PluginContextForDataSource implements PluginConfigProvider. -func (*pluginDatasourceImpl) GetInstanceSettings(ctx context.Context, uid string) (*backend.DataSourceInstanceSettings, error) { - return &backend.DataSourceInstanceSettings{}, nil -} - -// PluginContextWrapper -func (*pluginDatasourceImpl) PluginContextForDataSource(ctx context.Context, datasourceSettings *backend.DataSourceInstanceSettings) (backend.PluginContext, error) { - return backend.PluginContext{DataSourceInstanceSettings: datasourceSettings}, nil -}