Skip to content

Commit 64d47d1

Browse files
committed
Implement Server Network Methods
1 parent b8d3fb8 commit 64d47d1

1 file changed

Lines changed: 84 additions & 7 deletions

File tree

hcloud/servers/client.py

Lines changed: 84 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -271,6 +271,39 @@ def request_console(self):
271271
"""
272272
return self._client.request_console(self)
273273

274+
def attach_to_network(self, network, ip=None, alias_ips=None):
275+
# type: (Union[Network,BoundNetwork],Optional[str], Optional[List[str]]) -> BoundAction
276+
"""Attaches a server to a network
277+
278+
:param network: :class:`BoundNetwork <hcloud.networks.client.BoundNetwork>` or :class:`Network <hcloud.networks.domain.Network>`
279+
:param ip: str
280+
IP to request to be assigned to this server
281+
:param alias_ips: List[str]
282+
New alias IPs to set for this server.
283+
:return: :class:`BoundAction <hcloud.actions.client.BoundAction>`
284+
"""
285+
return self._client.attach_to_network(self, network, ip, alias_ips)
286+
287+
def detach_from_network(self, network):
288+
# type: ( Union[Network,BoundNetwork]) -> BoundAction
289+
"""Detaches a server from a network.
290+
291+
:param network: :class:`BoundNetwork <hcloud.networks.client.BoundNetwork>` or :class:`Network <hcloud.networks.domain.Network>`
292+
:return: :class:`BoundAction <hcloud.actions.client.BoundAction>`
293+
"""
294+
return self._client.detach_from_network(self, network)
295+
296+
def change_alias_ips(self, network, alias_ips):
297+
# type: (Union[Network,BoundNetwork], List[str]) -> BoundAction
298+
"""Changes the alias IPs of an already attached network.
299+
300+
:param network: :class:`BoundNetwork <hcloud.networks.client.BoundNetwork>` or :class:`Network <hcloud.networks.domain.Network>`
301+
:param alias_ips: List[str]
302+
New alias IPs to set for this server.
303+
:return: :class:`BoundAction <hcloud.actions.client.BoundAction>`
304+
"""
305+
return self._client.change_alias_ips(self, network, alias_ips)
306+
274307

275308
class ServersClient(ClientEntityBase, GetEntityByNameMixin):
276309
results_list_attribute_name = 'servers'
@@ -730,7 +763,7 @@ def change_protection(self, server, delete=None, rebuild=None):
730763
If true, prevents the server from being deleted (currently delete and rebuild attribute needs to have the same value)
731764
:param rebuild: boolean
732765
If true, prevents the server from being rebuilt (currently delete and rebuild attribute needs to have the same value)
733-
:return: :class:`BoundAction <hcloud.actions.client.BoundAction>`
766+
:return: :class:`BoundAction <hcloud.actions.client.BoundAction>`
734767
"""
735768
data = {}
736769
if delete is not None:
@@ -756,15 +789,59 @@ def request_console(self, server):
756789

757790
def attach_to_network(self, server, network, ip=None, alias_ips=None):
758791
# type: (Union[Server,BoundServer], Union[Network,BoundNetwork],Optional[str], Optional[List[str]]) -> BoundAction
759-
# TODO
760-
pass
792+
"""Attaches a server to a network
793+
794+
:param server: :class:`BoundServer <hcloud.servers.client.BoundServer>` or :class:`Server <hcloud.servers.domain.Server>`
795+
:param network: :class:`BoundNetwork <hcloud.networks.client.BoundNetwork>` or :class:`Network <hcloud.networks.domain.Network>`
796+
:param ip: str
797+
IP to request to be assigned to this server
798+
:param alias_ips: List[str]
799+
New alias IPs to set for this server.
800+
:return: :class:`BoundAction <hcloud.actions.client.BoundAction>`
801+
"""
802+
data = {
803+
"network": network.id,
804+
}
805+
if ip is not None:
806+
data.update({"ip": ip})
807+
if alias_ips is not None:
808+
data.update({"alias_ips": ip})
809+
response = self._client.request(
810+
url="/servers/{server_id}/actions/attach_to_network".format(server_id=server.id), method="POST",
811+
json=data)
812+
return BoundAction(self._client.actions, response['action'])
761813

762814
def detach_from_network(self, server, network):
763815
# type: (Union[Server,BoundServer], Union[Network,BoundNetwork]) -> BoundAction
764-
# TODO
765-
pass
816+
"""Detaches a server from a network.
817+
818+
:param server: :class:`BoundServer <hcloud.servers.client.BoundServer>` or :class:`Server <hcloud.servers.domain.Server>`
819+
:param network: :class:`BoundNetwork <hcloud.networks.client.BoundNetwork>` or :class:`Network <hcloud.networks.domain.Network>`
820+
:return: :class:`BoundAction <hcloud.actions.client.BoundAction>`
821+
"""
822+
data = {
823+
"network": network.id,
824+
}
825+
response = self._client.request(
826+
url="/servers/{server_id}/actions/detach_from_network".format(server_id=server.id), method="POST",
827+
json=data)
828+
return BoundAction(self._client.actions, response['action'])
766829

767830
def change_alias_ips(self, server, network, alias_ips):
768831
# type: (Union[Server,BoundServer], Union[Network,BoundNetwork], List[str]) -> BoundAction
769-
# TODO
770-
pass
832+
"""Changes the alias IPs of an already attached network.
833+
834+
:param server: :class:`BoundServer <hcloud.servers.client.BoundServer>` or :class:`Server <hcloud.servers.domain.Server>`
835+
:param network: :class:`BoundNetwork <hcloud.networks.client.BoundNetwork>` or :class:`Network <hcloud.networks.domain.Network>`
836+
:param alias_ips: List[str]
837+
New alias IPs to set for this server.
838+
:return: :class:`BoundAction <hcloud.actions.client.BoundAction>`
839+
"""
840+
data = {
841+
"network": network.id,
842+
"alias_ips": alias_ips
843+
}
844+
response = self._client.request(
845+
url="/servers/{server_id}/actions/change_alias_ips".format(server_id=server.id), method="POST",
846+
json=data)
847+
return BoundAction(self._client.actions, response['action'])

0 commit comments

Comments
 (0)