Skip to content

Commit 26ce19e

Browse files
committed
feat: add server and load balancer private_net_for helper method
1 parent 9f3e282 commit 26ce19e

File tree

4 files changed

+60
-2
lines changed

4 files changed

+60
-2
lines changed

hcloud/load_balancers/domain.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from ..load_balancer_types import BoundLoadBalancerType
1414
from ..locations import BoundLocation
1515
from ..metrics import Metrics
16-
from ..networks import BoundNetwork
16+
from ..networks import BoundNetwork, Network
1717
from ..servers import BoundServer
1818
from .client import BoundLoadBalancer
1919

@@ -107,6 +107,16 @@ def __init__(
107107
self.ingoing_traffic = ingoing_traffic
108108
self.included_traffic = included_traffic
109109

110+
def private_net_for(self, network: BoundNetwork | Network) -> PrivateNet | None:
111+
"""
112+
Returns the load balancer's network attachment information in the given Network,
113+
and None if no attachment was found.
114+
"""
115+
for o in self.private_net or []:
116+
if o.network.id == network.id:
117+
return o
118+
return None
119+
110120

111121
class LoadBalancerService(BaseDomain):
112122
"""LoadBalancerService Domain

hcloud/servers/domain.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
from ..images import BoundImage
1515
from ..isos import BoundIso
1616
from ..metrics import Metrics
17-
from ..networks import BoundNetwork
17+
from ..networks import BoundNetwork, Network
1818
from ..placement_groups import BoundPlacementGroup
1919
from ..primary_ips import BoundPrimaryIP, PrimaryIP
2020
from ..server_types import BoundServerType
@@ -154,6 +154,16 @@ def __init__(
154154
self.primary_disk_size = primary_disk_size
155155
self.placement_group = placement_group
156156

157+
def private_net_for(self, network: BoundNetwork | Network) -> PrivateNet | None:
158+
"""
159+
Returns the server's network attachment information in the given Network,
160+
and None if no attachment was found.
161+
"""
162+
for o in self.private_net or []:
163+
if o.network.id == network.id:
164+
return o
165+
return None
166+
157167

158168
class CreateServerResponse(BaseDomain):
159169
"""Create Server Response Domain

tests/unit/load_balancers/test_domain.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
PrivateNet,
2222
PublicNetwork,
2323
)
24+
from hcloud.networks import Network
2425

2526

2627
@pytest.mark.parametrize(
@@ -56,3 +57,19 @@ class TestLoadBalancers:
5657
def test_created_is_datetime(self):
5758
lb = LoadBalancer(id=1, created="2016-01-30T23:50+00:00")
5859
assert lb.created == datetime.datetime(2016, 1, 30, 23, 50, tzinfo=timezone.utc)
60+
61+
def test_private_net_for(self):
62+
network1 = Network(id=1)
63+
network2 = Network(id=2)
64+
network3 = Network(id=3)
65+
66+
private_net1 = PrivateNet(network=network1, ip="127.0.0.1")
67+
private_net2 = PrivateNet(network=network2, ip="127.0.0.1")
68+
69+
server = LoadBalancer(
70+
id=42,
71+
private_net=[private_net1, private_net2],
72+
)
73+
74+
assert server.private_net_for(network1) == private_net1
75+
assert server.private_net_for(network3) is None

tests/unit/servers/test_domain.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import pytest
77

8+
from hcloud.networks import Network
89
from hcloud.servers import (
910
IPv4Address,
1011
IPv6Network,
@@ -46,3 +47,23 @@ def test_created_is_datetime(self):
4647
assert server.created == datetime.datetime(
4748
2016, 1, 30, 23, 50, tzinfo=timezone.utc
4849
)
50+
51+
def test_private_net_for(self):
52+
network1 = Network(id=1)
53+
network2 = Network(id=2)
54+
network3 = Network(id=3)
55+
56+
private_net1 = PrivateNet(
57+
network=network1, ip="127.0.0.1", alias_ips=[], mac_address=""
58+
)
59+
private_net2 = PrivateNet(
60+
network=network2, ip="127.0.0.1", alias_ips=[], mac_address=""
61+
)
62+
63+
server = Server(
64+
id=42,
65+
private_net=[private_net1, private_net2],
66+
)
67+
68+
assert server.private_net_for(network1) == private_net1
69+
assert server.private_net_for(network3) is None

0 commit comments

Comments
 (0)