replicatedhq / troubleshoot

Preflight Checks and Support Bundles Framework for Kubernetes Applications
https://troubleshoot.sh
Apache License 2.0
545 stars 94 forks source link

Is there a better way to give hints about parse/format errors? #1436

Open dexhorthy opened 10 months ago

dexhorthy commented 10 months ago

Describe the rationale for the suggested feature.

Right now, simple YAML errors like missing an indent result in nonexistent analyzer errors.

Screenshot 2024-01-28 at 6 25 37 PM

Describe the feature

I picked up some code and ran support-bundle, only to find that It output nonexistent analyzer

The code in the file is

        - distribution:
          outcomes:
            - pass:
                when: "== kurl"
                message: kurl is a supported platform
            - pass:
                when: "== gke"
                message: GKE is a supported platform

but should be

        - distribution:
            outcomes:
              - pass:
                  when: "== kurl"
                  message: kurl is a supported platform
              - pass:
                  when: "== gke"
                  message: GKE is a supported platform

Proposal: Detect likely format errors To whatever extent we can, which may be "not much", try to hint that this may be a yaml/parse error when the body of an analyzer evaluates to null.

A proposed error message might look like

Could not parse an analyzer at index $N. Please ensure the object key is a valid analyzer type and parameters are indented as children of the analyzer type name. See $DOCS_LINK for more information.

Screenshot 2024-01-28 at 6 21 22 PM

Proposal: Strict format requirements it seems like the YAML parser that consumes the list element evaluates to distribution = nil and then just drops the outcomes block on the floor since it can't be unmarshalled onto any known struct field of type Analyze. Y'all could consider failing or warning whenever unrecognized fields are provided, but this has some backwards-compatibility issues and probably needs some kind of strict-parsing opt-in. For example in the actual failed analyzer UI, could show something like

Parse error at index $N (or line: $N) -- one or more unknown object fields will be ignored: [outcomes].

Describe alternatives you've considered

I suppose I could make fewer yaml mistakes 😅

Additional context

banjoh commented 7 months ago

I believe this is related to https://github.com/replicatedhq/troubleshoot/issues/1312

banjoh commented 5 months ago

Analysis will fail if the analyser given is deemed non-existent, say it has been misspelled, or the binary executing the analysis is old and does not include the implementation of the given analyser