You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@libcloud.apache.org by or...@apache.org on 2010/03/25 01:10:24 UTC
svn commit: r927236 - in /incubator/libcloud/trunk:
libcloud/drivers/softlayer.py
test/fixtures/softlayer/v3_SoftLayer_Account_getVirtualGuests.xml
test/test_softlayer.py
Author: oremj
Date: Thu Mar 25 00:10:24 2010
New Revision: 927236
URL: http://svn.apache.org/viewvc?rev=927236&view=rev
Log:
SoftLayer:
* Support for softlayer object masks.
* Pulls in powerstate data.
Modified:
incubator/libcloud/trunk/libcloud/drivers/softlayer.py
incubator/libcloud/trunk/test/fixtures/softlayer/v3_SoftLayer_Account_getVirtualGuests.xml
incubator/libcloud/trunk/test/test_softlayer.py
Modified: incubator/libcloud/trunk/libcloud/drivers/softlayer.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/libcloud/drivers/softlayer.py?rev=927236&r1=927235&r2=927236&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/drivers/softlayer.py (original)
+++ incubator/libcloud/trunk/libcloud/drivers/softlayer.py Thu Mar 25 00:10:24 2010
@@ -28,6 +28,11 @@ DATACENTERS = {
'dal01': {'country': 'US'}
}
+NODE_STATE_MAP = {
+ 'RUNNING': NodeState.RUNNING,
+ 'HALTED': NodeState.TERMINATED
+}
+
class SoftLayerException(Exception):
pass
@@ -63,9 +68,15 @@ class SoftLayerConnection(object):
self.key = key
self.ua = []
- def request(self, service, method, *args, **init_params):
+ def request(self, service, method, *args, **kwargs):
sl = self.proxyCls(service, self._user_agent())
- params = [self._get_auth_param(service, init_params)] + list(args)
+
+ headers = {}
+ headers.update(self._get_auth_headers())
+ headers.update(self._get_init_params(service, kwargs.get('id')))
+ headers.update(self._get_object_mask(service, kwargs.get('object_mask')))
+ params = [{'headers': headers}] + list(args)
+
try:
return getattr(sl, method)(*params)
except xmlrpclib.Fault, e:
@@ -82,20 +93,30 @@ class SoftLayerConnection(object):
def user_agent_append(self, s):
self.ua.append(s)
- def _get_auth_param(self, service, init_params=None):
- if not init_params:
- init_params = {}
-
+ def _get_auth_headers(self):
return {
- 'headers': {
- 'authenticate': {
- 'username': self.user,
- 'apiKey': self.key
- },
- '%sInitParameters' % service: init_params
+ 'authenticate': {
+ 'username': self.user,
+ 'apiKey': self.key
}
}
+ def _get_init_params(self, service, id):
+ if id is not None:
+ return {
+ '%sInitParameters' % service: {'id': id}
+ }
+ else:
+ return {}
+
+ def _get_object_mask(self, service, mask):
+ if mask is not None:
+ return {
+ '%sObjectMask' % service: {'mask': mask}
+ }
+ else:
+ return {}
+
class SoftLayerNodeDriver(NodeDriver):
connectionCls = SoftLayerConnection
name = 'SoftLayer'
@@ -111,8 +132,10 @@ class SoftLayerNodeDriver(NodeDriver):
return Node(
id=host['id'],
name=host['hostname'],
- # TODO: figure out how to get the correct power state
- state=NodeState.UNKNOWN,
+ state=NODE_STATE_MAP.get(
+ host['powerState']['keyName'],
+ NodeState.UNKNOWN
+ ),
public_ip=host['primaryIpAddress'],
private_ip=host['primaryBackendIpAddress'],
driver=self
@@ -197,9 +220,15 @@ class SoftLayerNodeDriver(NodeDriver):
return [self._to_loc(l) for l in res if l['name'] in DATACENTERS]
def list_nodes(self):
- nodes = self._to_nodes(
- self.connection.request("SoftLayer_Account","getVirtualGuests")
+ mask = {
+ 'virtualGuests': {'powerState': ''}
+ }
+ res = self.connection.request(
+ "SoftLayer_Account",
+ "getVirtualGuests",
+ object_mask=mask
)
+ nodes = self._to_nodes(res)
return nodes
def reboot_node(self, node):
Modified: incubator/libcloud/trunk/test/fixtures/softlayer/v3_SoftLayer_Account_getVirtualGuests.xml
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/test/fixtures/softlayer/v3_SoftLayer_Account_getVirtualGuests.xml?rev=927236&r1=927235&r2=927236&view=diff
==============================================================================
--- incubator/libcloud/trunk/test/fixtures/softlayer/v3_SoftLayer_Account_getVirtualGuests.xml (original)
+++ incubator/libcloud/trunk/test/fixtures/softlayer/v3_SoftLayer_Account_getVirtualGuests.xml Thu Mar 25 00:10:24 2010
@@ -15,13 +15,13 @@
<member>
<name>id</name>
<value>
- <int>0</int>
+ <int>1111</int>
</value>
</member>
<member>
<name>accountId</name>
<value>
- <int>0</int>
+ <int>11111</int>
</value>
</member>
<member>
@@ -33,13 +33,13 @@
<member>
<name>uuid</name>
<value>
- <string>ea11b502-8e2d-d8d0-1111-611111111111</string>
+ <string>11111111-8121-d110-c111-6fh1e165hh9c</string>
</value>
</member>
<member>
<name>hostname</name>
<value>
- <string>test</string>
+ <string>test01</string>
</value>
</member>
<member>
@@ -81,13 +81,13 @@
<member>
<name>modifyDate</name>
<value>
- <string>2010-03-17T19:23:59-05:00</string>
+ <string>2010-03-24T18:54:01-05:00</string>
</value>
</member>
<member>
<name>metricPollDate</name>
<value>
- <string>2010-03-17T19:23:00-05:00</string>
+ <string>2010-03-24T18:53:00-05:00</string>
</value>
</member>
<member>
@@ -97,15 +97,159 @@
</value>
</member>
<member>
+ <name>powerState</name>
+ <value>
+ <struct>
+ <member>
+ <name>name</name>
+ <value>
+ <string>Running</string>
+ </value>
+ </member>
+ <member>
+ <name>keyName</name>
+ <value>
+ <string>RUNNING</string>
+ </value>
+ </member>
+ </struct>
+ </value>
+ </member>
+ <member>
+ <name>primaryIpAddress</name>
+ <value>
+ <string>67.255.155.255</string>
+ </value>
+ </member>
+ <member>
+ <name>primaryBackendIpAddress</name>
+ <value>
+ <string>10.20.255.255</string>
+ </value>
+ </member>
+ </struct>
+ </value>
+ <value>
+ <struct>
+ <member>
+ <name>privateNetworkOnlyFlag</name>
+ <value>
+ <boolean>0</boolean>
+ </value>
+ </member>
+ <member>
+ <name>id</name>
+ <value>
+ <int>11111</int>
+ </value>
+ </member>
+ <member>
+ <name>accountId</name>
+ <value>
+ <int>11111</int>
+ </value>
+ </member>
+ <member>
+ <name>statusId</name>
+ <value>
+ <int>1001</int>
+ </value>
+ </member>
+ <member>
+ <name>uuid</name>
+ <value>
+ <string>21a11114-4111-4141-19f3-51111610dd86</string>
+ </value>
+ </member>
+ <member>
+ <name>hostname</name>
+ <value>
+ <string>test02</string>
+ </value>
+ </member>
+ <member>
+ <name>domain</name>
+ <value>
+ <string>libcloud.org</string>
+ </value>
+ </member>
+ <member>
+ <name>maxCpu</name>
+ <value>
+ <int>1</int>
+ </value>
+ </member>
+ <member>
+ <name>maxCpuUnits</name>
+ <value>
+ <string>CORE</string>
+ </value>
+ </member>
+ <member>
+ <name>maxMemory</name>
+ <value>
+ <int>1024</int>
+ </value>
+ </member>
+ <member>
+ <name>startCpus</name>
+ <value>
+ <int>1</int>
+ </value>
+ </member>
+ <member>
+ <name>createDate</name>
+ <value>
+ <string>2010-03-23T17:06:13-05:00</string>
+ </value>
+ </member>
+ <member>
+ <name>modifyDate</name>
+ <value>
+ <string>2010-03-24T18:58:48-05:00</string>
+ </value>
+ </member>
+ <member>
+ <name>metricPollDate</name>
+ <value>
+ <string>2010-03-24T18:58:00-05:00</string>
+ </value>
+ </member>
+ <member>
+ <name>dedicatedAccountHostOnlyFlag</name>
+ <value>
+ <boolean>0</boolean>
+ </value>
+ </member>
+ <member>
+ <name>powerState</name>
+ <value>
+ <struct>
+ <member>
+ <name>name</name>
+ <value>
+ <string>Running</string>
+ </value>
+ </member>
+ <member>
+ <name>keyName</name>
+ <value>
+ <string>RUNNING</string>
+ </value>
+ </member>
+ </struct>
+ </value>
+ </member>
+ <member>
<name>primaryIpAddress</name>
<value>
- <string>62.233.333.333</string>
+ <string>174.255.255.244</string>
</value>
</member>
<member>
<name>primaryBackendIpAddress</name>
<value>
- <string>10.20.172.130</string>
+ <string>10.255.255.255</string>
</value>
</member>
</struct>
Modified: incubator/libcloud/trunk/test/test_softlayer.py
URL: http://svn.apache.org/viewvc/incubator/libcloud/trunk/test/test_softlayer.py?rev=927236&r1=927235&r2=927236&view=diff
==============================================================================
--- incubator/libcloud/trunk/test/test_softlayer.py (original)
+++ incubator/libcloud/trunk/test/test_softlayer.py Thu Mar 25 00:10:24 2010
@@ -21,6 +21,7 @@ import xmlrpclib
from libcloud.drivers.softlayer import SoftLayerProxy, SoftLayerNodeDriver as SoftLayer
from libcloud.base import Node, NodeImage, NodeSize
+from libcloud.types import NodeState
from test import MockHttp, TestCaseMixin
from test.file_fixtures import FileFixtures
@@ -46,7 +47,8 @@ class SoftLayerTests(unittest.TestCase):
def test_list_nodes(self):
node = self.driver.list_nodes()[0]
- self.assertEqual(node.name, 'test')
+ self.assertEqual(node.name, 'test01')
+ self.assertEqual(node.state, NodeState.RUNNING)
def test_list_locations(self):
locations = self.driver.list_locations()