diff --git a/cmd/create_stack.go b/cmd/create_stack.go new file mode 100644 index 0000000..3edd951 --- /dev/null +++ b/cmd/create_stack.go @@ -0,0 +1,79 @@ +// Copyright 2024 The prometheus-operator 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 +// +// 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. + +package cmd + +import ( + "context" + "fmt" + + "github.com/google/go-github/v62/github" + "github.com/prometheus-operator/poctl/internal/create" + "github.com/prometheus-operator/poctl/internal/k8sutil" + "github.com/prometheus-operator/poctl/internal/log" + "github.com/spf13/cobra" +) + +var ( + stackCmd = &cobra.Command{ + Use: "stack", + Short: "create a stack of Prometheus Operator resources.", + Long: `create a stack of Prometheus Operator resources.`, + RunE: runStack, + } +) + +func init() { + createCmd.AddCommand(stackCmd) + + // Here you will define your flags and configuration settings. + + // Cobra supports Persistent Flags which will work for this command + // and all subcommands, e.g.: + // stackCmd.PersistentFlags().String("foo", "", "A help for foo") + + // Cobra supports local flags which will only run when this command + // is called directly, e.g.: + // stackCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") +} + +func runStack(cmd *cobra.Command, _ []string) error { + logger, err := log.NewLogger() + if err != nil { + return fmt.Errorf("error while creating logger: %v", err) + } + + version, err := cmd.Flags().GetString("version") + if err != nil { + logger.Error("error while getting version flag", "error", err) + return err + } + + logger.Info(version) + + clientSets, err := k8sutil.GetClientSets(kubeconfig) + if err != nil { + logger.Error("error while getting client sets", "err", err) + return err + } + + gitHubClient := github.NewClient(nil) + + if err := create.RunCreateStack(context.Background(), logger, clientSets, gitHubClient, version); err != nil { + logger.Error("error while creating Prometheus Operator stack", "err", err) + } + + logger.Info("Prometheus Operator stack created successfully.") + return nil +} diff --git a/cmd/stack.go b/internal/create/stack.go similarity index 80% rename from cmd/stack.go rename to internal/create/stack.go index a4449f5..6e4d8b3 100644 --- a/cmd/stack.go +++ b/internal/create/stack.go @@ -12,7 +12,7 @@ // See the License for the specific language governing permissions and // limitations under the License. -package cmd +package create import ( "context" @@ -22,97 +22,51 @@ import ( "github.com/google/go-github/v62/github" "github.com/prometheus-operator/poctl/internal/builder" "github.com/prometheus-operator/poctl/internal/k8sutil" - "github.com/prometheus-operator/poctl/internal/log" - "github.com/spf13/cobra" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/apis/meta/v1/unstructured" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/runtime/schema" ) -var ( - stackCmd = &cobra.Command{ - Use: "stack", - Short: "create a stack of Prometheus Operator resources.", - Long: `create a stack of Prometheus Operator resources.`, - RunE: runStack, - } - - crds = []string{ - "alertmanagers", - "alertmanagerconfigs", - "podmonitors", - "probes", - "prometheusagents", - "prometheuses", - "prometheusrules", - "scrapeconfigs", - "servicemonitors", - "thanosrulers", - } -) - -func init() { - createCmd.AddCommand(stackCmd) - - // Here you will define your flags and configuration settings. - - // Cobra supports Persistent Flags which will work for this command - // and all subcommands, e.g.: - // stackCmd.PersistentFlags().String("foo", "", "A help for foo") - - // Cobra supports local flags which will only run when this command - // is called directly, e.g.: - // stackCmd.Flags().BoolP("toggle", "t", false, "Help message for toggle") -} - -func runStack(cmd *cobra.Command, _ []string) error { - logger, err := log.NewLogger() - if err != nil { - return fmt.Errorf("error while creating logger: %v", err) - } - - version, err := cmd.Flags().GetString("version") - if err != nil { - logger.Error("error while getting version flag", "error", err) - return err - } - - logger.Info(version) - - clientSets, err := k8sutil.GetClientSets(kubeconfig) - if err != nil { - logger.Error("error while getting client sets", "err", err) - return err - } - - gitHubClient := github.NewClient(nil) - - if err := installCRDs(cmd.Context(), logger, version, clientSets, gitHubClient); err != nil { +func RunCreateStack(ctx context.Context, logger *slog.Logger, clientSets *k8sutil.ClientSets, gitHubClient *github.Client, version string) error { + if err := installCRDs(ctx, logger, version, clientSets, gitHubClient); err != nil { logger.Error("error while installing CRDs", "error", err) return err } - if err := createPrometheusOperator(cmd.Context(), clientSets, metav1.NamespaceDefault, version); err != nil { + if err := createPrometheusOperator(ctx, clientSets, metav1.NamespaceDefault, version); err != nil { logger.Error("error while creating Prometheus Operator", "error", err) return err } - if err := createPrometheus(cmd.Context(), clientSets, metav1.NamespaceDefault); err != nil { + if err := createPrometheus(ctx, clientSets, metav1.NamespaceDefault); err != nil { logger.Error("error while creating Prometheus", "error", err) return err } - if err := createAlertManager(cmd.Context(), clientSets, metav1.NamespaceDefault); err != nil { + if err := createAlertManager(ctx, clientSets, metav1.NamespaceDefault); err != nil { logger.Error("error while creating AlertManager", "error", err) return err } - - logger.Info("Prometheus Operator stack created successfully.") return nil } +var ( + crds = []string{ + "alertmanagers", + "alertmanagerconfigs", + "podmonitors", + "probes", + "prometheusagents", + "prometheuses", + "prometheusrules", + "scrapeconfigs", + "servicemonitors", + "thanosrulers", + } +) + func installCRDs( ctx context.Context, logger *slog.Logger,