{% extends "base.html" %} {% from "_macros.html" import no_data with context %} {% block title %}CIDR Planner{% endblock %} {% macro status_badge(v) -%} {% if v.status == 'rejected' %}rejected {% elif v.status == 'warning' %}check warnings {% else %}no conflict found{% endif %} {%- endmacro %} {% macro reasons(v) -%} {% if v.rejects or v.warnings %}
{{ text }}
Read-only: everything below is computed from the latest snapshot and proposed as Terraform to copy. Nothing is created in AWS.
{% if error %}| Block | Subnet / free | AZ | Addresses |
|---|---|---|---|
| {{ g.cidr }} | {% if g.free %}free{% else %}{{ g.subnet_id }} {{ g.name }}{% endif %} | {{ g.az }} | {{ 2 ** (32 - (g.cidr.split('/')[1] | int)) }} |
| Size | Aligned blocks free | First free |
|---|---|---|
| /{{ p }} | {{ n }} | {{ first or '–' }} |
Largest free block: {{ m.largest_free or 'none' }}. Fragmentation = 1 − largest contiguous free range ÷ total free (0: all free space in one range; near 1: scattered small gaps).
fits All {{ plan.fit.placements | length }} subnet(s) fit in the free space.
{% else %}doesn't fit {{ plan.fit.missing | length }} of {{ plan.fit.placements | length }} subnet(s) don't fit → need a secondary CIDR (at least /{{ plan.fit.needed_prefix() }}).
{% endif %}| Requested | AZ | Proposed CIDR | Usable IPs |
|---|---|---|---|
| /{{ p.request.prefix }} | {{ p.request.az }} | {{ p.cidr or '' }}{% if not p.cidr %}no room{% endif %} | {{ p.usable }} |
| Requested | AZ | Proposed CIDR |
|---|---|---|
| /{{ p.request.prefix }} | {{ p.request.az }} | {{ p.cidr }} |
No conflict-free secondary CIDR candidate found automatically; check one below.
{% endif %}