Skip to content

Commit 3b9a622

Browse files
authored
Merge pull request #1364 from rackerlabs/fix-nova-understack-prefix
fix(nova-understack): fix up network prefix handling
2 parents e4af786 + 56580af commit 3b9a622

File tree

3 files changed

+43
-14
lines changed

3 files changed

+43
-14
lines changed

python/nova-understack/ironic_understack/conf.py

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,26 @@ def setup_conf():
2727
help="Controls if Nova should inject storage IPs to config drive.",
2828
default=True,
2929
),
30+
cfg.StrOpt(
31+
"storage_target_a_prefix",
32+
help="Storage Networking Target Prefix A-side",
33+
default="100.127.0.0/17",
34+
),
35+
cfg.StrOpt(
36+
"storage_target_b_prefix",
37+
help="Storage Networking Target Prefix B-side",
38+
default="100.127.128.0/17",
39+
),
40+
cfg.StrOpt(
41+
"storage_client_a_prefix",
42+
help="Storage Networking Client Prefix A-side",
43+
default="100.126.0.0/17",
44+
),
45+
cfg.StrOpt(
46+
"storage_client_b_prefix",
47+
help="Storage Networking Client Prefix B-side",
48+
default="100.126.128.0/17",
49+
),
3050
]
3151
cfg.CONF.register_group(grp)
3252
cfg.CONF.register_opts(opts, group=grp)

python/nova-understack/ironic_understack/nautobot_client.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from uuid import UUID
55

66
import requests
7+
from oslo_config import cfg
78

89

910
@dataclass
@@ -30,12 +31,20 @@ def address(self) -> str:
3031
@property
3132
def target_network(self) -> ipaddress.IPv4Network:
3233
"""Returns the respective target-side network."""
33-
third_octet = self.address.split(".")[2]
34-
if third_octet not in ["0", "128"]:
34+
nova_us_cfg = cfg.CONF.nova_understack
35+
target_a_prefix = ipaddress.IPv4Network(nova_us_cfg.storage_target_a_prefix)
36+
target_b_prefix = ipaddress.IPv4Network(nova_us_cfg.storage_target_b_prefix)
37+
client_a_prefix = ipaddress.IPv4Network(nova_us_cfg.storage_client_a_prefix)
38+
client_b_prefix = ipaddress.IPv4Network(nova_us_cfg.storage_client_b_prefix)
39+
40+
if self.interface.ip in client_a_prefix:
41+
return target_a_prefix
42+
elif self.interface.ip in client_b_prefix:
43+
return target_b_prefix
44+
else:
3545
raise ValueError(
36-
f"Cannot determine the target-side network from {self.address}"
46+
f"Cannot determine the target-side network from {self.interface}"
3747
)
38-
return ipaddress.IPv4Network(f"100.127.{third_octet}.0/24")
3948

4049
@property
4150
def address_with_prefix(self) -> str:

python/nova-understack/tests/test_nautobot_client.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -54,16 +54,16 @@ def test_network_property(self):
5454

5555
def test_target_network_octet_0(self):
5656
"""Test target_network calculation for third octet 0."""
57-
ip = IPAddress.from_address_string("100.127.0.10/24")
57+
ip = IPAddress.from_address_string("100.126.0.10/24")
5858

59-
expected_network = ipaddress.IPv4Network("100.127.0.0/24")
59+
expected_network = ipaddress.IPv4Network("100.127.0.0/17")
6060
assert ip.target_network == expected_network
6161

6262
def test_target_network_octet_128(self):
6363
"""Test target_network calculation for third octet 128."""
64-
ip = IPAddress.from_address_string("100.127.128.10/24")
64+
ip = IPAddress.from_address_string("100.126.128.10/24")
6565

66-
expected_network = ipaddress.IPv4Network("100.127.128.0/24")
66+
expected_network = ipaddress.IPv4Network("100.127.128.0/17")
6767
assert ip.target_network == expected_network
6868

6969
def test_target_network_invalid_octet(self):
@@ -230,7 +230,7 @@ def test_as_openstack_network(self):
230230
"""Test OpenStack network generation."""
231231
# Create IP with specific values for predictable gateway calculation
232232
ip_assignment = IPAddressAssignment(
233-
ip_address=IPAddress.from_address_string("100.127.0.10/24")
233+
ip_address=IPAddress.from_address_string("100.126.0.10/24")
234234
)
235235
interface = Interface(
236236
id="interface-1",
@@ -247,13 +247,13 @@ def test_as_openstack_network(self):
247247
"id": "network-for-if5",
248248
"type": "ipv4",
249249
"link": "tap-stor-5",
250-
"ip_address": "100.127.0.10",
250+
"ip_address": "100.126.0.10",
251251
"netmask": "255.255.255.0",
252252
"routes": [
253253
{
254254
"network": "100.127.0.0",
255-
"netmask": "255.255.255.0",
256-
"gateway": "100.127.0.1",
255+
"netmask": "255.255.128.0",
256+
"gateway": "100.126.0.1",
257257
}
258258
],
259259
"network_id": "test-network-id",
@@ -554,7 +554,7 @@ def test_generate_network_config_all_interfaces(self):
554554
mac_address="aa:bb:cc:dd:ee:ff",
555555
ip_address_assignments=[
556556
IPAddressAssignment(
557-
ip_address=IPAddress.from_address_string("100.127.0.10/24")
557+
ip_address=IPAddress.from_address_string("100.126.0.10/24")
558558
)
559559
],
560560
),
@@ -564,7 +564,7 @@ def test_generate_network_config_all_interfaces(self):
564564
ip_address_assignments=[
565565
IPAddressAssignment(
566566
ip_address=IPAddress.from_address_string(
567-
"100.127.128.10/24"
567+
"100.126.128.10/24"
568568
)
569569
)
570570
],

0 commit comments

Comments
 (0)