Skip to content
This repository was archived by the owner on Nov 14, 2024. It is now read-only.

feat: enable pretty output #16

Merged
merged 8 commits into from
Sep 14, 2021
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
1 change: 1 addition & 0 deletions internal/cmd/check/check.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ func NewCommand() *cobra.Command {

checkCmd.PersistentFlags().Int("verbosity", 0, "log level verbosity")
checkCmd.PersistentFlags().String("coder-version", "1.21", "version of Coder")
checkCmd.PersistentFlags().Bool("no-color", false, "disable colorful output")

checkCmd.AddCommand(
kubernetes.NewCommand(),
Expand Down
43 changes: 36 additions & 7 deletions internal/cmd/check/kubernetes/kubernetes.go
Original file line number Diff line number Diff line change
Expand Up @@ -120,15 +120,20 @@ 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),
noColorFlag, err := cmd.Flags().GetBool("no-color")
if err != nil {
return xerrors.Errorf("parse no-color: %w", err)
}
outputMode := humanwriter.OutputModeEmoji
if noColorFlag {
outputMode = humanwriter.OutputModeText
}
hw := humanwriter.New(
os.Stdout,
humanwriter.WithColors(!noColorFlag),
humanwriter.WithMode(outputMode),
)

hw := humanwriter.New(os.Stdout)

localChecker := local.NewChecker(
local.WithLogger(log),
local.WithCoderVersion(cv),
Expand All @@ -144,6 +149,30 @@ func run(cmd *cobra.Command, _ []string) error {
kube.WithNamespace(currentContext.Namespace),
)

_ = hw.WriteResult(&api.CheckResult{
Name: "kubernetes current-context",
State: api.StateInfo,
Summary: rawConfig.CurrentContext,
})

_ = hw.WriteResult(&api.CheckResult{
Name: "kubernetes cluster",
State: api.StateInfo,
Summary: currentContext.Cluster,
})

_ = hw.WriteResult(&api.CheckResult{
Name: "kubernetes namespace",
State: api.StateInfo,
Summary: currentContext.Namespace,
})

_ = hw.WriteResult(&api.CheckResult{
Name: "kubernetes authinfo",
State: api.StateInfo,
Summary: currentContext.AuthInfo,
})

if err := localChecker.Validate(); err != nil {
return xerrors.Errorf("failed to validate local checks: %w", err)
}
Expand Down
7 changes: 6 additions & 1 deletion internal/humanwriter/human.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,11 @@ func (w *HumanResultWriter) WriteResult(result *api.CheckResult) error {
return err
}

_, err = fmt.Fprintln(w.out, prefix, result.Summary)
namePrefix := ""
if result.Name != "" {
namePrefix = fmt.Sprintf(" [%s]", result.Name)
}

_, err = fmt.Fprintf(w.out, "%s%s %s\n", prefix, namePrefix, result.Summary)
return err
}
4 changes: 2 additions & 2 deletions internal/humanwriter/human_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,13 @@ func TestHumanWriter(t *testing.T) {
var expected string
switch mode {
case humanwriter.OutputModeEmoji:
expected = "👍 human writer check test\n" +
expected = "👍 [check-test] human writer check test\n" +
"🔔 summary\n" +
"👎 failed message\n" +
"⚠️ \n" +
"⏩ skipped check\n"
case humanwriter.OutputModeText:
expected = "PASS human writer check test\n" +
expected = "PASS [check-test] human writer check test\n" +
"INFO summary\n" +
"FAIL failed message\n" +
"WARN \n" +
Expand Down