thatmattlove / hyperglass

hyperglass is the network looking glass that tries to make the internet better.
https://hyperglass.dev
BSD 3-Clause Clear License
629 stars 96 forks source link

Directive examples in documentation does not work as expected #280

Open AliMickey opened 2 months ago

AliMickey commented 2 months ago

Deployment Type

Docker

Version

v2.0.4

Steps to Reproduce

  1. Copy contents of example from documentation into /etc/hyperglass/directives.yaml
  2. Start container and check logs

One example:

show-bgp-summary:
    name: BGP Summary
    rules:
        - condition: null
          command: show bgp all summary
    field: null

Expected Behavior

The directive should be parsed correctly and not throw errors.

Observed Behavior

Error shown. Defining/undefining the directive on the device does not matter, same error.

Have tried many different custom directive configs but one way or another it throws a validation error.

Configuration

No response

Devices

No response

Logs

╭─────────────────────────────── locals ────────────────────────────────╮    │
│ │ data = {                                                              │    │
│ │        │   'id': 'show-bgp-summary',                                  │    │
│ │        │   'name': 'BGP Summary',                                     │    │
│ │        │   'rules': [                                                 │    │
│ │        │   │   {                                                      │    │
│ │        │   │   │   'condition': None,                                 │    │
│ │        │   │   │   'command': 'show bgp all summary'                  │    │
│ │        │   │   }                                                      │    │
│ │        │   ],                                                         │    │
│ │        │   'field': None                                              │    │
│ │        }                                                              │    │
│ │ self = Directive()                                                    │    │
│ ╰───────────────────────────────────────────────────────────────────────╯    │
╰──────────────────────────────────────────────────────────────────────────────╯
ValidationError: 3 validation errors for Directive
rules.condition
  Input should be a valid string [type=string_type, input_value=None, 
input_type=NoneType]
    For further information visit https://errors.pydantic.dev/2.8/v/string_type
field.Text
  Input should be a valid dictionary or instance of Text [type=model_type, 
input_value=None, input_type=NoneType]
    For further information visit https://errors.pydantic.dev/2.8/v/model_type
field.Select
  Input should be a valid dictionary or instance of Select [type=model_type, 
input_value=None, input_type=NoneType]
    For further information visit https://errors.pydantic.dev/2.8/v/model_type
arhippa11 commented 2 months ago

I am also receiving the same error.

gondimcodes commented 2 months ago

Me too.

enkrispi commented 2 months ago

This works for me

show-ip-bgp-summary:
    name: Show BGP Neighbor Summary
    rules:
        - condition: ""
          commands: show ip bgp summary
    field:
        description: ""
        options:
        - value: ""

for FRR

show-ip-bgp-summary:
    name: Show BGP Neighbor Summary
    rules:
        - condition: ""
          commands: vtysh -c "show ip bgp summary"
    field:
        description: ""
        options:
        - value: ""
gondimcodes commented 1 month ago

The way you did it worked. The documentation has errors because look: you used "commands" and in the documentation it says "command". Another detail is how the "field" is defined. It only worked defining it the way you did.