mirror of
https://github.com/netbox-community/netbox.git
synced 2026-01-11 21:10:29 +01:00
Add the ability to query all available subnets of type (e.g /27) under a prefix via the api #1734
Closed
opened 2025-12-29 16:34:49 +01:00 by adam
·
9 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
Milestone
No items
No Milestone
Projects
Clear projects
No project
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: starred/netbox#1734
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 @StevenArmstrong on GitHub (May 20, 2018).
Issue type
[ ] Feature request
Description
After defining a top layer prefix of CIDR range /16, i want to be able to issue an api request to give me all available /27 ( as an example) subnets under the prefix based on what is available currently. Initially this will give /27 with all available permutations but not return them if they are being used. I could then create a /27 child subnet automatically with this information and set it to in use.
My use-case is I want to use netbox as a service of record for subnets, this will allow me to feed unique ranges to my automation scripts and request it from netbox.
This feature request would mean my automation can programmatically call netbox, retrieve an available subnet and then use this information to create a unique subnet in the cloud provider.
At the moment you have similar functionality using "/api/ipam/prefixes/<pk>/available-ips/"
I would like to see something similar for subnets so as an example "/api/ipam/prefixes/<pk>/<suffix>/available-subnets/" and be able to pass <suffix> as a /27 or /29 etc and based on the prefix <pk> return a list of what is available as a /27 or /29 range in terms of subnets.
@jeremystretch commented on GitHub (May 21, 2018):
There's also the
available-prefixesendpoint beneath a Prefix. This lists all available prefixes within the parent. For example, if you have allocated the first five /27s within a parent /24, this endpoint will list the remaining /27 and /26 as available. This endpoint also allows for automatic creation of new prefixes within the parent, with an optionalprefix_lengthparameter.We could extend this endpoint to accept a
prefix_lengthGET parameter as well. The response would ostensibly include only the available prefixes meeting a certain size. So for example, say you have:A request for
GET /api/ipam/prefixes/<parent_pk>/available-prefixes/?prefix_length=27would return:Note that the first two prefixes are not aggregated as a single /26.
@StevenArmstrong commented on GitHub (May 22, 2018):
The available-prefixes gives me what I want in terms of creation, thank you, I just couldn't easily find the feature in the docs. For reference:
The additional get request, you proposed would be perfect, as it will allow me to query if any addresses of a particular type are left on the parent, instead of having to error handle the failed post request.
Instead I can query /27 from the parent. It returns a response listing the available ones and I can check the message and only then if correct response proceed with the subsequent POST request. It will also allow me to monitor when prefix allocations are getting low on available addresses.
@MarinBuljan commented on GitHub (Dec 7, 2018):
Hi Jeremy,
sorry, probably this is already addressed question but we are having an issue.
Since we (as company) are considering Netbox to be primary tool for address management, we need to have automated prefix allocation from it using API
So what we need is to create prefix and then pull specific prefixes form that.
For example. /29.
So how can I make this in Netbox?
example
Define prefix 192.168.100.0/24 as parent prefix. I want to split this range to /29 subnets (how it could be done?)
How to get next available /29 from this range?
If I provision it manually, then I dont see it anymore in list when doing
http://172.25.12.67/api/ipam/prefixes/?mask_length=29
Its look ling like this range then is occupied.
Anyway, can you please advice how it should be done?
Thanks in advance.
BR,
Marin
@TheNetworkGuy commented on GitHub (Dec 10, 2018):
Query the API like @StevenArmstrong does in his example. You can write a similair script in Python (using the requests library) or something in Ansible to fully automate a deployment (using the uri module.) Test your setup first using the curl on the command line.
To get the ID of the parent prefix, first query the API for the ID of the subnet. You'll get a JSON output so make sure you can convert the data / use the JSON path to extract the ID. The API url for this is http://IP/api/ipam/prefixes/?q=192.168.100.0/24 (parent prefix)
curl -X POST -H "Authorization: Token " -H "Content-Type: application/json" -H "Accept: application/json; indent=4" http://localhost:8000/api/ipam/prefixes/10153/available-prefixes/ --data '[
{"prefix_length": 27}
]'
@DanSheps commented on GitHub (Dec 10, 2018):
@jeremystretch The two things I would add to that is have it check for things like "DHCP pool" and don't traverse into children of a DHCP pool.
Perhaps a filter to limit the "levels" it traverses, for example:
So a query depth of 1 against /25 might return:
But a query depth of 2 against /25 might return:
@MarinBuljan commented on GitHub (Dec 10, 2018):
Hi,
thanks for tips.
Just started using it.
Do you know how to occupy certain subnet inside parent so that it will not be listed in available subnets?
For example, I want to request /29 range and somehow mark it so in next api call, this subnet will not be available anymore.
Tried all statuses...reserved, active, container but it does not help.
Noticed that it does not lists all subnets if at least 1 ip address is used inside certain subnet.
Then it list next free /x subnet.
Cheers.
Marin
@netvyper commented on GitHub (Jan 28, 2020):
Looking into using netbox as a 'source of truth' for automating our network configuration & provisioning. I'd really like to see this feature implemented, so that I can query & choose an appropriate prefix, prior to actually allocating it at the end of the process assuming all the other steps are sucessful.
@stale[bot] commented on GitHub (Sep 7, 2020):
This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. NetBox is governed by a small group of core maintainers which means not all opened issues may receive direct feedback. Please see our contributing guide.
@stale[bot] commented on GitHub (Sep 23, 2020):
This issue has been automatically closed due to lack of activity. In an effort to reduce noise, please do not comment any further. Note that the core maintainers may elect to reopen this issue at a later date if deemed necessary.