Skip to main content

Allocate IP addresses

IP address pools (CoreIPAddressPool) dynamically allocate individual IP addresses from source prefixes.

Prerequisites​

  • A running Infrahub instance
Schema used in this guide

The examples on this page use the following schema nodes. Adapt the type names to match your own schema.

nodes:
- name: IPPrefix
namespace: Ipam
inherit_from:
- "BuiltinIPPrefix"

- name: IPAddress
namespace: Ipam
inherit_from:
- "BuiltinIPAddress"

- name: Device
namespace: Infra
human_friendly_id: ["name__value"]
attributes:
- name: name
kind: Text
unique: true
relationships:
- name: primary_ip
peer: IpamIPAddress
kind: Attribute
cardinality: one

Step 1: Create an IP prefix object​

Create the IP prefix that serves as the allocation source:

Navigate to IPAM → IP Prefixes and create a new prefix with:

  • Prefix: 10.100.0.0/24
  • Member Type: address

Creating prefix 10.100.0 via the Web Interface

Step 2: Create the IP address pool​

Create a CoreIPAddressPool Resource Manager:

Navigate to Object Management → Resource Managers and create a new IP Address Pool with:

  • Name: My IP address pool
  • Default Address Type: IpamIPAddress
  • Default Prefix Length: 24
  • Resources: Select the 10.100.0.0/24 prefix
  • IP Namespace: default

Creating IP address pool via the Web Interface

Step 3: Allocate IP addresses​

You can allocate IP addresses in two ways: direct allocation or allocation during node creation.

Direct allocation​

Allocate an IP address directly from the pool:

Create an IP address. Next to the Address field, click the pool button, labeled "select a pool", and choose My IP address pool, then save. Infrahub allocates the next available address from the pool and creates the IP address with it.

Infrahub allocates a new address on each save. To get the same address back when a script or a Generator runs again, use the GraphQL method with an identifier.

success

You have created an IP address record from the pool!

Allocation during node creation​

Allocate an IP address when creating a device:

Navigate to Devices → Add Device. Next to the Primary IP Address field, click the pool button, labeled "select a pool", and choose your resource pool.

Device creation via the Web Interface - Before Device creation via the Web Interface - After

success

The device is created with primary IP address allocated from the pool!

Allocate on a branch​

When you allocate from the pool on a branch, Infrahub uses the pool's IP namespace and source prefixes as they exist on that branch. Infrahub skips a source prefix that does not exist on the branch, for example a prefix created on another branch that is not merged yet.

Infrahub does not allocate an address that any branch still holds, unless that branch is being deleted. For example, if you delete an allocated address on the default branch after you create a branch, Infrahub does not allocate that address again while the branch still holds it. See Releasing an allocated resource.

The allocation fails with one of these errors when the branch does not have what the pool needs:

  • Pool '<pool>' cannot allocate on branch '<branch>': its namespace '<namespace>' does not exist on this branch.
    • The pool's IP namespace does not exist on the branch, for example because it was created on another branch that is not merged yet, or deleted on this branch.
    • When the pool no longer links to a namespace, for example because the branch that held the namespace was deleted, the message does not include the name of the namespace: Pool '<pool>' cannot allocate on branch '<branch>': its namespace does not exist on this branch.
    • Allocate on a branch where the namespace exists. If the namespace was created on another branch, merge that branch and rebase this one first.
  • Pool '<pool>' cannot allocate on branch '<branch>': none of its resources exist on this branch.
    • None of the pool's source prefixes exist on the branch.
    • Allocate on a branch where at least one source prefix exists, or add a source prefix that exists on this branch to the pool.

When the source prefixes exist on the branch but none has a free address left, the allocation fails with There are no more addresses available in this pool.

Next​