|
3 | 3 |
|
4 | 4 | from upcloud_api.firewall import FirewallRule |
5 | 5 | from upcloud_api.ip_address import IPAddress |
| 6 | +from upcloud_api.server_group import ServerGroup |
6 | 7 | from upcloud_api.storage import Storage |
7 | 8 | from upcloud_api.utils import try_it_n_times |
8 | 9 |
|
@@ -47,31 +48,34 @@ class Server: |
47 | 48 | 'core_number', |
48 | 49 | 'firewall', |
49 | 50 | 'hostname', |
| 51 | + 'labels', |
50 | 52 | 'memory_amount', |
51 | 53 | 'nic_model', |
| 54 | + 'plan', |
52 | 55 | 'title', |
53 | 56 | 'timezone', |
54 | 57 | 'video_model', |
55 | 58 | 'vnc', |
56 | 59 | 'vnc_password', |
57 | | - 'plan', |
58 | 60 | ] |
59 | 61 |
|
60 | 62 | optional_fields = [ |
61 | | - 'plan', |
62 | | - 'core_number', |
63 | | - 'memory_amount', |
| 63 | + 'avoid_host', |
64 | 64 | 'boot_order', |
| 65 | + 'core_number', |
65 | 66 | 'firewall', |
| 67 | + 'labels', |
| 68 | + 'login_user', |
| 69 | + 'memory_amount', |
66 | 70 | 'nic_model', |
| 71 | + 'password_delivery', |
| 72 | + 'plan', |
| 73 | + 'server_group', |
67 | 74 | 'timezone', |
| 75 | + 'metadata', |
| 76 | + 'user_data', |
68 | 77 | 'video_model', |
69 | 78 | 'vnc_password', |
70 | | - 'password_delivery', |
71 | | - 'avoid_host', |
72 | | - 'login_user', |
73 | | - 'user_data', |
74 | | - 'metadata', |
75 | 79 | ] |
76 | 80 |
|
77 | 81 | def __init__(self, server=None, **kwargs) -> None: |
@@ -149,11 +153,11 @@ def save(self) -> None: |
149 | 153 | self.cloud_manager.modify_server(self.uuid, **kwargs) |
150 | 154 | self._reset(kwargs) |
151 | 155 |
|
152 | | - def destroy(self): |
| 156 | + def destroy(self, delete_storages=False): |
153 | 157 | """ |
154 | 158 | Destroy the server. |
155 | 159 | """ |
156 | | - self.cloud_manager.delete_server(self.uuid) |
| 160 | + self.cloud_manager.delete_server(self.uuid, delete_storages=delete_storages) |
157 | 161 |
|
158 | 162 | def shutdown(self, hard: bool = False, timeout: int = 30) -> None: |
159 | 163 | """ |
@@ -335,6 +339,18 @@ def prepare_post_body(self): |
335 | 339 | if hasattr(self, optional_field): |
336 | 340 | body['server'][optional_field] = getattr(self, optional_field) |
337 | 341 |
|
| 342 | + if hasattr(self, 'labels'): |
| 343 | + dict_labels = {'label': []} |
| 344 | + for label in self.labels: |
| 345 | + dict_labels['label'].append(label.to_dict()) |
| 346 | + body['server']['labels'] = dict_labels |
| 347 | + |
| 348 | + if hasattr(self, 'metadata') and isinstance(self.metadata, bool): |
| 349 | + body['server']['metadata'] = "yes" if self.metadata else "no" |
| 350 | + |
| 351 | + if hasattr(self, 'server_group') and isinstance(self.server_group, ServerGroup): |
| 352 | + body['server']['server_group'] = f"{self.server_group.uuid}" |
| 353 | + |
338 | 354 | # set password_delivery default as 'none' to prevent API from sending |
339 | 355 | # emails (with credentials) about each created server |
340 | 356 | if not hasattr(self, 'password_delivery'): |
|
0 commit comments