Skip to content

Commit 0bd20bc

Browse files
committed
support ip_addresses in server creation
1 parent 3555739 commit 0bd20bc

File tree

4 files changed

+75
-20
lines changed

4 files changed

+75
-20
lines changed

test/helpers/infra.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from __future__ import division
44
from __future__ import absolute_import
55

6-
from upcloud_api import CloudManager, Storage, FirewallRule, ZONE, Tag
6+
from upcloud_api import CloudManager, Storage, FirewallRule, ZONE, Tag, IPAddress
77
from upcloud_api.server import Server, login_user_block
88

99

@@ -28,6 +28,9 @@
2828
storage_devices=[
2929
Storage(os='Ubuntu 14.04', size=10),
3030
Storage(size=10, tier='maxiops'),
31+
],
32+
ip_addresses=[
33+
IPAddress(family='IPv6', access='public')
3134
]),
3235

3336
'db': Server(

test/test_integration/test_integration_test.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,14 @@ def test_infra_ops():
9090
if not found:
9191
raise Exception('server {} not found in all_servers'.format(cs.uuid))
9292

93+
# assert servers' states
94+
# TODO(elnygren): add more assertions here
95+
96+
# web2 non default IP configuration
97+
web2 = CLUSTER['web2']
98+
assert len(web2.ip_addresses) == 1
99+
assert web2.ip_addresses[0].family == 'IPv6'
100+
93101

94102

95103
test_server = CLUSTER['web1']

test/test_server_creation.py

Lines changed: 55 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from __future__ import division
44
from __future__ import absolute_import
55

6-
from upcloud_api import ZONE, Server, Storage, login_user_block
6+
from upcloud_api import ZONE, Server, Storage, IPAddress, login_user_block
77

88
from conftest import Mock
99
import json
@@ -82,7 +82,7 @@ def test_server_prepare_post_body(self):
8282
assert body['server']['zone'] == 'us-chi1'
8383

8484
def test_server_prepare_post_body_optional_attributes(self):
85-
server = Server(
85+
server1 = Server(
8686
core_number=2,
8787
memory_amount=1024,
8888
hostname='my.example.com',
@@ -97,26 +97,62 @@ def test_server_prepare_post_body_optional_attributes(self):
9797
password_delivery='email',
9898
login_user=login_user_block('upclouduser', ['this-is-a-SSH-key']),
9999
avoid_host='12345678',
100-
user_data='https://my.script.com/some_script.py'
100+
user_data='https://my.script.com/some_script.py',
101+
ip_addresses = [
102+
IPAddress(family='IPv4', access='public'),
103+
IPAddress(family='IPv6', access='public')
104+
]
101105
)
102106

103-
body = server.prepare_post_body()
104-
assert body['server']['title'] == 'my.example.com'
105-
assert body['server']['core_number'] == 2
106-
assert body['server']['memory_amount'] == 1024
107-
assert body['server']['hostname'] == server.title
108-
assert body['server']['zone'] == 'us-chi1'
109-
assert body['server']['vnc_password'] == 'my-passwd'
110-
assert body['server']['password_delivery'] == 'email'
111-
assert body['server']['login_user'] == {
112-
'username': 'upclouduser',
113-
'create_password': 'yes',
114-
'ssh_keys': {
115-
'ssh_key': ['this-is-a-SSH-key']
116-
}
107+
108+
server2_dict = {
109+
'core_number':2,
110+
'memory_amount':1024,
111+
'hostname':'my.example.com',
112+
'zone': ZONE.Chicago,
113+
'storage_devices':[
114+
{'os': 'Ubuntu 14.04', 'size': 10}
115+
],
116+
'vnc_password': 'my-passwd',
117+
'password_delivery': 'email',
118+
'login_user': login_user_block('upclouduser', ['this-is-a-SSH-key']),
119+
'avoid_host': '12345678',
120+
'user_data': 'https://my.script.com/some_script.py',
121+
'ip_addresses': [
122+
{'family':'IPv4', 'access':'public'},
123+
{'family':'IPv6', 'access':'public'}
124+
]
117125
}
118-
assert body['server']['avoid_host'] == '12345678'
119-
assert body['server']['user_data'] == 'https://my.script.com/some_script.py'
126+
server2 = Server._create_server_obj(server2_dict, cloud_manager=self)
127+
128+
body1 = server1.prepare_post_body()
129+
body2 = server2.prepare_post_body()
130+
131+
132+
for body in [body1, body2]:
133+
assert body['server']['title'] == 'my.example.com'
134+
assert body['server']['core_number'] == 2
135+
assert body['server']['memory_amount'] == 1024
136+
assert body['server']['hostname'] == server1.title
137+
assert body['server']['zone'] == 'us-chi1'
138+
assert body['server']['vnc_password'] == 'my-passwd'
139+
assert body['server']['password_delivery'] == 'email'
140+
assert body['server']['login_user'] == {
141+
'username': 'upclouduser',
142+
'create_password': 'yes',
143+
'ssh_keys': {
144+
'ssh_key': ['this-is-a-SSH-key']
145+
}
146+
}
147+
assert body['server']['avoid_host'] == '12345678'
148+
assert body['server']['user_data'] == 'https://my.script.com/some_script.py'
149+
assert body['server']['ip_addresses'] == {
150+
'ip_address': [
151+
{'family': 'IPv4', 'access': 'public'},
152+
{'family': 'IPv6', 'access': 'public'}
153+
]
154+
}
155+
120156

121157
@responses.activate
122158
def test_create_server(self, manager):

upcloud_api/server.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,6 +357,14 @@ def prepare_post_body(self):
357357

358358
body['server']['storage_devices']['storage_device'].append(storage_body)
359359

360+
if hasattr(self, 'ip_addresses') and self.ip_addresses:
361+
body['server']['ip_addresses'] = {
362+
'ip_address': [
363+
ip.to_dict() for ip in self.ip_addresses
364+
]
365+
}
366+
367+
360368
return body
361369

362370
def to_dict(self):

0 commit comments

Comments
 (0)