11from upcloud_api .api import API
22from upcloud_api .ip_address import IPAddress
33from upcloud_api .server import Server
4- from upcloud_api .storage import Storage
4+ from upcloud_api .storage import BackupDeletionPolicy , Storage
55
66
77class ServerManager :
88 """
9- Functions for managing IP-addresses . Intended to be used as a mixin for CloudManager.
9+ Functions for managing servers . Intended to be used as a mixin for CloudManager.
1010 """
1111
1212 api : API
@@ -32,13 +32,13 @@ def get_servers(self, populate=False, tags_has_one=None, tags_has_all=None):
3232 request = '/server'
3333 if tags_has_all :
3434 tags_has_all = [str (tag ) for tag in tags_has_all ]
35- taglist = ':' .join (tags_has_all )
36- request = f'/server/tag/{ taglist } '
35+ tag_list = ':' .join (tags_has_all )
36+ request = f'/server/tag/{ tag_list } '
3737
3838 if tags_has_one :
3939 tags_has_one = [str (tag ) for tag in tags_has_one ]
40- taglist = ',' .join (tags_has_one )
41- request = f'/server/tag/{ taglist } '
40+ tag_list = ',' .join (tags_has_one )
41+ request = f'/server/tag/{ tag_list } '
4242
4343 servers = self .api .get_request (request )['servers' ]['server' ]
4444
@@ -52,21 +52,21 @@ def get_servers(self, populate=False, tags_has_one=None, tags_has_all=None):
5252
5353 return server_list
5454
55- def get_server (self , UUID : str ) -> Server :
55+ def get_server (self , uuid : str ) -> Server :
5656 """
5757 Return a (populated) Server instance.
5858 """
59- server , IPAddresses , storages = self .get_server_data (UUID )
59+ server , ip_addresses , storages = self .get_server_data (uuid )
6060
6161 return Server (
6262 server ,
63- ip_addresses = IPAddresses ,
63+ ip_addresses = ip_addresses ,
6464 storage_devices = storages ,
6565 populated = True ,
6666 cloud_manager = self ,
6767 )
6868
69- def get_server_by_ip (self , ip_address ):
69+ def get_server_by_ip (self , ip_address : str ):
7070 """
7171 Return a (populated) Server instance by its IP.
7272
@@ -152,23 +152,34 @@ def modify_server(self, uuid: str, **kwargs) -> Server:
152152 cloud_manager = self ,
153153 )
154154
155- def delete_server (self , uuid ):
155+ def delete_server (
156+ self ,
157+ uuid : str ,
158+ delete_storages : bool = False ,
159+ backups : BackupDeletionPolicy = BackupDeletionPolicy .KEEP ,
160+ ):
156161 """
157162 DELETE '/server/UUID'. Permanently destroys the virtual machine.
158163
159- DOES NOT remove the storage disks.
164+ Does remove storage disks if delete_storages is defined as True.
165+
166+ Does remove backups of the attached storages if
160167
161168 Returns an empty object.
162169 """
163- return self .api .delete_request (f'/server/{ uuid } ' )
170+ storages = '1' if delete_storages else '0'
171+
172+ return self .api .delete_request (
173+ f'/server/{ uuid } ?storages={ storages } &backups={ backups .value } '
174+ )
164175
165- def get_server_data (self , UUID ):
176+ def get_server_data (self , uuid : str ):
166177 """
167178 Return '/server/uuid' data in Python dict.
168179
169180 Creates object representations of any IP-address and Storage.
170181 """
171- data = self .api .get_request (f'/server/{ UUID } ' )
182+ data = self .api .get_request (f'/server/{ uuid } ' )
172183 server = data ['server' ]
173184
174185 # Populate subobjects
0 commit comments