dnswizdocs

IPAM

IPAM is dnswiz’s IP address management module. It models your address space as typed objects (blocks, networks, addresses), tracks what’s used and what’s free, and hands out the next free subnet or host on request. Because it lives in the same account as your DNS, an address with a hostname can publish its own record.

IPAM is a paid add-on. It’s available from the Pro plan up; enable it per workspace under Settings once your plan allows it. Everything below is scoped to your tenant and isolated in the database like the rest of dnswiz.

The hierarchy

VRF                     routing/addressing context (a default one exists)
  └─ Block              address-space planning (10.0.0.0/8)
       └─ Block         sub-blocks nest by CIDR containment (10.1.0.0/16)
            └─ Network  an assignable subnet (10.1.5.0/24, has a gateway)
                 └─ IP  a single host (10.1.5.10, has a hostname + status)

Containment is enforced on the server: a network always sits inside its block, an address inside its network, and nothing overlaps a sibling.

Allocating

You rarely type the next subnet by hand. Ask for it.

Tree operations

The address plan changes over time, so the block tree is editable in place:

Views

Each level has three views:

Locate searches the whole tree by CIDR, address, or name and jumps you straight to the match. You can also bulk-add or import addresses into a network.

DNS that publishes itself

This is the part a standalone IPAM can’t do. Link a network to one of your DNS zones, and any address in it that has a hostname publishes its own A/AAAA record into that zone. Assign vip to 10.1.6.20 in a network linked to corp.example.com, and vip.corp.example.com resolves. Change the address, the record follows. The link is forward today (address to DNS record); it does not generate reverse PTR zones.

As code

Everything above is in the Terraform provider. Blocks nest by containment, networks place three ways (explicit, next-free-in-block, next-free-from-a-tagged-pool), and addresses either pin an IP or take the next free host.

# Blocks self-organize by CIDR containment.
resource "dnswiz_ipam_block" "corp" {
  cidr   = "10.0.0.0/8"
  name   = "corp"
  origin = "rfc1918"
}

resource "dnswiz_ipam_block" "east" {
  cidr = "10.1.0.0/16"
  name = "us-east"
  # placed under corp automatically
}

# Next free /24 from ANY block tagged region:eu-central-1.
resource "dnswiz_ipam_network" "eu" {
  parent_tags   = ["region:eu-central-1"]
  prefix_length = 24
  name          = "eu-app"
  tags          = ["env:prod", "team:platform"]
}

# Next free host in that network. Concurrency-safe, allocated on create.
resource "dnswiz_ipam_ip_address" "vip" {
  network_id = dnswiz_ipam_network.eu.id
  hostname   = "vip"
}

Read-only peeks are data sources:

data "dnswiz_ipam_available_subnet" "next" {
  block_id      = dnswiz_ipam_block.east.id
  prefix_length = 24
}

output "next_free_subnet" {
  value = data.dnswiz_ipam_available_subnet.next.cidr
}

Resources: dnswiz_ipam_block, dnswiz_ipam_network, dnswiz_ipam_ip_address. Data sources: dnswiz_ipam_available_subnet, dnswiz_ipam_available_ip. Full reference on the Terraform Registry.