diff --git a/libcloud/drivers/gogrid.py b/libcloud/drivers/gogrid.py index 4126f65..ce1ca15 100644 --- a/libcloud/drivers/gogrid.py +++ b/libcloud/drivers/gogrid.py @@ -150,8 +150,6 @@ class GoGridNodeDriver(NodeDriver): state = self._get_state(element) ip = self._get_ip(element) id = self._get_id(element) - if id == None: - raise Exception("ID is missing from Node response: "+ element) n = GoGridNode(id=id, name=element['name'], state=state, @@ -210,7 +208,7 @@ class GoGridNodeDriver(NodeDriver): return self.connection.request("/api/grid/server/delete", params) def _get_first_ip(self): - params = {'ip.state': 'Unassigned', 'ip.type':'public'} + params = {'ip.state': 'Unassigned', 'ip.type': 'public'} object = self.connection.request("/api/grid/ip/list", params).object return object['list'][0]['ip'] @@ -235,12 +233,27 @@ class GoGridNodeDriver(NodeDriver): first_ip = self._get_first_ip() params = {'name': name, 'image': image.id, - 'description': kwargs.get('ex_description',''), + 'description': kwargs.get('ex_description', ''), 'server.ram': size.id, - 'ip':first_ip} + 'ip': first_ip} object = self.connection.request('/api/grid/server/add', params=params).object node = self._to_node(object['list'][0]) + timeout = 60 * 20 + waittime = 0 + interval = 2 * 60 + + while node.id is None and waittime < timeout: + nodes = self.list_nodes() + + for i in nodes: + if i.public_ip[0] == node.public_ip[0] and i.id is not None: + node.id = i.id + return node + + waittime += interval + time.sleep(interval) + return node diff --git a/test/fixtures/gogrid/server_add.json b/test/fixtures/gogrid/server_add.json index 56271ef..35a4ca1 100644 --- a/test/fixtures/gogrid/server_add.json +++ b/test/fixtures/gogrid/server_add.json @@ -1,7 +1,6 @@ { "list": [ { - "id": 90967, "image": { "billingtokens": [ { diff --git a/test/test_gogrid.py b/test/test_gogrid.py index 47df2e0..9344b13 100644 --- a/test/test_gogrid.py +++ b/test/test_gogrid.py @@ -38,8 +38,9 @@ class GoGridTests(unittest.TestCase, TestCaseMixin): image = NodeImage(1531, None, self.driver) size = NodeSize('512Mb', None, None, None, None, None, driver=self.driver) - node = self.driver.create_node(name='foo', image=image, size=size) - self.assertEqual(node.id, 90967) + node = self.driver.create_node(name='test1', image=image, size=size) + self.assertEqual(node.name, 'test1') + self.assertTrue(node.id is not None) def test_list_nodes(self): node = self.driver.list_nodes()[0]