diff --git a/internal/checks/kube/rbac.go b/internal/checks/kube/rbac.go index f7c09a7..f34c030 100644 --- a/internal/checks/kube/rbac.go +++ b/internal/checks/kube/rbac.go @@ -159,29 +159,27 @@ func (k *KubernetesChecker) checkRBACFallback(ctx context.Context) []*api.CheckR results := make([]*api.CheckResult, 0) for req, reqVerbs := range k.reqs.ResourceRequirements { - resName := fmt.Sprintf("%s-%s", checkName, req.Resource) if err := k.checkOneRBACSSAR(ctx, authClient, req, reqVerbs); err != nil { summary := fmt.Sprintf("missing permissions on resource %s: %s", req.Resource, err) - results = append(results, api.ErrorResult(resName, summary, err)) + results = append(results, api.ErrorResult(checkName, summary, err)) continue } summary := fmt.Sprintf("%s: can %s", req.Resource, strings.Join(reqVerbs, ", ")) - results = append(results, api.PassResult(resName, summary)) + results = append(results, api.PassResult(checkName, summary)) } // TODO: delete this when the enterprise-helm role no longer requests resources on things // that don't exist. for req, reqVerbs := range k.reqs.RoleOnlyResourceRequirements { - resName := fmt.Sprintf("%s-%s", checkName, req.Resource) if err := k.checkOneRBACSSAR(ctx, authClient, req, reqVerbs); err != nil { summary := fmt.Sprintf("missing permissions on resource %s: %s", req.Resource, err) - results = append(results, api.ErrorResult(resName, summary, err)) + results = append(results, api.ErrorResult(checkName, summary, err)) continue } summary := fmt.Sprintf("%s: can %s", req.Resource, strings.Join(reqVerbs, ", ")) - results = append(results, api.PassResult(resName, summary)) + results = append(results, api.PassResult(checkName, summary)) } return results diff --git a/internal/cmd/check/kubernetes/kubernetes.go b/internal/cmd/check/kubernetes/kubernetes.go index 24a5e9e..8c5d527 100644 --- a/internal/cmd/check/kubernetes/kubernetes.go +++ b/internal/cmd/check/kubernetes/kubernetes.go @@ -1,6 +1,7 @@ package kubernetes import ( + "fmt" "os" "github.com/Masterminds/semver/v3" @@ -120,19 +121,31 @@ func run(cmd *cobra.Command, _ []string) error { currentContext.Namespace = "default" } - log.Info(cmd.Context(), "kubernetes config:", - slog.F("context", rawConfig.CurrentContext), - slog.F("cluster", currentContext.Cluster), - slog.F("namespace", currentContext.Namespace), - slog.F("authinfo", currentContext.AuthInfo), - ) + colorFlag, err := cmd.Flags().GetBool("output-colors") + if err != nil { + return xerrors.Errorf("parse output-color: %w", err) + } + + asciiFlag, err := cmd.Flags().GetBool("output-ascii") + if err != nil { + return xerrors.Errorf("parse output-ascii: %w", err) + } - hw := humanwriter.New(os.Stdout) + outputMode := humanwriter.OutputModeEmoji + if asciiFlag { + outputMode = humanwriter.OutputModeText + } + + var writer api.ResultWriter = humanwriter.New( + os.Stdout, + humanwriter.WithColors(colorFlag), + humanwriter.WithMode(outputMode), + ) localChecker := local.NewChecker( local.WithLogger(log), local.WithCoderVersion(cv), - local.WithWriter(hw), + local.WithWriter(writer), local.WithTarget(api.CheckTargetKubernetes), ) @@ -140,10 +153,22 @@ func run(cmd *cobra.Command, _ []string) error { clientset, kube.WithLogger(log), kube.WithCoderVersion(cv), - kube.WithWriter(hw), + kube.WithWriter(writer), kube.WithNamespace(currentContext.Namespace), ) + _ = writer.WriteResult(&api.CheckResult{ + Name: "kubernetes current-context", + State: api.StateInfo, + Summary: fmt.Sprintf("kube context: %q", rawConfig.CurrentContext), + Details: map[string]interface{}{ + "current-context": rawConfig.CurrentContext, + "cluster": currentContext.Cluster, + "namespace": currentContext.Namespace, + "user": currentContext.AuthInfo, + }, + }) + if err := localChecker.Validate(); err != nil { return xerrors.Errorf("failed to validate local checks: %w", err) } diff --git a/internal/cmd/root.go b/internal/cmd/root.go index 13d2af4..c9e1f2a 100644 --- a/internal/cmd/root.go +++ b/internal/cmd/root.go @@ -19,5 +19,8 @@ func NewDefaultDoctorCommand() *cobra.Command { check.NewCommand(), ) + rootCmd.PersistentFlags().Bool("output-colors", true, "enable colorful output") + rootCmd.PersistentFlags().Bool("output-ascii", false, "output ascii only") + return rootCmd } diff --git a/internal/humanwriter/human.go b/internal/humanwriter/human.go index 67ed422..85f24fd 100644 --- a/internal/humanwriter/human.go +++ b/internal/humanwriter/human.go @@ -82,6 +82,6 @@ func (w *HumanResultWriter) WriteResult(result *api.CheckResult) error { return err } - _, err = fmt.Fprintln(w.out, prefix, result.Summary) + _, err = fmt.Fprintf(w.out, "%s %s\n", prefix, result.Summary) return err }