netbox-community / go-netbox

The official Go API client for Netbox IPAM and DCIM service.
Other
194 stars 144 forks source link

Dcim.DcimInterfacesList tries to unmarshall number into string #100

Closed DSpeichert closed 3 years ago

DSpeichert commented 3 years ago

When running:

params := dcim.NewDcimInterfacesListParamsWithTimeout(time.Second * 10)
params.SetMacAddress(&hwaddr)
ifList, err := netboxClient4.Dcim.DcimInterfacesList(params, nil)

We get:

json: cannot unmarshal number into Go struct field Interface.results.connected_endpoint of type string

I wasn't able to pinpoint what call exactly gets that (yet) because running the API call via e.g. curl does return a string value for that field ("connected_endpoint_type": "dcim.interface",).

However, the model does expect a string and does not get one somehow.

awlx commented 3 years ago

This could you be related to #98 can you give that PR a try @DSpeichert

DSpeichert commented 3 years ago

@awlx I have tried that PR and it didn't quite help.

The problem is this part of swagger.json (it repeats multiple times):

        "connected_endpoint": {
          "title": "Connected endpoint",
          "description": "\nReturn the appropriate serializer for the type of connected object.\n",
          "type": "object",
          "additionalProperties": {
            "type": "string"
          },
          "readOnly": true
        },

which generates simply:

    // Connected endpoint
    //
    //
    // Return the appropriate serializer for the type of connected object.
    //
    // Read Only: true
    ConnectedEndpoint map[string]string `json:"connected_endpoint,omitempty"`

Here's an example of connected_endpoint as part of a response to /api/dcim/interfaces query:

            "connected_endpoint": {
                "id": 57,
                "url": "http://netbox/api/dcim/interfaces/57/",
                "device": {
                    "id": 4,
                    "url": "http://netbox/api/dcim/devices/4/",
                    "name": "tor02",
                    "display_name": "tor02"
                },
                "name": "Ethernet3",
                "cable": 181,
                "connection_status": {
                    "value": true,
                    "label": "Connected"
                }
            },

It fails at id, which is clearly an integer. Likely the swagger spec has to have the whole structure defined.

hensoko commented 3 years ago

I agree with @DSpeichert, PR #98 won't fix his problem.

idefixcert commented 3 years ago

I still get this error: cannot unmarshal number into Go struct field Interface.results.connected_endpoint of type string

How to get rid of it?

idefixcert commented 3 years ago

it looks like there is a fix out there: replace github.com/netbox-community/go-netbox => github.com/stefanhipfel/go-netbox v0.0.0-20200928114340-fcd4119414a4