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
12 changes: 11 additions & 1 deletion hcloud/load_balancers/domain.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
from ..load_balancer_types import BoundLoadBalancerType
from ..locations import BoundLocation
from ..metrics import Metrics
from ..networks import BoundNetwork
from ..networks import BoundNetwork, Network
from ..servers import BoundServer
from .client import BoundLoadBalancer

Expand Down Expand Up @@ -107,6 +107,16 @@ def __init__(
self.ingoing_traffic = ingoing_traffic
self.included_traffic = included_traffic

def private_net_for(self, network: BoundNetwork | Network) -> PrivateNet | None:
"""
Returns the load balancer's network attachment information in the given Network,
and None if no attachment was found.
"""
for o in self.private_net or []:
if o.network.id == network.id:
return o
return None


class LoadBalancerService(BaseDomain):
"""LoadBalancerService Domain
Expand Down
12 changes: 11 additions & 1 deletion hcloud/servers/domain.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
from ..images import BoundImage
from ..isos import BoundIso
from ..metrics import Metrics
from ..networks import BoundNetwork
from ..networks import BoundNetwork, Network
from ..placement_groups import BoundPlacementGroup
from ..primary_ips import BoundPrimaryIP, PrimaryIP
from ..server_types import BoundServerType
Expand Down Expand Up @@ -154,6 +154,16 @@ def __init__(
self.primary_disk_size = primary_disk_size
self.placement_group = placement_group

def private_net_for(self, network: BoundNetwork | Network) -> PrivateNet | None:
"""
Returns the server's network attachment information in the given Network,
and None if no attachment was found.
"""
for o in self.private_net or []:
if o.network.id == network.id:
return o
return None


class CreateServerResponse(BaseDomain):
"""Create Server Response Domain
Expand Down
33 changes: 33 additions & 0 deletions tests/unit/load_balancers/test_domain.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,12 @@

import datetime
from datetime import timezone
from unittest import mock

import pytest

from hcloud.load_balancers import (
BoundLoadBalancer,
IPv4Address,
IPv6Network,
LoadBalancer,
Expand All @@ -21,6 +23,7 @@
PrivateNet,
PublicNetwork,
)
from hcloud.networks import Network


@pytest.mark.parametrize(
Expand Down Expand Up @@ -56,3 +59,33 @@ class TestLoadBalancers:
def test_created_is_datetime(self):
lb = LoadBalancer(id=1, created="2016-01-30T23:50+00:00")
assert lb.created == datetime.datetime(2016, 1, 30, 23, 50, tzinfo=timezone.utc)

def test_private_net_for(self):
network1 = Network(id=1)
network2 = Network(id=2)
network3 = Network(id=3)

load_balancer = LoadBalancer(
id=42,
private_net=[
PrivateNet(network=network1, ip="127.0.0.1"),
PrivateNet(network=network2, ip="127.0.0.1"),
],
)

assert load_balancer.private_net_for(network1).network.id == 1
assert load_balancer.private_net_for(network3) is None

load_balancer = BoundLoadBalancer(
client=mock.MagicMock(),
data={
"id": 42,
"private_net": [
{"network": 1, "ip": "127.0.0.1"},
{"network": 2, "ip": "127.0.0.1"},
],
},
)

assert load_balancer.private_net_for(network1).network.id == 1
assert load_balancer.private_net_for(network3) is None
47 changes: 47 additions & 0 deletions tests/unit/servers/test_domain.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,13 @@

import datetime
from datetime import timezone
from unittest import mock

import pytest

from hcloud.networks import Network
from hcloud.servers import (
BoundServer,
IPv4Address,
IPv6Network,
PrivateNet,
Expand Down Expand Up @@ -46,3 +49,47 @@ def test_created_is_datetime(self):
assert server.created == datetime.datetime(
2016, 1, 30, 23, 50, tzinfo=timezone.utc
)

def test_private_net_for(self):
network1 = Network(id=1)
network2 = Network(id=2)
network3 = Network(id=3)

server = Server(
id=42,
private_net=[
PrivateNet(
network=network1, ip="127.0.0.1", alias_ips=[], mac_address=""
),
PrivateNet(
network=network2, ip="127.0.0.1", alias_ips=[], mac_address=""
),
],
)

assert server.private_net_for(network1).network.id == 1
assert server.private_net_for(network3) is None

server = BoundServer(
client=mock.MagicMock(),
data={
"id": 42,
"private_net": [
{
"network": 1,
"ip": "127.0.0.1",
"alias_ips": [],
"mac_address": "",
},
{
"network": 2,
"ip": "127.0.0.1",
"alias_ips": [],
"mac_address": "",
},
],
},
)

assert server.private_net_for(network1).network.id == 1
assert server.private_net_for(network3) is None