Skip to content

Commit 1331fe5

Browse files
committed
server: fix volume_size unused
1 parent 54afec7 commit 1331fe5

2 files changed

Lines changed: 106 additions & 3 deletions

File tree

‎cloudscale/lib/server.py‎

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import warnings
2+
13
from .base import CloudscaleMutable
24

35

@@ -10,7 +12,7 @@ def create(
1012
flavor: str,
1113
image: str,
1214
zone: str | None = None,
13-
volume_size: int | None = None,
15+
volume_size_gb: int | None = None,
1416
volumes: list | None = None,
1517
interfaces: list | None = None,
1618
ssh_keys: list | None = None,
@@ -21,6 +23,7 @@ def create(
2123
server_groups: list | None = None,
2224
user_data: str | None = None,
2325
tags: dict | None = None,
26+
volume_size: int | None = None,
2427
) -> dict:
2528
"""Creates a server.
2629
@@ -29,7 +32,7 @@ def create(
2932
flavor (str): The flavor of the server.
3033
image (str): The image of the server.
3134
zone (str, optional): The zone the server is created in. Defaults to None.
32-
volume_size (int, optional): The volume size of the server. Defaults to None.
35+
volume_size_gb (int, optional): The size of the root volume in GiB (1024^3). Defaults to None.
3336
volumes (list, optional): A list of volumes to be created and attached to the server. Defaults to None.
3437
interfaces (list, optional): A list of interfacs to be attached to the server. Defaults to None.
3538
ssh_keys (list, optional): A list of SSH public keys to be placed on the server. Defaults to None.
@@ -40,15 +43,26 @@ def create(
4043
server_groups (list, optional): A list of server groups UUIDs the server should be placed in. Defaults to None.
4144
user_data (str, optional): The user data startup config. Defaults to None.
4245
tags (dict, optional): The tags assigned to the server. Defaults to None.
46+
volume_size (int, optional): Deprecated alias of volume_size_gb. Defaults to None.
4347
4448
Returns:
4549
dict: API data response.
4650
"""
51+
if volume_size is not None:
52+
warnings.warn(
53+
"volume_size is deprecated, use volume_size_gb instead",
54+
DeprecationWarning,
55+
stacklevel=2,
56+
)
57+
if volume_size_gb is None:
58+
volume_size_gb = volume_size
59+
4760
payload = {
4861
"name": name,
4962
"flavor": flavor,
5063
"image": image,
5164
"zone": zone,
65+
"volume_size_gb": volume_size_gb,
5266
"volumes": volumes,
5367
"interfaces": interfaces,
5468
"ssh_keys": ssh_keys,

‎tests/test_server.py‎

Lines changed: 90 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,7 @@ def test_server_create_with_all_options(responses, cloudscale):
112112
"flavor": "flex-4",
113113
"image": "debian-9",
114114
"zone": "lpg1",
115+
"volume_size_gb": 50,
115116
"volumes": [{"size_gb": 100}],
116117
"interfaces": [{"network": "public"}],
117118
"ssh_keys": ["ssh-rsa AAAA"],
@@ -132,7 +133,7 @@ def test_server_create_with_all_options(responses, cloudscale):
132133
flavor="flex-4",
133134
image="debian-9",
134135
zone="lpg1",
135-
volume_size=50,
136+
volume_size_gb=50,
136137
volumes=[{"size_gb": 100}],
137138
interfaces=[{"network": "public"}],
138139
ssh_keys=["ssh-rsa AAAA"],
@@ -155,6 +156,94 @@ def test_server_create_error(responses, cloudscale):
155156
assert exc_info.value.status_code == 500
156157

157158

159+
def test_server_create_with_volume_size_gb(responses, cloudscale):
160+
responses.post(
161+
f"{API_URL}/servers",
162+
json=SERVER_RESP,
163+
status=201,
164+
match=[
165+
responses_module.matchers.json_params_matcher(
166+
{
167+
"name": "db-master",
168+
"flavor": "flex-4",
169+
"image": "debian-9",
170+
"volume_size_gb": 100,
171+
}
172+
)
173+
],
174+
)
175+
176+
cloudscale.server.create(
177+
name="db-master", flavor="flex-4", image="debian-9", volume_size_gb=100
178+
)
179+
180+
181+
def test_server_create_with_deprecated_volume_size(responses, cloudscale):
182+
"""The legacy name still works, but is sent as volume_size_gb."""
183+
responses.post(
184+
f"{API_URL}/servers",
185+
json=SERVER_RESP,
186+
status=201,
187+
match=[
188+
responses_module.matchers.json_params_matcher(
189+
{
190+
"name": "db-master",
191+
"flavor": "flex-4",
192+
"image": "debian-9",
193+
"volume_size_gb": 100,
194+
}
195+
)
196+
],
197+
)
198+
199+
with pytest.warns(DeprecationWarning, match="use volume_size_gb instead"):
200+
cloudscale.server.create(
201+
name="db-master", flavor="flex-4", image="debian-9", volume_size=100
202+
)
203+
204+
205+
def test_server_create_volume_size_gb_wins_over_the_alias(responses, cloudscale):
206+
responses.post(
207+
f"{API_URL}/servers",
208+
json=SERVER_RESP,
209+
status=201,
210+
match=[
211+
responses_module.matchers.json_params_matcher(
212+
{
213+
"name": "db-master",
214+
"flavor": "flex-4",
215+
"image": "debian-9",
216+
"volume_size_gb": 100,
217+
}
218+
)
219+
],
220+
)
221+
222+
with pytest.warns(DeprecationWarning):
223+
cloudscale.server.create(
224+
name="db-master",
225+
flavor="flex-4",
226+
image="debian-9",
227+
volume_size_gb=100,
228+
volume_size=50,
229+
)
230+
231+
232+
def test_server_create_without_volume_size_omits_it(responses, cloudscale):
233+
responses.post(
234+
f"{API_URL}/servers",
235+
json=SERVER_RESP,
236+
status=201,
237+
match=[
238+
responses_module.matchers.json_params_matcher(
239+
{"name": "db-master", "flavor": "flex-4", "image": "debian-9"}
240+
)
241+
],
242+
)
243+
244+
cloudscale.server.create(name="db-master", flavor="flex-4", image="debian-9")
245+
246+
158247
def test_server_update(responses, cloudscale):
159248
responses.patch(
160249
f"{API_URL}/servers/{UUID}",

0 commit comments

Comments
 (0)