Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
20 changes: 20 additions & 0 deletions python/nova-understack/ironic_understack/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,26 @@ def setup_conf():
help="Controls if Nova should inject storage IPs to config drive.",
default=True,
),
cfg.StrOpt(
"storage_target_a_prefix",
help="Storage Networking Target Prefix A-side",
default="100.127.0.0/17",
),
cfg.StrOpt(
"storage_target_b_prefix",
help="Storage Networking Target Prefix B-side",
default="100.127.128.0/17",
),
cfg.StrOpt(
"storage_client_a_prefix",
help="Storage Networking Client Prefix A-side",
default="100.126.0.0/17",
),
cfg.StrOpt(
"storage_client_b_prefix",
help="Storage Networking Client Prefix B-side",
default="100.126.128.0/17",
),
]
cfg.CONF.register_group(grp)
cfg.CONF.register_opts(opts, group=grp)
Expand Down
17 changes: 13 additions & 4 deletions python/nova-understack/ironic_understack/nautobot_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from uuid import UUID

import requests
from oslo_config import cfg


@dataclass
Expand All @@ -30,12 +31,20 @@ def address(self) -> str:
@property
def target_network(self) -> ipaddress.IPv4Network:
"""Returns the respective target-side network."""
third_octet = self.address.split(".")[2]
if third_octet not in ["0", "128"]:
nova_us_cfg = cfg.CONF.nova_understack
target_a_prefix = ipaddress.IPv4Network(nova_us_cfg.storage_target_a_prefix)
target_b_prefix = ipaddress.IPv4Network(nova_us_cfg.storage_target_b_prefix)
client_a_prefix = ipaddress.IPv4Network(nova_us_cfg.storage_client_a_prefix)
client_b_prefix = ipaddress.IPv4Network(nova_us_cfg.storage_client_b_prefix)

if self.interface.ip in client_a_prefix:
return target_a_prefix
elif self.interface.ip in client_b_prefix:
return target_b_prefix
else:
raise ValueError(
f"Cannot determine the target-side network from {self.address}"
f"Cannot determine the target-side network from {self.interface}"
)
return ipaddress.IPv4Network(f"100.127.{third_octet}.0/24")

@property
def address_with_prefix(self) -> str:
Expand Down
20 changes: 10 additions & 10 deletions python/nova-understack/tests/test_nautobot_client.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,16 +54,16 @@ def test_network_property(self):

def test_target_network_octet_0(self):
"""Test target_network calculation for third octet 0."""
ip = IPAddress.from_address_string("100.127.0.10/24")
ip = IPAddress.from_address_string("100.126.0.10/24")

expected_network = ipaddress.IPv4Network("100.127.0.0/24")
expected_network = ipaddress.IPv4Network("100.127.0.0/17")
assert ip.target_network == expected_network

def test_target_network_octet_128(self):
"""Test target_network calculation for third octet 128."""
ip = IPAddress.from_address_string("100.127.128.10/24")
ip = IPAddress.from_address_string("100.126.128.10/24")

expected_network = ipaddress.IPv4Network("100.127.128.0/24")
expected_network = ipaddress.IPv4Network("100.127.128.0/17")
assert ip.target_network == expected_network

def test_target_network_invalid_octet(self):
Expand Down Expand Up @@ -230,7 +230,7 @@ def test_as_openstack_network(self):
"""Test OpenStack network generation."""
# Create IP with specific values for predictable gateway calculation
ip_assignment = IPAddressAssignment(
ip_address=IPAddress.from_address_string("100.127.0.10/24")
ip_address=IPAddress.from_address_string("100.126.0.10/24")
)
interface = Interface(
id="interface-1",
Expand All @@ -247,13 +247,13 @@ def test_as_openstack_network(self):
"id": "network-for-if5",
"type": "ipv4",
"link": "tap-stor-5",
"ip_address": "100.127.0.10",
"ip_address": "100.126.0.10",
"netmask": "255.255.255.0",
"routes": [
{
"network": "100.127.0.0",
"netmask": "255.255.255.0",
"gateway": "100.127.0.1",
"netmask": "255.255.128.0",
"gateway": "100.126.0.1",
}
],
"network_id": "test-network-id",
Expand Down Expand Up @@ -554,7 +554,7 @@ def test_generate_network_config_all_interfaces(self):
mac_address="aa:bb:cc:dd:ee:ff",
ip_address_assignments=[
IPAddressAssignment(
ip_address=IPAddress.from_address_string("100.127.0.10/24")
ip_address=IPAddress.from_address_string("100.126.0.10/24")
)
],
),
Expand All @@ -564,7 +564,7 @@ def test_generate_network_config_all_interfaces(self):
ip_address_assignments=[
IPAddressAssignment(
ip_address=IPAddress.from_address_string(
"100.127.128.10/24"
"100.126.128.10/24"
)
)
],
Expand Down
Loading