@@ -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
275308class 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