You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by to...@apache.org on 2011/06/17 23:50:32 UTC

svn commit: r1137046 - in /libcloud/trunk: libcloud/compute/drivers/serverlove.py libcloud/compute/providers.py libcloud/compute/types.py test/compute/test_elasticstack.py

Author: tomaz
Date: Fri Jun 17 21:50:31 2011
New Revision: 1137046

URL: http://svn.apache.org/viewvc?rev=1137046&view=rev
Log:
Add new compute driver for serverlove.

Added:
    libcloud/trunk/libcloud/compute/drivers/serverlove.py
Modified:
    libcloud/trunk/libcloud/compute/providers.py
    libcloud/trunk/libcloud/compute/types.py
    libcloud/trunk/test/compute/test_elasticstack.py

Added: libcloud/trunk/libcloud/compute/drivers/serverlove.py
URL: http://svn.apache.org/viewvc/libcloud/trunk/libcloud/compute/drivers/serverlove.py?rev=1137046&view=auto
==============================================================================
--- libcloud/trunk/libcloud/compute/drivers/serverlove.py (added)
+++ libcloud/trunk/libcloud/compute/drivers/serverlove.py Fri Jun 17 21:50:31 2011
@@ -0,0 +1,82 @@
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+"""
+ServerLove Driver
+"""
+
+from libcloud.compute.types import Provider
+from libcloud.compute.drivers.elasticstack import ElasticStackBaseNodeDriver
+from libcloud.compute.drivers.elasticstack import ElasticStackBaseConnection
+
+
+# API end-points
+API_ENDPOINTS = {
+    'uk-1': {
+        'name': 'United Kingdom, Manchester',
+        'country': 'United Kingdom',
+        'host': 'api.z1-man.serverlove.com'
+    }
+}
+
+# Default API end-point for the base connection class.
+DEFAULT_ENDPOINT = 'uk-1'
+
+# Retrieved from http://www.serverlove.com/cloud-server-faqs/api-questions/
+STANDARD_DRIVES = {
+    '679f5f44-0be7-4745-a658-cccd4334c1aa': {
+        'uuid': '679f5f44-0be7-4745-a658-cccd4334c1aa',
+        'description': 'CentOS 5.5',
+        'size_gunzipped': '1GB',
+        'supports_deployment': True,
+    },
+    '5f2e0e29-2937-42b9-b362-d2d07eddbdeb': {
+        'uuid': '5f2e0e29-2937-42b9-b362-d2d07eddbdeb',
+        'description': 'Ubuntu Linux 10.04',
+        'size_gunzipped': '1GB',
+        'supports_deployment': True,
+    },
+    '5795b68f-ed26-4639-b41d-c93235062b6b': {
+        'uuid': '5795b68f-ed26-4639-b41d-c93235062b6b',
+        'description': 'Debian Linux 5',
+        'size_gunzipped': '1GB',
+        'supports_deployment': True,
+    },
+    '41993a02-0b22-4e49-bb47-0aa8975217e4': {
+        'uuid': '41993a02-0b22-4e49-bb47-0aa8975217e4',
+        'description': 'Windows Server 2008 R2 Standard',
+        'size_gunzipped': '15GB',
+        'supports_deployment': False,
+    },
+    '85623ca1-9c2a-4398-a771-9a43c347e86b': {
+        'uuid': '85623ca1-9c2a-4398-a771-9a43c347e86b',
+        'description': 'Windows Web Server 2008 R2',
+        'size_gunzipped': '15GB',
+        'supports_deployment': False,
+    }
+}
+
+
+class ServerLoveConnection(ElasticStackBaseConnection):
+    host = API_ENDPOINTS[DEFAULT_ENDPOINT]['host']
+
+
+class ServerLoveNodeDriver(ElasticStackBaseNodeDriver):
+    type = Provider.SERVERLOVE
+    api_name = 'serverlove'
+    name = 'ServerLove'
+    connectionCls = ServerLoveConnection
+    features = {'create_node': ['generates_password']}
+    _standard_drives = STANDARD_DRIVES

