mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-11 21:10:29 +01:00
Primary key must be an integer when adding primary_ip4 via API PATCH #2084
Closed
opened 2025-12-29 17:22:07 +01:00 by adam
·
4 comments
No Branch/Tag Specified
main
update-changelog-comments-docs
feature-removal-issue-type
20911-dropdown
20239-plugin-menu-classes-mutable-state
21097-graphql-id-lookups
feature
fix_module_substitution
20923-dcim-templates
20044-elevation-stuck-lightmode
feature-ip-prefix-link
v4.5-beta1-release
20068-import-moduletype-attrs
20766-fix-german-translation-code-literals
20378-del-script
7604-filter-modifiers-v3
circuit-swap
12318-case-insensitive-uniqueness
20637-improve-device-q-filter
20660-script-load
19724-graphql
20614-update-ruff
14884-script
02496-max-page
19720-macaddress-interface-generic-relation
19408-circuit-terminations-export-templates
20203-openapi-check
fix-19669-api-image-download
7604-filter-modifiers
19275-fixes-interface-bulk-edit
fix-17794-get_field_value_return_list
11507-show-aggregate-and-rir-on-api
9583-add_column_specific_search_field_to_tables
v4.5.0
v4.4.10
v4.4.9
v4.5.0-beta1
v4.4.8
v4.4.7
v4.4.6
v4.4.5
v4.4.4
v4.4.3
v4.4.2
v4.4.1
v4.4.0
v4.3.7
v4.4.0-beta1
v4.3.6
v4.3.5
v4.3.4
v4.3.3
v4.3.2
v4.3.1
v4.3.0
v4.2.9
v4.3.0-beta2
v4.2.8
v4.3.0-beta1
v4.2.7
v4.2.6
v4.2.5
v4.2.4
v4.2.3
v4.2.2
v4.2.1
v4.2.0
v4.1.11
v4.1.10
v4.1.9
v4.1.8
v4.2-beta1
v4.1.7
v4.1.6
v4.1.5
v4.1.4
v4.1.3
v4.1.2
v4.1.1
v4.1.0
v4.0.11
v4.0.10
v4.0.9
v4.1-beta1
v4.0.8
v4.0.7
v4.0.6
v4.0.5
v4.0.3
v4.0.2
v4.0.1
v4.0.0
v3.7.8
v3.7.7
v4.0-beta2
v3.7.6
v3.7.5
v4.0-beta1
v3.7.4
v3.7.3
v3.7.2
v3.7.1
v3.7.0
v3.6.9
v3.6.8
v3.6.7
v3.7-beta1
v3.6.6
v3.6.5
v3.6.4
v3.6.3
v3.6.2
v3.6.1
v3.6.0
v3.5.9
v3.6-beta2
v3.5.8
v3.6-beta1
v3.5.7
v3.5.6
v3.5.5
v3.5.4
v3.5.3
v3.5.2
v3.5.1
v3.5.0
v3.4.10
v3.4.9
v3.5-beta2
v3.4.8
v3.5-beta1
v3.4.7
v3.4.6
v3.4.5
v3.4.4
v3.4.3
v3.4.2
v3.4.1
v3.4.0
v3.3.10
v3.3.9
v3.4-beta1
v3.3.8
v3.3.7
v3.3.6
v3.3.5
v3.3.4
v3.3.3
v3.3.2
v3.3.1
v3.3.0
v3.2.9
v3.2.8
v3.3-beta2
v3.2.7
v3.3-beta1
v3.2.6
v3.2.5
v3.2.4
v3.2.3
v3.2.2
v3.2.1
v3.2.0
v3.1.11
v3.1.10
v3.2-beta2
v3.1.9
v3.2-beta1
v3.1.8
v3.1.7
v3.1.6
v3.1.5
v3.1.4
v3.1.3
v3.1.2
v3.1.1
v3.1.0
v3.0.12
v3.0.11
v3.0.10
v3.1-beta1
v3.0.9
v3.0.8
v3.0.7
v3.0.6
v3.0.5
v3.0.4
v3.0.3
v3.0.2
v3.0.1
v3.0.0
v2.11.12
v3.0-beta2
v2.11.11
v2.11.10
v3.0-beta1
v2.11.9
v2.11.8
v2.11.7
v2.11.6
v2.11.5
v2.11.4
v2.11.3
v2.11.2
v2.11.1
v2.11.0
v2.10.10
v2.10.9
v2.11-beta1
v2.10.8
v2.10.7
v2.10.6
v2.10.5
v2.10.4
v2.10.3
v2.10.2
v2.10.1
v2.10.0
v2.9.11
v2.10-beta2
v2.9.10
v2.10-beta1
v2.9.9
v2.9.8
v2.9.7
v2.9.6
v2.9.5
v2.9.4
v2.9.3
v2.9.2
v2.9.1
v2.9.0
v2.9-beta2
v2.8.9
v2.9-beta1
v2.8.8
v2.8.7
v2.8.6
v2.8.5
v2.8.4
v2.8.3
v2.8.2
v2.8.1
v2.8.0
v2.7.12
v2.7.11
v2.7.10
v2.7.9
v2.7.8
v2.7.7
v2.7.6
v2.7.5
v2.7.4
v2.7.3
v2.7.2
v2.7.1
v2.7.0
v2.6.12
v2.6.11
v2.6.10
v2.6.9
v2.7-beta1
Solcon-2020-01-06
v2.6.8
v2.6.7
v2.6.6
v2.6.5
v2.6.4
v2.6.3
v2.6.2
v2.6.1
v2.6.0
v2.5.13
v2.5.12
v2.6-beta1
v2.5.11
v2.5.10
v2.5.9
v2.5.8
v2.5.7
v2.5.6
v2.5.5
v2.5.4
v2.5.3
v2.5.2
v2.5.1
v2.5.0
v2.4.9
v2.5-beta2
v2.4.8
v2.5-beta1
v2.4.7
v2.4.6
v2.4.5
v2.4.4
v2.4.3
v2.4.2
v2.4.1
v2.4.0
v2.3.7
v2.4-beta1
v2.3.6
v2.3.5
v2.3.4
v2.3.3
v2.3.2
v2.3.1
v2.3.0
v2.2.10
v2.3-beta2
v2.2.9
v2.3-beta1
v2.2.8
v2.2.7
v2.2.6
v2.2.5
v2.2.4
v2.2.3
v2.2.2
v2.2.1
v2.2.0
v2.1.6
v2.2-beta2
v2.1.5
v2.2-beta1
v2.1.4
v2.1.3
v2.1.2
v2.1.1
v2.1.0
v2.0.10
v2.1-beta1
v2.0.9
v2.0.8
v2.0.7
v2.0.6
v2.0.5
v2.0.4
v2.0.3
v2.0.2
v2.0.1
v2.0.0
v2.0-beta3
v1.9.6
v1.9.5
v2.0-beta2
v1.9.4-r1
v1.9.3
v2.0-beta1
v1.9.2
v1.9.1
v1.9.0-r1
v1.8.4
v1.8.3
v1.8.2
v1.8.1
v1.8.0
v1.7.3
v1.7.2-r1
v1.7.1
v1.7.0
v1.6.3
v1.6.2-r1
v1.6.1-r1
1.6.1
v1.6.0
v1.5.2
v1.5.1
v1.5.0
v1.4.2
v1.4.1
v1.4.0
v1.3.2
v1.3.1
v1.3.0
v1.2.2
v1.2.1
v1.2.0
v1.1.0
v1.0.7-r1
v1.0.7
v1.0.6
v1.0.5
v1.0.4
v1.0.3-r1
v1.0.3
1.0.0
Labels
Clear labels
beta
breaking change
complexity: high
complexity: low
complexity: medium
needs milestone
netbox
pending closure
plugin candidate
pull-request
severity: high
severity: low
severity: medium
status: accepted
status: backlog
status: blocked
status: duplicate
status: needs owner
status: needs triage
status: revisions needed
status: under review
topic: GraphQL
topic: Internationalization
topic: OpenAPI
topic: UI/UX
topic: cabling
topic: event rules
topic: htmx navigation
topic: industrialization
topic: migrations
topic: plugins
topic: scripts
topic: templating
topic: testing
type: bug
type: deprecation
type: documentation
type: feature
type: housekeeping
type: translation
Mirrored from GitHub Pull Request
No Label
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/netbox#2084
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @LoneSnowMonkey on GitHub (Nov 3, 2018).
Thanks much for this project in general, and specifically adding webhooks recently. I'm accomplishing an amazing amount of documentation and automation as a result.
I have a workflow in AWX that is creating new vmware machines based of entries made in Netbox. It's awesome and everything so far has worked. That is for one catch: If I try to take the newly assigned IP address and update netbox to make it the Primary IP the task fails. Depending on what I do either my PATCH results in a 200 with no difference in state, or I get a Primary key must be an integer error. This seems very similar to issue 2310. I have replicated the issue in both my dev and production systems.
I'm not much of a coder, and new to interacting with devs over Github, so apologies if I missed something.
Environment
Steps to Reproduce
curl -X PATCH -H "Authorization: Token APITOKEN" -H "Content-Type: application/json" -H "Accept: application/json; indent=4" https://NETBOX HOST/api/virtualization/virtual-machines/<vmid>/ --data '{"primary_ip4": {"address": "x.x.x.x/24"}}'Expected Behavior
Netbox vm record is updated with the specified Primary IP.
Observed Behavior
{ "primary_ip4": [ "Primary key must be an integer" ] }I have gone as far as adding it through the web UI, doing a GET and pasting the exact text into my PATCH after reseting that field, to no effect. Based off of another earlier issue I saw, if there is a Primary IP set and I PATCH with primary_ip4 as null it does in fact remove the record. FWIW.
@lampwins commented on GitHub (Nov 3, 2018):
I see a couple of problems in your workflow. You have not mentioned anything about the IP address being assigned to an Interface on the Virtual Machine beforehand. NetBox models the real world, and IP addresses are assigned to Interfaces, not Virtual Machines. NetBox provides a functionality to choose one IPv4 and/or IPv6 address from those assigned to VM interfaces, as the "primary" of the VM. That said, your flow should be this:
IPAddressyou wish to set to theprimary_ip4of the VMKeeping in mind that for step 4 to work, the IP address object must already exist and be assigned to an Interface of the VM.
From the API docs:
So the error is nudging you in the right direction. Instead of passing a nested representation of the
IPAddressas you have in your example, you need to instead pass just the integer ID of that object, like so:{"primary_ip4": 735}.@LoneSnowMonkey commented on GitHub (Nov 3, 2018):
Yes, I understand this, that is exactly the workflow I am using. The last job that runs when creating a VM is to take the id or address (tried both) for the newly allocated IP address and try an PATCH the VM's primary_ip with it:
curl -X PATCH -H "Authorization: Token API TOKEN" -H "Content-Type: application/json" -H "Accept: application/json; indent=4" https://NETBOXHOST/api/virtualization/irtual-machines/<vmid>/ --data '{"primary_ip4": {"id": 1220}}'{ "primary_ip4": [ "Primary key must be an integer" ] }Using an integer is what makes sense to me. The reason I chose to mention address specifically in this message is the API documentation in /api/docs for doing this has a red star next to address, meaning "required". I figured it was wrong, but I'd rather error on the side of what the docs say, than what I 'think' is right. I have tried either and both, same outcome. As mentioned earlier I even added the Primary IP into my VM via the web GUI, did a GET, and pasted that completed block into my PATCH after removing the Primary IP, to no effect. In that case I get a 200, the full config for the VM dumped out and primary_ip and primary_ip4 are all still null.
The fact that this exact problem (I haven't tried for values other than primary_ip) was reported as bugged and fixed in August gave a feeling that it might be the same sort of thing. I'll try and load the version reported as patched and see if I have the same outcome.
@lampwins commented on GitHub (Nov 3, 2018):
You are still not making the request correctly, do not nest the ID in any way.
This:
'{"primary_ip4": {"id": 1220}}'should simply be this:'{"primary_ip4": 1220}'Again, the error is telling you what is wrong. It is asking for an integer, but you are providing a dictionary.
The response from a GET request often makes use of nested serializers. Those nested serializers are never used in write actions.
@LoneSnowMonkey commented on GitHub (Nov 3, 2018):
Thanks lampwins, you're right. I'm new to dealing with APIs so in the past I have relied on pulling information for clues on how to format it to be summited. It also matched up with how I read the api/docs printout. I missed that there was no dict in your response. It worked just fine as a direct value. I appreciate your prompt response, as well as the the efforts of yourself and everyone else who contributes to Netbox. It's helping me realize a lot of things I've had in mind for the past year in my office.
Thanks and have a great weekend.