Skip to content
This repository was archived by the owner on Nov 14, 2024. It is now read-only.
10 changes: 4 additions & 6 deletions internal/checks/kube/rbac.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
43 changes: 34 additions & 9 deletions internal/cmd/check/kubernetes/kubernetes.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package kubernetes

import (
"fmt"
"os"

"github.com/Masterminds/semver/v3"
Expand Down Expand Up @@ -120,30 +121,54 @@ 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),
)

kubeChecker := kube.NewKubernetesChecker(
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)
}
Expand Down
3 changes: 3 additions & 0 deletions internal/cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
2 changes: 1 addition & 1 deletion internal/humanwriter/human.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}