Modified: libcloud/trunk/libcloud/compute/providers.py
URL: http://svn.apache.org/viewvc/libcloud/trunk/libcloud/compute/providers.py?rev=1137046&r1=1137045&r2=1137046&view=diff
==============================================================================
--- libcloud/trunk/libcloud/compute/providers.py (original)
+++ libcloud/trunk/libcloud/compute/providers.py Fri Jun 17 21:50:31 2011
@@ -47,6 +47,8 @@ DRIVERS = {
         ('libcloud.compute.drivers.elastichosts', 'ElasticHostsUS1NodeDriver'),
     Provider.SKALICLOUD:
         ('libcloud.compute.drivers.skalicloud', 'SkaliCloudNodeDriver'),
+    Provider.SERVERLOVE:
+        ('libcloud.compute.drivers.serverlove', 'ServerLoveNodeDriver'),
     Provider.CLOUDSIGMA:
         ('libcloud.compute.drivers.cloudsigma', 'CloudSigmaZrhNodeDriver'),
     Provider.GOGRID:

Modified: libcloud/trunk/libcloud/compute/types.py
URL: http://svn.apache.org/viewvc/libcloud/trunk/libcloud/compute/types.py?rev=1137046&r1=1137045&r2=1137046&view=diff
==============================================================================
--- libcloud/trunk/libcloud/compute/types.py (original)
+++ libcloud/trunk/libcloud/compute/types.py Fri Jun 17 21:50:31 2011
@@ -90,6 +90,7 @@ class Provider(object):
     OPSOURCE = 30
     OPENSTACK = 31
     SKALICLOUD = 32
+    SERVERLOVE = 33
 
 class NodeState(object):
     """

Modified: libcloud/trunk/test/compute/test_elasticstack.py
URL: http://svn.apache.org/viewvc/libcloud/trunk/test/compute/test_elasticstack.py?rev=1137046&r1=1137045&r2=1137046&view=diff
==============================================================================
--- libcloud/trunk/test/compute/test_elasticstack.py (original)
+++ libcloud/trunk/test/compute/test_elasticstack.py Fri Jun 17 21:50:31 2011
@@ -26,6 +26,8 @@ from libcloud.compute.drivers.elastichos
                               (ElasticHostsBaseNodeDriver as ElasticHosts)
 from libcloud.compute.drivers.skalicloud import \
                               (SkaliCloudNodeDriver as SkaliCloud)
+from libcloud.compute.drivers.serverlove import \
+                              (ServerLoveNodeDriver as ServerLove)
 from libcloud.common.types import InvalidCredsError, MalformedResponseError
 
 from test import MockHttp
@@ -169,6 +171,22 @@ class SkaliCloudTestCase(ElasticStackTes
         unittest.TestCase.setUp(self)
 
 
+class ServerLoveTestCase(ElasticStackTestCase, unittest.TestCase):
+
+    def setUp(self):
+        ServerLove.connectionCls.conn_classes = (None,
+                                                 ElasticStackMockHttp)
+
+        self.driver = ServerLove('foo', 'bar')
+
+        images = self.driver.list_images()
+        self.image = [i for i in images if \
+                     i.id == '679f5f44-0be7-4745-a658-cccd4334c1aa'][0]
+
+        ElasticStackTestCase.setUp(self)
+        unittest.TestCase.setUp(self)
+
+
 class ElasticStackMockHttp(MockHttp):
 
     fixtures = ComputeFileFixtures('elastichosts')
@@ -201,6 +219,9 @@ class ElasticStackMockHttp(MockHttp):
         # Skalikloud image
         return (httplib.NO_CONTENT, body, {}, httplib.responses[httplib.NO_CONTENT])
 
+    def _drives_0012e24a_6eae_4279_9912_3432f698cec8_image_679f5f44_0be7_4745_a658_cccd4334c1aa_gunzip(self, method, url, body, headers):
+        # ServerLove image
+        return (httplib.NO_CONTENT, body, {}, httplib.responses[httplib.NO_CONTENT])
 
     def _drives_0012e24a_6eae_4279_9912_3432f698cec8_info(self, method, url, body, headers):
         body = self.fixtures.load('drives_info.json')