in cmd/harp/internal/cmd/cso_validate.go [66:124]
func runCSOValidate(cmd *cobra.Command, _ []string) {
ctx, cancel := cmdutil.Context(cmd.Context(), "harp-cso-validate", conf.Debug.Enable, conf.Instrumentation.Logs.Level)
defer cancel()
// Check if we have to read external path
if csoValidatePathFrom != "" {
// Force read from stdin
paths, errReader := cmdutil.LineReader(csoValidatePathFrom)
if errReader != nil {
log.For(ctx).Fatal("unable to read paths from stdin", zap.Error(errReader))
}
// Add to paths
csoValidatePaths = append(csoValidatePaths, paths...)
}
// Check path length
if len(csoValidatePaths) == 0 {
log.For(ctx).Fatal("unable to validate empty paths")
}
res := map[string]csoValidationResponse{}
// Validate each path
for _, p := range csoValidatePaths {
err := csov1.Validate(p)
// Error format
var errMessage string
if err != nil {
errMessage = err.Error()
}
// Skip result according to parameters
if csoValidateDropCompliant && err == nil {
continue
}
if csoValidateDropNonCompliant && err != nil {
continue
}
// Add to result
res[p] = csoValidationResponse{
Compliant: err == nil,
Error: errMessage,
}
}
if !csoValidatePathOnly {
// Dump as json
if err := json.NewEncoder(os.Stdout).Encode(res); err != nil {
log.For(ctx).Fatal("unable to encode validation response", zap.Error(err))
}
} else {
for k := range res {
fmt.Fprintf(os.Stdout, "%s\n", k)
}
}
}