1
0
Fork 0
mirror of https://github.com/kyverno/kyverno.git synced 2025-03-06 07:57:07 +00:00
kyverno/cmd/cli/kubectl-kyverno/commands/apply/table.go
Charles-Edouard Brétéché 901efbc74c
fix: cli output improvements (#8398)
Signed-off-by: Charles-Edouard Brétéché <charles.edouard@nirmata.com>
2023-09-14 11:45:18 +00:00

56 lines
2 KiB
Go

package apply
import (
"io"
"github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/output/color"
"github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/output/table"
"github.com/kyverno/kyverno/cmd/cli/kubectl-kyverno/policy/annotations"
engineapi "github.com/kyverno/kyverno/pkg/engine/api"
)
func printTable(out io.Writer, compact, auditWarn bool, engineResponses ...engineapi.EngineResponse) {
var resultsTable table.Table
id := 1
for _, engineResponse := range engineResponses {
policy := engineResponse.Policy()
policyName := policy.GetName()
policyNamespace := policy.GetNamespace()
scored := annotations.Scored(policy.GetAnnotations())
resourceKind := engineResponse.Resource.GetKind()
resourceNamespace := engineResponse.Resource.GetNamespace()
resourceName := engineResponse.Resource.GetName()
for _, ruleResponse := range engineResponse.PolicyResponse.Rules {
var row table.Row
row.ID = id
id++
row.Policy = color.Policy(policyNamespace, policyName)
if policy.GetType() == engineapi.KyvernoPolicyType {
row.Rule = color.Rule(ruleResponse.Name())
}
row.Resource = color.Resource(resourceKind, resourceNamespace, resourceName)
if ruleResponse.Status() == engineapi.RuleStatusPass {
row.Result = color.ResultPass()
} else if ruleResponse.Status() == engineapi.RuleStatusFail {
if !scored {
row.Result = color.ResultWarn()
} else if auditWarn && engineResponse.GetValidationFailureAction().Audit() {
row.Result = color.ResultWarn()
} else {
row.Result = color.ResultFail()
}
} else if ruleResponse.Status() == engineapi.RuleStatusWarn {
row.Result = color.ResultWarn()
} else if ruleResponse.Status() == engineapi.RuleStatusError {
row.Result = color.ResultError()
} else if ruleResponse.Status() == engineapi.RuleStatusSkip {
row.Result = color.ResultSkip()
}
row.Message = ruleResponse.Message()
resultsTable.Add(row)
}
}
printer := table.NewTablePrinter(out)
printer.Print(resultsTable.Rows(compact))
}