netbox-community / netbox

The premier source of truth powering network automation. Open source under Apache 2. Try NetBox Cloud free: https://netboxlabs.com/free-netbox-cloud/
http://netboxlabs.com/oss/netbox/
Apache License 2.0
16.28k stars 2.59k forks source link

when editing vlans with the api, vlans without a group are considered as one group, resulting in duplicate-errors #17979

Open oehTie opened 1 week ago

oehTie commented 1 week ago

Deployment Type

Self-hosted

Triage priority

N/A

NetBox Version

v4.1.6

Python Version

3.10

Steps to Reproduce

Using the API, create a vlan without a group, using the api, create a second vlan with the same vlan-id, this works. using the api, create a third vlan with a different vlan-id, also without a group, this works. using the api, change the first vlan to have the same vlan id as the second one, still without a group. This results in an error that the vlan is duplicate.

Expected Behavior

as the vlans have no group, duplicates should be allowed.

When the same steps to reproduce are executed using the Netbox Gui, it works as expected.

Observed Behavior

Error: The fields group, vid must make a unique set.

oehTie commented 1 week ago

the exact api call:

curl -X 'PUT' \ 'http://localhost:8000/api/ipam/vlans/4060/' \ -H 'accept: application/json' \ -H 'Authorization: Token *****' \ -H 'Content-Type: application/json' \ -H 'X-CSRFTOKEN: ****' \ -d '{"comments":"","description":"","group":null,"interfaces":[],"name":"VLAN-3","role":3,"status":"active","vid":1000}'

response:

Error: Bad request: { "non_field_errors": [ "The fields group, vid must make a unique set."   ] }

jeremystretch commented 6 days ago

Please edit your post above to include the specific values and REST API query used in the creation of each object. This is necessary for someone to attempt to reproduce the behavior.

bctiemann commented 6 days ago

Maybe a duplicate of (or at least related to) https://github.com/netbox-community/netbox/issues/17810 ?

jorritberendsen-forefreedom commented 5 days ago

@jeremystretch here is the API call flow that will result in the error:

POST ungrouped VLAN with vid 1000 -> Success with ID 1

curl -X 'POST' \
  'http://localhost:8000/api/ipam/vlans/' \
  -H 'accept: application/json' \
  -H 'Authorization: Token ***' \
  -H 'Content-Type: application/json' \
  -H 'X-CSRFTOKEN: ***' \
  -d '{"comments":"","description":"","group":null,"name":"VLAN-1","role":1,"status":"active","vid":1000}'

POST ungrouped VLAN with vid 1000 -> Success with ID 2

curl -X 'POST' \
  'http://localhost:8000/api/ipam/vlans/' \
  -H 'accept: application/json' \
  -H 'Authorization: Token ***' \
  -H 'Content-Type: application/json' \
  -H 'X-CSRFTOKEN: ***' \
  -d '{"comments":"","description":"","group":null,"name":"VLAN-2","role":1,"status":"active","vid":1000}'

POST ungrouped VLAN with vid 1001 -> Success with ID 3

curl -X 'POST' \
  'http://localhost:8000/api/ipam/vlans/' \
  -H 'accept: application/json' \
  -H 'Authorization: Token ***' \
  -H 'Content-Type: application/json' \
  -H 'X-CSRFTOKEN: ***' \
  -d '{"comments":"","description":"","group":null,"name":"VLAN-3","role":1,"status":"active","vid":1001}'

PUT VLAN with ID 1 to update VID to 1001 -> Error: Bad request: {"non_field_errors": ["The fields group, vid must make a unique set."]}

curl -X 'PUT' \
  'http://localhost:8000/api/ipam/vlans/1/' \
  -H 'accept: application/json' \
  -H 'Authorization: Token ***' \
  -H 'Content-Type: application/json' \
  -H 'X-CSRFTOKEN: ***' \
  -d '{"comments":"","description":"","group":null,"name":"VLAN-1","role":1,"status":"active","vid":1001}'

PATCH VLAN with ID 1 to update VID to 1001 -> Error: Bad request: {"non_field_errors": ["The fields group, vid must make a unique set."]}

curl -X 'PATCH' \
  'http://localhost:8000/api/ipam/vlans/1/' \
  -H 'accept: application/json' \
  -H 'Authorization: Token ***' \
  -H 'Content-Type: application/json' \
  -H 'X-CSRFTOKEN: ***' \
  -d '{"vid":1001}'