22from __future__ import print_function
33from __future__ import division
44from __future__ import absolute_import
5- from builtins import dict
6- from builtins import str
5+ from builtins import dict , str , object
6+
77from future import standard_library
88standard_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
1816class 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