Skip to content

Commit 11d3432

Browse files
committed
Implement Server PrivateNet
1 parent ebda977 commit 11d3432

5 files changed

Lines changed: 77 additions & 3 deletions

File tree

hcloud/networks/client.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,8 @@ def create(
237237
"""
238238
data = {"name": name, "ip_range": ip_range}
239239
if subnets is not None:
240-
data["subnets"] = [{'type': subnet.type, 'ip_range': subnet.ip_range, 'network_zone': subnet.network_zone} for subnet in subnets]
240+
data["subnets"] = [{'type': subnet.type, 'ip_range': subnet.ip_range, 'network_zone': subnet.network_zone}
241+
for subnet in subnets]
241242
if routes is not None:
242243
data["routes"] = [{'destination': route.destination, 'gateway': route.gateway} for route in routes]
243244
if labels is not None:

hcloud/servers/client.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
from hcloud.floating_ips.client import BoundFloatingIP
77
from hcloud.isos.client import BoundIso
88
from hcloud.servers.domain import Server, CreateServerResponse, ResetPasswordResponse, EnableRescueResponse, \
9-
RequestConsoleResponse, PublicNetwork, IPv4Address, IPv6Network
9+
RequestConsoleResponse, PublicNetwork, IPv4Address, IPv6Network, PrivateNet
1010
from hcloud.volumes.client import BoundVolume
1111
from hcloud.images.domain import CreateImageResponse
1212
from hcloud.images.client import BoundImage
@@ -50,6 +50,11 @@ def __init__(self, client, data, complete=True):
5050
floating_ip in public_net['floating_ips']]
5151
data['public_net'] = PublicNetwork(ipv4=ipv4_address, ipv6=ipv6_network, floating_ips=floating_ips)
5252

53+
private_nets = data.get("private_net")
54+
if private_nets:
55+
private_nets = [PrivateNet(network=BoundNetwork(client._client.networks, {"id": private_net['network']}, complete=False), ip=private_net['ip'], alias_ips=private_net['alias_ips']) for private_net in private_nets]
56+
data['private_net'] = private_nets
57+
5358
super(BoundServer, self).__init__(client, data, complete)
5459

5560
def get_actions_list(self, status=None, sort=None, page=None, per_page=None):

hcloud/servers/domain.py

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ class Server(BaseDomain):
3939
User-defined labels (key-value pairs)
4040
:param volumes: List[:class:`BoundVolume <hcloud.volumes.client.BoundVolume>`]
4141
Volumes assigned to this server.
42+
:param private_net: List[:class:`PrivateNet <hcloud.servers.domain.PrivateNet`]
43+
Private networks information.
4244
"""
4345
STATUS_RUNNING = "running"
4446
"""Server Status running"""
@@ -76,6 +78,7 @@ class Server(BaseDomain):
7678
"protection",
7779
"labels",
7880
"volumes",
81+
"private_net"
7982
)
8083

8184
created = ISODateTime()
@@ -102,6 +105,7 @@ def __init__(
102105
protection=None,
103106
labels=None,
104107
volumes=None,
108+
private_net=None,
105109
):
106110
self.id = id
107111
self.name = name
@@ -121,6 +125,7 @@ def __init__(
121125
self.protection = protection
122126
self.labels = labels
123127
self.volumes = volumes
128+
self.private_net = private_net
124129

125130

126131
class CreateServerResponse(BaseDomain):
@@ -308,3 +313,29 @@ def __init__(self,
308313
ip_parts = self.ip.split("/") # 2001:db8::/64 to 2001:db8:: and 64
309314
self.network = ip_parts[0]
310315
self.network_mask = ip_parts[1]
316+
317+
318+
class PrivateNet(BaseDomain):
319+
"""PrivateNet Domain
320+
321+
:param network: :class:`BoundNetwork <hcloud.networks.client.BoundNetwork>`
322+
The network the server is attached to
323+
:param ip: str
324+
The main IP Address of the server in the Network
325+
:param alias_ips: List[str]
326+
The alias ips for a server
327+
"""
328+
__slots__ = (
329+
"network",
330+
"ip",
331+
"alias_ips"
332+
)
333+
334+
def __init__(self,
335+
network, # type: BoundNetwork
336+
ip, # type: str
337+
alias_ips, # type: List[str]
338+
):
339+
self.network = network
340+
self.ip = ip
341+
self.alias_ips = alias_ips

tests/unit/servers/conftest.py

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,13 @@ def response_simple_server():
2929
478
3030
]
3131
},
32+
"private_net": [
33+
{
34+
"network": 4711,
35+
"ip": "10.1.1.5",
36+
"alias_ips": ["10.1.1.8"]
37+
}
38+
],
3239
"server_type": {
3340
"id": 1,
3441
"name": "cx11",
@@ -148,6 +155,7 @@ def response_create_simple_server():
148155
"floating_ips": [
149156
]
150157
},
158+
"private_net": [],
151159
"server_type": {
152160
"id": 1,
153161
"name": "cx11",
@@ -309,6 +317,7 @@ def response_update_server():
309317
478
310318
]
311319
},
320+
"private_net": [],
312321
"server_type": {
313322
"id": 1,
314323
"name": "cx11",
@@ -437,6 +446,13 @@ def response_simple_servers():
437446
478
438447
]
439448
},
449+
"private_net": [
450+
{
451+
"network": 4711,
452+
"ip": "10.1.1.5",
453+
"alias_ips": ["10.1.1.8"]
454+
}
455+
],
440456
"server_type": {
441457
"id": 1,
442458
"name": "cx11",
@@ -550,6 +566,13 @@ def response_simple_servers():
550566
478
551567
]
552568
},
569+
"private_net": [
570+
{
571+
"network": 4711,
572+
"ip": "10.1.1.7",
573+
"alias_ips": ["10.1.1.99"]
574+
}
575+
],
553576
"server_type": {
554577
"id": 1,
555578
"name": "cx11",
@@ -670,6 +693,13 @@ def response_full_server():
670693
478
671694
]
672695
},
696+
"private_net": [
697+
{
698+
"network": 4711,
699+
"ip": "10.1.1.5",
700+
"alias_ips": ["10.1.1.8"]
701+
}
702+
],
673703
"server_type": {
674704
"id": 1,
675705
"name": "cx11",

tests/unit/servers/test_client.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
from hcloud.isos.client import BoundIso
66
from hcloud.servers.client import ServersClient, BoundServer
77

8-
from hcloud.servers.domain import Server, PublicNetwork, IPv4Address, IPv6Network
8+
from hcloud.servers.domain import Server, PublicNetwork, IPv4Address, IPv6Network, PrivateNet
99
from hcloud.volumes.client import BoundVolume
1010
from hcloud.volumes.domain import Volume
1111
from hcloud.images.domain import Image
@@ -84,6 +84,13 @@ def test_bound_server_init(self, response_full_server):
8484
assert bound_server.iso.name == "FreeBSD-11.0-RELEASE-amd64-dvd1"
8585
assert bound_server.iso.complete is True
8686

87+
assert len(bound_server.private_net) == 1
88+
assert isinstance(bound_server.private_net[0], PrivateNet)
89+
assert bound_server.private_net[0].network._client == bound_server._client._client.networks
90+
assert bound_server.private_net[0].ip == "10.1.1.5"
91+
assert len(bound_server.private_net[0].alias_ips) == 1
92+
assert bound_server.private_net[0].alias_ips[0] == "10.1.1.8"
93+
8794
@pytest.mark.parametrize(
8895
"params",
8996
[

0 commit comments

Comments
 (0)