Skip to content

Commit 8178912

Browse files
author
Elias Nygren
committed
add support for creating server with a dict instead of Server object
1 parent 8012eb7 commit 8178912

File tree

1 file changed

+33
-15
lines changed

1 file changed

+33
-15
lines changed

upcloud/cloud_manager/server_mixin.py

Lines changed: 33 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,15 @@
22
from __future__ import print_function
33
from __future__ import division
44
from __future__ import absolute_import
5-
from builtins import dict
6-
from builtins import str
5+
from builtins import dict, str, object
6+
77
from future import standard_library
88
standard_library.install_aliases()
9-
from builtins import object
10-
from ..ip_address import IP_address
11-
from ..storage import Storage
12-
13-
from ..server import Server
149

15-
from ..tools import assignIfExists
10+
from upcloud.tools import assignIfExists
11+
from upcloud import IP_address
12+
from upcloud import Storage
13+
from upcloud import Server
1614

1715

1816
class ServerManager(object):
@@ -60,6 +58,9 @@ def create_server(self, server):
6058
Creates a server and its storages based on a (locally created) Server object.
6159
Populates the given Server instance with the API response.
6260
61+
0.3.0: also supports giving the entire POST body as a dict that is directly
62+
serialised into JSON. Refer to the REST API documentation for correct format.
63+
6364
Example:
6465
server1 = Server( core_number = 1,
6566
memory_amount = 512,
@@ -84,21 +85,38 @@ def create_server(self, server):
8485
"Windows 2003","Windows 2008" ,"Windows 2012"
8586
8687
"""
88+
if isinstance(server, Server):
89+
body = server.prepare_post_body()
90+
else:
91+
ip_data = server.pop("ip_addresses", None)
92+
storage_data = server.pop("storage_devices", None)
93+
94+
server_dict = dict()
95+
server_dict['cloud_manager'] = self
96+
if ip_data: server_dict['ip_addresses'] = IP_address._create_ip_address_objs( ip_data, cloud_manager = self )
97+
if storage_data: server_dict['storage_devices'] = Storage._create_storage_objs( storage_data, cloud_manager = self )
98+
99+
server_from_dict = Server(server, **server_dict)
100+
body = server_from_dict.prepare_post_body()
87101

88-
body = server.prepare_post_body()
89102

90103
res = self.post_request("/server", body)
91104

92105
# Populate subobjects
93106
IP_addresses = IP_address._create_ip_address_objs( res["server"].pop("ip_addresses"), cloud_manager = self )
94107
storages = Storage._create_storage_objs( res["server"].pop("storage_devices"), cloud_manager = self )
95108

96-
server._reset( res["server"],
97-
ip_addresses = IP_addresses,
98-
storage_devices = storages,
99-
cloud_manager = self,
100-
populated = True)
101-
return server
109+
if isinstance(server, Server):
110+
server_to_return = server
111+
else:
112+
server_to_return = server_from_dict
113+
114+
server_to_return._reset( res["server"],
115+
ip_addresses = IP_addresses,
116+
storage_devices = storages,
117+
cloud_manager = self,
118+
populated = True)
119+
return server_to_return
102120

103121

104122
def modify_server(self, UUID, **kwargs):

0 commit comments

Comments
 (0)