Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Next Available IP Address #1246

Closed
MTecknology opened this issue Jun 5, 2017 · 18 comments
Closed

Next Available IP Address #1246

MTecknology opened this issue Jun 5, 2017 · 18 comments
Milestone

Comments

@MTecknology
Copy link

Feature Request: Support for requesting next available IP address in a subnet/vlan/prefix

When adding a system, it'd be nice to have some way to specify a vlan/prefix for an address and have the next available IP address pulled from that pool.

My goal is to use netbox in an "inventory defined infrastructure" project and finding a sane way to allocate IP addresses is something I assumed would already be a feature, but I'm not finding it anywhere.

@jeremystretch
Copy link
Member

This FR needs more detail. How would you implement this feature? How would you go about retrieving the next available IP?

@MTecknology
Copy link
Author

Apparently it's a less common feature than I thought.
This! http://api.device42.com/#suggest-next-available-subnet

Request an IP address from a prefix, know that this IP address is used by nothing else and has been reserved for use, assign it to a network interface. It'd be nice to be able to request an address from a prefix when creating the device, but that may be pushing the scope of netbox design.

@jeremystretch
Copy link
Member

Do you just want an API endpoint? We should be able to do something like /api/ipam/prefixes/<pk>/available-ips/ to retrieve all available IPs from a prefix. The client could pick however many they need from the list.

Or do you also want this to be integrated with the web UI? If so, how do you envision this being implemented? E.g. a button on the "create IP" view, a separate view, or something else?

@cimnine
Copy link
Contributor

cimnine commented Jun 7, 2017

It should be possible to limit the amount of available ips returned by such an available-ips endpoint, as it could potentially be huge for IPv6 prefixes.

@jeremystretch
Copy link
Member

@cimnine All object lists returned via the API are paginated (to 50 objects per page by default). You can also add ?limit=1 to retrieve a single object.

@MTecknology
Copy link
Author

MTecknology commented Jun 7, 2017 via email

@jeremystretch
Copy link
Member

Ok, so let's say we build /api/ipam/prefixes/<pk>/available-ips/.

A GET request would return a paginated list of available IPs (calculated with consideration to is_pool).

A POST request would accept a subset of the fields of the normal IPAddress serializer (tenant, status, interface, etc.). The address field would be taken from the first available IP, and vrf would be inherited from the parent prefix. The response would include the full serialization of the created object.

PUT and DELETE operations would of course be unavailable.

Seems like it should be feasible. The only catch is what to do about IPv6. Is there any practical use for this function for IPv6, given that a /64 is effectively infinite in size? It might be prudent to simply disable this feature for IPv6 prefixes (returning a human-friendly error for GETs and POSTs).

@MTecknology
Copy link
Author

MTecknology commented Jun 7, 2017 via email

@jeremystretch
Copy link
Member

A little gold plating... Maybe also include a start/stop within the prefix range? I recall seeing that feature request buried on a thread somewhere for a different project. They wanted to be able to avoid getting addresses from special spaces within the subnet, like avoiding .8x for routing/switching devices. Granted, the same thing can be achieved by marking address in that space as reserved.

I'd like to keep the automatic provisioning logic simple. If there are special rules about where to pick the IP from, the user will have to request a specific IP. It will still be possible to obtain a list of available IPs first.

However, if I wasn't using ipv4, I'd want the same thing available for ipv6. The v6 pool sizes are virtually limitless, but the things we can do in those spaces is also pretty much limitless. I can think of a number of situations where it would be preferable to have ipv6 come from inventory management, most of them involve datacenter design.

The biggest issue is conforming to the API's pagination structure, which includes a total count of objects found. An empty /64 would contain 2^64 objects, all except a few of which we don't care about. I'll have to see if we can easily "fake" the numbers instead of actually creating a list of a bajillion IPs in memory.

@MTecknology
Copy link
Author

MTecknology commented Jun 8, 2017 via email

@jeremystretch jeremystretch modified the milestone: v2.1 Jun 9, 2017
@mlmingle
Copy link

It would be nice to have an "Available" option added to the Status of IP Addresses. That way you could add the entire subnet and set the status Available on the IPs that are not in use.

@jeremystretch
Copy link
Member

@mlmingle Any address not defined in NetBox is assumed to be available.

@mlmingle
Copy link

I see that if the IP is not listed, but it would be nice if you could list it in the IP addresses Tab under the prefix and just give it a status of Available. Then you could see what is available and what is used and could go there to find whats next.

@jeremystretch
Copy link
Member

@mlmingle The web UI already does that:

available_ips

@mlmingle
Copy link

mlmingle commented Jun 14, 2017 via email

@kasimon
Copy link

kasimon commented Jun 14, 2017

Especially for IPv6, having a start, stop (default to first/last ip of an subnet) and max_amount parameter, which would default to a globally set maximum value and can only be set to a lower value that that maximum, would make quite some sense.

@jeremystretch
Copy link
Member

Finished implementing this in 30d1605. Pretty happy with how it turned out.

@MTecknology
Copy link
Author

I'm excited to give it a try (next week, I hope)!

lampwins pushed a commit to lampwins/netbox that referenced this issue Oct 13, 2017
lampwins pushed a commit to lampwins/netbox that referenced this issue Oct 13, 2017
Marlinc added a commit to Marlinc/go-netbox that referenced this issue Jul 26, 2019
The schema provided by NetBox for getting a next IP address is
incorrect, which means generated API clients are also incorrect. I
have reported this issue in netbox-community/netbox#1246.
@lock lock bot locked as resolved and limited conversation to collaborators Jan 18, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants