Repository: libcloud
Updated Branches:
  refs/heads/trunk 5b2a26c0a -> 9fe309ddd


DimensionData adding disk configurations to node object


Project: http://git-wip-us.apache.org/repos/asf/libcloud/repo
Commit: http://git-wip-us.apache.org/repos/asf/libcloud/commit/afbb8ecf
Tree: http://git-wip-us.apache.org/repos/asf/libcloud/tree/afbb8ecf
Diff: http://git-wip-us.apache.org/repos/asf/libcloud/diff/afbb8ecf

Branch: refs/heads/trunk
Commit: afbb8ecf7a02c6ead9fc6eae657a4725347a5508
Parents: 5b2a26c
Author: Jeffrey Dunham <jeffrey.a.dun...@gmail.com>
Authored: Fri Feb 19 18:09:38 2016 -0500
Committer: anthony-shaw <anthony.p.s...@gmail.com>
Committed: Mon Feb 29 16:19:53 2016 +1100

----------------------------------------------------------------------
 libcloud/common/dimensiondata.py            | 35 ++++++++++++++++++++++++
 libcloud/compute/drivers/dimensiondata.py   | 19 +++++++++++--
 libcloud/test/compute/test_dimensiondata.py |  7 +++--
 3 files changed, 57 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/libcloud/blob/afbb8ecf/libcloud/common/dimensiondata.py
----------------------------------------------------------------------
diff --git a/libcloud/common/dimensiondata.py b/libcloud/common/dimensiondata.py
index ca0b57f..11de593 100644
--- a/libcloud/common/dimensiondata.py
+++ b/libcloud/common/dimensiondata.py
@@ -608,6 +608,41 @@ class DimensionDataServerCpuSpecification(object):
                 % (self.cpu_count, self.cores_per_socket, self.performance))
 
 
+class DimensionDataServerDisk(object):
+    """
+    A class that represents the disk on a server
+    """
+    def __init__(self, id, scsiId, sizeGb, speed, state):
+        """
+        Instantiate a new :class:`DimensionDataServerDisk`
+
+        :param id: The id of the disk
+        :type  id: ``str``
+
+        :param scsiId: Representation for scsi
+        :type  scsiId: ``int``
+
+        :param sizeGb: Size of the disk
+        :type  sizeGb: ``int``
+
+        :param speed: Speed of the disk (i.e. STANDARD)
+        :type  speed: ``str``
+
+        :param state: State of the disk (i.e. PENDING)
+        :type  state: ``str``
+        """
+        self.id = id
+        self.scsiId = scsiId
+        self.sizeGb = sizeGb
+        self.speed = speed
+        self.state = state
+
+    def __repr__(self):
+        return (('<DimensionDataServerDisk: '
+                 'id=%s, sizeGb=%s')
+                % (self.id, self.sizeGb))
+
+
 class DimensionDataFirewallRule(object):
     """
     DimensionData Firewall Rule for a network domain

http://git-wip-us.apache.org/repos/asf/libcloud/blob/afbb8ecf/libcloud/compute/drivers/dimensiondata.py
----------------------------------------------------------------------
diff --git a/libcloud/compute/drivers/dimensiondata.py 
b/libcloud/compute/drivers/dimensiondata.py
index 938d07c..67c727e 100644
--- a/libcloud/compute/drivers/dimensiondata.py
+++ b/libcloud/compute/drivers/dimensiondata.py
@@ -29,6 +29,7 @@ from libcloud.common.dimensiondata import DimensionDataNetwork
 from libcloud.common.dimensiondata import DimensionDataNetworkDomain
 from libcloud.common.dimensiondata import DimensionDataVlan
 from libcloud.common.dimensiondata import DimensionDataServerCpuSpecification
+from libcloud.common.dimensiondata import DimensionDataServerDisk
 from libcloud.common.dimensiondata import DimensionDataPublicIpBlock
 from libcloud.common.dimensiondata import DimensionDataFirewallRule
 from libcloud.common.dimensiondata import DimensionDataFirewallAddress
@@ -1851,6 +1852,19 @@ class DimensionDataNodeDriver(NodeDriver):
             cores_per_socket=int(element.get('coresPerSocket')),
             performance=element.get('speed'))
 
+    def _to_disks(self, object):
+        disk_elements = object.findall(fixxpath('disk', TYPES_URN))
+        return [self._to_disk(el) for el in disk_elements]
+
+    def _to_disk(self, element):
+        return DimensionDataServerDisk(
+            id=element.get('id'),
+            scsiId=element.get('scsiId'),
+            sizeGb=element.get('sizeGb'),
+            speed=element.get('speed'),
+            state=element.get('state')
+        )
+
     def _to_nodes(self, object):
         node_elements = object.findall(fixxpath('server', TYPES_URN))
         return [self._to_node(el) for el in node_elements]
@@ -1866,7 +1880,7 @@ class DimensionDataNodeDriver(NodeDriver):
             = element.find(fixxpath('networkInfo', TYPES_URN)) is not None
 
         cpu_spec = self._to_cpu_spec(element.find(fixxpath('cpu', TYPES_URN)))
-
+        disks = self._to_disks(element)
         extra = {
             'description': findtext(element, 'description', TYPES_URN),
             'sourceImageId': findtext(element, 'sourceImageId', TYPES_URN),
@@ -1891,7 +1905,8 @@ class DimensionDataNodeDriver(NodeDriver):
             'OS_displayName': element.find(fixxpath(
                 'operatingSystem',
                 TYPES_URN)).get('displayName'),
-            'status': status
+            'status': status,
+            'disks': disks
         }
 
         public_ip = findtext(element, 'publicIpAddress', TYPES_URN)

http://git-wip-us.apache.org/repos/asf/libcloud/blob/afbb8ecf/libcloud/test/compute/test_dimensiondata.py
----------------------------------------------------------------------
diff --git a/libcloud/test/compute/test_dimensiondata.py 
b/libcloud/test/compute/test_dimensiondata.py
index ba748d9..f6484f3 100644
--- a/libcloud/test/compute/test_dimensiondata.py
+++ b/libcloud/test/compute/test_dimensiondata.py
@@ -23,7 +23,7 @@ from libcloud.utils.py3 import httplib
 
 from libcloud.common.types import InvalidCredsError
 from libcloud.common.dimensiondata import DimensionDataAPIException, 
NetworkDomainServicePlan
-from libcloud.common.dimensiondata import DimensionDataServerCpuSpecification
+from libcloud.common.dimensiondata import DimensionDataServerCpuSpecification, 
DimensionDataServerDisk
 from libcloud.compute.drivers.dimensiondata import DimensionDataNodeDriver as 
DimensionData
 from libcloud.compute.base import Node, NodeAuthPassword, NodeLocation
 
@@ -67,13 +67,16 @@ class DimensionDataTests(unittest.TestCase, TestCaseMixin):
         DimensionDataMockHttp.type = None
         ret = self.driver.list_nodes()
         self.assertTrue(ret[0].state == 'running')
-        print(ret[1].state)
         self.assertTrue(ret[1].state == 'starting')
         self.assertTrue(ret[2].state == 'stopping')
         self.assertTrue(ret[3].state == 'reconfiguring')
         self.assertTrue(ret[4].state == 'running')
         self.assertTrue(ret[5].state == 'terminated')
         self.assertTrue(ret[6].state == 'stopped')
+        self.assertEqual(len(ret), 7)
+        node = ret[0]
+        self.assertTrue(isinstance(node.extra['disks'], list))
+        self.assertTrue(isinstance(node.extra['disks'][0], 
DimensionDataServerDisk))
 
     def test_list_nodes_response_PAGINATED(self):
         DimensionDataMockHttp.type = 'PAGINATED'

Reply via email to