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/04/22 20:26:30 UTC
svn commit: r936995 - in /incubator/libcloud/trunk:
libcloud/drivers/softlayer.py
test/fixtures/softlayer/v3_SoftLayer_Account_getVirtualGuests.xml
test/test_softlayer.py
Author: oremj
Date: Thu Apr 22 18:26:29 2010
New Revision: 936995
URL: http://svn.apache.org/viewvc?rev=936995&view=rev
Log:
List node:
- add password to extra.
Create node:
- block until we have all node information.
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=936995&r1=936994&r2=936995&view=diff
==============================================================================
--- incubator/libcloud/trunk/libcloud/drivers/softlayer.py (original)
+++ incubator/libcloud/trunk/libcloud/drivers/softlayer.py Thu Apr 22 18:26:29 2010
@@ -16,6 +16,7 @@
Softlayer driver
"""
+import time
import xmlrpclib
import libcloud
@@ -202,10 +203,18 @@ class SoftLayerConnection(object):
return {}
class SoftLayerNodeDriver(NodeDriver):
+ """
+ SoftLayer node driver
+
+ Extra node attributes:
+ - password: root password
+ """
connectionCls = SoftLayerConnection
name = 'SoftLayer'
type = Provider.SOFTLAYER
+ features = {"create_node": ["generates_password"]}
+
def __init__(self, key, secret=None, secure=False):
self.key = key
self.secret = secret
@@ -213,6 +222,11 @@ class SoftLayerNodeDriver(NodeDriver):
self.connection.driver = self
def _to_node(self, host):
+ try:
+ password = host['softwareComponents'][0]['passwords'][0]['password']
+ except IndexError, KeyError:
+ password = None
+
return Node(
id=host['id'],
name=host['hostname'],
@@ -222,7 +236,10 @@ class SoftLayerNodeDriver(NodeDriver):
),
public_ip=host['primaryIpAddress'],
private_ip=host['primaryBackendIpAddress'],
- driver=self
+ driver=self,
+ extra={
+ 'password': password
+ }
)
def _to_nodes(self, hosts):
@@ -245,6 +262,39 @@ class SoftLayerNodeDriver(NodeDriver):
else:
return False
+ def _get_order_information(self, order_id, timeout=1200, check_interval=5):
+ mask = {
+ 'orderTopLevelItems': {
+ 'billingItem': {
+ 'resource': {
+ 'softwareComponents': {
+ 'passwords': ''
+ },
+ 'powerState': '',
+ }
+ },
+ }
+ }
+
+ for i in range(0, timeout, check_interval):
+ try:
+ res = self.connection.request(
+ "SoftLayer_Billing_Order",
+ "getObject",
+ id=order_id,
+ object_mask=mask
+ )
+ item = res['orderTopLevelItems'][0]['billingItem']['resource']
+ if item['softwareComponents'][0]['passwords']:
+ return item
+
+ except KeyError, IndexError:
+ pass
+
+ time.sleep(check_interval)
+
+ return None
+
def create_node(self, **kwargs):
"""
@keyword domain: e.g. libcloud.org
@@ -276,16 +326,10 @@ class SoftLayerNodeDriver(NodeDriver):
res
)
- # Softlayer's create node doesn't really tell us anything.
- return Node(
- id=None,
- name=res['orderDetails']['virtualGuests'][0]['hostname'],
- state=NodeState.PENDING,
- public_ip=None,
- private_ip=None,
- driver=self.connection.driver
- )
+ order_id = res['orderId']
+ raw_node = self._get_order_information(order_id)
+ return self._to_node(raw_node)
def _to_image(self, img):
return NodeImage(
@@ -330,7 +374,12 @@ class SoftLayerNodeDriver(NodeDriver):
def list_nodes(self):
mask = {
- 'virtualGuests': {'powerState': ''}
+ 'virtualGuests': {
+ 'powerState': '',
+ 'softwareComponents': {
+ 'passwords': ''
+ }
+ }
}
res = self.connection.request(
"SoftLayer_Account",
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=936995&r1=936994&r2=936995&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 Apr 22 18:26:29 2010
@@ -15,7 +15,7 @@
<member>
<name>id</name>
<value>
- <int>1111</int>
+ <int>1832</int>
</value>
</member>
<member>
@@ -33,13 +33,13 @@
<member>
<name>uuid</name>
<value>
- <string>11111111-8121-d110-c111-6fh1e165hh9c</string>
+ <string>eaa9aaa2-8e2e-d6e0-ce11-6f01e765779c</string>
</value>
</member>
<member>
<name>hostname</name>
<value>
- <string>test01</string>
+ <string>test1</string>
</value>
</member>
<member>
@@ -81,13 +81,13 @@
<member>
<name>modifyDate</name>
<value>
- <string>2010-03-24T18:54:01-05:00</string>
+ <string>2010-04-22T13:08:47-05:00</string>
</value>
</member>
<member>
<name>metricPollDate</name>
<value>
- <string>2010-03-24T18:53:00-05:00</string>
+ <string>2010-04-22T13:08:00-05:00</string>
</value>
</member>
<member>
@@ -116,15 +116,101 @@
</value>
</member>
<member>
+ <name>softwareComponents</name>
+ <value>
+ <array>
+ <data>
+ <value>
+ <struct>
+ <member>
+ <name>id</name>
+ <value>
+ <int>191115</int>
+ </value>
+ </member>
+ <member>
+ <name>hardwareId</name>
+ <value>
+ <string />
+ </value>
+ </member>
+ <member>
+ <name>manufacturerLicenseInstance</name>
+ <value>
+ <string />
+ </value>
+ </member>
+ <member>
+ <name>passwords</name>
+ <value>
+ <array>
+ <data>
+ <value>
+ <struct>
+ <member>
+ <name>id</name>
+ <value>
+ <int>166980</int>
+ </value>
+ </member>
+ <member>
+ <name>softwareId</name>
+ <value>
+ <int>191115</int>
+ </value>
+ </member>
+ <member>
+ <name>username</name>
+ <value>
+ <string>root</string>
+ </value>
+ </member>
+ <member>
+ <name>password</name>
+ <value>
+ <string>TEST</string>
+ </value>
+ </member>
+ <member>
+ <name>createDate</name>
+ <value>
+ <string>2009-09-04T14:49:51-05:00</string>
+ </value>
+ </member>
+ <member>
+ <name>modifyDate</name>
+ <value>
+ <string>2009-09-04T14:49:51-05:00</string>
+ </value>
+ </member>
+ <member>
+ <name>port</name>
+ <value>
+ <string />
+ </value>
+ </member>
+ </struct>
+ </value>
+ </data>
+ </array>
+ </value>
+ </member>
+ </struct>
+ </value>
+ </data>
+ </array>
+ </value>
+ </member>
+ <member>
<name>primaryIpAddress</name>
<value>
- <string>67.255.155.255</string>
+ <string>67.254.254.254</string>
</value>
</member>
<member>
<name>primaryBackendIpAddress</name>
<value>
- <string>10.20.255.255</string>
+ <string>10.254.254.254</string>
</value>
</member>
</struct>
@@ -140,7 +226,7 @@
<member>
<name>id</name>
<value>
- <int>11111</int>
+ <int>13402</int>
</value>
</member>
<member>
@@ -158,13 +244,13 @@
<member>
<name>uuid</name>
<value>
- <string>21a11114-4111-4141-19f3-51111610dd86</string>
+ <string>9e9e9e99-4ed9-4645-19f3-55ee4e404d56</string>
</value>
</member>
<member>
<name>hostname</name>
<value>
- <string>test02</string>
+ <string>test2</string>
</value>
</member>
<member>
@@ -206,13 +292,13 @@
<member>
<name>modifyDate</name>
<value>
- <string>2010-03-24T18:58:48-05:00</string>
+ <string>2010-04-22T13:08:43-05:00</string>
</value>
</member>
<member>
<name>metricPollDate</name>
<value>
- <string>2010-03-24T18:58:00-05:00</string>
+ <string>2010-04-22T13:08:00-05:00</string>
</value>
</member>
<member>
@@ -241,15 +327,734 @@
</value>
</member>
<member>
+ <name>softwareComponents</name>
+ <value>
+ <array>
+ <data>
+ <value>
+ <struct>
+ <member>
+ <name>id</name>
+ <value>
+ <int>257314</int>
+ </value>
+ </member>
+ <member>
+ <name>hardwareId</name>
+ <value>
+ <string />
+ </value>
+ </member>
+ <member>
+ <name>manufacturerLicenseInstance</name>
+ <value>
+ <string />
+ </value>
+ </member>
+ <member>
+ <name>passwords</name>
+ <value>
+ <array>
+ <data>
+ <value>
+ <struct>
+ <member>
+ <name>id</name>
+ <value>
+ <int>235268</int>
+ </value>
+ </member>
+ <member>
+ <name>softwareId</name>
+ <value>
+ <int>257314</int>
+ </value>
+ </member>
+ <member>
+ <name>username</name>
+ <value>
+ <string>root</string>
+ </value>
+ </member>
+ <member>
+ <name>password</name>
+ <value>
+ <string>TEST</string>
+ </value>
+ </member>
+ <member>
+ <name>createDate</name>
+ <value>
+ <string>2010-03-23T17:06:17-05:00</string>
+ </value>
+ </member>
+ <member>
+ <name>modifyDate</name>
+ <value>
+ <string>2010-03-23T17:06:17-05:00</string>
+ </value>
+ </member>
+ <member>
+ <name>port</name>
+ <value>
+ <string />
+ </value>
+ </member>
+ </struct>
+ </value>
+ </data>
+ </array>
+ </value>
+ </member>
+ </struct>
+ </value>
+ </data>
+ </array>
+ </value>
+ </member>
+ <member>
+ <name>primaryIpAddress</name>
+ <value>
+ <string>174.254.254.254</string>
+ </value>
+ </member>
+ <member>
+ <name>primaryBackendIpAddress</name>
+ <value>
+ <string>10.254.254.254</string>
+ </value>
+ </member>
+ </struct>
+ </value>
+ <value>
+ <struct>
+ <member>
+ <name>privateNetworkOnlyFlag</name>
+ <value>
+ <boolean>0</boolean>
+ </value>
+ </member>
+ <member>
+ <name>id</name>
+ <value>
+ <int>19293</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>9f99e19b-2c61-9cd5-2081-67b57fd7977b</string>
+ </value>
+ </member>
+ <member>
+ <name>hostname</name>
+ <value>
+ <string>test3</string>
+ </value>
+ </member>
+ <member>
+ <name>domain</name>
+ <value>
+ <string>libcloud.org</string>
+ </value>
+ </member>
+ <member>
+ <name>maxCpu</name>
+ <value>
+ <int>2</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>2</int>
+ </value>
+ </member>
+ <member>
+ <name>createDate</name>
+ <value>
+ <string>2010-04-22T12:38:53-05:00</string>
+ </value>
+ </member>
+ <member>
+ <name>modifyDate</name>
+ <value>
+ <string>2010-04-22T13:08:01-05:00</string>
+ </value>
+ </member>
+ <member>
+ <name>metricPollDate</name>
+ <value>
+ <string>2010-04-22T13:08:00-05:00</string>
+ </value>
+ </member>
+ <member>
+ <name>dedicatedAccountHostOnlyFlag</name>
+ <value>
+ <boolean>1</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>softwareComponents</name>
+ <value>
+ <array>
+ <data>
+ <value>
+ <struct>
+ <member>
+ <name>id</name>
+ <value>
+ <int>277185</int>
+ </value>
+ </member>
+ <member>
+ <name>hardwareId</name>
+ <value>
+ <string />
+ </value>
+ </member>
+ <member>
+ <name>manufacturerLicenseInstance</name>
+ <value>
+ <string />
+ </value>
+ </member>
+ <member>
+ <name>passwords</name>
+ <value>
+ <array>
+ <data>
+ <value>
+ <struct>
+ <member>
+ <name>id</name>
+ <value>
+ <int>250826</int>
+ </value>
+ </member>
+ <member>
+ <name>softwareId</name>
+ <value>
+ <int>277185</int>
+ </value>
+ </member>
+ <member>
+ <name>username</name>
+ <value>
+ <string>root</string>
+ </value>
+ </member>
+ <member>
+ <name>password</name>
+ <value>
+ <string>TEST</string>
+ </value>
+ </member>
+ <member>
+ <name>createDate</name>
+ <value>
+ <string>2010-04-22T12:38:57-05:00</string>
+ </value>
+ </member>
+ <member>
+ <name>modifyDate</name>
+ <value>
+ <string>2010-04-22T12:38:57-05:00</string>
+ </value>
+ </member>
+ <member>
+ <name>port</name>
+ <value>
+ <string />
+ </value>
+ </member>
+ </struct>
+ </value>
+ </data>
+ </array>
+ </value>
+ </member>
+ </struct>
+ </value>
+ </data>
+ </array>
+ </value>
+ </member>
+ <member>
+ <name>primaryIpAddress</name>
+ <value>
+ <string>174.254.254.254</string>
+ </value>
+ </member>
+ <member>
+ <name>primaryBackendIpAddress</name>
+ <value>
+ <string>10.254.254.254</string>
+ </value>
+ </member>
+ </struct>
+ </value>
+ <value>
+ <struct>
+ <member>
+ <name>privateNetworkOnlyFlag</name>
+ <value>
+ <boolean>0</boolean>
+ </value>
+ </member>
+ <member>
+ <name>id</name>
+ <value>
+ <int>19288</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>999f77d9-679b-c47d-136d-04cd302384ec</string>
+ </value>
+ </member>
+ <member>
+ <name>hostname</name>
+ <value>
+ <string>test4</string>
+ </value>
+ </member>
+ <member>
+ <name>domain</name>
+ <value>
+ <string>libcloud.org</string>
+ </value>
+ </member>
+ <member>
+ <name>maxCpu</name>
+ <value>
+ <int>2</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>2</int>
+ </value>
+ </member>
+ <member>
+ <name>createDate</name>
+ <value>
+ <string>2010-04-22T12:15:24-05:00</string>
+ </value>
+ </member>
+ <member>
+ <name>modifyDate</name>
+ <value>
+ <string>2010-04-22T13:08:31-05:00</string>
+ </value>
+ </member>
+ <member>
+ <name>metricPollDate</name>
+ <value>
+ <string>2010-04-22T13:08:00-05:00</string>
+ </value>
+ </member>
+ <member>
+ <name>dedicatedAccountHostOnlyFlag</name>
+ <value>
+ <boolean>1</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>softwareComponents</name>
+ <value>
+ <array>
+ <data>
+ <value>
+ <struct>
+ <member>
+ <name>id</name>
+ <value>
+ <int>277171</int>
+ </value>
+ </member>
+ <member>
+ <name>hardwareId</name>
+ <value>
+ <string />
+ </value>
+ </member>
+ <member>
+ <name>manufacturerLicenseInstance</name>
+ <value>
+ <string />
+ </value>
+ </member>
+ <member>
+ <name>passwords</name>
+ <value>
+ <array>
+ <data>
+ <value>
+ <struct>
+ <member>
+ <name>id</name>
+ <value>
+ <int>250815</int>
+ </value>
+ </member>
+ <member>
+ <name>softwareId</name>
+ <value>
+ <int>277171</int>
+ </value>
+ </member>
+ <member>
+ <name>username</name>
+ <value>
+ <string>root</string>
+ </value>
+ </member>
+ <member>
+ <name>password</name>
+ <value>
+ <string>TEST</string>
+ </value>
+ </member>
+ <member>
+ <name>createDate</name>
+ <value>
+ <string>2010-04-22T12:15:26-05:00</string>
+ </value>
+ </member>
+ <member>
+ <name>modifyDate</name>
+ <value>
+ <string>2010-04-22T12:15:26-05:00</string>
+ </value>
+ </member>
+ <member>
+ <name>port</name>
+ <value>
+ <string />
+ </value>
+ </member>
+ </struct>
+ </value>
+ </data>
+ </array>
+ </value>
+ </member>
+ </struct>
+ </value>
+ </data>
+ </array>
+ </value>
+ </member>
+ <member>
+ <name>primaryIpAddress</name>
+ <value>
+ <string>174.254.254.254</string>
+ </value>
+ </member>
+ <member>
+ <name>primaryBackendIpAddress</name>
+ <value>
+ <string>10.254.254.254</string>
+ </value>
+ </member>
+ </struct>
+ </value>
+ <value>
+ <struct>
+ <member>
+ <name>privateNetworkOnlyFlag</name>
+ <value>
+ <boolean>0</boolean>
+ </value>
+ </member>
+ <member>
+ <name>id</name>
+ <value>
+ <int>19284</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>f3c73738-7731-1372-f3c3-e6808082f824</string>
+ </value>
+ </member>
+ <member>
+ <name>hostname</name>
+ <value>
+ <string>test5</string>
+ </value>
+ </member>
+ <member>
+ <name>domain</name>
+ <value>
+ <string>libcloud.org</string>
+ </value>
+ </member>
+ <member>
+ <name>maxCpu</name>
+ <value>
+ <int>2</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>2</int>
+ </value>
+ </member>
+ <member>
+ <name>createDate</name>
+ <value>
+ <string>2010-04-22T12:11:23-05:00</string>
+ </value>
+ </member>
+ <member>
+ <name>modifyDate</name>
+ <value>
+ <string>2010-04-22T13:08:31-05:00</string>
+ </value>
+ </member>
+ <member>
+ <name>metricPollDate</name>
+ <value>
+ <string>2010-04-22T13:08:00-05:00</string>
+ </value>
+ </member>
+ <member>
+ <name>dedicatedAccountHostOnlyFlag</name>
+ <value>
+ <boolean>1</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>softwareComponents</name>
+ <value>
+ <array>
+ <data>
+ <value>
+ <struct>
+ <member>
+ <name>id</name>
+ <value>
+ <int>277167</int>
+ </value>
+ </member>
+ <member>
+ <name>hardwareId</name>
+ <value>
+ <string />
+ </value>
+ </member>
+ <member>
+ <name>manufacturerLicenseInstance</name>
+ <value>
+ <string />
+ </value>
+ </member>
+ <member>
+ <name>passwords</name>
+ <value>
+ <array>
+ <data>
+ <value>
+ <struct>
+ <member>
+ <name>id</name>
+ <value>
+ <int>250811</int>
+ </value>
+ </member>
+ <member>
+ <name>softwareId</name>
+ <value>
+ <int>277167</int>
+ </value>
+ </member>
+ <member>
+ <name>username</name>
+ <value>
+ <string>root</string>
+ </value>
+ </member>
+ <member>
+ <name>password</name>
+ <value>
+ <string>TEST</string>
+ </value>
+ </member>
+ <member>
+ <name>createDate</name>
+ <value>
+ <string>2010-04-22T12:11:27-05:00</string>
+ </value>
+ </member>
+ <member>
+ <name>modifyDate</name>
+ <value>
+ <string>2010-04-22T12:11:27-05:00</string>
+ </value>
+ </member>
+ <member>
+ <name>port</name>
+ <value>
+ <string />
+ </value>
+ </member>
+ </struct>
+ </value>
+ </data>
+ </array>
+ </value>
+ </member>
+ </struct>
+ </value>
+ </data>
+ </array>
+ </value>
+ </member>
+ <member>
<name>primaryIpAddress</name>
<value>
- <string>174.255.255.244</string>
+ <string>174.254.254.254</string>
</value>
</member>
<member>
<name>primaryBackendIpAddress</name>
<value>
- <string>10.255.255.255</string>
+ <string>10.254.254.254</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=936995&r1=936994&r2=936995&view=diff
==============================================================================
--- incubator/libcloud/trunk/test/test_softlayer.py (original)
+++ incubator/libcloud/trunk/test/test_softlayer.py Thu Apr 22 18:26:29 2010
@@ -47,8 +47,9 @@ class SoftLayerTests(unittest.TestCase):
def test_list_nodes(self):
node = self.driver.list_nodes()[0]
- self.assertEqual(node.name, 'test01')
+ self.assertEqual(node.name, 'test1')
self.assertEqual(node.state, NodeState.RUNNING)
+ self.assertEqual(node.extra['password'], 'TEST')
def test_list_locations(self):
locations = self.driver.list_locations()