netdevopsbr / netbox-proxbox

Netbox Plugin for integration between Proxmox and Netbox
Apache License 2.0
338 stars 50 forks source link

name=iface['name'] - string indices must be integers #120

Open Langlais115 opened 1 year ago

Langlais115 commented 1 year ago

I have an error when running a Full update

<class 'TypeError'>

string indices must be integers

Python version: 3.9.2
NetBox version: 3.5.1
2023-05-31 13:32:28,388 urllib3.connectionpool DEBUG: http://localhost:8001 "GET /api/dcim/interfaces/?device_id=3&name=eno16&limit=0 HTTP/1.1" 200 1174
2023-05-31 13:32:28,390 django.request ERROR: Internal Server Error: /plugins/proxbox/full_update/
Traceback (most recent call last):
  File "/opt/netbox-3.5.1/venv/lib/python3.9/site-packages/django/core/handlers/exception.py", line 56, in inner
    response = get_response(request)
  File "/opt/netbox-3.5.1/venv/lib/python3.9/site-packages/django/core/handlers/base.py", line 197, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "/opt/netbox-3.5.1/venv/lib/python3.9/site-packages/django/views/generic/base.py", line 103, in view
    return self.dispatch(request, *args, **kwargs)
  File "/opt/netbox-3.5.1/venv/lib/python3.9/site-packages/django/contrib/auth/mixins.py", line 109, in dispatch
    return super().dispatch(request, *args, **kwargs)
  File "/opt/netbox-3.5.1/venv/lib/python3.9/site-packages/django/views/generic/base.py", line 142, in dispatch
    return handler(request, *args, **kwargs)
  File "/opt/netbox-3.5.1/venv/lib/python3.9/site-packages/netbox_proxbox/views.py", line 93, in get
    "virtualmachines_table": VMUpdateResult(proxbox_api.update.all(remove_unused = True)["virtualmachines"]),
  File "/opt/netbox-3.5.1/venv/lib/python3.9/site-packages/netbox_proxbox/proxbox_api/update.py", line 434, in all
    node_updated = nodes(proxmox_json = px_node_each, proxmox_cluster = proxmox_cluster)
  File "/opt/netbox-3.5.1/venv/lib/python3.9/site-packages/netbox_proxbox/proxbox_api/update.py", line 392, in nodes
    full_update = node_full_update(netbox_node, proxmox_json, proxmox_cluster)
  File "/opt/netbox-3.5.1/venv/lib/python3.9/site-packages/netbox_proxbox/proxbox_api/update.py", line 61, in node_full_update
    interfaces_updated = updates.node.interfaces(netbox_node, proxmox_json)
  File "/opt/netbox-3.5.1/venv/lib/python3.9/site-packages/netbox_proxbox/proxbox_api/updates/node.py", line 219, in interfaces
    ntb_iface = list(nb.dcim.interfaces.filter(device_id=netbox_node.id, name=iface['name']))
TypeError: string indices must be integers

If I execute the query using postman, I obtain this:

{
    "count": 1,
    "next": null,
    "previous": null,
    "results": [
        {
            "id": 16,
            "url": "https://netbox/api/dcim/interfaces/16/",
            "display": "eno16",
            "device": {
                "id": 3,
                "url": "https://netbox/api/dcim/devices/3/",
                "display": "proxmox01 (CPFDKQ2)",
                "name": "proxmox01"
            },
            "vdcs": [],
            "module": null,
            "name": "eno16",
            "label": "",
            "type": {
                "value": "1000base-t",
                "label": "1000BASE-T (1GE)"
            },
            "enabled": true,
            "parent": null,
            "bridge": null,
            "lag": null,
            "mtu": 1500,
            "mac_address": "50:9A:4C:91:55:D8",
            "speed": null,
            "duplex": {
                "value": "full",
                "label": "Full"
            },
            "wwn": null,
            "mgmt_only": false,
            "description": "",
            "mode": null,
            "rf_role": null,
            "rf_channel": null,
            "poe_mode": null,
            "poe_type": null,
            "rf_channel_frequency": null,
            "rf_channel_width": null,
            "tx_power": null,
            "untagged_vlan": null,
            "tagged_vlans": [],
            "mark_connected": false,
            "cable": null,
            "cable_end": "",
            "wireless_link": null,
            "link_peers": [],
            "link_peers_type": null,
            "wireless_lans": [],
            "vrf": null,
            "l2vpn_termination": null,
            "connected_endpoints": null,
            "connected_endpoints_type": null,
            "connected_endpoints_reachable": null,
            "tags": [],
            "custom_fields": {},
            "created": "2023-05-31T13:27:56.412858Z",
            "last_updated": "2023-05-31T13:27:56.412922Z",
            "count_ipaddresses": 0,
            "count_fhrp_groups": 0,
            "_occupied": false
        }
    ]
}

As we can see the name of the interface is not an integer but a string, and as far as I'm concerned, it should be a string.

emersonfelipesp commented 1 year ago

@Langlais115 I'm aware of this problem and want to fix all these data-types bugs and validation using FastAPI framework. I assigned this to v0.0.6.